From e46e2952e6d314b4321f7033d5654e8262442f5e Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Thu, 15 Mar 2018 16:20:00 -0400 Subject: [PATCH] Use 8 points to check in push code --- zone/mob.h | 2 +- zone/mob_ai.cpp | 39 +++++++++++++++++++++++++++++---------- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/zone/mob.h b/zone/mob.h index 43d8f9b59..cb8e7b261 100644 --- a/zone/mob.h +++ b/zone/mob.h @@ -50,7 +50,7 @@ struct AuraRecord; struct NewSpawn_Struct; struct PlayerPositionUpdateServer_Struct; -const int COLLISION_BOX_SIZE = 4; +const int COLLISION_BOX_SIZE = 8; namespace EQEmu { diff --git a/zone/mob_ai.cpp b/zone/mob_ai.cpp index 2c679f10b..8f42ce438 100644 --- a/zone/mob_ai.cpp +++ b/zone/mob_ai.cpp @@ -967,22 +967,41 @@ void Mob::ProcessForcedMovement() m_CollisionBox[0].y = m_Position.y + 3.0f * g_Math.FastCos(0.0f); m_CollisionBox[0].z = m_Position.z + z_off; - // to right - m_CollisionBox[1].x = m_Position.x + 3.0f * g_Math.FastSin(128.0f); - m_CollisionBox[1].y = m_Position.y + 3.0f * g_Math.FastCos(128.0f); + // 45 right front + 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].z = m_Position.z + z_off; - - // behind - m_CollisionBox[2].x = m_Position.x + 3.0f * g_Math.FastSin(256.0f); - m_CollisionBox[2].y = m_Position.y + 3.0f * g_Math.FastCos(256.0f); + // to right + 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].z = m_Position.z + z_off; - // to left - m_CollisionBox[3].x = m_Position.x + 3.0f * g_Math.FastSin(384.0f); - m_CollisionBox[3].y = m_Position.y + 3.0f * g_Math.FastCos(384.0f); + // 45 right back + 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].z = m_Position.z + z_off; + // behind + 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].z = m_Position.z + z_off; + + // 45 left back + 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].z = m_Position.z + z_off; + + // to left + 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].z = m_Position.z + z_off; + + // 45 left front + 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].z = m_Position.z + z_off; + // collision happened, need to move along the wall float distance = 0.0f, shortest = std::numeric_limits::infinity(); glm::vec3 tmp_nrm;