BITFALL/Assets/Artists/Scripts/UX/UXPlayerInventory.cs

66 lines
1.5 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using BITFALL.Player.Inventory;
using BITKit;
using BITKit.Entities;
using BITKit.Entities.Player;
using BITKit.UX;
using UnityEngine;
using UnityEngine.UIElements;
namespace BITFALL.UX
{
public class UXPlayerInventory : MonoBehaviour
{
[SerializeReference,SubclassSelector] private IPlayerService playerService;
[Inject] private IPlayerInventory _playerInventory;
[UXBindPath("money-container")]
private VisualElement _moneyContainer;
[UXBindPath("money-label")]
private Label _moneyLabel;
private void Start()
{
BITKit.UX.UXUtils.Inject(this);
playerService.OnPlayerInitialized+=OnPlayerInitialized;
playerService.OnPlayerDisposed+=OnPlayerDisposed;
destroyCancellationToken.Register(() =>
{
playerService.OnPlayerInitialized -= OnPlayerInitialized;
playerService.OnPlayerDisposed -= OnPlayerDisposed;
});
_moneyContainer.RegisterCallback<MouseDownEvent>(x =>
{
if (_playerInventory is null) return;
var drop = x.button switch
{
0 => 500,
1 => 1000,
_ => 0
};
_playerInventory.Drop(new MonetStrace{Money = drop,Detail = "Drop"});
});
}
private void OnPlayerInitialized(Entity obj)
{
obj.Inject(this);
_playerInventory.OnMoneyChanged += OnMoneyChanged;
}
private void OnMoneyChanged(int obj)
{
_moneyLabel.text = $"现金:{obj}";
}
private void OnPlayerDisposed(Entity obj)
{
InjectAttribute.Clear(this);
}
}
}