Ejemplo n.º 1
0
    public override void Open()
    {
        base.Open();

        StorageBuilding sb = (StorageBuilding)obj;

        for (int a = 0; a < sb.NumOfTotalTypes; a++)
        {
            uiObjectDatabase = obj.UIObjects;

            //for simple grid
            if (sb.Inventory[a] > 0 && simpleInventoryGrid != null)
            {
                GameObject g1 = Instantiate(uiObjectDatabase.storageItem_smpl);
                g1.transform.SetParent(simpleInventoryGrid.transform);

                StorageItem_smpl s = g1.GetComponent <StorageItem_smpl>();
                s.sb    = sb;
                s.index = a;

                noItems.SetActive(false);
            }

            //entry in advanced grid
            GameObject g2 = Instantiate(uiObjectDatabase.storageItem_adv);
            g2.transform.SetParent(advancedInventoryGrid.transform);

            StorageItem_adv si = g2.GetComponent <StorageItem_adv>();
            si.index = a;
            si.sb    = sb;
        }
    }
Ejemplo n.º 2
0
        /// <summary>
        /// Constructor for the GameWorld class
        /// </summary>
        /// <param name="width">The width of the world</param>
        /// <param name="height">The height of the world</param>
        public GameWorld(int width, int height)
        {
            instance = this;

            gameWidth  = width;
            gameHeight = height;

            // Init the time, graph, grid- and tilessystem
            time = new Time();
            materialCollection = new MaterialCollector(true);
            graph = new Graph();
            grid  = new GridSystem();
            tiles = new TileSystem();

            // Initializations for the tiles-, gridsystem and graph
            tiles.initTiles();
            grid.initGrid();

            // A temp NPC to test stuff with
            Gatherer npc = new Gatherer(new Vector2D(20, 100), // Position
                                        20,                    // Bounding Radius
                                        new Vector2D(0, 0),    // Velocity
                                        80,                    // Max Speed
                                        Vector2D.Up,           // Heading
                                        1,                     // Mass
                                        new Vector2D(15, 15),  // Scale
                                        0.05f,                 // Turnrate
                                        10,                    // Max Force
                                        15,                    // Carry Capacity
                                        Material.WOOD.id);     // MatID

            //Gatherer npc2 = new Gatherer(new Vector2D(60, 100), // Position
            //                                    20, // Bounding Radius
            //                                    new Vector2D(0, 0), // Velocity
            //                                    80, // Max Speed
            //                                    Vector2D.Left, // Heading
            //                                    1, // Mass
            //                                    new Vector2D(15, 15), // Scale
            //                                    0.05f, // Turnrate
            //                                    10, // Max Force
            //                                    15, // Carry Capacity
            //                                    2); // MatID

            StorageBuilding storage = new StorageBuilding(new Vector2D(400, 200), new Vector2D(40, 40));

            graph.initGraph();
            tiles.AddResources();

            // Setting the path for the npc to follow
            //npc.path.Set(Path.GetPathTo(tiles.tiles[TileSystem.GetIndexOfTile(npc.position)], Material.WOOD));
            //npc2.path.Set(Path.GetPathTo(tiles.tiles[TileSystem.GetIndexOfTile(npc2.position)], Material.STONE));

            // Adding the npc to the world
            entities.Add(npc);
            //entities.Add(npc2);

            storage.SetEntranceEdge();

            buildings.Add(storage);
        }
Ejemplo n.º 3
0
 private void AdministrateStorage()
 {
     foreach (Building building in player.Buildings)
     {
         Console.WriteLine($"Almacenamiento: {building.Name}");
         if (building.GetType() == typeof(StorageBuilding))
         {
             StorageBuilding storageBuilding = building as StorageBuilding;
             int             n = 1;
             foreach (FinishedProduct finishedProduct in storageBuilding.Products)
             {
                 Console.WriteLine($"{n} - {finishedProduct.Name}");
                 n++;
             }
             Console.WriteLine($"Seleccione el elemento a vender o 0 para continuar");
             int userOption = Int32.Parse(Console.ReadLine());
             if (userOption != 0 && userOption < storageBuilding.Products.Count)
             {
                 FinishedProduct selectedProduct = storageBuilding.Products[userOption - 1];
                 int             indexOfProduct  = storageBuilding.Products.IndexOf(selectedProduct);
                 player.Money += selectedProduct.Price * selectedProduct.Quality;
                 storageBuilding.Products.RemoveAt(indexOfProduct);
             }
         }
     }
 }
