/******************************************************************** Minecraft: Pocket Edition - Decompilation Project Copyright (C) 2023 iProgramInCpp The following code is licensed under the BSD 1 clause license. SPDX-License-Identifier: BSD-1-Clause ********************************************************************/ #include "ControllerTurnInput.hpp" #include "Controller.hpp" #include ControllerTurnInput::ControllerTurnInput() { field_8 = 2; m_stickNo = 2; field_10 = 0.0f; field_14 = 0.0f; field_18 = false; } TurnDelta ControllerTurnInput::getTurnDelta() { #ifdef __ANDROID__ return TurnDelta(Controller::getX(m_stickNo) * 50.f, Controller::getY(m_stickNo) * 60.f); #endif 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 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 TurnDelta(deltaX, deltaY); } bool ControllerTurnInput::smoothTurning() { return true; }