- Added multiple input modes: - Point and click (as before) - WASD + mouse aiming (fully supported) (need QoL for interactables) - Gamepad controls (partial support) - Sprite indexer to avoid gamebreaking issues when serializing sprites - Movement speed penalty on casting abilities instead of fully stopping agent
90 lines
2.3 KiB
C#
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, bool gamepadFocus = false)
|
|
{
|
|
base.OnFocused(playerTransform, playerController, gamepadFocus);
|
|
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();
|
|
}
|
|
}
|