private bool DoesBuildingHaveFreeCraftingSlot(Building b) { bool does = true; bool haveRequested = TaskManager.IsAlradyHavingCraftingSlotDepoted(b); if (b.GetCraftSlot() != null) { if (b.GetCraftSlot().IsCrafted() == false) throw new Exception("Can't move away unfinished item"); does = false; if (haveRequested == false) TaskManager.AddTask(new MoveCraftedResourceToDepotTask(b, b.GetCraftSlot())); } return does; }
private void RemoveUsedResources(Building b, WorldObject obj) { if (obj.ElementType == MapElementType.Meal) { int removedCount = 0; Meal meal = (Meal)b.GetCraftSlot(); meal.NutritionalValue = 0; List<MapElementType> toBeRemoved = new List<MapElementType>(); foreach (KeyValuePair<MapElementType, List<WorldObject>> keyValue in b.DepositedWorldObjects) { foreach (WorldObject depobj in keyValue.Value) { if (depobj.GetType().IsSubclassOf(typeof(Food)) && depobj.ElementType != MapElementType.Meal) { if (removedCount == 2) break; Food food = (Food)depobj; // Adds the double of the foods nutritional value to the meal meal.NutritionalValue = meal.NutritionalValue + food.NutritionalValue * TimeRules.MealMultiplier; // Adds the buffs of the food to the meal, and multiply effect by 2 foreach (StatBuff buff in food.StatBuffs) { meal.StatBuffs.Add(new StatBuff() { Type = buff.Type, Value = buff.Value }); } toBeRemoved.Add(depobj.ElementType); removedCount++; } } } foreach (MapElementType type in toBeRemoved) { b.RemoveDepositedWorldObject(type, 1); } //throw new Exception("Two food items should be available to make a meal"); } else { foreach (KeyValuePair<MapElementType, int> resource in obj.NeededForCrafting) { for (int i = 0; i < resource.Value; i++) { b.RemoveDepositedWorldObject(resource.Key, obj.Level); } } } }