Files
beyond/Assets/ThirdParty/Invector-3rdPersonController/ItemManager/Scripts/vEquipItemToArea.cs
2024-11-20 15:21:28 +01:00

92 lines
3.0 KiB
C#

using Invector.vCharacterController;
using UnityEngine;
namespace Invector.vItemManager
{
public class vEquipItemToArea : MonoBehaviour
{
public vItemWindowDisplay itemWindow;
public AreaToEquip[] areasToEquip;
public GenericInput cancelInput = new GenericInput("Escape", "B", "B");
public UnityEngine.Events.UnityEvent onEquip;
public UnityEngine.Events.UnityEvent onCancel;
[System.Serializable]
public class AreaToEquip
{
[Tooltip("Target EquipArea to Equip")]
public vEquipArea area;
[Tooltip("Target EquipSlot of the EquipArea to Equip")]
public int slotIndex;
[Tooltip("Optional button to equip on press")]
public UnityEngine.UI.Button optionalButton;
[Tooltip("Input to equip on press")]
public GenericInput input = new GenericInput("Alpha 1", "B", "B");
internal void CheckInput(vItem item,UnityEngine.Events.UnityEvent onEquip)
{
if(input.GetButtonDown())
{
Equip(item);
onEquip?.Invoke();
}
}
internal void Equip(vItem item)
{
if (area) area.AddItemToEquipSlot(slotIndex, item);
}
}
protected UnityEngine.Events.UnityAction onEquipAction;
private void Start()
{
onEquipAction = () => { onEquip.Invoke(); };
for(int i=0;i<areasToEquip.Length;i++)
{
if(areasToEquip[i].optionalButton)
{
AreaToEquip areaToEquip = areasToEquip[i];
areasToEquip[i].optionalButton.onClick.AddListener(() =>
{
Equip(areaToEquip);
});
}
}
}
protected virtual void Update()
{
if(itemWindow && itemWindow.currentSelectedSlot && itemWindow.currentSelectedSlot.item)
{
for (int i = 0; i < areasToEquip.Length; i++)
{
areasToEquip[i].CheckInput(itemWindow.currentSelectedSlot.item, onEquip);
}
}
if(cancelInput.GetButtonDown())
{
onCancel.Invoke();
}
}
protected virtual void Equip(AreaToEquip areaToEquip)
{
if (itemWindow && itemWindow.currentSelectedSlot && itemWindow.currentSelectedSlot.item)
{
areaToEquip.Equip(itemWindow.currentSelectedSlot.item);
onEquip.Invoke();
}
}
public virtual void Equip(int index)
{
if (index < areasToEquip.Length)
{
AreaToEquip areaToEquip = areasToEquip[index];
Equip(areaToEquip);
}
}
}
}