|
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; |
|
} |
|
} |
|
|
|
} |
|
} |
|
} |
|
|