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