fix: update logic jump move.

This commit is contained in:
Tungdv
2025-12-04 20:06:02 +07:00
parent b5aeba251d
commit 1d7181c1fc
2 changed files with 35 additions and 33 deletions
@@ -346,6 +346,7 @@ namespace BrewMonster {
public bool IsStop() { return m_bStop; }
// Get host's last position sent to server
public Vector3 GetLastSevPos() { return m_vLastSevPos; }
public bool GetSlideLock() { return m_bSlideLock; }
}
public struct CDR_INFO
{
+34 -33
View File
@@ -92,6 +92,7 @@ namespace BrewMonster
private A3DVECTOR3 g_vOrigin = new A3DVECTOR3(0f);
private Transform playerTransform;
private float EC_SLOPE_Y = 0.5f;
int m_iOldWalkMode = Move_Mode.MOVE_STAND; // Copy of work mode
// ====== Ground cast config ======
[Header("Ground Cast")]
@@ -3389,7 +3390,7 @@ namespace BrewMonster
// m_GndInfo.fGndHei = pWorld.GetTerrainHeight(vPos, &m_GndInfo.vGndNormal);
// Test whether last pos is in air
A3DVECTOR3 vGndPos0, vTestPos0 = m_MoveCtrl.GetLastSevPos() + g_vAxisY * m_aabbServer.Extents.y;
Vector3 vGndPos0 = Vector3.zero, vTestPos0 = m_MoveCtrl.GetLastSevPos() + g_vAxisY * m_aabbServer.Extents.y;
VertRayTrace(vTestPos0, vGndPos0, m_GndInfo.vGndNormal);
m_GndInfo.fGndHei = vGndPos0.y;
@@ -3405,46 +3406,46 @@ namespace BrewMonster
A3DVECTOR3 vGndPos, vTestPos = vPos + g_vAxisY * m_aabbServer.Extents.y;
VertRayTrace(vTestPos, vGndPos, m_GndInfo.vGndNormal);
m_GndInfo.fGndHei = vGndPos.y;
m_GndInfo.fWaterHei = pWorld.GetWaterHeight(vTestPos);
//m_GndInfo.fWaterHei = pWorld.GetWaterHeight(vTestPos);
//@note : use the aabb trace. By Kuiwu[12/10/2005]
VertAABBTrace(vTestPos, m_aabbServer.Extents, vAABBGnd, m_GndInfo.vGndNormal);
vAABBGnd.y -= m_aabbServer.Extents.y;
//@note : By Kuiwu[12/10/2005]
int iNewEnv = MOVEENV_GROUND;
if (CheckWaterMoveEnv(vPos, m_GndInfo.fWaterHei, vAABBGnd.y))
iNewEnv = MOVEENV_WATER;
int iNewEnv = Move_environment.MOVEENV_GROUND;
//if (CheckWaterMoveEnv(vPos, m_GndInfo.fWaterHei, vAABBGnd.y))
// iNewEnv = Move_environment.MOVEENV_WATER;
// ·ÉÌì¹ÒÎÊÌâ
if (iNewEnv == MOVEENV_GROUND && GetPos().y - vAABBGnd.y < 0.2f && bIsInAir && GetPos() != m_MoveCtrl.GetLastSevPos())
{
m_MoveCtrl.SendMoveCmd(GetPos(), 2, g_vAxisY, m_CDRInfo.vAbsVelocity, m_iMoveMode, true);
// BubbleText(BUBBLE_LEVELUP, 0);
}
//if (iNewEnv == Move_environment.MOVEENV_GROUND && GetPos().y - vAABBGnd.y < 0.2f && bIsInAir && GetPos() != m_MoveCtrl.GetLastSevPos())
//{
// m_MoveCtrl.SendMoveCmd(GetPos(), 2, g_vAxisY, m_CDRInfo.vAbsVelocity, m_iMoveMode, true);
// // BubbleText(BUBBLE_LEVELUP, 0);
//}
if (iNewEnv == MOVEENV_GROUND)
if (iNewEnv == Move_environment.MOVEENV_GROUND)
{
m_GndInfo.bOnGround = true;
// if (vPos.y > m_GndInfo.fGndHei + 0.2f)
if (m_CDRInfo.vTPNormal.IsZero())
if (m_CDRInfo.vTPNormal == Vector3.zero)
{
if (m_iMoveMode != MOVE_FREEFALL)
m_iMoveMode = MOVE_FREEFALL;
if (m_iMoveMode != (int)MoveMode.MOVE_FREEFALL)
m_iMoveMode = (int)MoveMode.MOVE_FREEFALL;
m_GndInfo.bOnGround = false;
if (IsJumping() && m_CDRInfo.vAbsVelocity.y < 0.0f && vPos.y - vAABBGnd.y < 0.6f)
{
PlayAction(ACT_JUMP_LAND, false);
PlayAction((int)PLAYER_ACTION_TYPE.ACT_JUMP_LAND, false);
}
}
else
{
if (IsJumping() && m_CDRInfo.vAbsVelocity.y < 0.0f && vPos.y - vAABBGnd.y < 0.6f)
{
PlayAction(ACT_JUMP_LAND, false);
PlayAction((int)PLAYER_ACTION_TYPE.ACT_JUMP_LAND, false);
ResetJump();
}
@@ -3453,42 +3454,42 @@ namespace BrewMonster
{
if (!m_MoveCtrl.GetSlideLock())
{
if (m_iMoveMode != MOVE_SLIDE)
if (m_iMoveMode != (int)MoveMode.MOVE_SLIDE)
{
m_iOldWalkMode = m_iMoveMode;
m_iMoveMode = MOVE_SLIDE;
m_iMoveMode = (int)MoveMode.MOVE_SLIDE;
}
}
else
{
m_MoveCtrl.SetSlideLock(false);
m_iMoveMode = MOVE_STAND;
m_iMoveMode = (int)MoveMode.MOVE_STAND;
}
}
else
{
m_MoveCtrl.SetSlideLock(false);
if (m_iMoveMode == MOVE_FREEFALL)
if (m_iMoveMode == (int)MoveMode.MOVE_FREEFALL)
{
m_iMoveMode = MOVE_STAND;
m_iMoveMode = (int)MoveMode.MOVE_STAND;
}
else if (m_iMoveMode == MOVE_SLIDE)
else if (m_iMoveMode == (int)MoveMode.MOVE_SLIDE)
m_iMoveMode = m_iOldWalkMode;
}
}
}
else if (iNewEnv == MOVEENV_WATER)
{
m_CDRInfo.fYVel = 0.0f;
//else if (iNewEnv == MOVEENV_WATER)
//{
// m_CDRInfo.fYVel = 0.0f;
if (m_iMoveMode == MOVE_SLIDE)
{
if (m_pWorkMan.IsMoving())
m_iMoveMode = MOVE_MOVE;
else
m_iMoveMode = MOVE_STAND;
}
}
// if (m_iMoveMode == MOVE_SLIDE)
// {
// if (m_pWorkMan.IsMoving())
// m_iMoveMode = MOVE_MOVE;
// else
// m_iMoveMode = MOVE_STAND;
// }
//}
m_iMoveEnv = iNewEnv;
}