using UnityEngine; namespace OnlyScove.Scripts { public abstract class BaseInteractable : MonoBehaviour, IInteractable { [SerializeField] protected ObjectInteraction interactionData; private float lastInteractTime; public virtual string InteractionPrompt => interactionData != null ? interactionData.promptText : "Interact"; public virtual void OnInteract(PlayerStateMachine player) { if (Time.time < lastInteractTime + (interactionData != null ? interactionData.interactionCooldown : 0f)) return; lastInteractTime = Time.time; // Play sound if assigned if (interactionData != null && interactionData.interactionSound != null) { AudioSource.PlayClipAtPoint(interactionData.interactionSound, transform.position); } // Spawn VFX if assigned if (interactionData != null && interactionData.interactionVFX != null) { Instantiate(interactionData.interactionVFX, transform.position, Quaternion.identity); } PerformInteraction(player); } protected abstract void PerformInteraction(PlayerStateMachine player); } }