예제 #1
0
 private void Retreat()
 {
     RemoveSubObjective(ref followTargetObjective);
     RemoveSubObjective(ref seekAmmunition);
     if (retreatObjective != null && retreatObjective.Target != retreatTarget)
     {
         retreatObjective = null;
     }
     if (retreatTarget == null || (retreatObjective != null && !retreatObjective.CanBeCompleted))
     {
         retreatTarget = findSafety.FindBestHull(HumanAIController.VisibleHulls);
     }
     if (character.CurrentHull != retreatTarget)
     {
         TryAddSubObjective(ref retreatObjective, () => new AIObjectiveGoTo(retreatTarget, character, objectiveManager, false, true));
     }
 }
 private void Retreat(float deltaTime)
 {
     if (retreatTarget == null || (retreatObjective != null && !retreatObjective.CanBeCompleted))
     {
         retreatTarget = findSafety.FindBestHull(new List <Hull>()
         {
             character.CurrentHull
         });
     }
     if (retreatTarget != null)
     {
         if (retreatObjective == null || retreatObjective.Target != retreatTarget)
         {
             retreatObjective = new AIObjectiveGoTo(retreatTarget, character, false, true);
         }
         retreatObjective.TryComplete(deltaTime);
     }
 }
예제 #3
0
 private void Retreat(float deltaTime)
 {
     RemoveSubObjective(ref followTargetObjective);
     RemoveSubObjective(ref seekAmmunition);
     if (retreatObjective != null && retreatObjective.Target != retreatTarget)
     {
         retreatObjective = null;
     }
     if (retreatTarget == null || (retreatObjective != null && !retreatObjective.CanBeCompleted))
     {
         if (findHullTimer > 0)
         {
             findHullTimer -= deltaTime;
         }
         else
         {
             retreatTarget = findSafety.FindBestHull(HumanAIController.VisibleHulls);
             findHullTimer = findHullInterval * Rand.Range(0.9f, 1.1f);
         }
     }
     if (retreatTarget != null && character.CurrentHull != retreatTarget)
     {
         TryAddSubObjective(ref retreatObjective, () => new AIObjectiveGoTo(retreatTarget, character, objectiveManager, false, true),
                            onAbandon: () =>
         {
             if (Enemy != null && HumanAIController.VisibleHulls.Contains(Enemy.CurrentHull))
             {
                 // If in the same room with an enemy -> don't try to escape because we'd want to fight it
                 SteeringManager.Reset();
                 RemoveSubObjective(ref retreatObjective);
             }
             else
             {
                 // else abandon and fall back to find safety mode
                 Abandon = true;
             }
         },
                            onCompleted: () => RemoveSubObjective(ref retreatObjective));
     }
 }