Beispiel #1
0
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;
}
Beispiel #2
0
//컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴
//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;
		}