Input: Add touchscreen flying

This commit is contained in:
Er2
2023-12-13 21:01:47 +03:00
parent d1e8a5521f
commit e95881b1ac
8 changed files with 56 additions and 26 deletions

View File

@@ -17,8 +17,10 @@ TouchscreenInput_TestFps::TouchscreenInput_TestFps(Minecraft* pMinecraft, Option
TouchInput(pMinecraft, pOptions),
//m_rectArea(0.0f, 0.0f, 1.0f, 1.0f),
//m_pOptions(pOptions),
field_40(false),
m_bJumpBeingHeld(false),
m_bForwardHeld(false),
m_bJumpingHeld(false),
m_bFlyActive(false),
m_jumpTick(0),
//m_pMinecraft(pMinecraft),
m_pAreaLeft(nullptr),
m_pAreaRight(nullptr),
@@ -40,6 +42,7 @@ void TouchscreenInput_TestFps::releaseAllKeys()
{
m_horzInput = 0.0f;
m_vertInput = 0.0f;
m_flyInput = 0.0f;
for (int i = 0; i < 5; i++)
field_6C[i] = false;
}
@@ -140,6 +143,7 @@ void TouchscreenInput_TestFps::onTick(Player* pPlayer)
{
m_horzInput = 0.0f;
m_vertInput = 0.0f;
m_flyInput = 0.0f;
m_bJumpButton = false;
for (int i = 0; i < 5; i++)
@@ -148,7 +152,7 @@ void TouchscreenInput_TestFps::onTick(Player* pPlayer)
const int* activePointers;
int activePointerCount = Multitouch::getActivePointerIds(&activePointers);
bool bJumpPressed = false, bForwardPressed = false;
bool bJumpPressed = false, bForwardPressed = false, bBackwardPressed = false;
for (int i = 0; i < activePointerCount; i++)
{
@@ -172,13 +176,26 @@ void TouchscreenInput_TestFps::onTick(Player* pPlayer)
if (pointerId == 100 + INPUT_JUMP) // jump
{
if (pPlayer->isInWater())
m_bJumpButton = true;
else if (Multitouch::isPressed(finger))
m_bJumpButton = true;
else if (field_40)
if (Multitouch::isPressed(finger))
{
pointerId = 100; // forward
m_bJumpButton = true;
int tick = getTimeMs();
if (tick - m_jumpTick < 300)
{
m_jumpTick = tick;
m_bFlyActive = !m_bFlyActive;
m_pMinecraft->getOptions()->m_bFlyCheat = m_bFlyActive;
m_bJumpButton = false;
}
else m_jumpTick = tick;
}
else if (m_bFlyActive)
bJumpPressed = true;
else if (pPlayer->isInWater())
m_bJumpButton = true;
else if (m_bForwardHeld)
{
pointerId = 100 + INPUT_FORWARD;
bJumpPressed = true;
m_vertInput += 1.0f;
}
@@ -196,6 +213,7 @@ void TouchscreenInput_TestFps::onTick(Player* pPlayer)
break;
case 100 + INPUT_BACKWARD:
bBackwardPressed = true;
m_vertInput -= 1.0f;
break;
@@ -213,20 +231,29 @@ void TouchscreenInput_TestFps::onTick(Player* pPlayer)
}
}
field_40 = bForwardPressed;
m_bForwardHeld = bForwardPressed;
if (bJumpPressed)
{
// Don't allow the player to hold jump to repeatedly jump.
// Only let them jump once - have them jump again
if (!m_bJumpBeingHeld)
if (!m_bJumpingHeld && !m_bFlyActive)
m_bJumpButton = true;
m_bJumpBeingHeld = true;
m_bJumpingHeld = true;
}
else if (m_bFlyActive && m_bJumpingHeld && (bForwardPressed || bBackwardPressed))
{
if (bForwardPressed)
m_flyInput += 0.2f;
if (bBackwardPressed)
m_flyInput -= 0.2f;
m_vertInput = 0.0f;
}
else
{
m_bJumpBeingHeld = false;
m_bJumpingHeld = false;
}
}

View File

@@ -33,8 +33,10 @@ public:
private:
bool field_30[10];
bool field_40;
bool m_bJumpBeingHeld;
bool m_bForwardHeld;
bool m_bJumpingHeld;
bool m_bFlyActive;
int m_jumpTick;
TouchAreaModel m_touchAreaModel;
PolygonArea* m_pAreaLeft;
PolygonArea* m_pAreaRight;

View File

@@ -7,6 +7,7 @@
********************************************************************/
#include "ChatScreen.hpp"
#include "client/player/input/Multitouch.hpp"
// @NOTE: This is unused.
@@ -24,7 +25,10 @@ void ChatScreen::buttonClicked(Button* pButton)
if (pButton->m_buttonId == m_btnSend.m_buttonId)
sendMessageAndExit();
if (pButton->m_buttonId == m_btnBack.m_buttonId)
{
Multitouch::reset(); // HACK
m_pMinecraft->setScreen(nullptr);
}
}
void ChatScreen::onInit()
@@ -37,8 +41,8 @@ void ChatScreen::onInit()
m_textChat.m_height = 20;
m_btnSend.m_yPos = m_height - 20;
m_btnSend.m_xPos = m_textChat.m_xPos + m_textChat.m_width;
m_btnBack.m_yPos = 10;
m_btnBack.m_xPos = m_width - m_btnBack.m_width - 10;
m_btnBack.m_yPos = 0;
m_btnBack.m_xPos = m_width - m_btnBack.m_width;
// set focus directly on the chat text box
m_textChat.onInit(m_pFont);
@@ -62,7 +66,7 @@ void ChatScreen::onRender(int mouseX, int mouseY, float f)
// override the default behavior of rendering chat messages
m_pMinecraft->m_pGui->m_bRenderChatMessages = true;
m_btnBack.m_yPos = 10 + getYOffset();
m_btnBack.m_yPos = getYOffset();
Screen::onRender(mouseX, mouseY, f);
}

