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); }
protected Amplitude.Unity.Game.Orders.Order MoveRoaming(CatspawArmy army) { if (!base.HasMovementLeft(army)) { return(null); } return(base.FollowPath(army, army.PathToRoamingPosition)); }
protected Amplitude.Unity.Game.Orders.Order MoveSecondary(CatspawArmy army) { if (!base.HasMovementLeft(army)) { return(null); } return(base.FollowPath(army, army.PathToSecondaryTarget)); }
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)); }
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)); }
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); }
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); }
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); }
protected bool IsRoamingValid(CatspawArmy army) { return(army.RoamingPosition.IsValid); }
protected bool IsSecondaryValid(CatspawArmy army) { return(army.SecondaryAttackableTarget != null && army.SecondaryAttackableTarget.UnitsCount != 0); }