81 lines
2.0 KiB
C#
81 lines
2.0 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class CraftingAnvilInteractable : Interactable
|
|
{
|
|
[Header("Events:")]
|
|
[SerializeField] private GameEvent onCraftingAnvilInteracted;
|
|
[SerializeField] private GameEvent onCraftingAnvilReleased;
|
|
|
|
[Header("Listeners:")]
|
|
[SerializeField] private GameEventListener onCraftingUIClosed;
|
|
|
|
bool isUIOpen = false;
|
|
|
|
Transform storedTransform;
|
|
|
|
protected override void Awake()
|
|
{
|
|
base.Awake();
|
|
|
|
onCraftingUIClosed.Response.AddListener(CloseInteraction);
|
|
}
|
|
|
|
public override void Interact(bool melee)
|
|
{
|
|
base.Interact(melee);
|
|
|
|
if (!melee) return;
|
|
|
|
isUIOpen = true;
|
|
onCraftingAnvilInteracted.Raise();
|
|
}
|
|
|
|
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($"crafting {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();
|
|
onCraftingAnvilReleased.Raise();
|
|
Debug.Log($"crafting {this.transform.name} released");
|
|
}
|
|
}
|
|
}
|
|
|
|
private void CloseInteraction()
|
|
{
|
|
isUIOpen = false;
|
|
OnDeFocus();
|
|
}
|
|
}
|