View File

@@ -69,12 +69,6 @@ void LocalPlayer::calculateFlight(float x, float y, float z)
float x1 = f1 * x;
float z1 = f1 * z;
float y1 = 0.0f;
if (Keyboard::isKeyDown(m_pMinecraft->getOptions()->getKey(KM_FLY_UP)))
y1 = f1 * 0.2f;
if (Keyboard::isKeyDown(m_pMinecraft->getOptions()->getKey(KM_FLY_DOWN)))
y1 = f1 * -0.2f;
field_BFC += x1;
float f2 = m_pMinecraft->getOptions()->field_8 * 0.35f;
float f3 = f2 * (field_BFC - field_C00);
@@ -85,7 +79,7 @@ void LocalPlayer::calculateFlight(float x, float y, float z)
field_C00 += f4;
field_BF0 = f4 * 10.0f;
field_C08 += y1;
field_C08 += m_pMoveInput->m_flyInput;
float f5 = f2 * (field_C08 - field_C0C);
float f6 = field_C10 + 0.5f * (f5 - field_C10);
field_C10 = f6;

View File

@@ -75,7 +75,7 @@ TurnDelta ControllerTurnInput::getTurnDelta()
deltaX = deltaTime * xt;
deltaY = deltaTime * -yt;
}
else if (field_8 != 2 || (!field_18 && !isTouched))
else if (field_8 != 2 || (!field_18 && !isTouched))
{
deltaX = 0.0f;
deltaY = -0.0f;

View File

@@ -11,6 +11,7 @@
IMoveInput::IMoveInput() :
m_horzInput(0.0f),
m_vertInput(0.0f),
m_flyInput(0.0f),
field_C(false),
m_bJumpButton(false),
m_bSneakButton(false)

View File

@@ -35,6 +35,7 @@ public:
public:
float m_horzInput;
float m_vertInput;
float m_flyInput;
bool field_C;
bool m_bJumpButton;
bool m_bSneakButton;

View File

@@ -49,6 +49,7 @@ void KeyboardInput::onTick(Player* pPlayer)
{
m_horzInput = 0.0f;
m_vertInput = 0.0f;
m_flyInput = 0.0f;
if (m_keys[INPUT_FORWARD]) m_vertInput += 1.0f;
if (m_keys[INPUT_BACKWARD]) m_vertInput -= 1.0f;