77 lines
1.7 KiB
C#
77 lines
1.7 KiB
C#
|
using System;
|
||
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using System.Linq;
|
||
|
using BITFALL.Entities.Inventory;
|
||
|
using BITKit;
|
||
|
using BITKit.Entities.Player;
|
||
|
using UnityEngine;
|
||
|
|
||
|
namespace BITFALL.Trading
|
||
|
{
|
||
|
public class WorldTrader : MonoBehaviour,ITrader
|
||
|
{
|
||
|
public static int GlobalCredit
|
||
|
{
|
||
|
get => _GlobalCredit;
|
||
|
set => _GlobalCredit = Mathf.Clamp(value, 0, 5000);
|
||
|
}
|
||
|
private static int _GlobalCredit;
|
||
|
|
||
|
public int Credit
|
||
|
{
|
||
|
get => GlobalCredit;
|
||
|
set => GlobalCredit = value;
|
||
|
}
|
||
|
public IBasicItem[] Items=> inventory.ToArray();
|
||
|
|
||
|
[SerializeReference,SubclassSelector] private IPlayerService _playerService;
|
||
|
[SerializeField] private ScriptableItem[] items;
|
||
|
|
||
|
private readonly List<IBasicItem> inventory = new();
|
||
|
|
||
|
private void Start()
|
||
|
{
|
||
|
foreach (var x in items)
|
||
|
{
|
||
|
inventory.Add(x.Clone().As<IBasicItem>());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void Trade(IBasicItem[] priceItems, IBasicItem[] tradeItems)
|
||
|
{
|
||
|
if (!_playerService.LocalPlayer) return;
|
||
|
if(_playerService.LocalPlayer.TryGetComponent<IEntityInventory>(out var playerInventory) is false) return;
|
||
|
|
||
|
|
||
|
var check = priceItems.Sum(x => x.Value);
|
||
|
var price = tradeItems.Sum(x => x.Value);
|
||
|
|
||
|
GlobalCredit -= price;
|
||
|
GlobalCredit += check - price;
|
||
|
|
||
|
foreach (var x in priceItems)
|
||
|
{
|
||
|
playerInventory.Remove(x);
|
||
|
}
|
||
|
foreach (var x in tradeItems)
|
||
|
{
|
||
|
inventory.Remove(x);
|
||
|
playerInventory.Add(x.Clone().As<IBasicItem>())
|
||
|
; }
|
||
|
foreach (var x in priceItems)
|
||
|
{
|
||
|
inventory.Add(x);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public bool AllowTrade(IBasicItem[] priceItems, IBasicItem[] tradeItems)
|
||
|
{
|
||
|
var money = priceItems.Sum(x => x.Value);
|
||
|
var price = tradeItems.Sum(x => x.Value);
|
||
|
return money >= price;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|