Trade menu WIP
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -515,19 +515,14 @@ public class DBmanager : MonoBehaviour
|
|||||||
|
|
||||||
public async static void RemoveInventoryItem(string item)
|
public async static void RemoveInventoryItem(string item)
|
||||||
{
|
{
|
||||||
InventoryEntry itemToRemove = null;
|
List<InventoryEntry> temp_inventory = inventory;
|
||||||
|
inventory = new List<InventoryEntry>();
|
||||||
|
foreach(InventoryEntry entry in temp_inventory){
|
||||||
|
if(entry.Item == item){continue;}
|
||||||
|
inventory.Add(entry);
|
||||||
|
}
|
||||||
|
|
||||||
foreach(InventoryEntry entry in inventory){
|
if(inventory.Count == temp_inventory.Count){Debug.LogError("No item was removed from inventory");}
|
||||||
if(entry.Item == item){
|
|
||||||
itemToRemove = entry;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(itemToRemove!=null){
|
|
||||||
inventory.Remove(itemToRemove);
|
|
||||||
}else{
|
|
||||||
Debug.LogError("No entry to remove from inventory");
|
|
||||||
}
|
|
||||||
|
|
||||||
await UpdateInventoryToServer();
|
await UpdateInventoryToServer();
|
||||||
OnStateChanged.Invoke();
|
OnStateChanged.Invoke();
|
||||||
@@ -563,4 +558,41 @@ public class DBmanager : MonoBehaviour
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public async static Task SellItem(string item, int coins_amount, int gems_amount, int metals_amount, int oxygen_amount){
|
||||||
|
|
||||||
|
//Insert new trade entry to server
|
||||||
|
WWWForm form = new WWWForm();
|
||||||
|
form.AddField("name", username);
|
||||||
|
form.AddField("item", item);
|
||||||
|
form.AddField("coins", coins_amount);
|
||||||
|
form.AddField("gems", gems_amount);
|
||||||
|
form.AddField("metals", metals_amount);
|
||||||
|
form.AddField("oxygen", oxygen_amount);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
using (UnityWebRequest www = UnityWebRequest.Post(phpRoot + "add_trade.php", form))
|
||||||
|
{
|
||||||
|
var operation = www.SendWebRequest();
|
||||||
|
while (!operation.isDone)
|
||||||
|
{
|
||||||
|
await Task.Yield();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (www.downloadHandler.text == "0")
|
||||||
|
{
|
||||||
|
RemoveInventoryItem(item);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.Log("Response : " + www.downloadHandler.text);
|
||||||
|
Debug.LogWarning("Failed to add trade entry");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
OnStateChanged.Invoke();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ public static class Inventory
|
|||||||
public static InventoryItem GetInventoryItem(string itemName)
|
public static InventoryItem GetInventoryItem(string itemName)
|
||||||
{
|
{
|
||||||
Object[] shopItems = Resources.LoadAll("ScriptableObjects/ShopItems");
|
Object[] shopItems = Resources.LoadAll("ScriptableObjects/ShopItems");
|
||||||
Debug.Log("Searching thru " + shopItems.Length + " SOs");
|
// Debug.Log("Searching thru " + shopItems.Length + " SOs");
|
||||||
foreach (Object itemObj in shopItems)
|
foreach (Object itemObj in shopItems)
|
||||||
{
|
{
|
||||||
InventoryItem item = itemObj as InventoryItem;
|
InventoryItem item = itemObj as InventoryItem;
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ public class SellMenu : MonoBehaviour
|
|||||||
gemsTxt.text = DBmanager.Gems.ToString();
|
gemsTxt.text = DBmanager.Gems.ToString();
|
||||||
|
|
||||||
Button[] inventorySlots = inventoryParent.GetComponentsInChildren<Button>();
|
Button[] inventorySlots = inventoryParent.GetComponentsInChildren<Button>();
|
||||||
|
if(DBmanager.Inventory == null){Debug.Log("DBmanager isn't inited yet");return;}
|
||||||
if(inventorySlots.Length < DBmanager.Inventory.Count){
|
if(inventorySlots.Length < DBmanager.Inventory.Count){
|
||||||
Debug.LogError("NEED MORE SLOTS!!!");
|
Debug.LogError("NEED MORE SLOTS!!!");
|
||||||
return;
|
return;
|
||||||
@@ -173,8 +173,8 @@ public class SellMenu : MonoBehaviour
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void Sell(){
|
public async void Sell(){
|
||||||
DBmanager.RemoveInventoryItem(selectedItem);
|
await DBmanager.SellItem(selectedItem, coinsAmount, gemsAmount, metalAmount, oxygenAmount);
|
||||||
Clear();
|
Clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
188
Assets/Game/Scripts/TradeMenu.cs
Normal file
188
Assets/Game/Scripts/TradeMenu.cs
Normal file
@@ -0,0 +1,188 @@
|
|||||||
|
using UnityEngine.UI;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.Networking;
|
||||||
|
using TMPro;
|
||||||
|
|
||||||
|
public class TradeMenu : MonoBehaviour
|
||||||
|
{
|
||||||
|
public Transform tradeListParent;
|
||||||
|
public GameObject tradeListItem;
|
||||||
|
|
||||||
|
public TMP_Text coinsTxt;
|
||||||
|
public TMP_Text gemsTxt;
|
||||||
|
public List<GameObject> pooledEntries;
|
||||||
|
public List<TradeRequest> trades;
|
||||||
|
[Header("Selected Trade Data")]
|
||||||
|
public TradeRequest selectedTrade=null;
|
||||||
|
public TMP_Text sellerNameTxt;
|
||||||
|
public GameObject coinsItem;
|
||||||
|
public GameObject gemsItem;
|
||||||
|
public GameObject metalsItem;
|
||||||
|
public GameObject oxygenItem;
|
||||||
|
public Image itemImg;
|
||||||
|
public Button acceptBtn;
|
||||||
|
void Start()
|
||||||
|
{
|
||||||
|
pooledEntries= new List<GameObject>();
|
||||||
|
pooledEntries.Add(tradeListItem);
|
||||||
|
Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update is called once per frame
|
||||||
|
void Update()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool refreshing = false;
|
||||||
|
public async void Refresh(){
|
||||||
|
refreshing = true;
|
||||||
|
//Clean existing entries
|
||||||
|
foreach(GameObject entry in pooledEntries){entry.SetActive(false);}
|
||||||
|
coinsTxt.text = DBmanager.Coins.ToString();
|
||||||
|
gemsTxt.text = DBmanager.Gems.ToString();
|
||||||
|
selectedTrade=null;
|
||||||
|
// if(selectedTrade==null){
|
||||||
|
coinsItem.SetActive(false);
|
||||||
|
gemsItem.SetActive(false);
|
||||||
|
metalsItem.SetActive(false);
|
||||||
|
oxygenItem.SetActive(false);
|
||||||
|
acceptBtn.interactable=false;
|
||||||
|
itemImg.sprite = null;
|
||||||
|
//}
|
||||||
|
|
||||||
|
using (UnityWebRequest www = UnityWebRequest.Get(DBmanager.phpRoot + "get_trades.php"))
|
||||||
|
{
|
||||||
|
var operation = www.SendWebRequest();
|
||||||
|
while (!operation.isDone)
|
||||||
|
{
|
||||||
|
await Task.Yield();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (www.downloadHandler.text.ToLower().Contains("0 results"))
|
||||||
|
{
|
||||||
|
Debug.Log("No trade requests for now");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
string[] splitChars = {"<td>"};
|
||||||
|
string[] data = www.downloadHandler.text.Split(splitChars,System.StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
trades = new List<TradeRequest>();
|
||||||
|
foreach(string row in data){
|
||||||
|
try{
|
||||||
|
TradeRequest trade = JsonConvert.DeserializeObject<TradeRequest>(row);
|
||||||
|
trades.Add(trade);
|
||||||
|
}catch{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Log($"Added {trades.Count} trades from {data.Length} entries");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Populate Trade Entries in list
|
||||||
|
|
||||||
|
|
||||||
|
//Fill pool if exceeds
|
||||||
|
if(trades.Count > pooledEntries.Count){
|
||||||
|
for(int i =0; i < trades.Count - pooledEntries.Count; i++){
|
||||||
|
GameObject newEntry = Instantiate(tradeListItem, tradeListParent);
|
||||||
|
newEntry.SetActive(false);
|
||||||
|
pooledEntries.Add(newEntry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Set pooled items
|
||||||
|
for(int i = 0; i < trades.Count;i++){
|
||||||
|
TradeRequest trade = trades[i];
|
||||||
|
InventoryItem item = Inventory.GetInventoryItem(trade.item);
|
||||||
|
if(item ==null){Debug.LogError("Couldn't find any inventory item for " + trade.item); continue;}
|
||||||
|
pooledEntries[i].SetActive(true);
|
||||||
|
pooledEntries[i].transform.GetChild(0).GetComponent<Image>().sprite = item.image;
|
||||||
|
pooledEntries[i].GetComponentInChildren<TMPro.TMP_Text>().text = trade.item;
|
||||||
|
pooledEntries[i].GetComponent<Button>().onClick.RemoveAllListeners();
|
||||||
|
pooledEntries[i].GetComponent<Button>().onClick.AddListener(()=>{SelectTrade(trade.id);});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
refreshing=false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SelectTrade(TradeRequest trade){
|
||||||
|
SelectTrade(trade.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SelectTrade(int id){
|
||||||
|
selectedTrade = null;
|
||||||
|
foreach(TradeRequest trade in trades){
|
||||||
|
if(trade.id == id){
|
||||||
|
selectedTrade = trade;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(selectedTrade==null){Debug.Log("No matching trade request");return;}
|
||||||
|
InventoryItem item = Inventory.GetInventoryItem(selectedTrade.item);
|
||||||
|
itemImg.sprite = item.image;
|
||||||
|
|
||||||
|
#region setResource
|
||||||
|
if(selectedTrade.coins > 0){
|
||||||
|
coinsItem.SetActive(true);
|
||||||
|
coinsItem.GetComponentInChildren<TMP_Text>().text = selectedTrade.coins.ToString();
|
||||||
|
}else{
|
||||||
|
coinsItem.SetActive(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(selectedTrade.gems > 0){
|
||||||
|
gemsItem.SetActive(true);
|
||||||
|
gemsItem.GetComponentInChildren<TMP_Text>().text = selectedTrade.gems.ToString();
|
||||||
|
}else{
|
||||||
|
gemsItem.SetActive(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(selectedTrade.metals > 0){
|
||||||
|
metalsItem.SetActive(true);
|
||||||
|
metalsItem.GetComponentInChildren<TMP_Text>().text = selectedTrade.metals.ToString();
|
||||||
|
}else{
|
||||||
|
metalsItem.SetActive(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(selectedTrade.oxygen > 0){
|
||||||
|
oxygenItem.SetActive(true);
|
||||||
|
oxygenItem.GetComponentInChildren<TMP_Text>().text = selectedTrade.oxygen.ToString();
|
||||||
|
}else{
|
||||||
|
oxygenItem.SetActive(false);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
sellerNameTxt.text = selectedTrade.seller;
|
||||||
|
|
||||||
|
acceptBtn.interactable = (DBmanager.Coins >= selectedTrade.coins) && (DBmanager.Gems >= selectedTrade.gems) && (DBmanager.Metal >= selectedTrade.metals) && (DBmanager.Oxygen >= selectedTrade.oxygen);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void Show(){
|
||||||
|
gameObject.SetActive(true);
|
||||||
|
Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Close(){
|
||||||
|
gameObject.SetActive(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[System.Serializable]
|
||||||
|
public class TradeRequest{
|
||||||
|
public int id;
|
||||||
|
public string seller;
|
||||||
|
public string item;
|
||||||
|
public int coins;
|
||||||
|
public int gems;
|
||||||
|
public int metals;
|
||||||
|
public int oxygen;
|
||||||
|
}
|
||||||
11
Assets/Game/Scripts/TradeMenu.cs.meta
Normal file
11
Assets/Game/Scripts/TradeMenu.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a4b0bf84dcc55de4d86461943e750aff
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
Reference in New Issue
Block a user