This commit is contained in:
Uleat 2018-03-17 20:19:15 -04:00
commit d58e88a2f7

View File

@ -957,7 +957,6 @@ void Mob::ProcessForcedMovement()
// this flag won't be set if the mob can't be pushed (rooted etc) // this flag won't be set if the mob can't be pushed (rooted etc)
if (AI_movement_timer->Check()) { if (AI_movement_timer->Check()) {
bool bPassed = true; bool bPassed = true;
auto z_off = GetZOffset();
glm::vec3 normal; glm::vec3 normal;
// no zone map = fucked // no zone map = fucked
@ -965,42 +964,42 @@ void Mob::ProcessForcedMovement()
// in front // in front
m_CollisionBox[0].x = m_Position.x + 3.0f * g_Math.FastSin(0.0f); m_CollisionBox[0].x = m_Position.x + 3.0f * g_Math.FastSin(0.0f);
m_CollisionBox[0].y = m_Position.y + 3.0f * g_Math.FastCos(0.0f); m_CollisionBox[0].y = m_Position.y + 3.0f * g_Math.FastCos(0.0f);
m_CollisionBox[0].z = m_Position.z + z_off; m_CollisionBox[0].z = m_Position.z;
// 45 right front // 45 right front
m_CollisionBox[1].x = m_Position.x + 3.0f * g_Math.FastSin(64.0f); m_CollisionBox[1].x = m_Position.x + 3.0f * g_Math.FastSin(64.0f);
m_CollisionBox[1].y = m_Position.y + 3.0f * g_Math.FastCos(64.0f); m_CollisionBox[1].y = m_Position.y + 3.0f * g_Math.FastCos(64.0f);
m_CollisionBox[1].z = m_Position.z + z_off; m_CollisionBox[1].z = m_Position.z;
// to right // to right
m_CollisionBox[2].x = m_Position.x + 3.0f * g_Math.FastSin(128.0f); m_CollisionBox[2].x = m_Position.x + 3.0f * g_Math.FastSin(128.0f);
m_CollisionBox[2].y = m_Position.y + 3.0f * g_Math.FastCos(128.0f); m_CollisionBox[2].y = m_Position.y + 3.0f * g_Math.FastCos(128.0f);
m_CollisionBox[2].z = m_Position.z + z_off; m_CollisionBox[2].z = m_Position.z;
// 45 right back // 45 right back
m_CollisionBox[3].x = m_Position.x + 3.0f * g_Math.FastSin(192.0f); m_CollisionBox[3].x = m_Position.x + 3.0f * g_Math.FastSin(192.0f);
m_CollisionBox[3].y = m_Position.y + 3.0f * g_Math.FastCos(192.0f); m_CollisionBox[3].y = m_Position.y + 3.0f * g_Math.FastCos(192.0f);
m_CollisionBox[3].z = m_Position.z + z_off; m_CollisionBox[3].z = m_Position.z;
// behind // behind
m_CollisionBox[4].x = m_Position.x + 3.0f * g_Math.FastSin(256.0f); m_CollisionBox[4].x = m_Position.x + 3.0f * g_Math.FastSin(256.0f);
m_CollisionBox[4].y = m_Position.y + 3.0f * g_Math.FastCos(256.0f); m_CollisionBox[4].y = m_Position.y + 3.0f * g_Math.FastCos(256.0f);
m_CollisionBox[4].z = m_Position.z + z_off; m_CollisionBox[4].z = m_Position.z;
// 45 left back // 45 left back
m_CollisionBox[5].x = m_Position.x + 3.0f * g_Math.FastSin(320.0f); m_CollisionBox[5].x = m_Position.x + 3.0f * g_Math.FastSin(320.0f);
m_CollisionBox[5].y = m_Position.y + 3.0f * g_Math.FastCos(320.0f); m_CollisionBox[5].y = m_Position.y + 3.0f * g_Math.FastCos(320.0f);
m_CollisionBox[5].z = m_Position.z + z_off; m_CollisionBox[5].z = m_Position.z;
// to left // to left
m_CollisionBox[6].x = m_Position.x + 3.0f * g_Math.FastSin(384.0f); m_CollisionBox[6].x = m_Position.x + 3.0f * g_Math.FastSin(384.0f);
m_CollisionBox[6].y = m_Position.y + 3.0f * g_Math.FastCos(384.0f); m_CollisionBox[6].y = m_Position.y + 3.0f * g_Math.FastCos(384.0f);
m_CollisionBox[6].z = m_Position.z + z_off; m_CollisionBox[6].z = m_Position.z;
// 45 left front // 45 left front
m_CollisionBox[7].x = m_Position.x + 3.0f * g_Math.FastSin(448.0f); m_CollisionBox[7].x = m_Position.x + 3.0f * g_Math.FastSin(448.0f);
m_CollisionBox[7].y = m_Position.y + 3.0f * g_Math.FastCos(448.0f); m_CollisionBox[7].y = m_Position.y + 3.0f * g_Math.FastCos(448.0f);
m_CollisionBox[7].z = m_Position.z + z_off; m_CollisionBox[7].z = m_Position.z;
// collision happened, need to move along the wall // collision happened, need to move along the wall
float distance = 0.0f, shortest = std::numeric_limits<float>::infinity(); float distance = 0.0f, shortest = std::numeric_limits<float>::infinity();
@ -1024,6 +1023,8 @@ void Mob::ProcessForcedMovement()
pLastChange = Timer::GetCurrentTime(); pLastChange = Timer::GetCurrentTime();
FixZ(); // so we teleport to the ground locally, we want the client to interpolate falling etc FixZ(); // so we teleport to the ground locally, we want the client to interpolate falling etc
} else if (--ForcedMovement) { } else if (--ForcedMovement) {
if (normal.z < -0.15f) // prevent too much wall climbing. ex. OMM's room in anguish
normal.z = 0.0f;
auto proj = glm::proj(static_cast<glm::vec3>(m_Delta), normal); auto proj = glm::proj(static_cast<glm::vec3>(m_Delta), normal);
m_Delta.x -= proj.x; m_Delta.x -= proj.x;
m_Delta.y -= proj.y; m_Delta.y -= proj.y;