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(); } }