| using System; |
| using System.Collections; |
| using System.Collections.Generic; |
| using UnityEngine; |
| using UnityEngine.UI; |
|
|
| public class CraftingSystem : MonoBehaviour |
| { |
| public GameObject craftingScreenUI; |
| public GameObject toolsScreenUI,survivalScreenUI, refineScreenUI, constructionScreenUI; |
|
|
| public List<string> inventoryItemList = new List<string>(); |
|
|
| |
| Button toolsBTN, survivalBTN, refineBTN, constructionBTN; |
|
|
| |
| Button craftAxeBTN, craftPlankBTN,craftFoundationBTN, craftWallBTN; |
|
|
| |
| Text AxeReq1, AxeReq2, PlankReq1,FoundationReq1,WallReq1; |
|
|
| public bool isOpen; |
|
|
| |
| public BluePrint AxeBLP = new BluePrint("Axe", 1, 2, "Stone", 3, "Stick", 3); |
| public BluePrint PlankBLP = new BluePrint("Plank",2, 1, "Log", 1, "", 0); |
| public BluePrint FoundationBLP = new BluePrint("Foundation",1, 1, "Plank", 4, "", 0); |
| public BluePrint WallBLP = new BluePrint("Wall",1, 1, "Plank", 2, "", 0); |
|
|
| public static CraftingSystem Instance { get; set; } |
|
|
|
|
| private void Awake() |
| { |
| if (Instance != null && Instance != this) |
| { |
| DestroyObject(gameObject); |
| } |
| else |
| { |
| Instance = this; |
| } |
|
|
| } |
|
|
| |
| void Start() |
| { |
|
|
| isOpen = false; |
| toolsBTN = craftingScreenUI.transform.Find("ToolsButton").GetComponent<Button>(); |
| toolsBTN.onClick.AddListener(delegate { OpenToolsCategory(); }); |
|
|
| survivalBTN = craftingScreenUI.transform.Find("SurvivalButton").GetComponent<Button>(); |
| survivalBTN.onClick.AddListener(delegate { OpenSurvivalCategory(); }); |
|
|
| refineBTN = craftingScreenUI.transform.Find("RefineButton").GetComponent<Button>(); |
| refineBTN.onClick.AddListener(delegate { OpenRefineCategory(); }); |
|
|
| constructionBTN = craftingScreenUI.transform.Find("ConstructionButton").GetComponent<Button>(); |
| constructionBTN.onClick.AddListener(delegate { OpenConstructionCategory(); }); |
|
|
| |
| AxeReq1 = toolsScreenUI.transform.Find("Axe").transform.Find("req1").GetComponent<Text>(); |
| AxeReq2 = toolsScreenUI.transform.Find("Axe").transform.Find("req2").GetComponent<Text>(); |
|
|
| craftAxeBTN = toolsScreenUI.transform.Find("Axe").transform.Find("Button").GetComponent<Button>(); |
| craftAxeBTN.onClick.AddListener(delegate { CraftAnyItem(AxeBLP); }); |
|
|
| |
|
|
| PlankReq1 = refineScreenUI.transform.Find("Plank").transform.Find("req1").GetComponent<Text>(); |
|
|
| craftPlankBTN = refineScreenUI.transform.Find("Plank").transform.Find("Button").GetComponent<Button>(); |
| craftPlankBTN.onClick.AddListener(delegate { CraftAnyItem(PlankBLP); }); |
|
|
| |
|
|
| FoundationReq1 = constructionScreenUI.transform.Find("Foundation").transform.Find("req1").GetComponent<Text>(); |
|
|
| craftFoundationBTN = constructionScreenUI.transform.Find("Foundation").transform.Find("Button").GetComponent<Button>(); |
| craftFoundationBTN.onClick.AddListener(delegate { CraftAnyItem(FoundationBLP); }); |
|
|
| |
|
|
| WallReq1 = constructionScreenUI.transform.Find("Wall").transform.Find("req1").GetComponent<Text>(); |
|
|
| craftWallBTN = constructionScreenUI.transform.Find("Wall").transform.Find("Button").GetComponent<Button>(); |
| craftWallBTN.onClick.AddListener(delegate { CraftAnyItem(WallBLP); }); |
| } |
|
|
|
|
| void OpenToolsCategory() |
| { |
| craftingScreenUI.SetActive(false); |
| toolsScreenUI.SetActive(true); |
| } |
| void OpenSurvivalCategory() |
| { |
| craftingScreenUI.SetActive(false); |
| survivalScreenUI.SetActive(true); |
|
|
| } |
| void OpenRefineCategory() |
| { |
| craftingScreenUI.SetActive(false); |
| refineScreenUI.SetActive(true); |
| } |
| void OpenConstructionCategory() |
| { |
| craftingScreenUI.SetActive(false); |
| constructionScreenUI.SetActive(true); |
| } |
|
|
|
|
| private void CraftAnyItem(BluePrint blueprintToCraft) |
| { |
| SoundManager.Instance.PlaySound(SoundManager.Instance.dropItemSound); |
|
|
| for (int i = 0; i <blueprintToCraft.numberOfItemsToProduce; i++) { |
| InventorySystem.Instance.AddToInventory(blueprintToCraft.itemName); |
| } |
|
|
| InventorySystem.Instance.RemoveItem(blueprintToCraft.Req1, blueprintToCraft.Req1amount); |
| if (blueprintToCraft.numberOfRequiredItems > 1) |
| InventorySystem.Instance.RemoveItem(blueprintToCraft.Req2, blueprintToCraft.Req2amount); |
|
|
| StartCoroutine(calculate()); |
| } |
|
|
| public IEnumerator calculate() |
| { |
| yield return 0; |
| InventorySystem.Instance.ReCalculateList(); |
| RefreshNeededItems(); |
| } |
|
|
| public void RefreshNeededItems() |
| { |
| int stone_count = 0; |
| int stick_count = 0; |
| int log_count = 0; |
| int plank_count = 0; |
|
|
| inventoryItemList = InventorySystem.Instance.itemList; |
|
|
| foreach (string itemName in inventoryItemList) |
| { |
| switch (itemName) |
| { |
| case "Stone": |
| stone_count++; |
| break; |
| case "Stick": |
| stick_count++; |
| break; |
| case "Log": |
| log_count++; |
| break; |
| case "Plank": |
| plank_count++; |
| break; |
| } |
| } |
|
|
| |
| AxeReq1.text = AxeBLP.Req1amount + " Stone [" + stone_count + "]"; |
| AxeReq2.text = AxeBLP.Req2amount + " Stick [" + stick_count + "]"; |
|
|
|
|
| if (stick_count >= AxeBLP.Req1amount && stick_count >= AxeBLP.Req2amount |
| && InventorySystem.Instance.CheckSlotsAvailable(AxeBLP.numberOfItemsToProduce)) |
| { |
| craftAxeBTN.gameObject.SetActive(true); |
| } |
| else |
| { |
| craftAxeBTN.gameObject.SetActive(false); |
| } |
|
|
|
|
| |
| PlankReq1.text = PlankBLP.Req1amount + " Log [" + log_count + "]"; |
|
|
| if (log_count >= PlankBLP.Req1amount |
| && InventorySystem.Instance.CheckSlotsAvailable(PlankBLP.numberOfItemsToProduce)) |
| |
| { |
| craftPlankBTN.gameObject.SetActive(true); |
| } |
| else |
| { |
| craftPlankBTN.gameObject.SetActive(false); |
| } |
| |
| FoundationReq1.text = FoundationBLP.Req1amount + " Plank [" + plank_count + "]"; |
|
|
| if (plank_count >= FoundationBLP.Req1amount |
| && InventorySystem.Instance.CheckSlotsAvailable(FoundationBLP.numberOfItemsToProduce)) |
| |
| { |
| craftFoundationBTN.gameObject.SetActive(true); |
| } |
| else |
| { |
| craftFoundationBTN.gameObject.SetActive(false); |
| } |
| |
| WallReq1.text = WallBLP.Req1amount + " Plank [" + plank_count + "]"; |
|
|
| if (plank_count >= WallBLP.Req1amount |
| && InventorySystem.Instance.CheckSlotsAvailable(WallBLP.numberOfItemsToProduce)) |
| |
| { |
| craftWallBTN.gameObject.SetActive(true); |
| } |
| else |
| { |
| craftWallBTN.gameObject.SetActive(false); |
| } |
|
|
|
|
| } |
|
|
| |
| void Update() |
| { |
| if (Input.GetKeyDown(KeyCode.C)) |
| { |
| if (!isOpen) |
| { |
| craftingScreenUI.SetActive(true); |
| Cursor.lockState = CursorLockMode.None; |
| Cursor.visible = true; |
|
|
| SelectionManager.Instance.DisableSelection(); |
| SelectionManager.Instance.GetComponent<SelectionManager>().enabled = false; |
|
|
| isOpen = true; |
|
|
| } |
| else |
| { |
| craftingScreenUI.SetActive(false); |
| toolsScreenUI.SetActive(false); |
| survivalScreenUI.SetActive(false); |
| refineScreenUI.SetActive(false); |
| constructionScreenUI.SetActive(false); |
|
|
| isOpen = false; |
| if (!InventorySystem.Instance.isOpen) |
| { |
| Cursor.lockState = CursorLockMode.Locked; |
| Cursor.visible = false; |
| SelectionManager.Instance.EnableSelection(); |
| SelectionManager.Instance.GetComponent<SelectionManager>().enabled = true; |
| } |
| } |
|
|
| } |
| } |
| } |
|
|