bool CAIContainer::Internal_Engage(uint16 targetid) { //#TODO: pet engage/disengage auto PTarget {dynamic_cast<CBattleEntity*>(PEntity->GetEntity(targetid))}; auto entity {dynamic_cast<CBattleEntity*>(PEntity)}; if (entity && entity->PAI->IsEngaged() && entity->GetBattleTargetID() != targetid) { ChangeTarget(targetid); return true; } //#TODO: use valid target stuff from spell if (entity && PTarget && !PTarget->isDead()) { //#TODO: remove m_battleTarget if possible (need to check disengage) entity->SetBattleTargetID(targetid); entity->SetBattleStartTime(server_clock::now()); if (CanChangeState() || (GetCurrentState() && GetCurrentState()->IsCompleted())) { ForceChangeState<CAttackState>(entity, targetid); } return true; } return false; }
bool CAIContainer::Internal_Engage(uint16 targetid) { //#TODO: pet engage/disengage auto entity {dynamic_cast<CBattleEntity*>(PEntity)}; if (entity && entity->PAI->IsEngaged()) { if (entity->GetBattleTargetID() != targetid) { ChangeTarget(targetid); return true; } return false; } //#TODO: use valid target stuff from spell if (entity) { //#TODO: remove m_battleTarget if possible (need to check disengage) if (CanChangeState() || (GetCurrentState() && GetCurrentState()->IsCompleted())) { if (ForceChangeState<CAttackState>(entity, targetid)) { entity->OnEngage(*static_cast<CAttackState*>(m_stateStack.top().get())); } } return true; } return false; }
bool DynamicWorldObject::TryChangeState (const String& state) { if (!CanChangeState (state)) return false; SetState (state); return true; }
void DynamicWorldObject::ApplyForce (const Vector2& force) { if (!CanChangeState ("Moving")) return; physicsCore_->ApplyForce (force); HandleApplyForce (force); }
void CAIContainer::Trigger(uint16 targID) { if (CanChangeState()) { ChangeState<CTriggerState>(PEntity, targID); if (PathFind) { PathFind->Clear(); //#TODO: pause/resume after? } } }
bool CAIContainer::Trigger(uint16 targID) { if (CanChangeState()) { auto ret = ChangeState<CTriggerState>(PEntity, targID); if (PathFind) { PathFind->Clear(); //#TODO: pause/resume after? } return ret; } return false; }