private void SelectProductListItem(int id, Selectable listItem) { selectedProductId = id; selectedListItem = listItem; itemType = structure.itemTypes[id]; order = structure.orders.Find(o => o.itemType == itemType); UpdateCraftButton(); UpdateDetails(); }
public override void OnUpdate() { if (!_craftStructure.Value) { citizen.animator.SetFloat("UseAnimationId", 0); Fsm.Event("FAILED"); } if (citizen.skills.Get(itemType.requiredSkill.name) < itemType.requiredSkill.value) { if (citizen == Player.instance) { Utilities.UI.Notifications.instance.Add(itemType.requiredSkill.name + " " + itemType.requiredSkill.value + " required."); } Fsm.Event("FAILED"); } else { citizen.animator.SetFloat("UseAnimationId", 1); timer += Time.deltaTime; if (timer > itemType.blueprint.duration / Mathf.Max(0.1f, citizen.skills.Get(itemType.requiredSkill.name))) { citizen.animator.SetFloat("UseAnimationId", 0); if (itemType.blueprint.MissingResources(craftStructure.storage).Count > 0) { Fsm.Event("FAILED"); } else { for (int i = 0; i < itemType.blueprint.requiredItems.Count; i++) { craftStructure.storage.DestroyItemType(itemType.blueprint.requiredItems[i].type, itemType.blueprint.requiredItems[i].count); } Item crafted = itemType.Spawn(1, craftStructure.transform.position, craftStructure.transform.rotation); craftStructure.craftedItem = crafted; returnItem.Value = crafted.gameObject; CraftStructure.CraftOrder order = craftStructure.orders.Find(o => o.itemType == itemType); if (!order.maintainAmount) { order.count = Mathf.Max(0, order.count - 1); } //craftStructure.SetCurrentItemBlueprint(null); Finish(); } } } }
public override TaskStatus OnUpdate() { if (!craftStructure || !itemType.Value) { citizen.animator.SetFloat("UseAnimationId", 0); return(TaskStatus.Failure); } else { citizen.animator.SetFloat("UseAnimationId", 1); timer += Time.deltaTime; if (timer > itemType.Value.blueprint.duration / Mathf.Max(0.1f, citizen.skills.Get(itemType.Value.requiredSkill.name))) { citizen.animator.SetFloat("UseAnimationId", 0); if (itemType.Value.blueprint.MissingResources(craftStructure.storage).Count > 0) { return(TaskStatus.Failure); } else { for (int i = 0; i < itemType.Value.blueprint.requiredItems.Count; i++) { craftStructure.storage.DestroyItemType(itemType.Value.blueprint.requiredItems[i].type, itemType.Value.blueprint.requiredItems[i].count); } Item crafted = itemType.Value.Spawn(1, craftStructure.transform.position, craftStructure.transform.rotation); craftStructure.craftedItem = crafted; if (returnItem != null) { returnItem.Value = crafted.gameObject; } CraftStructure.CraftOrder order = craftStructure.orders.Find(o => o.itemType == itemType.Value); if (!order.maintainAmount) { order.count = Mathf.Max(0, order.count - 1); } return(TaskStatus.Success); } } } return(TaskStatus.Running); }
public override TaskStatus OnUpdate() { base.OnUpdate(); outCraftedItem.Value = null; outTargetStorage.Value = null; outMissingItemType.Value = null; outMissingCount.Value = 0; outMissingFuel.Value = 0; outItemTypeToCraft.Value = null; CraftStructure craftStructure = citizen.workplace.GetComponent <CraftStructure>(); if (!craftStructure) { return(TaskStatus.Failure); } //Store craftedItem if (craftStructure.craftedItem) { outCraftedItem.Value = craftStructure.craftedItem.gameObject; if (SearchFor.NearestStorageStructure(craftStructure.plot, craftStructure.transform.position, out StorageStructure targetStorage)) { outTargetStorage.Value = targetStorage.gameObject; return(TaskStatus.Success); } else { Debug.LogError("No StorageStructure on plot", craftStructure.plot); return(TaskStatus.Failure); } } else { //Find first uncomplete order CraftStructure.CraftOrder order = craftStructure.GetOrder(); if (order != null) { //craftStructure.currentItemType = order.itemType; //Find what is missing List <ItemCount> missing = order.itemType.blueprint.MissingResources(craftStructure.storage); if (missing.Count > 0) { outMissingItemType.Value = missing[0].type; outMissingCount.Value = missing[0].count; return(TaskStatus.Success); } else { if (craftStructure.IsFueled) { //Refuel outMissingFuel.Value = order.itemType.blueprint.duration - craftStructure.fuel; if (outMissingFuel.Value > 0) { return(TaskStatus.Success); } /* * if (missingFuel > 0) * { * Item fuelItem = null; * Storage sourceStorage = null; * * if (!fuelItem) * SearchFor.FuelInStorageStructures(transform.position, out fuelItem, out sourceStorage); * if (!fuelItem) * SearchFor.FuelInCraftStructures(transform.position, out fuelItem); * if (!fuelItem) * SearchFor.FuelInShopStructures(transform.position, out fuelItem, out sourceStorage); * * if (fuelItem) * citizen.fsm.Store(fuelItem, sourceStorage, craftStructure.storage); * } */ } else { //Craft outItemTypeToCraft.Value = order.itemType; return(TaskStatus.Success); } } } } return(TaskStatus.Success); }