Ejemplo n.º 4
0
    public bool HasGood(int num, int item, ItemType type)
    {
        GameObject[] objs = GameObject.FindGameObjectsWithTag("StorageBuilding");

        if (objs.Length == 0 && num != 0)
        {
            return(false);
        }
        else if (objs.Length == 0)
        {
            return(true);
        }

        int sum = 0;

        foreach (GameObject go in objs)
        {
            StorageBuilding strg = go.GetComponent <StorageBuilding>();

            //if storage building does not store that type of item, continue
            if (strg.typeStored != type)
            {
                continue;
            }

            sum += strg.Inventory[item];
        }

        Debug.Log(sum + " " + num);

        return(sum >= num);
    }
Ejemplo n.º 5
0
    public override void UpdateOverviewPage()
    {
        base.UpdateOverviewPage();

        StorageBuilding sb = (StorageBuilding)obj;

        storageLabel.text     = sb.TotalAmountStored() + "/" + sb.stockpile + " full";
        storageBar.fillAmount = (float)sb.TotalAmountStored() / sb.stockpile;
    }
Ejemplo n.º 6
0
    public SimplePriorityQueue <StorageBuilding> FindStorageBuildingToAccept(ItemOrder io)
    {
        int      num  = io.amount;
        int      item = io.item;
        ItemType type = io.type;

        GameObject[] objs = GameObject.FindGameObjectsWithTag("StorageBuilding");
        SimplePriorityQueue <StorageBuilding> queue = new SimplePriorityQueue <StorageBuilding>();

        if (objs.Length == 0)
        {
            return(queue);
        }


        foreach (GameObject go in objs)
        {
            StorageBuilding strg = go.GetComponent <StorageBuilding>();

            //if null, continue
            if (strg == null)
            {
                continue;
            }

            //only add to list if it stores this type
            if (strg.typeStored != type)
            {
                continue;
            }

            if (!strg.Operational)
            {
                continue;
            }

            //only add to list if it has an entrance
            List <Node> entrancesHere  = GetAdjRoadTiles();
            List <Node> entrancesThere = strg.GetAdjRoadTiles();
            if (entrancesHere.Count == 0 || entrancesThere.Count == 0)
            {
                continue;
            }

            //only add to list if it can accept amount
            if (!strg.CanAcceptAmount(num, item))
            {
                continue;
            }

            float distance = entrancesHere[0].DistanceTo(entrancesThere[0]);

            queue.Enqueue(strg, distance);
        }

        return(queue);
    }
Ejemplo n.º 7
0
        public async Task <ActionResult> DeleteConfirmed(int id)
        {
            StorageBuilding storageBuilding = await db.StorageBuildings.FindAsync(id);

            db.StorageBuildings.Remove(storageBuilding);
            await db.SaveChangesAsync();

            return(RedirectToAction("Index"));
        }
Ejemplo n.º 8
0
    public StorageBuildingSave(GameObject go) : base(go)
    {
        StorageBuilding s = go.GetComponent <StorageBuilding>();

        inventory  = s.Inventory;
        queue      = s.Queue;
        willAccept = s.WillAccept;
        willGet    = s.WillGet;
    }
Ejemplo n.º 9
0
    public override void Activate()
    {
        base.Activate();

        if (Destination is StorageBuilding)
        {
            StorageBuilding o = (StorageBuilding)Destination;
            o.ExpectItem(Order);
        }
    }
Ejemplo n.º 10
0
        public async Task <ActionResult> Edit([Bind(Include = "PrimaryKey,MaxStorage,Name,Level,MaxLevel,ImgUrl")] StorageBuilding storageBuilding)
        {
            if (ModelState.IsValid)
            {
                db.Entry(storageBuilding).State = EntityState.Modified;
                await db.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }
            return(View(storageBuilding));
        }
Ejemplo n.º 11
0
        // GET: StorageBuildings/Delete/5
        public async Task <ActionResult> Delete(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            StorageBuilding storageBuilding = await db.StorageBuildings.FindAsync(id);

            if (storageBuilding == null)
            {
                return(HttpNotFound());
            }
            return(View(storageBuilding));
        }
