diff --git a/Assets/Scripts/CECHostPlayer.cs b/Assets/Scripts/CECHostPlayer.cs index 50ae1b8f74..96b56a1b5f 100644 --- a/Assets/Scripts/CECHostPlayer.cs +++ b/Assets/Scripts/CECHostPlayer.cs @@ -3954,140 +3954,31 @@ namespace BrewMonster return bRet; } public bool GetPushDir(ref Vector3 vPushDir, uint dwMask, float deltaTime) - { - Vector3 vRight = Vector3.zero; - vRight.x = joystick.Horizontal; - vRight.z = joystick.Vertical; - vRight.y = 0f; - vRight.Normalize(); - if (vRight == Vector3.zero) + { + vPushDir = Vector3.zero; + if (joystick.Horizontal == 0 && joystick.Vertical == 0) { return false; } - vPushDir = vRight; - /* // reset - vPushDir = Vector3.zero; - Vector3 vRight = Vector3.zero; - bool bMove = false; + if(m_iMoveEnv == Move_environment.MOVEENV_AIR) + { - // Không bấm gì → không có hướng - if (m_dwMoveRelDir == 0) - return false; + } + else if(m_iMoveEnv == Move_environment.MOVEENV_WATER) + { - // ===== LEFT ===== - if ((m_dwMoveRelDir & MD_LEFT) != 0) - { - // Nếu trên không → xoay camera thay vì di chuyển - if (m_iMoveEnv == MOVEENV_AIR) - { - // giữ nguyên logic PW - ECMSG msg = new ECMSG(); - msg.dwParam2 = 0; - msg.dwParam1 = (uint)(_yaw_vel_air * deltaTime); - - if ((m_dwMoveRelDir & MD_BACK) != 0) - msg.dwParam1 = (uint)(-(int)msg.dwParam1); - - OnMsgHstYaw(msg); // TODO: bạn map hàm này sang Unity - } - else if (m_iMoveEnv == MOVEENV_WATER) - { - ECMSG msg = new ECMSG(); - msg.dwParam2 = 0; - msg.dwParam1 = (uint)(_yaw_vel * deltaTime); - - if ((m_dwMoveRelDir & MD_BACK) != 0) - msg.dwParam1 = (uint)(-(int)msg.dwParam1); - - OnMsgHstYaw(msg); // TODO - } - else - { - // Mặt đất → di chuyển sang trái theo camera - // C++: vRight = -m_CameraCoord.GetRight(); - Vector3 camRight = m_CameraCoord.GetRight(); // TODO: map sang Unity Camera? - vRight = -camRight; - vRight.y = 0; - vRight.Normalize(); - - vPushDir = vRight; - bMove = true; - } - } - - // ===== RIGHT ===== - else if ((m_dwMoveRelDir & MD_RIGHT) != 0) - { - if (m_iMoveEnv == MOVEENV_AIR) - { - ECMSG msg = new ECMSG(); - msg.dwParam2 = 0; - msg.dwParam1 = (uint)((-_yaw_vel_air) * deltaTime); - - if ((m_dwMoveRelDir & MD_BACK) != 0) - msg.dwParam1 = (uint)(-(int)msg.dwParam1); - - OnMsgHstYaw(msg); // TODO - } - else if (m_iMoveEnv == MOVEENV_WATER) - { - ECMSG msg = new ECMSG(); - msg.dwParam2 = 0; - msg.dwParam1 = (uint)((-_yaw_vel) * deltaTime); - - if ((m_dwMoveRelDir & MD_BACK) != 0) - msg.dwParam1 = (uint)(-(int)msg.dwParam1); - - OnMsgHstYaw(msg); // TODO - } - else - { - // Mặt đất → di chuyển sang phải theo camera - Vector3 camRight = m_CameraCoord.GetRight(); // TODO - vRight = camRight; - vRight.y = 0; - vRight.Normalize(); - - vPushDir = vRight; - bMove = true; - } - } - - // ===== FORWARD ===== - if ((m_dwMoveRelDir & MD_FORWARD) != 0) - { - Vector3 forward = m_CameraCoord.GetDir(); // TODO - forward.y = 0; - forward.Normalize(); - - vPushDir = forward; - - if (bMove) - { - vPushDir += vRight; - vPushDir.Normalize(); - } - } - // ===== BACK ===== - else if ((m_dwMoveRelDir & MD_BACK) != 0) - { - Vector3 back = -m_CameraCoord.GetDir(); // TODO - back.y = 0; - back.Normalize(); - - vPushDir = back; - - if (bMove) - { - vPushDir += vRight; - vPushDir.Normalize(); - } - } - // ===== ABS UP (nếu mask cho phép) ===== - else if (((m_dwMoveRelDir & MD_ABSUP) != 0) && ((dwMask & MD_ABSUP) != 0)) - { - vPushDir = Vector3.up; - }*/ + } + else + { + float angle = Vector2.Angle(new Vector2(joystick.Horizontal, joystick.Vertical), Vector2.up); + angle *= joystick.Horizontal < 0 ? 1 : -1; + Vector2 v2Cam = new Vector2(mainCam.transform.forward.x, mainCam.transform.forward.z); + v2Cam = Quaternion.Euler(0, 0, angle) * v2Cam; + v2Cam.Normalize(); + vPushDir.x = v2Cam.x; + vPushDir.y = 0; + vPushDir.z = v2Cam.y; + } return true; }