/// <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);
            }

            Carrier carrier = unitContext.Unit as Carrier;

            if (carrier == null)
            {
                returnCode = BehaviorReturnCode.Failure;
                return(returnCode);
            }

            List <MoveableUnit> units = carrier.Dock.UnitsInDock.ToList();

            foreach (var unit in units)
            {
                LeaveDockTask task = new LeaveDockTask(unit, carrier);
                task.Execute();

                if (!task.IsTaskFinished)
                {
                    returnCode = BehaviorReturnCode.Failure;
                    return(returnCode);
                }
            }

            returnCode = BehaviorReturnCode.Success;
            return(returnCode);
        }
Ejemplo n.º 2
0
        /// <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.IsDead)
            {
                returnCode = BehaviorReturnCode.Failure;
                return(returnCode);
            }

            BaseUnit dockUnit = unit.GetDockUnit() as BaseUnit;

            if (dockUnit == null)
            {
                returnCode = BehaviorReturnCode.Failure;
                return(returnCode);
            }

            LeaveDockTask task = new LeaveDockTask(unit, dockUnit);

            task.Execute();

            if (task.IsTaskFinished)
            {
                returnCode = BehaviorReturnCode.Success;
                return(returnCode);
            }

            returnCode = BehaviorReturnCode.Failure;
            return(returnCode);
        }