int joystickGetAxes(lua_State *L) { love_joystick *self = luaobj_checkudata(L, 1, CLASS_TYPE); int numAxesCheck = lua_gettop(L); for (int i = 2; i <= numAxesCheck; i++) { int axisId = luaL_checkinteger(L, i); if( axisId < 5 ) { // Circle Axes circlePosition circleData; hidCircleRead(&circleData); if( axisId == 1 ) lua_pushinteger(L, circleData.dx); if( axisId == 2 ) lua_pushinteger(L, circleData.dy); circlePosition cStickData; irrstCstickRead(&cStickData); if( axisId == 3 ) lua_pushinteger(L, cStickData.dx); if( axisId == 4 ) lua_pushinteger(L, cStickData.dy); } else if( axisId < 8 ) { // Gyro Axes HIDUSER_EnableGyroscope(); angularRate gyroData; hidGyroRead(&gyroData); if( axisId == 5 ) lua_pushinteger(L, gyroData.x); if( axisId == 6 ) lua_pushinteger(L, gyroData.y); if( axisId == 7 ) lua_pushinteger(L, gyroData.z); } else if ( axisId < 11 ) { // Accelloremeter Axes HIDUSER_EnableAccelerometer(); accelVector accelData; hidAccelRead(&accelData); if( axisId == 8 ) lua_pushinteger(L, accelData.x); if( axisId == 9 ) lua_pushinteger(L, accelData.y); if( axisId == 10 ) lua_pushinteger(L, accelData.z); } else { luaError(L, "AxisId out of bounds"); } } return numAxesCheck-1; }
static void ctr_joypad_poll(void) { uint32_t state_tmp; circlePosition state_tmp_left_analog, state_tmp_right_analog; touchPosition state_tmp_touch; hidScanInput(); state_tmp = hidKeysHeld(); hidCircleRead(&state_tmp_left_analog); irrstCstickRead(&state_tmp_right_analog); hidTouchRead(&state_tmp_touch); pad_state = 0; pad_state |= (state_tmp & KEY_DLEFT) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_LEFT) : 0; pad_state |= (state_tmp & KEY_DDOWN) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_DOWN) : 0; pad_state |= (state_tmp & KEY_DRIGHT) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_RIGHT) : 0; pad_state |= (state_tmp & KEY_DUP) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_UP) : 0; pad_state |= (state_tmp & KEY_START) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_START) : 0; pad_state |= (state_tmp & KEY_SELECT) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_SELECT) : 0; pad_state |= (state_tmp & KEY_X) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_X) : 0; pad_state |= (state_tmp & KEY_Y) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_Y) : 0; pad_state |= (state_tmp & KEY_B) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_B) : 0; pad_state |= (state_tmp & KEY_A) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_A) : 0; pad_state |= (state_tmp & KEY_R) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_R) : 0; pad_state |= (state_tmp & KEY_L) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_L) : 0; pad_state |= (state_tmp & KEY_ZR) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_R2) : 0; pad_state |= (state_tmp & KEY_ZL) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_L2) : 0; analog_state[0][RETRO_DEVICE_INDEX_ANALOG_LEFT] [RETRO_DEVICE_ID_ANALOG_X] = ctr_joypad_fix_range(state_tmp_left_analog.dx); analog_state[0][RETRO_DEVICE_INDEX_ANALOG_LEFT] [RETRO_DEVICE_ID_ANALOG_Y] = -ctr_joypad_fix_range(state_tmp_left_analog.dy); analog_state[0][RETRO_DEVICE_INDEX_ANALOG_RIGHT] [RETRO_DEVICE_ID_ANALOG_X] = ctr_joypad_fix_range(state_tmp_right_analog.dx); analog_state[0][RETRO_DEVICE_INDEX_ANALOG_RIGHT] [RETRO_DEVICE_ID_ANALOG_Y] = -ctr_joypad_fix_range(state_tmp_right_analog.dy); BIT64_CLEAR(lifecycle_state, RARCH_MENU_TOGGLE); if((state_tmp & KEY_TOUCH) && (state_tmp_touch.py > 120)) BIT64_SET(lifecycle_state, RARCH_MENU_TOGGLE); /* panic button */ if((state_tmp & KEY_START) && (state_tmp & KEY_SELECT) && (state_tmp & KEY_L) && (state_tmp & KEY_R)) command_event(CMD_EVENT_QUIT, NULL); }
void updateControls(player_s* p) { circlePosition cpad; circlePosition cstick; hidCircleRead(&cpad); irrstCstickRead(&cstick); rotatePlayer(p, vect3Df((abs(cstick.dy)<5)?0:(-cstick.dy*0.001f), (abs(cstick.dx)<5)?0:(cstick.dx*0.001f), 0.0f)); if(abs(cpad.dx) > 15 || abs(cpad.dy) > 15) //dead zone { float factor = 0.0015f; if(p->flying)factor*=2; else if(!p->object.contact)factor*=0.06f; else updatePlayerWalk(p, cpad.dy*factor*2, cpad.dx*factor); movePlayer(p, vect3Df(cpad.dx*factor, 0.0f, -cpad.dy*factor)); } if(keysDown()&KEY_ZL) { // "USE" key vect3Df_s u = moveCameraVector(&p->camera, vect3Df(0.0f, 0.0f, -1.0f), true); timedButton_s* tb = collideRayTimedButtons(p->object.position, u, TILESIZE_FLOAT*2); if(tb) { activateTimedButton(tb); }else{ OBB_s* o = collideRayBoxes(p->object.position, u, TILESIZE_FLOAT*4); if(o) { gravityGunObject = o; } } } if(keysDown()&KEY_ZR) { // JUMP key if(p->object.contact) { p->object.speed.y += 0.6f; } } if(gravityGunObject) { if(!(keysHeld()&KEY_ZL)) { gravityGunObject = NULL; md2InstanceChangeAnimation(&p->gunInstance, 0, false); md2InstanceChangeAnimation(&p->gunInstance, 1, true); }else{ const vect3Df_s u = moveCameraVector(&p->camera, vect3Df(0.0f, 0.0f, -5.0f), true); const vect3Df_s t = vaddf(u, p->object.position); const vect3Df_s v = vmulf(vsubf(t, gravityGunObject->position), 1.75f); setObbVelocity(gravityGunObject, v); md2InstanceChangeAnimation(&p->gunInstance, 2, false); } }else if(p->gunInstance.currentAnim == 2){ md2InstanceChangeAnimation(&p->gunInstance, 0, false); md2InstanceChangeAnimation(&p->gunInstance, 1, true); } }