Ejemplo n.º 12
0
    public void ExportProduct()
    {
        if (!ActiveCarryerWalker)
        {
            StorageBuilding s = FindStorageBuildingToAccept(Product);
            if (s == null)
            {
                return;
            }

            SpawnGiver(Product, s);
            TimeToProduce = timeToProduceMax;
            Producing     = false;
        }
    }
Ejemplo n.º 13
0
 public static void PlaceBuildingOnMap(GameObject GO, Building building, Vector2Int tileID)
 {
     GameObject.Destroy(TileMap[tileID.x, tileID.y].TileGo);
     TileMap[tileID.x, tileID.y] = new TileWithBuilding(GO, tileID, building);
     if (building is Road)
     {
         RoadMap[tileID.x, tileID.y] = new Node(true, GO.transform.position, tileID.x, tileID.y);
     }
     else if (building is StorageBuilding)
     {
         StorageBuilding st = (StorageBuilding)building;
         NewStorageBuildingPlaced.Invoke(st);
         StorageBuildings.Add(st);
     }
 }
Ejemplo n.º 14
0
    public void GetOrRemove()
    {
        //count through inventory so long as carryerwalker isn't active
        for (int a = 0; a < NumOfTotalTypes && !ActiveCarryerWalker; a++)
        {
            //only keep going if WillGet[a] is true
            if (!WillGet[a])
            {
                continue;
            }

            //if empty space, find other storage with stuff
            if (EmptySpaceFor(a) > 0)
            {
                ItemOrder io = new ItemOrder(EmptySpaceFor(a), a, typeStored);

                //if building is found, send getter
                StorageBuilding sb = FindStorageBuildingThatHas(io);
                if (sb != null)
                {
                    SpawnGetter(io, sb);
                }
            }

            //else find storage to accept surplus
            else
            {
                int amountToRemove = (int)(Inventory[a] - (storageSpace * WillAccept[a]));
                if (amountToRemove == 0)
                {
                    continue;
                }

                ItemOrder io = new ItemOrder(amountToRemove, a, typeStored);

                //if building is found, remove stuff from inventory and send giver
                StorageBuilding sb = FindStorageBuildingToAccept(io);
                if (sb != null)
                {
                    Inventory[a] -= amountToRemove;
                    SpawnGiver(io, sb);
                    UpdateVisibleGoods();
                }
            }
        }
    }
Ejemplo n.º 15
0
    public override void OnceAtDestination()
    {
        //if amount at destination is less than needed, set order.num to that amount
        StorageBuilding strg = (StorageBuilding)Destination;

        if (Order.amount > strg.Inventory[Order.item])
        {
            Order.amount = strg.Inventory[Order.item];
        }

        //subtract what we're taking away from the inventory
        strg.RemoveItem(Order);

        float totalGain = Order.ExchangeValue();

        money.GainFromExports(totalGain, Order.type);
    }
Ejemplo n.º 16
0
    public override void OnceAtDestination()
    {
        base.OnceAtDestination();

        //if amount at destination is less than needed, set order.num to that amount
        StorageBuilding strg = (StorageBuilding)Destination;

        if (Order.amount > strg.Inventory[Order.item])
        {
            Order.amount = strg.Inventory[Order.item];
        }

        //subtract what we're taking away from the inventory
        strg.Inventory[Order.item] -= Order.amount;

        money.Sheqels += (int)Order.ExchangeValue();
    }
Ejemplo n.º 17
0
    protected virtual void SendCourierWithProductsFunc()
    {
        StorageBuilding storageBuildingToUse = FindStorageBuilding();

        if (storageBuildingToUse != null)
        {
            // send courier with products
            if (storageBuildingToUse != null)
            {
                HexTile tileToUse = EntranceTiles[Random.Range(0, EntranceTiles.Count - 1)];
                OnMapCouriers.Add(Instantiate(GlobalAttributes.Global.Units[(int)Units.Courier], tileToUse.transform.position, Quaternion.identity, transform));
                OnMapCouriers[OnMapCouriers.Count - 1].GetComponent <Courier>().AddToInventory(EmptyStorage());
                OnMapCouriers[OnMapCouriers.Count - 1].GetComponent <Courier>().SetOutboundCourier(this, storageBuildingToUse);
                CourierCount--;
            }
            //use on map couriers to track who has been sent.
        }
    }
