/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { UnitBehaviorContext unitContext = context as UnitBehaviorContext; if (unitContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } MoveableUnit unit = unitContext.Unit as MoveableUnit; if (unit == null || (!unit.IsOnOrbit && !unit.IsInDock)) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } RepairOnOrbitTask task = new RepairOnOrbitTask(unitContext.Unit); task.Execute(); if (task.IsTaskFinished) { returnCode = BehaviorReturnCode.Success; return(returnCode); } returnCode = BehaviorReturnCode.Failure; return(returnCode); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlanetBehaviorContext planetContext = context as PlanetBehaviorContext; if (planetContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } if (!planetContext.Planet.Orbit.Units.ContainsKey(planetContext.Planet.Owner)) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } // TODO MT issue here? List <MoveableUnit> units = planetContext.Planet.Orbit.Units[planetContext.Planet.Owner].ToList(); foreach (var unit in units) { if (unit.Hull == unit.HullMax || unit.Hull > unit.HullMax * HullPercentage || unit.IsDead || unit.Owner == null) { continue; } if (unit.Owner.Energy < unit.RepairCost) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } RepairOnOrbitTask task = new RepairOnOrbitTask(unit); task.Execute(); if (!task.IsTaskFinished) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } } returnCode = BehaviorReturnCode.Success; return(returnCode); }