From fcd934034d86aa71b2e2ac332fc0d60e5e736a93 Mon Sep 17 00:00:00 2001 From: NotAdam Date: Mon, 28 Jan 2019 13:40:03 +1100 Subject: [PATCH] minor bnpc cleanup, correctly set lastticktime on bnpc entities --- src/common/Util/UtilMath.cpp | 5 +++++ src/common/Util/UtilMath.h | 1 + src/world/Actor/BNpc.cpp | 14 ++++++-------- src/world/Territory/Zone.cpp | 2 +- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/common/Util/UtilMath.cpp b/src/common/Util/UtilMath.cpp index 2b9084a9..f2e8cc2c 100644 --- a/src/common/Util/UtilMath.cpp +++ b/src/common/Util/UtilMath.cpp @@ -15,6 +15,11 @@ float Sapphire::Util::distance( float x, float y, float z, float x1, float y1, f return sqrtf( distanceSq( x, y, z, x1, y1, z1 ) ); } +float Sapphire::Util::distance( const Common::FFXIVARR_POSITION3& pos1, const Common::FFXIVARR_POSITION3& pos2 ) +{ + return sqrtf( distanceSq( pos1.x, pos1.y, pos1.z, pos2.x, pos2.y, pos2.z ) ); +} + float Sapphire::Util::distance2DSq( float x, float y, float x1, float y1 ) { float deltaX = x - x1; diff --git a/src/common/Util/UtilMath.h b/src/common/Util/UtilMath.h index a726b5d1..5d34ee92 100644 --- a/src/common/Util/UtilMath.h +++ b/src/common/Util/UtilMath.h @@ -11,6 +11,7 @@ namespace Sapphire::Util float distanceSq( float x, float y, float z, float x1, float y1, float z1 ); float distance( float x, float y, float z, float x1, float y1, float z1 ); + float distance( const Common::FFXIVARR_POSITION3& pos1, const Common::FFXIVARR_POSITION3& pos2 ); float distance2DSq( float x, float y, float x1, float y1 ); diff --git a/src/world/Actor/BNpc.cpp b/src/world/Actor/BNpc.cpp index 4049bf97..62393edb 100644 --- a/src/world/Actor/BNpc.cpp +++ b/src/world/Actor/BNpc.cpp @@ -88,6 +88,7 @@ Sapphire::Entity::BNpc::BNpc( uint32_t id, BNpcTemplatePtr pTemplate, float posX memcpy( m_customize, pTemplate->getCustomize(), sizeof( m_customize ) ); memcpy( m_modelEquip, pTemplate->getModelEquip(), sizeof( m_modelEquip ) ); + m_lastTickTime = Util::getTimeMs(); } Sapphire::Entity::BNpc::~BNpc() @@ -162,11 +163,9 @@ void Sapphire::Entity::BNpc::step() return; auto stepPos = m_naviLastPath[ m_naviPathStep ]; - auto distanceToStep = Util::distance( getPos().x, getPos().y, getPos().z, - stepPos.x, stepPos.y, stepPos.z ); - auto distanceToDest = Util::distance( getPos().x, getPos().y, getPos().z, - m_naviTarget.x, m_naviTarget.y, m_naviTarget.z ); + auto distanceToStep = Util::distance( getPos(), stepPos ); + auto distanceToDest = Util::distance( getPos(), m_naviTarget ); if( distanceToStep <= 4 && m_naviPathStep < m_naviLastPath.size() - 1 ) { @@ -201,7 +200,7 @@ void Sapphire::Entity::BNpc::step() bool Sapphire::Entity::BNpc::moveTo( const FFXIVARR_POSITION3& pos ) { - if( Util::distance( getPos().x, getPos().y, getPos().z, pos.x, pos.y, pos.z ) <= 4 ) + if( Util::distance( getPos(), pos ) <= 4 ) { // Reached destination m_naviLastPath.clear(); @@ -389,7 +388,6 @@ void Sapphire::Entity::BNpc::update( int64_t currTime ) if( std::difftime( currTime, m_lastTickTime ) > 3000 ) regainHp( currTime ); - // slowly restore hp every tick if( moveTo( m_spawnPos ) ) { setInvincibilityType( InvincibilityType::InvincibilityNone ); @@ -491,12 +489,12 @@ void Sapphire::Entity::BNpc::update( int64_t currTime ) } } } + + m_lastTickTime = currTime; } void Sapphire::Entity::BNpc::regainHp( int64_t currTime ) { - this->m_lastTickTime = currTime; - if( this->m_hp < this->getMaxHp() ) { auto addHp = static_cast< uint32_t >( this->getMaxHp() * 0.1f + 1 ); diff --git a/src/world/Territory/Zone.cpp b/src/world/Territory/Zone.cpp index 27869ab1..e1bfb528 100644 --- a/src/world/Territory/Zone.cpp +++ b/src/world/Territory/Zone.cpp @@ -393,7 +393,7 @@ void Sapphire::Zone::updateBNpcs( int64_t tickCount ) m_lastMobUpdate = tickCount; uint32_t currTime = Sapphire::Util::getTimeSeconds(); - for( auto entry : m_bNpcMap ) + for( const auto& entry : m_bNpcMap ) { Entity::BNpcPtr pBNpc = entry.second;