Ejemplo n.º 18
0
    public void GetIngredients()
    {
        for (int a = 0; a < ingredientMax.Length; a++)
        {
            if (!HaveEnough(a))
            {
                ItemOrder io = new ItemOrder(IngredientNeeded(a), ingredients[a]);

                StorageBuilding sb = FindStorageBuildingThatHas(io);

                if (sb != null)
                {
                    SpawnGetter(io, sb);
                }

                return;
            }
        }
    }
Ejemplo n.º 19
0
    public static IResouceReceiver GetClosestResourceReceiver(ResourceType resource, Vector3 relativeTo)
    {
        float           minDistance = Mathf.Infinity;
        StorageBuilding closest     = null;

        foreach (BaseUnit unit in _unitInScene)
        {
            if (unit is IResouceReceiver)
            {
                float currentDistance = Vector3.Distance(unit.transform.position, relativeTo);
                if (currentDistance < minDistance && (unit as IResouceReceiver).AcceptResource(resource))
                {
                    closest     = unit as StorageBuilding;
                    minDistance = currentDistance;
                }
            }
        }
        return(closest as IResouceReceiver);
    }
Ejemplo n.º 20
0
    public override void VisitBuilding(int a, int b)
    {
        base.VisitBuilding(a, b);

        StorageBuilding market = (StorageBuilding)Origin;
        House           house  = world.Map.GetBuildingAt(a, b).GetComponent <House>();

        if (house == null)
        {
            return;
        }
        int numTypes = market.typeStored == ItemType.Food ? (int)FoodType.END : (int)GoodType.END;

        //go through inventory
        for (int item = 0; item < numTypes; item++)
        {
            //if the house does not want any of this item, don't sell
            SellItem(house, item, market.typeStored, market.Inventory[item]);
        }
    }
Ejemplo n.º 21
0
    public void GetOrRemove()
    {
        //count through inventory so long as carryerwalker isn't active
        for (int a = 0; a < NumOfTotalTypes; a++)
        {
            //only keep going if WillGet[a] is true
            if (!WillGet[a])
            {
                continue;
            }

            //if empty space, find other storage with stuff
            if (EmptySpaceFor(a) > (stockpile * .90f * WillAccept[a]))
            {
                ItemOrder io = new ItemOrder(EmptySpaceFor(a), a, typeStored);

                //if building is found, send getter
                SpawnGetterToStorage(io);
            }

            //else find storage to accept surplus
            else if (Inventory[a] > stockpile * WillAccept[a])
            {
                int amountToRemove = (int)(Inventory[a] - (stockpile * WillAccept[a]));

                ItemOrder io = new ItemOrder(amountToRemove, a, typeStored);

                //if building is found, remove stuff from inventory and send giver
                Carryer cart = SpawnGiverToStorage(io);
                if (!ActiveSmartWalker)
                {
                    return;
                }
                StorageBuilding strg = (StorageBuilding)cart.Destination;
                RemoveItem(io);
                UpdateVisibleGoods();
            }
        }
    }
 void showBuildingInfo()
 {
     if (GameUtility.GetTileUnderMousePosition(out Tile tile))
     {
         if (tile is TileWithBuilding tileWithBuilding)
         {
             if (tileWithBuilding.Building is StorageBuilding)
             {
                 StorageBuilding storageBuilding = (StorageBuilding)tileWithBuilding.Building;
                 StorageInfo.ShowRecources(storageBuilding.Storage);
             }
             else if (tileWithBuilding.Building is BuildingNearRoad buildingNearRoad)
             {
                 BuildingInfoUI.ShowUI(buildingNearRoad);
             }
         }
         else
         {
             //Debug.Log("Тайл " + tile.TileID + " без строения");
         }
     }
 }
Ejemplo n.º 23
0
    public override void OnceAtDestination()
    {
        base.OnceAtDestination();

        //if amount at destination is less than needed, set order.num to that amount
        StorageBuilding strg = (StorageBuilding)Destination;

        if (Order.amount > strg.Inventory[Order.item])
        {
            Order.amount = strg.Inventory[Order.item];
        }

        //subtract what we're taking away from the inventory
        strg.Inventory[Order.item] -= Order.amount;
        strg.UpdateVisibleGoods();

        if (Origin is StorageBuilding)
        {
            StorageBuilding o = (StorageBuilding)Origin;
            o.Queue[Order.item] += Order.amount;
        }
    }
