Exemplo n.º 1
0
    private void CheckHunger()
    {
        if (!_villagerModel.Hunger.IsNeeded())
        {
            return;
        }

        var canEat = true;

        switch (LevelConfiguration.Instance.CurrentDiet)
        {
        case Diet.Simple:
            if (TownController.Instance.GetStored(DropItemType.Bread) <= 0)
            {
                canEat = false;
            }

            break;

        case Diet.MeatEater:
            if (TownController.Instance.GetStored(DropItemType.Bread) <= 0)
            {
                canEat = false;
            }

            if (TownController.Instance.GetStored(DropItemType.Meat) <= 0)
            {
                canEat = false;
            }

            break;

        case Diet.Vegan:
            if (TownController.Instance.GetStored(DropItemType.Bread) <= 0)
            {
                canEat = false;
            }

            if (TownController.Instance.GetStored(DropItemType.Meat) <= 0)
            {
                canEat = false;
            }

            break;

        default:
            throw new ArgumentOutOfRangeException();
        }

        if (!canEat)
        {
//            Debug.Log("Order Eat cancelled: Not enough food for " + LevelConfiguration.Instance.CurrentDiet + " diet.");
            return;
        }

        _villagerController.AddOrder(OrderType.Eat);
    }
Exemplo n.º 2
0
    private void ProcessOrderState()
    {
        var orderCompleted = true;

        switch (_villagerModel.CurrentOrderType)
        {
        case OrderType.Eat:
            ProcessEatOrder();
            break;

        case OrderType.Sleep:
            _villagerModel.Sleepiness.Restore(_villagerModel.House.SleepinessRestore);
            if (!_villagerModel.Sleepiness.IsRestored())
            {
                orderCompleted = false;
            }

            break;

        case OrderType.Roam:
            break;

        case OrderType.Leave:
            --_townController.VillagersInIsland;
            Destroy(gameObject);
            break;

        case OrderType.PlantWheat:
            _spawnController.SpawnWheatCrop(_villagerModel.CurrentTownOrder.Position);
            break;

        case OrderType.PlantTofu:
            _spawnController.SpawnTofuCrop(_villagerModel.CurrentTownOrder.Position);
            break;

        case OrderType.Null:
            throw new ArgumentOutOfRangeException();

        case OrderType.PickItem:
            int ammount;
            var type = _townController.DestroyItem(_villagerModel.CurrentTownOrder.Position, out ammount);
            _villagerModel.Inventory[type] += ammount;
            _villagerController.AddOrder(OrderType.DropItem);
            break;

        case OrderType.DropItem:
            _townController.AddToStorage(_villagerModel.Inventory);
            _villagerModel.ResetInventory();
            break;

        case OrderType.HarvestPlant:
            _townController.HarvestCrop(_villagerModel.CurrentTownOrder.Position);
            break;

        case OrderType.BakeBreadFindWheat:
            GrabItemFromTownStorage(DropItemType.Wheat, OrderAmmount);
            _villagerController.AddOrder(OrderType.BakeBreadDropWheatInOven);
            break;

        case OrderType.GrowPigDropWheatInPen:
        case OrderType.BakeBreadDropWheatInOven:
            _townController.DropRawItemInFactory(_villagerModel.DestinationCell.Position,
                                                 _villagerModel.Inventory[DropItemType.Wheat]);
            _villagerModel.Inventory[DropItemType.Wheat] -= (int)OrderAmmount;
            break;

        case OrderType.FermentTofuFindSoybean:
            GrabItemFromTownStorage(DropItemType.Soybean, OrderAmmount);
            _villagerController.AddOrder(OrderType.FermentTofuDropSoybeanInFermenter);
            break;

        case OrderType.FermentTofuDropSoybeanInFermenter:
            _townController.DropRawItemInFactory(_villagerModel.DestinationCell.Position,
                                                 _villagerModel.Inventory[DropItemType.Soybean]);
            _villagerModel.Inventory[DropItemType.Soybean] -= (int)OrderAmmount;
            break;

        case OrderType.MakeMeatDropPiggyInSlaughterhouse:
            _townController.DropRawItemInFactory(_villagerModel.DestinationCell.Position,
                                                 _villagerModel.Inventory[DropItemType.Piggy]);
            _villagerModel.Inventory[DropItemType.Piggy] -= (int)OrderAmmount;
            break;

        case OrderType.FeedPigFindWheat:
            GrabItemFromTownStorage(DropItemType.Wheat, OrderAmmount);
            _villagerController.AddOrder(OrderType.GrowPigDropWheatInPen);
            break;

        case OrderType.MakeMeatFindPig:
            GrabItemFromTownStorage(DropItemType.Piggy, OrderAmmount);
            _villagerController.AddOrder(OrderType.MakeMeatDropPiggyInSlaughterhouse);
            break;

        default:
            throw new ArgumentOutOfRangeException();
        }

        if (orderCompleted)
        {
            CurrentVillagerState = VillagerState.Idle;
        }
    }