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