Ejemplo n.º 24
0
    protected StorageBuilding FindStorageBuilding()
    {
        // find closest storage building with space
        List <BaseBuilding> StorageBuildings = TeamManager.TM.Teams[TeamID].BuildingsList.FindAll(x => x is StorageBuilding);

        StorageBuilding storageBuildingToUse = null;

        float dist = float.MaxValue;

        for (int i = 0; i < StorageBuildings.Count; ++i)
        {
            float tempDist = Vector3.Distance(transform.position, StorageBuildings[i].transform.position);

            if (tempDist < dist)
            {
                if (((StorageBuilding)StorageBuildings[i]).RemainingSpace > 5)
                {
                    storageBuildingToUse = (StorageBuilding)StorageBuildings[i];
                }
            }
        }

        return(storageBuildingToUse);
    }
 protected override void onNewStorageBuild(StorageBuilding storageBuilding)
 {
 }
Ejemplo n.º 26
0
 public abstract void OnNewStorageAvaliable(StorageBuilding storageBuilding);
 public override void OnNewStorageAvaliable(StorageBuilding storageBuilding)
 {
     Ab_Output.OnNewStorageAvaliable(storageBuilding.Storage);
 }
Ejemplo n.º 28
0
    public override void Open()
    {
        base.Open();

        StorageBuilding sb = (StorageBuilding)obj;

        ItemType type = sb.typeStored;

        string[] items  = new string[0];
        int      length = 0;

        switch (type)
        {
        case ItemType.Food:
            length = (int)FoodType.END;
            items  = new string[length];
            Enums.foodDict.Keys.CopyTo(items, 0);
            break;

        case ItemType.Good:
            length = (int)GoodType.END;
            items  = new string[length];
            Enums.goodDict.Keys.CopyTo(items, 0);
            break;

        case ItemType.Resource:
            length = (int)ResourceType.END;
            items  = new string[length];
            Enums.resourceDict.Keys.CopyTo(items, 0);
            break;
        }
        List <string> sorted = new List <string>(items);

        sorted.Sort();
        foreach (string item in sorted)
        {
            if (!ResourcesDatabase.ItemAllowed(item))
            {
                continue;
            }

            Node n     = Enums.GetItemData(item);
            int  index = n.x;

            ////for simple grid
            //if (sb.Inventory[index] > 0) {

            //	GameObject g1 = Instantiate(storageitem_smpl);
            //	g1.transform.SetParent(simpleInventoryGrid.transform);

            //	StorageItem_smpl s = g1.GetComponent<StorageItem_smpl>();
            //	s.sb = sb;
            //	s.index = index;

            //	noItems.SetActive(false);

            //}

            //entry in advanced grid
            GameObject g2 = Instantiate(UIObjectDatabase.GetUIElement("StorageItem_adv"));
            g2.transform.SetParent(advancedInventoryGrid);

            StorageItem_adv si = g2.GetComponent <StorageItem_adv>();
            si.index = index;
            si.sb    = sb;
        }
    }
Ejemplo n.º 29
0
    public SimplePriorityQueue <StorageBuilding> FindStorageBuildingThatHas(ItemOrder io)
    {
        int      num  = io.amount;
        int      item = io.item;
        ItemType type = io.type;

        GameObject[] objs = GameObject.FindGameObjectsWithTag("StorageBuilding");
        SimplePriorityQueue <StorageBuilding> queue = new SimplePriorityQueue <StorageBuilding>();

        if (objs.Length == 0)
        {
            return(queue);
        }


        int smallestAmountOfItem = 0;

        foreach (GameObject go in objs)
        {
            StorageBuilding strg = go.GetComponent <StorageBuilding>();
            if (this is StorageBuilding)
            {
                if (strg == (StorageBuilding)this)
                {
                    continue;
                }
            }

            //if storage building does not store that type of item, continue
            if (strg.typeStored != type)
            {
                continue;
            }

            if (!strg.Operational)
            {
                continue;
            }

            //if storage building or this structure have no entrances, continue
            List <Node> entrancesHere  = GetAdjRoadTiles();
            List <Node> entrancesThere = strg.GetAdjRoadTiles();
            if (entrancesHere.Count == 0 || entrancesThere.Count == 0)
            {
                continue;
            }

            if (strg.Inventory[item] == 0)
            {
                continue;
            }

            //if has less than the needed amount of Item and less than other discovered inventories, continue
            if (strg.Inventory[item] < num && strg.Inventory[item] < smallestAmountOfItem)
            {
                continue;
            }

            smallestAmountOfItem = strg.Inventory[item];
            float distance = entrancesHere[0].DistanceTo(entrancesThere[0]);

            queue.Enqueue(strg, distance);
        }

        return(queue);
    }
