Beispiel #1
0
    protected BehaviorNodeReturnCode ComputePathToSecondary(CatspawArmy army)
    {
        if (army.SecondaryAttackableTarget == null)
        {
            return(BehaviorNodeReturnCode.Failure);
        }
        IGameEntityWithWorldPosition gameEntityWithWorldPosition = army.SecondaryAttackableTarget as IGameEntityWithWorldPosition;

        if (gameEntityWithWorldPosition == null)
        {
            return(BehaviorNodeReturnCode.Failure);
        }
        WorldPosition validTileToAttack = base.GetValidTileToAttack(army, gameEntityWithWorldPosition);

        if (!validTileToAttack.IsValid)
        {
            return(BehaviorNodeReturnCode.Failure);
        }
        army.PathToSecondaryTarget = base.ComputePathToPosition(army, validTileToAttack, army.PathToSecondaryTarget);
        if (army.PathToSecondaryTarget == null)
        {
            return(BehaviorNodeReturnCode.Failure);
        }
        return(BehaviorNodeReturnCode.Success);
    }
Beispiel #2
0
 protected Amplitude.Unity.Game.Orders.Order MoveRoaming(CatspawArmy army)
 {
     if (!base.HasMovementLeft(army))
     {
         return(null);
     }
     return(base.FollowPath(army, army.PathToRoamingPosition));
 }
Beispiel #3
0
 protected Amplitude.Unity.Game.Orders.Order MoveSecondary(CatspawArmy army)
 {
     if (!base.HasMovementLeft(army))
     {
         return(null);
     }
     return(base.FollowPath(army, army.PathToSecondaryTarget));
 }
Beispiel #4
0
    protected bool IsCloseEnoughToAttackSecondary(CatspawArmy army)
    {
        if (army.SecondaryAttackableTarget == null)
        {
            return(false);
        }
        Army army2 = army.Garrison as Army;

        return(army2 != null && base.IsCloseEnoughToAttack(army2, army.SecondaryAttackableTarget));
    }
Beispiel #5
0
 protected Amplitude.Unity.Game.Orders.Order AttackSecondary(CatspawArmy army)
 {
     if (!this.IsCloseEnoughToAttackSecondary(army))
     {
         return(null);
     }
     if (!base.HasEnoughActionPoint(army))
     {
         return(null);
     }
     return(new OrderAttack(army.Garrison.Empire.Index, army.Garrison.GUID, army.SecondaryAttackableTarget.GUID));
 }
Beispiel #6
0
 protected BehaviorNodeReturnCode ComputePathToRoaming(CatspawArmy army)
 {
     if (!this.IsRoamingValid(army))
     {
         return(BehaviorNodeReturnCode.Failure);
     }
     army.PathToRoamingPosition = base.ComputePathToPosition(army, army.RoamingPosition, army.PathToRoamingPosition);
     if (army.PathToRoamingPosition == null)
     {
         army.RoamingPosition = WorldPosition.Invalid;
         return(BehaviorNodeReturnCode.Failure);
     }
     return(BehaviorNodeReturnCode.Success);
 }
Beispiel #7
0
    protected BehaviorNodeReturnCode ChooseSecondaryAttackableTarget(CatspawArmy army)
    {
        List <Army> list = new List <Army>();

        this.FillVisibleArmiesAround(army.Garrison, list);
        if (list.Count == 0)
        {
            return(BehaviorNodeReturnCode.Failure);
        }
        list.Sort(delegate(Army left, Army right)
        {
            int distance  = this.worldPositionService.GetDistance(army.Garrison.WorldPosition, left.WorldPosition);
            int distance2 = this.worldPositionService.GetDistance(army.Garrison.WorldPosition, right.WorldPosition);
            return(distance.CompareTo(distance2));
        });
        army.SecondaryAttackableTarget = list[0];
        return(BehaviorNodeReturnCode.Success);
    }
Beispiel #8
0
    protected BehaviorNodeReturnCode ChoosePositionAwayFromMain(CatspawArmy army)
    {
        IWorldPositionable mainAttackableTarget = army.MainAttackableTarget;

        if (mainAttackableTarget == null)
        {
            return(BehaviorNodeReturnCode.Failure);
        }
        army.RoamingPosition = mainAttackableTarget.WorldPosition;
        if (this.worldPositionService.GetDistance(army.RoamingPosition, army.Garrison.WorldPosition) < 2)
        {
            WorldPosition validTileToAttack = base.GetValidTileToAttack(army, army.Garrison);
            if (validTileToAttack.IsValid)
            {
                army.RoamingPosition = validTileToAttack;
            }
        }
        return(BehaviorNodeReturnCode.Success);
    }
Beispiel #9
0
 protected bool IsRoamingValid(CatspawArmy army)
 {
     return(army.RoamingPosition.IsValid);
 }
Beispiel #10
0
 protected bool IsSecondaryValid(CatspawArmy army)
 {
     return(army.SecondaryAttackableTarget != null && army.SecondaryAttackableTarget.UnitsCount != 0);
 }