#include "stdafx.h" #include "Minecraft.h" #include "GameMode.h" #include "..\Minecraft.World\net.minecraft.world.entity.player.h" #include "..\Minecraft.World\net.minecraft.world.level.h" #include "..\Minecraft.World\net.minecraft.world.level.storage.h" #include "Input.h" #include "..\Minecraft.Client\LocalPlayer.h" #include "Options.h" Input::Input() { xa = 0; ya = 0; wasJumping = false; jumping = false; sneaking = false; lReset = false; rReset = false; } void Input::tick(LocalPlayer *player) { if(!InputManager.IsMouseCaptured()) InputManager.SetMouseCaptured(true); // 4J Stu - Assume that we only need one input class, even though the java has subclasses for keyboard/controller // This function is based on the ControllerInput class in the Java, and will probably need changed //OutputDebugString("INPUT: Beginning input tick\n"); Minecraft *pMinecraft=Minecraft::GetInstance(); int iPad=player->GetXboxPad(); // 4J-PB minecraft movement seems to be the wrong way round, so invert x! if( pMinecraft->localgameModes[iPad]->isInputAllowed(MINECRAFT_ACTION_LEFT) || pMinecraft->localgameModes[iPad]->isInputAllowed(MINECRAFT_ACTION_RIGHT) ) xa = -InputManager.GetJoypadStick_LX(iPad); else xa = 0.0f; if( pMinecraft->localgameModes[iPad]->isInputAllowed(MINECRAFT_ACTION_FORWARD) || pMinecraft->localgameModes[iPad]->isInputAllowed(MINECRAFT_ACTION_BACKWARD) ) ya = InputManager.GetJoypadStick_LY(iPad); else ya = 0.0f; #ifdef _WINDOWS64 if (InputManager.IsKeyDown('A')) xa = 1.0f; else if (InputManager.IsKeyDown('D')) xa = -1.0f; if (InputManager.IsKeyDown('W')) ya = 1.0f; else if (InputManager.IsKeyDown('S')) ya = -1.0f; #endif #ifndef _CONTENT_PACKAGE if (app.GetFreezePlayers()) { xa = ya = 0.0f; player->abilities.flying = true; } #endif if (!lReset) { if (xa*xa+ya*ya==0.0f) { lReset = true; } xa = ya = 0.0f; } // 4J: In flying mode, don't actually toggle sneaking (unless we're riding in which case we need to sneak to dismount) if(!player->abilities.flying || player->riding != NULL) { if((player->ullButtonsPressed&(1LL<localgameModes[iPad]->isInputAllowed(MINECRAFT_ACTION_SNEAK_TOGGLE)) { sneaking=!sneaking; } } if(sneaking) { xa*=0.3f; ya*=0.3f; } float turnSpeed = 50.0f; float tx = 0.0f; float ty = 0.0f; if( pMinecraft->localgameModes[iPad]->isInputAllowed(MINECRAFT_ACTION_LOOK_LEFT) || pMinecraft->localgameModes[iPad]->isInputAllowed(MINECRAFT_ACTION_LOOK_RIGHT) ) tx = InputManager.GetJoypadStick_RX(iPad)*(((float)app.GetGameSettings(iPad,eGameSetting_Sensitivity_InGame))/100.0f); // apply sensitivity to look if( pMinecraft->localgameModes[iPad]->isInputAllowed(MINECRAFT_ACTION_LOOK_UP) || pMinecraft->localgameModes[iPad]->isInputAllowed(MINECRAFT_ACTION_LOOK_DOWN) ) ty = InputManager.GetJoypadStick_RY(iPad)*(((float)app.GetGameSettings(iPad,eGameSetting_Sensitivity_InGame))/100.0f); // apply sensitivity to look #ifndef _CONTENT_PACKAGE if (app.GetFreezePlayers()) tx = ty = 0.0f; #endif // 4J: WESTY : Invert look Y if required. if ( app.GetGameSettings(iPad,eGameSetting_ControlInvertLook) ) { ty = -ty; } if (!rReset) { if (tx*tx+ty*ty==0.0f) { rReset = true; } tx = ty = 0.0f; } float turnX = tx * abs(tx) * turnSpeed; float turnY = ty * abs(ty) * turnSpeed; #ifdef _WINDOWS64 //if (InputManager.IsMouseCaptured()) { float mouseSensitivity = ((float)app.GetGameSettings(iPad,eGameSetting_Sensitivity_InGame)) / 100.0f; float mx = (float)InputManager.GetRawMouseX() * (mouseSensitivity * 5.0f); float my = -(float)InputManager.GetRawMouseY() * (mouseSensitivity * 5.0f); if ( app.GetGameSettings(iPad,eGameSetting_ControlInvertLook) ) my = -my; turnX += mx; turnY += my; } //else #endif player->interpolateTurn(turnX, turnY); //jumping = controller.isButtonPressed(0); unsigned int jump = InputManager.GetValue(iPad, MINECRAFT_ACTION_JUMP); if( jump > 0 && pMinecraft->localgameModes[iPad]->isInputAllowed(MINECRAFT_ACTION_JUMP) ) jumping = true; else jumping = false; #ifdef _WINDOWS64 if (InputManager.IsKeyDown(VK_SPACE)) jumping = true; if (InputManager.IsKeyDown(VK_SHIFT)) sneaking = true; else sneaking = false; #endif #ifndef _CONTENT_PACKAGE if (app.GetFreezePlayers()) jumping = false; #endif //OutputDebugString("INPUT: End input tick\n"); }