Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
  bool DynamicWorldObject::TryChangeState (const String& state)
  {
    if (!CanChangeState (state))
      return false;

    SetState (state);

    return true;
  }
Exemplo n.º 4
0
  void DynamicWorldObject::ApplyForce (const Vector2& force)
  {
    if (!CanChangeState ("Moving"))
      return;

    physicsCore_->ApplyForce (force);

    HandleApplyForce (force);
  }
Exemplo n.º 5
0
void CAIContainer::Trigger(uint16 targID)
{
    if (CanChangeState())
    {
        ChangeState<CTriggerState>(PEntity, targID);
        if (PathFind)
        {
            PathFind->Clear(); //#TODO: pause/resume after?
        }
    }
}
Exemplo n.º 6
0
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;
}