char EnableSnesMouse(unsigned char spriteIndex,const char *spriteMap){ snesMouseEnabled=true; if(DetectControllers()!=0){ mouseWidth=pgm_read_byte(&(spriteMap[0])); mouseHeight=pgm_read_byte(&(spriteMap[1])); mx=120; my=120; mouseSpriteIndex=spriteIndex; MapSprite(spriteIndex,spriteMap); MoveSprite(spriteIndex,mx,my,mouseWidth,mouseHeight); return 0; }else{ snesMouseEnabled=false; return -1; } }
LRESULT Input::OnDeviceChange(WPARAM eventType, LPARAM eventData) { if (eventType != DBT_DEVICEARRIVAL && eventType != DBT_DEVICEREMOVECOMPLETE) return TRUE; PDEV_BROADCAST_HDR deviceBroadcast = (PDEV_BROADCAST_HDR) eventData; if(deviceBroadcast->dbch_devicetype != DBT_DEVTYP_DEVICEINTERFACE) return TRUE; PDEV_BROADCAST_DEVICEINTERFACE deviceInterface = (PDEV_BROADCAST_DEVICEINTERFACE) deviceBroadcast; switch(eventType) { case DBT_DEVICEARRIVAL: case DBT_DEVICEREMOVECOMPLETE: DetectControllers(); break; } return TRUE; }
int main(){ SetTileTable(cTesterTiles); SetSpritesTileTable(cursor); ClearVram(); EnableSnesMouse(0,map_cursor); //Print the basic stuff on the screen DrawMap2(5,26,map_copyright); DrawMap2(0,13,map_divider); //Detect controller types cType[0] = 255; cType[1] = 255; //The controller vars int btnHeld[2] = {0,0}; int btnPressed[2] = {0,0}; int btnReleased[2] = {0,0}; int btnPrev[2] = {0,0}; //Main loop while(1){ //20fps WaitVsync(1); //Update the controller vars btnHeld[0] = ReadJoypad(0); btnHeld[1] = ReadJoypad(1); btnPressed[0] = btnHeld[0] & (btnHeld[0] ^ btnPrev[0]); btnPressed[1] = btnHeld[1] & (btnHeld[1] ^ btnPrev[1]); btnReleased[0] = btnPrev[0] & (btnHeld[0] ^ btnPrev[0]); btnReleased[1] = btnPrev[1] & (btnHeld[1] ^ btnPrev[1]); //Check if controllers changed if((DetectControllers() & 3) != cType[0]){ cType[0] = DetectControllers() & 3; Fill(0,0,30,13,0); if(cType[0] == GAMEPAD){ DrawMap2(9,2,map_gamepad); } else if(cType[0] == MOUSE){ DrawMap2(12,2,map_mouse); DrawMap2(1,4,map_warning); } else if(cType[0] == NOTHING){ DrawMap2(9,6,map_nocontroller); } } if((DetectControllers() & 12) / 4 != cType[1]){ cType[1] = (DetectControllers() & 12) / 4; Fill(0,14,30,12,0); if(cType[1] == GAMEPAD){ DrawMap2(9,15,map_gamepad); SetSpriteVisibility(false); } else if(cType[1] == MOUSE){ DrawMap2(12,15,map_mouse); SetSpriteVisibility(true); EnableSnesMouse(0,map_cursor); } else if(cType[1] == NOTHING){ DrawMap2(9,19,map_nocontroller); SetSpriteVisibility(false); } } //Update the buttons for(unsigned int i = 0; i < 2; i++){ if(cType[i] == MOUSE){ //Check pressed buttons if(btnPressed[i] & BTN_MOUSE_LEFT){ DrawMap2(14,4 + 13*i,map_pmouseb); } if(btnPressed[i] & BTN_MOUSE_RIGHT){ DrawMap2(16,4 + 13*i,map_pmouseb); } //Check released if(btnReleased[i] & BTN_MOUSE_LEFT){ DrawMap2(14,4 + 13*i,map_mouseb); } if(btnReleased[i] & BTN_MOUSE_RIGHT){ DrawMap2(16,4 + 13*i,map_mouseb); } } else if(cType[i] == GAMEPAD){ //Check pressed if(btnPressed[i] & BTN_UP){ DrawMap2(11,6 + 13*i,map_pdpad); } if(btnPressed[i] & BTN_DOWN){ DrawMap2(11,8 + 13*i,map_pdpad); } if(btnPressed[i] & BTN_LEFT){ DrawMap2(10,7 + 13*i,map_pdpad); } if(btnPressed[i] & BTN_RIGHT){ DrawMap2(12,7 + 13*i,map_pdpad); } if(btnPressed[i] & BTN_START){ DrawMap2(16,6 + 13*i,map_pstart); } if(btnPressed[i] & BTN_SELECT){ DrawMap2(14,6 + 13*i,map_pstart); } if(btnPressed[i] & BTN_A){ DrawMap2(20,7 + 13*i,map_pbutton); } if(btnPressed[i] & BTN_B){ DrawMap2(19,8 + 13*i,map_pbutton); } if(btnPressed[i] & BTN_X){ DrawMap2(19,6 + 13*i,map_pbutton); } if(btnPressed[i] & BTN_Y){ DrawMap2(18,7 + 13*i,map_pbutton); } if(btnPressed[i] & BTN_SL){ DrawMap2(10,4 + 13*i,map_pbumper); } if(btnPressed[i] & BTN_SR){ DrawMap2(18,4 + 13*i,map_pbumper); } if(btnReleased[i] & BTN_UP){ DrawMap2(11,6 + 13*i,map_dpad); } if(btnReleased[i] & BTN_DOWN){ DrawMap2(11,8 + 13*i,map_dpad); } if(btnReleased[i] & BTN_LEFT){ DrawMap2(10,7 + 13*i,map_dpad); } if(btnReleased[i] & BTN_RIGHT){ DrawMap2(12,7 + 13*i,map_dpad); } if(btnReleased[i] & BTN_START){ DrawMap2(16,6 + 13*i,map_start); } if(btnReleased[i] & BTN_SELECT){ DrawMap2(14,6 + 13*i,map_start); } if(btnReleased[i] & BTN_A){ DrawMap2(20,7 + 13*i,map_button); } if(btnReleased[i] & BTN_B){ DrawMap2(19,8 + 13*i,map_button); } if(btnReleased[i] & BTN_X){ DrawMap2(19,6 + 13*i,map_button); } if(btnReleased[i] & BTN_Y){ DrawMap2(18,7 + 13*i,map_button); } if(btnReleased[i] & BTN_SL){ DrawMap2(10,4 + 13*i,map_bumper); } if(btnReleased[i] & BTN_SR){ DrawMap2(18,4 + 13*i,map_bumper); } } } btnPrev[0] = btnHeld[0]; btnPrev[1] = btnHeld[1]; } }
void Input::Initialize() { for(int i = 0; i < MAX_PLAYERS; ++i) playerControllers[i] = 0; mousePosition[0] = mousePosition[1] = 0; #if defined(_WIN32) InitializeWindow(); keyBindings[A] = VK_SPACE; keyBindings[B] = 'X'; keyBindings[X] = 'E'; keyBindings[Y] = 'R'; keyBindings[START] = VK_ESCAPE; keyBindings[SELECT] = VK_RETURN; keyBindings[L_SHOULDER] = VK_OEM_MINUS; keyBindings[R_SHOULDER] = VK_OEM_PLUS; keyBindings[D_RIGHT] = VK_END; keyBindings[D_UP] = VK_PRIOR; keyBindings[D_LEFT] = VK_HOME; keyBindings[D_DOWN] = VK_NEXT; keyBindings[NUM_BUTTONS + L_TRIGGER] = VK_OEM_4; keyBindings[NUM_BUTTONS + R_TRIGGER] = VK_OEM_6; keyBindings[NUM_BUTTONS + A_RIGHT] = 'D'; keyBindings[NUM_BUTTONS + A_UP] = 'W'; keyBindings[NUM_BUTTONS + A_LEFT] = 'A'; keyBindings[NUM_BUTTONS + A_DOWN] = 'S'; #elif defined(__linux__) RegisterMonitor(); #endif #if defined(X11) display = XOpenDisplay(NULL); window = DefaultRootWindow(display); // create transparent cursor for when mouse is in relative-movement mode { static char noData[] = { 0 }; XColor black = { 0 }; Pixmap blankBitmap = XCreateBitmapFromData(display, window, noData, 1, 1); invisibleCursor = XCreatePixmapCursor(display, blankBitmap, blankBitmap, &black, &black, 0, 0); XFreePixmap(display, blankBitmap); } keyBindings[A] = GetScanCode(XK_space); keyBindings[B] = GetScanCode('X'); keyBindings[X] = GetScanCode('E'); keyBindings[Y] = GetScanCode('R'); keyBindings[START] = GetScanCode(XK_Escape); keyBindings[SELECT] = GetScanCode(XK_Return); keyBindings[L_SHOULDER] = GetScanCode(XK_minus); keyBindings[R_SHOULDER] = GetScanCode(XK_plus); keyBindings[D_RIGHT] = GetScanCode(XK_End); keyBindings[D_UP] = GetScanCode(XK_Prior); keyBindings[D_LEFT] = GetScanCode(XK_Home); keyBindings[D_DOWN] = GetScanCode(XK_Next); keyBindings[NUM_BUTTONS + L_TRIGGER] = GetScanCode(XK_bracketleft); keyBindings[NUM_BUTTONS + R_TRIGGER] = GetScanCode(XK_bracketright); keyBindings[NUM_BUTTONS + A_RIGHT] = GetScanCode('D'); keyBindings[NUM_BUTTONS + A_UP] = GetScanCode('W'); keyBindings[NUM_BUTTONS + A_LEFT] = GetScanCode('A'); keyBindings[NUM_BUTTONS + A_DOWN] = GetScanCode('S'); #endif DetectControllers(); }
void GameWindow::HandleControllerInput() { //If three seconds have passed, check to see if new controllers have been plugged in if(ServiceLocator::GetPlatformLayer()->GetTicks() > m_LastControllerDetection + 3000) { DetectControllers(); } //Local variable used in the for loop below XINPUT_STATE state; //Cycle through all the connected controllers and check their input state unsigned int deviceIndex = 0; for(unsigned int deviceIndex = 0; deviceIndex < GameDev2D::ServiceLocator::GetInputManager()->GetNumberOfControllers(); deviceIndex++) { //Get the controller object and the device identifer from the index ControllerGeneric* controller = GameDev2D::ServiceLocator::GetInputManager()->GetControllerForIndex(deviceIndex); UINT controllerPort = (UINT)controller->GetDevice(); //Zero the memory of the state struct ZeroMemory(&state, sizeof(XINPUT_STATE)); //Can we get the controller state for this port if(XInputGetState(controllerPort, &state) == ERROR_SUCCESS) { //Handle the button input if(state.Gamepad.wButtons != controller->GetControllerData()->GetStateInfo().Gamepad.wButtons) { HandleControllerButtonInput(controller, controller->GetControllerData()->GetStateInfo().Gamepad.wButtons, state.Gamepad.wButtons); } //Handle left trigger input if(state.Gamepad.bLeftTrigger != controller->GetControllerData()->GetStateInfo().Gamepad.bLeftTrigger) { GameDev2D::ServiceLocator::GetInputManager()->HandleControllerInput(controller, VK_PAD_LTRIGGER, state.Gamepad.bLeftTrigger); } //Handle right trigger input if(state.Gamepad.bRightTrigger != controller->GetControllerData()->GetStateInfo().Gamepad.bRightTrigger) { GameDev2D::ServiceLocator::GetInputManager()->HandleControllerInput(controller, VK_PAD_RTRIGGER, state.Gamepad.bRightTrigger); } //Handle left analog stick x-axis input if(state.Gamepad.sThumbLX != controller->GetControllerData()->GetStateInfo().Gamepad.sThumbLX) { GameDev2D::ServiceLocator::GetInputManager()->HandleControllerInput(controller, VK_PAD_LTHUMB_LEFT, state.Gamepad.sThumbLX); } //Handle left analog stick y-axis input if(state.Gamepad.sThumbLY != controller->GetControllerData()->GetStateInfo().Gamepad.sThumbLY) { GameDev2D::ServiceLocator::GetInputManager()->HandleControllerInput(controller, VK_PAD_LTHUMB_UP, state.Gamepad.sThumbLY); } //Handle right analog stick x-axis input if(state.Gamepad.sThumbRX != controller->GetControllerData()->GetStateInfo().Gamepad.sThumbRX) { GameDev2D::ServiceLocator::GetInputManager()->HandleControllerInput(controller, VK_PAD_RTHUMB_LEFT, state.Gamepad.sThumbRX); } //Handle right analog stick y-axis input if(state.Gamepad.sThumbRY != controller->GetControllerData()->GetStateInfo().Gamepad.sThumbRY) { GameDev2D::ServiceLocator::GetInputManager()->HandleControllerInput(controller, VK_PAD_RTHUMB_UP, state.Gamepad.sThumbRY); } //Update the controllers state info controller->GetControllerData()->SetStateInfo(state); } else { //Notify the Input manager of the unplugged controller GameDev2D::ServiceLocator::GetInputManager()->HandleRemovedController((void*)controllerPort); } } }