Esempio n. 1
0
        /// <summary>
        /// Tries to apply a <see cref="MapSquareImprovementPivot"/> on the current instance.
        /// </summary>
        /// <param name="settler">The settler.</param>
        /// <param name="action">The action to apply.</param>
        /// <returns>
        /// <c>True</c> if the settler actually starts the action; <c>False</c> otherwise.
        /// </returns>
        internal bool ApplyAction(SettlerPivot settler, MapSquareImprovementPivot action)
        {
            if (!action.AlwaysAvailable && !Biome.Actions.Contains(action))
            {
                return(false);
            }

            if (action == MapSquareImprovementPivot.Irrigate)
            {
                return(ApplyActionInternal(settler, action, Irrigate));
            }

            if (action == MapSquareImprovementPivot.Mine)
            {
                return(ApplyActionInternal(settler, action, Mine));
            }

            if (action == MapSquareImprovementPivot.Road)
            {
                return(ApplyActionInternal(settler, action, Road));
            }

            if (action == MapSquareImprovementPivot.DestroyImprovement)
            {
                return(ApplyActionInternal(settler, action, !Irrigate && !Mine && !Fortress));
            }

            if (action == MapSquareImprovementPivot.DestroyRoad)
            {
                return(ApplyActionInternal(settler, action, !Road && !RailRoad));
            }

            if (action == MapSquareImprovementPivot.BuildFortress)
            {
                return(ApplyActionInternal(settler, action, Fortress));
            }

            if (action == MapSquareImprovementPivot.Clear)
            {
                return(ApplyActionInternal(settler, action, false));
            }

            if (action == MapSquareImprovementPivot.ClearPollution)
            {
                return(ApplyActionInternal(settler, action, Pollution));
            }

            if (action == MapSquareImprovementPivot.Plant)
            {
                return(ApplyActionInternal(settler, action, false));
            }

            if (action == MapSquareImprovementPivot.RailRoad)
            {
                return(ApplyActionInternal(settler, action, RailRoad));
            }

            return(false);
        }
Esempio n. 2
0
        /// <summary>
        /// Adds a settler to the action.
        /// </summary>
        /// <param name="settler">The settler.</param>
        /// <returns><c>True</c> if success; <c>False</c> otherwise.</returns>
        internal bool AddSettler(SettlerPivot settler)
        {
            bool canWork = !settler.BusyOnAction;

            if (canWork)
            {
                _settlers.Add(settler);
                settler.SetAction(this);
            }
            return(canWork);
        }
Esempio n. 3
0
        private bool ApplyActionInternal(SettlerPivot settler, MapSquareImprovementPivot action, bool currentApplianceValue)
        {
            if (currentApplianceValue)
            {
                return(false);
            }

            var actionInProgress = CurrentActions.SingleOrDefault(a => a.Action == action);

            if (actionInProgress == null)
            {
                actionInProgress = new InProgressMapSquareImprovementPivot(action);
                _currentActions.Add(actionInProgress);
            }

            return(actionInProgress.AddSettler(settler));
        }