Ejemplo n.º 1
0
        /// <summary>
        /// Executes this command.
        /// </summary>
        /// <param name="Level">The levl.</param>
        internal override void Execute(Level Level)
        {
            if (Level.Player.Home.GameObjectManager.GetGameObjectById(this.BoatID) is Building Building)
            {
                CharacterData           UnitData = (CharacterData)this.UnitData;
                UnitProductionComponent UnitProductionComponent = (UnitProductionComponent)Building.GetComponent(3);
                UnitStorageComponent    UnitStorageComponent    = (UnitStorageComponent)Building.GetComponent(0);

                if (UnitProductionComponent != null && UnitStorageComponent != null)
                {
                    CharacterData PreviousUnitData  = null;
                    int           PreviousUnitCount = 0;

                    ResourceBundle ResourceBundle = UnitData.GetResourceBundle(Level.Player.UnitUpgrades.GetCount(this.UnitData));

                    if (UnitStorageComponent.HasUnits)
                    {
                        PreviousUnitData   = UnitStorageComponent.Unit;
                        PreviousUnitCount += UnitStorageComponent.UnitCount;

                        if (PreviousUnitData != this.UnitData)
                        {
                            ResourceBundle.Removes(1, PreviousUnitData.GetResourceBundle(Level.Player.UnitUpgrades.GetCount(PreviousUnitData)).Resources[1].Count);

                            UnitStorageComponent.Unit      = null;
                            UnitStorageComponent.UnitCount = 0;

                            PreviousUnitData  = null;
                            PreviousUnitCount = 0;
                        }
                    }

                    int TrainCount = UnitStorageComponent.MaxCapacity / UnitData.HousingSpace - PreviousUnitCount;

                    if (TrainCount > 0)
                    {
                        ResourceBundle.Multiply(TrainCount);

                        if (Level.Player.HasEnoughResources(ResourceBundle))
                        {
                            Level.Player.Resources.Remove(ResourceBundle.Resources[1].Data, ResourceBundle.Resources[1].Count);
                        }
                    }
                }
            }
        }