Пример #1
0
    //---- Crafting ----

    public bool CanCraft(CraftData item)
    {
        CraftCostData cost      = item.GetCraftCost();
        bool          can_craft = true;

        foreach (KeyValuePair <ItemData, int> pair in cost.craft_items)
        {
            if (!PlayerData.Get().HasItem(pair.Key.id, pair.Value))
            {
                can_craft = false; //Dont have required items
            }
        }

        if (cost.craft_near != null && !IsNearGroup(cost.craft_near) && !HasItemInGroup(cost.craft_near))
        {
            can_craft = false; //Not near required construction
        }
        ItemData idata = item.GetItem();

        if (idata != null && !PlayerData.Get().CanTakeItem(idata.id, 1))
        {
            can_craft = false; //Inventory is full
        }
        return(can_craft);
    }
Пример #2
0
    public void CraftPlant(PlantData plant)
    {
        if (CanCraft(plant))
        {
            CraftCostData cost = plant.GetCraftCost();
            foreach (KeyValuePair <ItemData, int> pair in cost.craft_items)
            {
                PlayerData.Get().RemoveItem(pair.Key.id, pair.Value);
                if (pair.Key.container_data)
                {
                    PlayerData.Get().AddItem(pair.Key.container_data.id, pair.Value);
                }
            }
            Vector3 pos = transform.position + transform.forward * 0.4f;
            Plant.Create(plant, pos, 0);

            TheAudio.Get().PlaySFX("craft", plant.craft_sound);
        }
    }
Пример #3
0
    private void RefreshPanel()
    {
        slot.SetSlot(data, 1, true);
        slot.AnimateGain();
        title.text = data.title;
        desc.text  = data.desc;

        foreach (ItemSlot slot in craft_slots)
        {
            slot.Hide();
        }

        CraftCostData cost  = data.GetCraftCost();
        int           index = 0;

        foreach (KeyValuePair <ItemData, int> pair in cost.craft_items)
        {
            if (index < craft_slots.Length)
            {
                ItemSlot slot = craft_slots[index];
                slot.SetSlot(pair.Key, pair.Value, false);
                slot.ShowTitle();
            }
            index++;
        }

        if (index < craft_slots.Length)
        {
            ItemSlot slot = craft_slots[index];
            if (cost.craft_near != null)
            {
                slot.SetSlotCustom(cost.craft_near.icon, cost.craft_near.title, false);
                slot.ShowTitle();
            }
        }

        PlayerCharacter player = PlayerCharacter.Get();

        craft_btn.interactable = player.CanCraft(data);
    }
Пример #4
0
    public CraftCostData GetCraftCost()
    {
        CraftCostData cost = new CraftCostData();

        foreach (ItemData item in craft_items)
        {
            if (!cost.craft_items.ContainsKey(item))
            {
                cost.craft_items[item] = 1;
            }
            else
            {
                cost.craft_items[item] += 1;
            }
        }

        if (craft_near != null)
        {
            cost.craft_near = craft_near;
        }

        return(cost);
    }
Пример #5
0
    public void CompleteCraftConstruction(Vector3 pos)
    {
        if (current_construction != null && !current_construction.IsOverlaping() && CanCraft(current_construction.data))
        {
            ConstructionData item = current_construction.data;
            CraftCostData    cost = item.GetCraftCost();
            foreach (KeyValuePair <ItemData, int> pair in cost.craft_items)
            {
                PlayerData.Get().RemoveItem(pair.Key.id, pair.Value);
                if (pair.Key.container_data)
                {
                    PlayerData.Get().AddItem(pair.Key.container_data.id, pair.Value);
                }
            }

            current_construction.transform.position = pos;
            current_construction.FinishContruction();
            current_construction = null;
            clicked_build        = false;
            auto_move            = false;
            TheUI.Get().CancelSelection();
        }
    }
Пример #6
0
    public void CraftItem(ItemData item)
    {
        if (CanCraft(item) && PlayerData.Get().CanTakeItem(item.id, 1))
        {
            CraftCostData cost = item.GetCraftCost();
            foreach (KeyValuePair <ItemData, int> pair in cost.craft_items)
            {
                PlayerData.Get().RemoveItem(pair.Key.id, pair.Value);
            }
            PlayerData.Get().AddItem(item.id, 1);

            //Gain container back after gaining the craft item
            foreach (KeyValuePair <ItemData, int> pair in cost.craft_items)
            {
                if (pair.Key.container_data)
                {
                    PlayerData.Get().AddItem(pair.Key.container_data.id, pair.Value);
                }
            }

            TheAudio.Get().PlaySFX("craft", item.craft_sound);
        }
    }