UPF/Assets/Game/Scripts/SellMenu.cs

181 lines
5.5 KiB
C#

using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class SellMenu : MonoBehaviour
{
[Header("Labels")]
public TMP_Text usernameTxt;
public TMP_Text coinsTxt;
public TMP_Text gemsTxt;
[Header("Content")]
public Transform inventoryParent;
public Sprite emptySlotImage;
public Image selectedItemImg;
public string selectedItem;
public Button sellBtn;
[Header("Your Request Material Setter")]
public GameObject yourReqPopup;
public TMP_InputField coinsInput;
public TMP_InputField gemsInput;
public TMP_InputField oxygenInput;
public TMP_InputField metalInput;
public int coinsAmount;
public int gemsAmount;
public int oxygenAmount;
public int metalAmount;
public Sprite coinsIcon;
public Sprite gemsIcon;
public Sprite metalsIcon;
public Sprite oxygenIcon;
public Sprite addIcon;
public Transform resourceIconsParent;
void Start()
{
Refresh();
}
// Update is called once per frame
void Update()
{
}
public void Refresh(){
usernameTxt.text = DBmanager.username;
coinsTxt.text = DBmanager.Coins.ToString();
gemsTxt.text = DBmanager.Gems.ToString();
Button[] inventorySlots = inventoryParent.GetComponentsInChildren<Button>();
if(DBmanager.Inventory == null){Debug.Log("DBmanager isn't inited yet");return;}
if(inventorySlots.Length < DBmanager.Inventory.Count){
Debug.LogError("NEED MORE SLOTS!!!");
return;
}
for(int i =0; i < inventorySlots.Length; i++){
if(i < DBmanager.Inventory.Count){
InventoryItem itemData = Inventory.GetInventoryItem(DBmanager.Inventory[i].Item);
if(itemData==null){
Debug.LogError("Couldn't find data for " + DBmanager.Inventory[i].Item);
}
inventorySlots[i].transform.GetChild(0).GetComponent<Image>().sprite = itemData.image;
inventorySlots[i].interactable=true;
inventorySlots[i].onClick.RemoveAllListeners();
inventorySlots[i].onClick.AddListener(()=>{selectInventoryItem(itemData);});
}else{
inventorySlots[i].transform.GetChild(0).GetComponent<Image>().sprite = emptySlotImage;
inventorySlots[i].interactable=false;
}
}
if(resourceIconsParent.childCount < 4){
Debug.LogError("Not enough buttons for your req section!");
return;
}
int btnIndex = 0;
if(coinsAmount > 0){
SetResourceSlot(btnIndex, coinsIcon, coinsAmount.ToString());
btnIndex++;
}else{
SetResourceSlot(btnIndex, addIcon, "");
}
if(gemsAmount > 0){
SetResourceSlot(btnIndex, gemsIcon, gemsAmount.ToString());
btnIndex++;
}else{
SetResourceSlot(btnIndex, addIcon, "");
}
if(metalAmount > 0){
SetResourceSlot(btnIndex, metalsIcon, metalAmount.ToString());
btnIndex++;
}else{
SetResourceSlot(btnIndex, addIcon, "");
}
if(oxygenAmount > 0){
SetResourceSlot(btnIndex, oxygenIcon, oxygenAmount.ToString());
btnIndex++;
}else{
SetResourceSlot(btnIndex, addIcon, "");
}
for(int i = btnIndex; i < 4; i++){
SetResourceSlot(i, addIcon, "");
}
sellBtn.interactable = (btnIndex > 0 && selectedItemImg.sprite != addIcon);
}
void SetResourceSlot(int btnIndex,Sprite icon, string text){
resourceIconsParent.GetChild(btnIndex).GetChild(0).GetComponent<Image>().sprite = icon;
resourceIconsParent.GetChild(btnIndex).GetComponentInChildren<TMP_Text>(true).text = text;
resourceIconsParent.GetChild(btnIndex).GetComponentInChildren<TMP_Text>(true).gameObject.SetActive((text.Length > 0));
}
public void ShowMaterialAmountSetter(){
// Clear();
metalInput.text = metalAmount.ToString();
oxygenInput.text = oxygenAmount.ToString();
coinsInput.text = coinsAmount.ToString();
gemsInput.text = gemsAmount.ToString();
yourReqPopup.gameObject.SetActive(true);
}
public void OnSetClicked(){
try{
metalAmount = int.Parse(metalInput.text);
oxygenAmount= int.Parse(oxygenInput.text);
coinsAmount = int.Parse(coinsInput.text);
gemsAmount = int.Parse(gemsInput.text);
}catch{
}
yourReqPopup.gameObject.SetActive(false);
Refresh();
}
public void OpenSellMenu(){
Clear();
gameObject.SetActive(true);
}
public void CloseSellMenu(){
gameObject.SetActive(false);
Clear();
}
public void Clear(){
metalAmount = coinsAmount = oxygenAmount = gemsAmount = 0;
selectedItemImg.sprite = addIcon;
selectedItem = "";
// selected
Refresh();
}
public void selectInventoryItem(InventoryItem item){
selectedItemImg.sprite = item.image;
selectedItem = item.itemName;
Refresh();
}
public async void Sell(){
await DBmanager.SellItem(selectedItem, coinsAmount, gemsAmount, metalAmount, oxygenAmount);
Clear();
}
}