128 lines
3.2 KiB
C#
128 lines
3.2 KiB
C#
using System.Collections.Generic;
|
|
using UIWidgets;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace UIWidgetsSamples.Shops
|
|
{
|
|
public class HarborShop : MonoBehaviour
|
|
{
|
|
private Trader Harbor;
|
|
|
|
[SerializeField]
|
|
private HarborListView TradeView;
|
|
|
|
[SerializeField]
|
|
private Text TradeTotal;
|
|
|
|
[SerializeField]
|
|
private Button BuyButton;
|
|
|
|
private Trader Player;
|
|
|
|
[SerializeField]
|
|
private Text PlayerMoney;
|
|
|
|
private void Start()
|
|
{
|
|
Harbor = new Trader(false);
|
|
Player = new Trader(false);
|
|
Init();
|
|
BuyButton.onClick.AddListener(Trade);
|
|
Harbor.OnItemsChange += UpdateTraderItems;
|
|
Player.OnItemsChange += UpdateTraderItems;
|
|
Player.OnMoneyChange += UpdatePlayerMoneyInfo;
|
|
UpdateTraderItems();
|
|
UpdatePlayerMoneyInfo();
|
|
}
|
|
|
|
public void Init()
|
|
{
|
|
Harbor.Money = -1;
|
|
Harbor.PriceFactor = 1f;
|
|
Harbor.Inventory.Clear();
|
|
List<Item> list = new List<Item>();
|
|
list.Add(new Item("Wood", 100));
|
|
list.Add(new Item("Wheat", 30));
|
|
list.Add(new Item("Fruits", 0));
|
|
list.Add(new Item("Sugar", 20));
|
|
list.Add(new Item("Metal", 40));
|
|
list.Add(new Item("Cotton", 0));
|
|
list.Add(new Item("Silver", 25));
|
|
list.Add(new Item("Gold", 55));
|
|
list.Add(new Item("Cocoa", 10));
|
|
list.Add(new Item("Coffee", 7));
|
|
list.Add(new Item("Tobacco", 20));
|
|
List<Item> items = list;
|
|
Harbor.Inventory.AddRange(items);
|
|
Player.Money = 5000;
|
|
Player.PriceFactor = 0.5f;
|
|
Player.Inventory.Clear();
|
|
list = new List<Item>();
|
|
list.Add(new Item("Wood", 50));
|
|
list.Add(new Item("Cocoa", 100));
|
|
list.Add(new Item("Metal", 20));
|
|
list.Add(new Item("Sugar", 10));
|
|
List<Item> items2 = list;
|
|
Player.Inventory.AddRange(items2);
|
|
}
|
|
|
|
public void UpdateTotal()
|
|
{
|
|
HarborOrder harborOrder = new HarborOrder(TradeView.DataSource);
|
|
TradeTotal.text = harborOrder.Total().ToString();
|
|
}
|
|
|
|
private ObservableList<HarborOrderLine> CreateOrderLines(Trader harbor, Trader player)
|
|
{
|
|
return harbor.Inventory.Convert(delegate(Item item)
|
|
{
|
|
Item item2 = player.Inventory.Find((Item x) => x.Name == item.Name);
|
|
return new HarborOrderLine(item, Prices.GetPrice(item, harbor.PriceFactor), Prices.GetPrice(item, player.PriceFactor), item.Count, (item2 != null) ? item2.Count : 0);
|
|
});
|
|
}
|
|
|
|
private void UpdateTraderItems()
|
|
{
|
|
TradeView.DataSource = CreateOrderLines(Harbor, Player);
|
|
}
|
|
|
|
private void UpdatePlayerMoneyInfo()
|
|
{
|
|
PlayerMoney.text = Player.Money.ToString();
|
|
}
|
|
|
|
private void Trade()
|
|
{
|
|
HarborOrder harborOrder = new HarborOrder(TradeView.DataSource);
|
|
if (Player.CanBuy(harborOrder))
|
|
{
|
|
Harbor.Sell(harborOrder);
|
|
Player.Buy(harborOrder);
|
|
}
|
|
else
|
|
{
|
|
string message = string.Format("Not enough money to buy items. Available: {0}; Required: {1}", Player.Money, harborOrder.Total());
|
|
Notify.Template("NotifyTemplateSimple").Show(message, 3f, null, null, null, null, NotifySequence.First, 0.3f, true);
|
|
}
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
if (BuyButton != null)
|
|
{
|
|
BuyButton.onClick.RemoveListener(Trade);
|
|
}
|
|
if (Harbor != null)
|
|
{
|
|
Harbor.OnItemsChange -= UpdateTraderItems;
|
|
}
|
|
if (Player != null)
|
|
{
|
|
Player.OnItemsChange -= UpdateTraderItems;
|
|
Player.OnMoneyChange -= UpdatePlayerMoneyInfo;
|
|
}
|
|
}
|
|
}
|
|
}
|