Ejemplo n.º 30
0
        private void NextTurn()
        {
            Console.WriteLine("Pasando de turno...");
            Console.ForegroundColor = ConsoleColor.Red;

            // Se actuliza el precio de las semillas en el mercado
            foreach (Seed seed in market.Seeds)
            {
                seed.AddPriceHistory();
            }

            // Se actulizan los datos de los edificios del usuario
            foreach (Building building in player.buildings)
            {
                if (building.GetType() == typeof(Plantation))
                {
                    // Se actulizan datos de las plantaciones
                    Plantation plantationBuilding = building as Plantation;
                    Seed       plantationSeed     = plantationBuilding.Seed;

                    plantationBuilding.Maturity += 1;
                    if (plantationBuilding.Sick == false)
                    {
                        plantationBuilding.SickPast = false;
                    }
                    if (plantationBuilding.HasUndergrowth == false)
                    {
                        plantationBuilding.HasUndergrowthPast = false;
                    }
                    if (plantationBuilding.HasWorms == false)
                    {
                        plantationBuilding.HasWormsPast = false;
                    }
                    plantationBuilding.GetSick();
                    plantationBuilding.GetUndergrowth();
                    plantationBuilding.GetWorms();

                    // Se revisan las proiedades de la plantacion
                    if (plantationBuilding.Health == 0)
                    {
                        Console.WriteLine($"-La salud de la plantacion {plantationBuilding.Name} llego a 0.");
                    }

                    if (plantationBuilding.Water == 0)
                    {
                        Console.WriteLine($"-El nivel de agua de la plantacion {plantationBuilding.Name} llego a 0.");
                    }

                    if (plantationBuilding.Nutrients == 0)
                    {
                        Console.WriteLine($"-El nivel de nutrientes de la plantacion {plantationBuilding.Name} llego a 0.");
                    }

                    if (plantationBuilding.Nutrients < plantationSeed.MinimumLevelOfNutrients && plantationBuilding.Health != 0)
                    {
                        plantationBuilding.Health -= plantationSeed.PenaltyForLackOfNutrients;
                        Console.WriteLine($"-La salud de la plantacion {plantationBuilding.Name} disminuyo a {plantationBuilding.Health} debido a falta de nutrientes.");
                    }

                    if (plantationBuilding.Water < plantationSeed.MinimumWaterLevel && plantationBuilding.Health != 0)
                    {
                        plantationBuilding.Health -= plantationSeed.PenaltyForLackOfWater;
                        Console.WriteLine($"-La salud de la plantacion {plantationBuilding.Name} disminuyo a {plantationBuilding.Health} debido a falta de Agua.");
                    }

                    if (plantationBuilding.Water != 0)
                    {
                        plantationBuilding.Water -= plantationSeed.WaterConsume;
                    }

                    if (plantationBuilding.Nutrients != 0)
                    {
                        plantationBuilding.Nutrients -= plantationSeed.NutrientConsumption;
                    }

                    if (plantationBuilding.Sick && plantationBuilding.SickPast && plantationBuilding.Health != 0)
                    {
                        plantationBuilding.Health -= plantationSeed.PenaltyForIllness;
                        Console.WriteLine($"-La plantacion {plantationBuilding.Name} se encuentra enferma y disminuyo la Salud a {plantationBuilding.Health}.");
                    }
                    else if (plantationBuilding.Sick)
                    {
                        Console.WriteLine($"-La plantacion {plantationBuilding.Name} se encuentra enferma.");
                    }

                    if (plantationBuilding.HasWorms && plantationBuilding.HasWormsPast && plantationBuilding.Health != 0)
                    {
                        plantationBuilding.Health -= plantationSeed.WormPenalty;
                        Console.WriteLine($"-La plantacion {plantationBuilding.Name} se encuentra con gusanos y disminuyo la Salud a {plantationBuilding.Health}.");
                    }
                    else if (plantationBuilding.HasWorms)
                    {
                        Console.WriteLine($"-La plantacion {plantationBuilding.Name} se encuentra con gusanos.");
                    }

                    if (plantationBuilding.HasUndergrowth && plantationBuilding.HasUndergrowthPast && plantationBuilding.Health != 0)
                    {
                        plantationBuilding.Health -= plantationSeed.WeedPenalty;
                        Console.WriteLine($"-La plantacion {plantationBuilding.Name} se encuentra con maleza y disminuyo la Salud a {plantationBuilding.Health}.");
                    }
                    else if (plantationBuilding.HasUndergrowth)
                    {
                        Console.WriteLine($"-La plantacion {plantationBuilding.Name} se encuentra con maleza.");
                    }

                    plantationBuilding.HasUndergrowthPast = plantationBuilding.HasUndergrowth;
                    plantationBuilding.HasWormsPast       = plantationBuilding.HasWorms;
                    plantationBuilding.SickPast           = plantationBuilding.Sick;
                }
                else if (building.GetType() == typeof(Livestock))
                {
                    // Se actulizan datos de los ganados
                    Livestock livestockBuilding = building as Livestock;
                    Animal    livestockAnimal   = livestockBuilding.Animal;

                    livestockBuilding.Maturity += 1;

                    if (livestockBuilding.Health == 0)
                    {
                        Console.WriteLine($"-La salud del  ganado {livestockBuilding.Name} llego a 0.");
                    }
                    //Agua
                    if (livestockBuilding.Water == 0)
                    {
                        Console.WriteLine($"-El nivel de agua del ganado {livestockBuilding.Name} llego a 0.");
                    }
                    else if (livestockBuilding.Water < livestockAnimal.MinimumWaterLevel && livestockBuilding.Health != 0)
                    {
                        livestockBuilding.Health -= livestockAnimal.PenaltyForLackOfWater;
                        Console.WriteLine($"-La salud del ganado  {livestockBuilding.Name} disminuyo a {livestockBuilding.Health} debido a falta de Agua.");
                    }


                    //Comida
                    if (livestockBuilding.Food == 0)
                    {
                        Console.WriteLine($"-El nivel de alimentos del ganado {livestockBuilding.Name} llego a 0.");
                    }

                    if (livestockBuilding.Food < livestockAnimal.MinimumFoodLevel && livestockBuilding.Health != 0)
                    {
                        livestockBuilding.Health -= livestockAnimal.PenaltyForLackOfFood;
                        Console.WriteLine($"-La salud del ganado {livestockBuilding.Name} disminuyo a {livestockBuilding.Health} debido a falta de alimentos.");
                    }
                    if (livestockBuilding.Sick == false)
                    {
                        livestockBuilding.SickPast = false;
                    }
                    livestockBuilding.Escape();
                    livestockBuilding.SuddenDeath();
                    livestockBuilding.GetSick();

                    if (livestockBuilding.Sick && livestockBuilding.SickPast && livestockBuilding.Health != 0)
                    {
                        livestockBuilding.Health -= livestockAnimal.PenaltyForIllness;
                        Console.WriteLine($"-El ganado {livestockBuilding.Name} se encuentra enfermo y disminuyo la Salud a {livestockBuilding.Health}.");
                    }
                    else if (livestockBuilding.Sick)
                    {
                        Console.WriteLine($"-El ganado {livestockBuilding.Name} se encuentra enfermo.");
                    }
                    livestockBuilding.SickPast = livestockBuilding.Sick;
                    //consumos
                    if (livestockBuilding.Food != 0)
                    {
                        livestockBuilding.Food -= livestockAnimal.FoodConsumption;
                    }
                    if (livestockBuilding.Water != 0)
                    {
                        livestockBuilding.Water -= livestockAnimal.WaterConsume;
                    }
                }
                else if (building.GetType() == typeof(StorageBuilding))
                {
                    //Se disminute la calidad de los productos almacenados
                    StorageBuilding storageBuilding = building as StorageBuilding;
                    storageBuilding.ChangeQuality();
                }
            }

            turn += 1;

            Console.ResetColor();
            Console.WriteLine("Turno pasado...");
            Console.WriteLine("Presione cualquier tecla para continuar...");
            Console.ReadKey();
        }