using BlueWater.Interfaces; using Sirenix.OdinInspector; using UnityEngine; namespace BlueWater.Tycoons { public abstract class InteractionFurniture : MonoBehaviour, IPlayerInteraction { [field: SerializeField] public Transform Transform { get; private set; } [field: SerializeField] public Canvas InteractionCanvas { get; private set; } [field: SerializeField] public Transform InteractionUi { get; private set; } [field: SerializeField] public bool EnableInteraction { get; private set; } = true; private bool _isQuitting; protected virtual void Awake() { InitializeComponents(); } protected virtual void Start() { if (EnableInteraction) { GameManager.Instance.CurrentTycoonPlayer.TycoonInput.RegisterPlayerInteraction(this); } } private void OnApplicationQuit() { _isQuitting = true; } protected virtual void OnDestroy() { if (_isQuitting) return; if (EnableInteraction) { GameManager.Instance.CurrentTycoonPlayer.TycoonInput.UnregisterPlayerInteraction(this); } } [Button("컴포넌트 초기화")] protected virtual void InitializeComponents() { Transform = transform; InteractionCanvas = transform.Find("InteractionCanvas").GetComponent(); InteractionCanvas.GetComponent().worldCamera = Camera.main; InteractionUi = InteractionCanvas.transform.Find("InteractionUi"); InteractionUi.localScale = Vector3.one * (1 / transform.localScale.x); } public abstract void Interaction(); public void ShowInteractionUi() { if (!InteractionCanvas) return; InteractionCanvas.gameObject.SetActive(true); } public void HideInteractionUi() { if (!InteractionCanvas) return; InteractionCanvas.gameObject.SetActive(false); } } }