void SDLController::Tick() { float x[3]; float y[3]; // we'll accept input from left stick, right stick or dpad... // X axis x[0] = ApplyDeadZone(SDL_GameControllerGetAxis(m_Ctrl, SDL_CONTROLLER_AXIS_LEFTX)); x[1] = ApplyDeadZone(SDL_GameControllerGetAxis(m_Ctrl, SDL_CONTROLLER_AXIS_RIGHTX)); if (SDL_GameControllerGetButton(m_Ctrl, SDL_CONTROLLER_BUTTON_DPAD_LEFT)) x[2] = -1.0f; else if (SDL_GameControllerGetButton(m_Ctrl, SDL_CONTROLLER_BUTTON_DPAD_RIGHT)) x[2] = 1.0f; else x[2] = 0.0f; m_X = AvgNonZero(x); // Y axis y[0] = ApplyDeadZone(SDL_GameControllerGetAxis(m_Ctrl, SDL_CONTROLLER_AXIS_LEFTY)); y[1] = ApplyDeadZone(SDL_GameControllerGetAxis(m_Ctrl, SDL_CONTROLLER_AXIS_RIGHTY)); if (SDL_GameControllerGetButton(m_Ctrl, SDL_CONTROLLER_BUTTON_DPAD_UP)) y[2] = -1.0f; else if (SDL_GameControllerGetButton(m_Ctrl, SDL_CONTROLLER_BUTTON_DPAD_DOWN)) y[2] = 1.0f; else y[2] = 0.0f; m_Y = AvgNonZero(y); // buttons int buttons = 0; if (SDL_GameControllerGetButton(m_Ctrl,SDL_CONTROLLER_BUTTON_A)==1) buttons |= CTRL_BTN_FIRE; if (SDL_GameControllerGetButton(m_Ctrl,SDL_CONTROLLER_BUTTON_START)==1) buttons |= CTRL_BTN_START; m_PrevBtnState = m_BtnState; m_BtnState = buttons; }
//컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴 //Procedure GetKeyCommon //Author R. Hyde //Date Tue 31 Oct 1995 // //Description f // //Inputs // //Returns // //------------------------------------------------------------------------------ void ManualPilot::GetKeyCommon(AirStrucPtr const ControlledAC) { PMODEL pModel = ControlledAC->fly.pModel; //#define PRINT_STICK_RUDDER #ifdef PRINT_STICK_RUDDER SWord temp; temp = 39 + ControlledAC->fly.aileron / 1000; PrintString(temp, 0, " "); temp = 39 + ControlledAC->fly.rudder / 1000; PrintString(temp, 23, " "); temp = 12 + ControlledAC->fly.elevator / 2700; PrintString(66, temp, " "); temp = 39 + pModel->Aileron / 1000; PrintString(temp, 1, " "); temp = 39 + pModel->Rudder / 1000; PrintString(temp, 24, " "); temp = 12 + pModel->Elevator / 2700; PrintString(73, temp, " "); #endif GetStickKeys (ControlledAC2); //RDH 04Mar96 //Set control values in Model including Central deadzone and end clipping //#define PRINT_INPUT_DATA #ifdef PRINT_INPUT_DATA PrintVar(40, 15, "Raw Elev %.0f ", (FP)ControlledAC->fly.elevator); PrintVar(40, 16, "Raw Ailn %.0f ", (FP)ControlledAC->fly.aileron); PrintVar(40, 17, "Raw Rudd %.0f ", (FP)ControlledAC->fly.rudder); #endif if(_Analogue.tune[AU_ELEVATOR].mode == AM_REALISTIC) ApplyDeadZone (ControlledAC, ControlledAC->fly.elevator, pModel->Elevator, _Analogue.tune[AU_ELEVATOR].deadzones); else ApplyDeadZone2(ControlledAC, ControlledAC->fly.elevator, pModel->Elevator, _Analogue.tune[AU_ELEVATOR].deadzones); if(_Analogue.tune[AU_AILERON].mode == AM_REALISTIC) ApplyDeadZone (ControlledAC, ControlledAC->fly.aileron, pModel->Aileron, _Analogue.tune[AU_AILERON].deadzones); else ApplyDeadZone2(ControlledAC, ControlledAC->fly.aileron, pModel->Aileron, _Analogue.tune[AU_AILERON].deadzones); if(_Analogue.tune[AU_RUDDER].mode == AM_REALISTIC) ApplyDeadZone (ControlledAC, ControlledAC->fly.rudder, pModel->Rudder, _Analogue.tune[AU_RUDDER].deadzones); else ApplyDeadZone2(ControlledAC, ControlledAC->fly.rudder, pModel->Rudder, _Analogue.tune[AU_RUDDER].deadzones); FP temp = 1.0 - pModel->Speed / pModel->ControlLossV1; if(temp < 0.0) temp = 0.0; ControlledAC->fly.rudder = temp * ControlledAC->fly.rudder; pModel->Rudder = temp * pModel->Rudder; SecondaryControls (ControlledAC2); if(Save_Data.flightdifficulty[FD_SPINS]) { if(pModel->BombingPhase == 1) pModel->ElevatorTrim = 8192; if(pModel->BombingPhase == 2) { pModel->ElevatorTrim = 0; if(pModel->Elevator < -30000) pModel->Elevator = pModel->Elevator + 30000; else pModel->Elevator = 0; } pModel->Elevator += pModel->ElevatorTrim; pModel->Aileron += pModel->AileronTrim; pModel->Rudder += pModel->RudderTrim; if(Save_Data.flightdifficulty [FD_SLIPSTREAMEFFECTS]) pModel->Rudder += pModel->SlipstreamRudder; } MODLIMIT(pModel->Elevator, 32767); MODLIMIT(pModel->Aileron, 32767); MODLIMIT(pModel->Rudder, 32767); #ifdef PRINT_INPUT_DATA PrintVar(60, 15, "Mod Elev %.0f ", (FP)pModel->Elevator); PrintVar(60, 16, "Mod Ailn %.0f ", (FP)pModel->Aileron); PrintVar(60, 17, "Mod Rudd %.0f ", (FP)pModel->Rudder); #endif #ifdef PRINT_STICK_RUDDER temp = 39 + ControlledAC->fly.aileron / 1000; PrintVar(temp, 0, "%.0f", FP(ControlledAC->fly.aileron)); temp = 39 + ControlledAC->fly.rudder / 1000; PrintVar(temp, 23, "%.0f", FP(ControlledAC->fly.rudder)); temp = 12 + ControlledAC->fly.elevator / 2700; PrintVar(66, temp, "%.0f", FP(ControlledAC->fly.elevator)); temp = 39 + pModel->Aileron / 1000; PrintVar(temp, 1, "%.0f", FP(pModel->Aileron)); temp = 39 + pModel->Rudder / 1000; PrintVar(temp, 24, "%.0f", FP(pModel->Rudder)); temp = 12 + pModel->Elevator / 2700; PrintVar(73, temp, "%.0f", FP(pModel->Elevator)); #endif bool ThrottleSettingChanged = FALSE; bool PropSettingChanged = FALSE; PENGINE pEngine0 = pModel->EngineList; PENGINE pEngine1 = pModel->EngineList->List.NextItem(); if(pEngine0) { if(Key_Tests.KeyPress3d(FK_THROTTLE0)) { SLong tmpacthrust = pEngine0->ThrottleSetting; SLong delta = _Interactive.GetDelta(INST_THROTTLE, tmpacthrust); tmpacthrust += (delta*100)>>7; MODMAXMIN(tmpacthrust,0,100); pEngine0->ThrottleSetting = tmpacthrust; pModel->ModelThrottle = tmpacthrust; ControlledAC->fly.thrustpercent = tmpacthrust; } if(Key_Tests.KeyPress3d(FK_PROPPITCH0)) { SLong tmpacprop = 100.0 * pEngine0->PropSetting; SLong delta = _Interactive.GetDelta(INST_PROPPITCH, tmpacprop); tmpacprop += (delta*100)>>7; MODMAXMIN(tmpacprop,0,100); pEngine0->PropSetting = 0.01 * tmpacprop; pModel->ModelPropSetting = tmpacprop; ControlledAC->fly.propsetting = tmpacprop; }