mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-28 07:07:45 +00:00
Pushing of idle actors implemented
This commit is contained in:
parent
dc7497e350
commit
7facc939e0
3 changed files with 19 additions and 44 deletions
|
@ -236,46 +236,6 @@ bool Sapphire::Entity::BNpc::moveTo( const FFXIVARR_POSITION3& pos )
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*auto path = pNaviProvider->findFollowPath( m_pos, pos );
|
|
||||||
|
|
||||||
if( !path.empty() )
|
|
||||||
{
|
|
||||||
m_naviLastPath = path;
|
|
||||||
m_naviTarget = pos;
|
|
||||||
m_naviPathStep = 0;
|
|
||||||
m_naviLastUpdate = Util::getTimeMs();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Logger::debug( "No path found from x{0} y{1} z{2} to x{3} y{4} z{5} in {6}",
|
|
||||||
getPos().x, getPos().y, getPos().z, pos.x, pos.y, pos.z, m_pCurrentZone->getInternalName() );
|
|
||||||
|
|
||||||
|
|
||||||
hateListClear();
|
|
||||||
|
|
||||||
if( m_state == BNpcState::Roaming )
|
|
||||||
{
|
|
||||||
Logger::warn( "BNpc Base#{0} Name#{1} unable to path from x{2} y{3} z{4} while roaming. "
|
|
||||||
"Possible pathing error in area. Returning BNpc to spawn position x{5} y{6} z{7}.",
|
|
||||||
m_bNpcBaseId, m_bNpcNameId,
|
|
||||||
getPos().x, getPos().y, getPos().z,
|
|
||||||
m_spawnPos.x, m_spawnPos.y, m_spawnPos.z );
|
|
||||||
|
|
||||||
m_lastRoamTargetReached = Util::getTimeSeconds();
|
|
||||||
m_state = BNpcState::Idle;
|
|
||||||
|
|
||||||
m_naviLastPath.clear();
|
|
||||||
|
|
||||||
setPos( m_spawnPos );
|
|
||||||
sendPositionUpdate();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
step();*/
|
|
||||||
|
|
||||||
//pNaviProvider->setMoveTarget( *this, pos );
|
|
||||||
auto pos1 = pNaviProvider->getMovePos( *this );
|
auto pos1 = pNaviProvider->getMovePos( *this );
|
||||||
|
|
||||||
if( Util::distance( pos1, pos ) < 1.1f )
|
if( Util::distance( pos1, pos ) < 1.1f )
|
||||||
|
@ -284,11 +244,10 @@ bool Sapphire::Entity::BNpc::moveTo( const FFXIVARR_POSITION3& pos )
|
||||||
face( pos1 );
|
face( pos1 );
|
||||||
setPos( pos1 );
|
setPos( pos1 );
|
||||||
sendPositionUpdate();
|
sendPositionUpdate();
|
||||||
pNaviProvider->resetMoveTarget( *this );
|
//pNaviProvider->resetMoveTarget( *this );
|
||||||
pNaviProvider->updateAgentPosition( *this );
|
pNaviProvider->updateAgentPosition( *this );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//Logger::debug( "{} {} {}", pos1.x, pos1.y, pos1.z );
|
|
||||||
|
|
||||||
m_pCurrentZone->updateActorPosition( *this );
|
m_pCurrentZone->updateActorPosition( *this );
|
||||||
face( pos1 );
|
face( pos1 );
|
||||||
|
@ -504,10 +463,14 @@ void Sapphire::Entity::BNpc::update( uint64_t tickCount )
|
||||||
if( pHatedActor )
|
if( pHatedActor )
|
||||||
aggro( pHatedActor );
|
aggro( pHatedActor );
|
||||||
|
|
||||||
|
auto pNaviMgr = m_pFw->get< World::Manager::NaviMgr >();
|
||||||
|
auto pNaviProvider = m_pCurrentZone->getNaviProvider();
|
||||||
|
|
||||||
|
if( pNaviProvider->syncPosToChara( *this ) )
|
||||||
|
sendPositionUpdate();
|
||||||
|
|
||||||
if( !hasFlag( Immobile ) && ( Util::getTimeSeconds() - m_lastRoamTargetReached > roamTick ) )
|
if( !hasFlag( Immobile ) && ( Util::getTimeSeconds() - m_lastRoamTargetReached > roamTick ) )
|
||||||
{
|
{
|
||||||
auto pNaviMgr = m_pFw->get< World::Manager::NaviMgr >();
|
|
||||||
auto pNaviProvider = m_pCurrentZone->getNaviProvider();
|
|
||||||
|
|
||||||
if( !pNaviProvider )
|
if( !pNaviProvider )
|
||||||
{
|
{
|
||||||
|
|
|
@ -656,3 +656,13 @@ void Sapphire::World::Navi::NaviProvider::updateAgentPosition( Entity::Chara& ch
|
||||||
auto newIndex = addAgent( chara );
|
auto newIndex = addAgent( chara );
|
||||||
chara.setAgentId( newIndex );
|
chara.setAgentId( newIndex );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Sapphire::World::Navi::NaviProvider::syncPosToChara( Entity::Chara& chara )
|
||||||
|
{
|
||||||
|
auto pos = getMovePos( chara );
|
||||||
|
if( pos.x == chara.getPos().x && pos.y == chara.getPos().y && pos.z == chara.getPos().z )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
chara.setPos( pos );
|
||||||
|
return true;
|
||||||
|
}
|
|
@ -67,6 +67,8 @@ namespace Sapphire::World::Navi
|
||||||
|
|
||||||
void updateAgentPosition( Entity::Chara& chara );
|
void updateAgentPosition( Entity::Chara& chara );
|
||||||
|
|
||||||
|
bool syncPosToChara( Entity::Chara& chara );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::string m_internalName;
|
std::string m_internalName;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue