Will no longer use bestz snapping every frame if a navmesh is available. Fix for inliquid

This commit is contained in:
KimLS 2016-01-16 20:35:18 -08:00
parent a2136e5ee4
commit 14b9b22ca3
6 changed files with 9 additions and 33 deletions

View File

@ -77,6 +77,7 @@ public:
//Expects locations in EQEmu internal format eg what #loc returns not what /loc returns.
PathfindingRoute FindRoute(const glm::vec3 &current_location, const glm::vec3 &dest_location);
bool GetRandomPoint(const glm::vec3 &start, float radius, glm::vec3 &pos);
bool Loaded() const { return m_nav_mesh != nullptr; }
private:
dtNavMesh *m_nav_mesh;
dtNavMeshQuery *m_nav_query;

View File

@ -109,7 +109,7 @@ Mob::Mob(const char* in_name,
m_TargetV(glm::vec3()),
flee_timer(FLEE_CHECK_TIMER),
m_Position(position),
m_pos_update_timer(8000)
m_pos_update_timer(3000) //this can be much longer but really need to redo ai and movement code first.
{
targeted = 0;
tar_ndx=0;

View File

@ -73,7 +73,7 @@ void Mob::TrySnapToMap() {
if (snap && zone->HasMap()) {
if (!RuleB(Watermap, CheckForWaterWhenMoving) ||
!zone->HasWaterMap() ||
(zone->HasWaterMap() && !zone->watermap->InWater(glm::vec3(m_Position)))) {
(zone->HasWaterMap() && !zone->watermap->InLiquid(glm::vec3(m_Position)))) {
glm::vec3 dest(m_Position);
float newz = zone->zonemap->FindBestZ(dest, nullptr) + 3.5f;
m_Position.z = newz;

View File

@ -27,7 +27,8 @@ bool WaterMapV1::InLava(const glm::vec3& location) const {
}
bool WaterMapV1::InLiquid(const glm::vec3& location) const {
return InWater(location) || InLava(location);
auto rtype = ReturnRegionType(location);
return rtype == RegionTypeWater || rtype == RegionTypeLava || rtype == RegionTypeVWater;
}
bool WaterMapV1::Load(FILE *fp) {

View File

@ -30,7 +30,8 @@ bool WaterMapV2::InLava(const glm::vec3& location) const {
}
bool WaterMapV2::InLiquid(const glm::vec3& location) const {
return InWater(location) || InLava(location);
auto rtype = ReturnRegionType(location);
return rtype == RegionTypeWater || rtype == RegionTypeLava || rtype == RegionTypeVWater;
}
bool WaterMapV2::Load(FILE *fp) {

View File

@ -526,8 +526,9 @@ bool Mob::MakeNewPositionAndSendUpdate(float x, float y, float z, int speed, boo
NPCFlyMode = 1;
}
//lets_move
//fix up pathing Z
if(!NPCFlyMode && checkZ && zone->HasMap() && RuleB(Map, FixPathingZWhenMoving))
if(!NPCFlyMode && checkZ && !zone->pathing.Loaded() && zone->HasMap() && RuleB(Map, FixPathingZWhenMoving))
{
if(!RuleB(Watermap, CheckForWaterWhenMoving) || !zone->HasWaterMap() ||
(zone->HasWaterMap() && !zone->watermap->InWater(glm::vec3(m_Position))))
@ -784,34 +785,6 @@ bool Mob::CalculateNewPosition(float x, float y, float z, int speed, bool checkZ
NPCFlyMode = 1;
}
//TODO: lets_move
////fix up pathing Z
//if(!NPCFlyMode && checkZ && zone->HasMap() && RuleB(Map, FixPathingZWhenMoving))
//{
// if(!RuleB(Watermap, CheckForWaterWhenMoving) || !zone->HasWaterMap() ||
// (zone->HasWaterMap() && !zone->watermap->InWater(glm::vec3(m_Position))))
// {
// glm::vec3 dest(m_Position.x, m_Position.y, m_Position.z);
//
// float newz = zone->zonemap->FindBestZ(dest, nullptr) + 2.0f;
//
// Log.Out(Logs::Detail, Logs::AI, "BestZ returned %4.3f at %4.3f, %4.3f, %4.3f", newz,m_Position.x,m_Position.y,m_Position.z);
//
// if ((newz > -2000) &&
// std::abs(newz - dest.z) < RuleR(Map, FixPathingZMaxDeltaMoving)) // Sanity check.
// {
// if (std::abs(x - m_Position.x) < 0.5 && std::abs(y - m_Position.y) < 0.5) {
// if (std::abs(z - m_Position.z) <= RuleR(Map, FixPathingZMaxDeltaMoving))
// m_Position.z = z;
// else
// m_Position.z = newz + 1;
// }
// else
// m_Position.z = newz+1;
// }
// }
//}
//OP_MobUpdate
if((old_test_vector!=test_vector) || tar_ndx>20){ //send update
tar_ndx=0;