From 4238a7238684f49f7ce627d888b5713b3183d241 Mon Sep 17 00:00:00 2001 From: D-AIRY <admin@ds-servers.com> Date: Mon, 23 Dec 2024 15:36:57 +0300 Subject: [PATCH] Animate ladder mounting --- source/game/LadderMovementController.cpp | 19 +++++++++++++++---- source/game/LadderMovementController.h | 9 +++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/source/game/LadderMovementController.cpp b/source/game/LadderMovementController.cpp index 6152853f6..ef824bf04 100644 --- a/source/game/LadderMovementController.cpp +++ b/source/game/LadderMovementController.cpp @@ -45,9 +45,10 @@ void CLadderMovementController::setCharacter(CBaseCharacter *pCharacter) pCharacterController->setGravity(float3(0.0f, 0.0f, 0.0f)); pCharacterController->setVelocityForTimeInterval(float3(0.0f, 0.0f, 0.0f), 0.0f); - TODO("Make move smoother"); - float3 vPointOnLadder = SMProjectPointOnLine(m_pCharacter->getPos(), m_vLadderPoint[0], m_vLadderPoint[1]); - m_pCharacter->setPos(vPointOnLadder); + m_mounting.is = true; + m_mounting.fFrac = 0.0f; + m_mounting.vStartPos = m_pCharacter->getPos(); + m_mounting.vTargetPos = SMProjectPointOnLine(m_pCharacter->getPos(), m_vLadderPoint[0], m_vLadderPoint[1]); } void CLadderMovementController::handleMove(const float3 &vDir) @@ -68,7 +69,17 @@ bool CLadderMovementController::handleUse() void CLadderMovementController::update(float fDt) { - if(m_bWillDismount) + if(m_mounting.is) + { + m_mounting.fFrac += 7.0f * fDt; + if(m_mounting.fFrac > 1.0f) + { + m_mounting.fFrac = 1.0f; + m_mounting.is = false; + } + m_pCharacter->setPos(vlerp(m_mounting.vStartPos, m_mounting.vTargetPos, m_mounting.fFrac)); + } + else if(m_bWillDismount) { ((CPlayer*)m_pCharacter)->m_vCurrentSpeed = m_vMoveDir; m_pCharacter->setMovementController(NULL); diff --git a/source/game/LadderMovementController.h b/source/game/LadderMovementController.h index a41cc4ac2..0b34f2256 100644 --- a/source/game/LadderMovementController.h +++ b/source/game/LadderMovementController.h @@ -26,6 +26,15 @@ private: float3_t m_vMoveDir; + struct + { + bool is = false; + float fFrac = 0.0f; + float3_t vStartPos; + float3_t vTargetPos; + } + m_mounting; + bool m_bWillDismount = false; }; -- GitLab