mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-25 13:53:37 +00:00
130 lines
4.1 KiB
C++
130 lines
4.1 KiB
C++
#include "../Platform/stdafx.h"
|
|
#include "../Minecraft.h"
|
|
#include "../GameState/GameMode.h"
|
|
#include "../../Minecraft.World/Headers/net.minecraft.world.entity.player.h"
|
|
#include "../../Minecraft.World/Headers/net.minecraft.world.level.h"
|
|
#include "../../Minecraft.World/Headers/net.minecraft.world.level.storage.h"
|
|
#include "Input.h"
|
|
#include "../Player/LocalPlayer.h"
|
|
#include "../GameState/Options.h"
|
|
|
|
Input::Input() {
|
|
xa = 0;
|
|
ya = 0;
|
|
wasJumping = false;
|
|
jumping = false;
|
|
sneaking = false;
|
|
sprintKey = false;
|
|
|
|
lReset = false;
|
|
rReset = false;
|
|
}
|
|
|
|
void Input::tick(LocalPlayer* player) {
|
|
// 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;
|
|
|
|
#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
|
|
if (!player->abilities.flying) {
|
|
if ((player->ullButtonsPressed &
|
|
(1LL << MINECRAFT_ACTION_SNEAK_TOGGLE)) &&
|
|
pMinecraft->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;
|
|
}
|
|
player->interpolateTurn(tx * abs(tx) * turnSpeed, ty * abs(ty) * turnSpeed);
|
|
|
|
// jumping = controller.isButtonPressed(0);
|
|
|
|
sprintKey = InputManager.GetValue(iPad, MINECRAFT_ACTION_SPRINT) &&
|
|
pMinecraft->localgameModes[iPad]->isInputAllowed(
|
|
MINECRAFT_ACTION_SPRINT);
|
|
jumping =
|
|
InputManager.GetValue(iPad, MINECRAFT_ACTION_JUMP) &&
|
|
pMinecraft->localgameModes[iPad]->isInputAllowed(MINECRAFT_ACTION_JUMP);
|
|
|
|
#ifndef _CONTENT_PACKAGE
|
|
if (app.GetFreezePlayers()) jumping = false;
|
|
#endif
|
|
|
|
// OutputDebugString("INPUT: End input tick\n");
|
|
} |