88 lines
2.7 KiB
C#
88 lines
2.7 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Concurrent;
|
|
using System.Collections.Generic;
|
|
using BITFALL.Entities.Equipment;
|
|
using UnityEngine;
|
|
using BITKit;
|
|
using BITKit.Entities;
|
|
using BITKit.Entities.Player;
|
|
using BITKit.UX;
|
|
using RotaryHeart.Lib.SerializableDictionary;
|
|
using UnityEngine.Playables;
|
|
using UnityEngine.UIElements;
|
|
|
|
namespace BITFALL
|
|
{
|
|
public class UXEquipSelector : MonoBehaviour
|
|
{
|
|
[SerializeReference,SubclassSelector] private IPlayerService playerService;
|
|
[SerializeField]
|
|
private SerializableDictionaryBase<int, UXImage> dictionary = new();
|
|
[SerializeField] private UXImage currentUXEquip;
|
|
private readonly ConcurrentDictionary<int,IBasicItem> cache=new();
|
|
|
|
[Inject]
|
|
private IPlayerEquipSelector _equipSelector;
|
|
[Inject]
|
|
private IEntityEquipment _entityEquipment;
|
|
public void OnEquip(IBasicItem item)
|
|
{
|
|
if(item is null) return;
|
|
var assets = item.GetAssetable();
|
|
currentUXEquip.SetTexture(assets.RectangleIcon);
|
|
}
|
|
public void OnUnEquip(IBasicItem item)
|
|
{
|
|
currentUXEquip.SetTexture(null);
|
|
}
|
|
public void OnUpdateEquip(IDictionary<int, IBasicItem> maps)
|
|
{
|
|
cache.Clear();
|
|
foreach (var (key, image) in dictionary)
|
|
{
|
|
if (maps.TryGetValue(key, out var item))
|
|
{
|
|
var asset = item.GetAssetable();
|
|
image.SetTexture(asset.RectangleIcon);
|
|
}
|
|
else
|
|
{
|
|
image.SetTexture(null);
|
|
}
|
|
cache.TryAdd(key, item);
|
|
}
|
|
}
|
|
private void Start()
|
|
{
|
|
playerService.OnPlayerInitialized += OnStartLocalPlayer;
|
|
OnUnEquip(null);
|
|
foreach (var x in dictionary)
|
|
{
|
|
x.Value.visualElement.RegisterCallback<MouseDownEvent>(evt =>
|
|
{
|
|
if (evt.button is not 1) return;
|
|
if (cache.TryGetValue(x.Key, out var item))
|
|
{
|
|
_equipSelector.TryDeEquip(item);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
private void OnDestroy()
|
|
{
|
|
playerService.OnPlayerInitialized -= OnStartLocalPlayer;
|
|
}
|
|
private void OnStartLocalPlayer(IEntity entity)
|
|
{
|
|
cache.Clear();
|
|
|
|
entity.Inject(this);
|
|
|
|
_entityEquipment.OnEquip += OnEquip;
|
|
_entityEquipment.OnUnEquip += OnUnEquip;
|
|
_equipSelector.OnUpdateEquip += OnUpdateEquip;
|
|
}
|
|
}
|
|
}
|