RiftMayhem/Assets/Scripts/Vendor/VendorController.cs
Pedro Gomes 74a9c2b940 Major rework on items
- Refactor items from predefined scriptables only, to template based into item instances
- Added equipped item tooltip to facilitate comparing items
- Added modular craftable items
2025-01-03 19:40:35 +00:00

90 lines
2.3 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class VendorController : Interactable
{
[SerializeField] private VendorData vendorData;
public VendorData VendorData => vendorData;
private VendorDataInstance vendorDataInstance;
public VendorDataInstance VendorDataInstance => vendorDataInstance;
[Header("Events:")]
[SerializeField] private GameEvent_VendorData onVendorInteracted;
[SerializeField] private GameEvent onVendorReleased;
[Header("Listeners:")]
[SerializeField] private GameEventListener onVendorUIClosed;
bool isUIOpen = false;
Transform storedTransform;
protected override void Awake()
{
base.Awake();
vendorDataInstance = new VendorDataInstance(vendorData);
onVendorUIClosed.Response.AddListener(CloseInteraction);
}
public override void Interact(bool melee)
{
base.Interact(melee);
if (!melee) return;
isUIOpen = true;
onVendorInteracted.Raise(vendorDataInstance);
}
public override void OnFocused(Transform playerTransform, PlayerController playerController)
{
base.OnFocused(playerTransform, playerController);
storedTransform = playerTransform;
}
protected override void Update()
{
if (isFocus && !hasInteracted)
{
distance = Vector3.Distance(player.position, interactionTransform.position);
if (distance <= radius)
{
Interact(true);
hasInteracted = true;
Debug.Log($"vendor {this.transform.name} Interacted-Closeup");
}
else if (interactableWithRange)
{
if (distance <= rangedRadius)
{
Interact(false);
hasInteracted = true;
}
}
}
else if (isUIOpen)
{
distance = Vector3.Distance(storedTransform.position, interactionTransform.position);
if (distance >= radius)
{
OnDeFocus();
onVendorReleased.Raise();
Debug.Log($"vendor {this.transform.name} released");
}
}
}
private void CloseInteraction()
{
isUIOpen = false;
OnDeFocus();
}
}