예제 #1
0
 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();
 }
예제 #2
0
        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();
                    }
                }
            }
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
        }