mirror of
https://github.com/celisej567/mcpe.git
synced 2026-09-04 03:34:18 +03:00
115 lines
1.7 KiB
C++
115 lines
1.7 KiB
C++
#include "ControllerTurnInput.hpp"
|
|
#include "Controller.hpp"
|
|
|
|
ITurnInput::Delta ControllerTurnInput::getTurnDelta()
|
|
{
|
|
bool isTouched = Controller::isTouched(m_stickNo);
|
|
float deltaX, deltaY;
|
|
|
|
if (field_8 == 1)
|
|
{
|
|
float deltaTime = getDeltaTime(), dx, dy;
|
|
if (isTouched)
|
|
{
|
|
dx = Controller::getX(m_stickNo);
|
|
dy = Controller::getY(m_stickNo);
|
|
}
|
|
else
|
|
{
|
|
dx = field_10 * 0.7f;
|
|
dy = field_14 * 0.7f;
|
|
}
|
|
|
|
field_10 = dx;
|
|
field_14 = dy;
|
|
|
|
float xs = dx >= 0.0f ? 0.1f : -0.1f, xt;
|
|
|
|
if (fabsf(dx) <= 0.1f)
|
|
{
|
|
xt = 0.0f;
|
|
}
|
|
else
|
|
{
|
|
xs = dx - xs;
|
|
xt = 250.0f;
|
|
xt = xs * xt;
|
|
}
|
|
|
|
float ys = dy >= 0.0f ? 0.1f : -0.1f, yt;
|
|
|
|
if (fabsf(dy) <= 0.1f)
|
|
{
|
|
yt = 0.0f;
|
|
}
|
|
else
|
|
{
|
|
ys = dy - ys;
|
|
yt = 200.0f;
|
|
yt = ys * yt;
|
|
}
|
|
|
|
deltaX = deltaTime * xt;
|
|
deltaY = deltaTime * -yt;
|
|
}
|
|
else if (field_8 != 2 || !field_18 && !isTouched)
|
|
{
|
|
deltaX = 0.0f;
|
|
deltaY = -0.0f;
|
|
}
|
|
else
|
|
{
|
|
float sx = Controller::getX(m_stickNo);
|
|
float sy = Controller::getY(m_stickNo);
|
|
|
|
getDeltaTime(); //@NOTE: call isn't useless since it updates m_prevTime
|
|
|
|
if (!field_18)
|
|
{
|
|
field_10 = sx;
|
|
field_14 = sy;
|
|
}
|
|
|
|
if (isTouched)
|
|
{
|
|
float x1 = sx - field_10;
|
|
float x2 = 0.0f;
|
|
float x3;
|
|
field_10 = sx;
|
|
|
|
// @HUH: what the hell, decompiler?
|
|
if (x1 >= 0.0f)
|
|
x3 = 0.0f;
|
|
else
|
|
x3 = -0.0f;
|
|
|
|
float x4 = sy - field_14;
|
|
field_14 = sy;
|
|
|
|
if (fabsf(x1) > 0.0f)
|
|
x2 = x1 - x3;
|
|
|
|
float ndy = 0.0f, x5;
|
|
if (x4 >= 0.0f)
|
|
x5 = 0.0f;
|
|
else
|
|
x5 = -0.0f;
|
|
|
|
float x6 = 0.0f;
|
|
if (fabsf(x4) > 0.0f)
|
|
x6 = x4 - x5;
|
|
|
|
deltaX = x2 * 100.0f;
|
|
deltaY = -x6 * 100.0f;
|
|
}
|
|
else
|
|
{
|
|
deltaX = 0.0f;
|
|
deltaY = -0.0f;
|
|
}
|
|
}
|
|
|
|
field_18 = isTouched;
|
|
return Delta(deltaX, deltaY);
|
|
}
|