using BlueWater.Items; using Sirenix.OdinInspector; using Spine.Unity; using UnityEngine; using UnityEngine.InputSystem; namespace BlueWater.Players.Tycoons { public enum TycoonPlayerSpineAnimation { idle = 0, run } [DefaultExecutionOrder(-1)] public class TycoonPlayer : MonoBehaviour { // Variables #region Variables // Components [field: SerializeField] public Rigidbody Rigidbody { get; private set; } [field: SerializeField] public CapsuleCollider CharacterCollider { get; private set; } [field: SerializeField] public PlayerInput PlayerInput { get; private set; } [field: SerializeField] public Transform VisualLook { get; private set; } [field: SerializeField] public SkeletonAnimation SkeletonAnimation { get; private set; } [field: SerializeField] public TycoonInput TycoonInput { get; private set; } [field: SerializeField] public TycoonMovement TycoonMovement { get; private set; } [field: SerializeField] public TycoonCarryHandler TycoonCarryHandler { get; private set; } #endregion // Unity events #region Unity events private void Awake() { InitializeComponents(); InitializeChileComponents(); if (!GameManager.Instance.CurrentTycoonPlayer) { GameManager.Instance.SetCurrentTycoonPlayer(this); } } private void Start() { SubscribeEvents(); } private void OnDestroy() { UnSubscribeEvents(); } #endregion // Initialize methods #region Initialize methods [Button("컴포넌트 초기화")] private void InitializeComponents() { Rigidbody = GetComponent(); CharacterCollider = GetComponent(); PlayerInput = GetComponent(); VisualLook = transform.Find("VisualLook"); SkeletonAnimation = VisualLook.GetComponent(); TycoonInput = GetComponent(); TycoonMovement = GetComponent(); TycoonCarryHandler = GetComponent(); } private void InitializeChileComponents() { TycoonMovement.InitializeComponents(Rigidbody, VisualLook); } #endregion // Methods #region Methods private void SubscribeEvents() { // Input TycoonInput.OnMoveInputReceived += TycoonMovement.HandleInputMovement; } private void UnSubscribeEvents() { // Input TycoonInput.OnMoveInputReceived -= TycoonMovement.HandleInputMovement; } // Wrapping public bool IsCarriedItem() => TycoonCarryHandler.IsCarriedItem(); public void CarryItem(int itemIdx, ItemQuality? itemQuality = null) => TycoonCarryHandler.CarryItem(itemIdx, itemQuality); public void GiveItem() => TycoonCarryHandler.GiveItem(); public void DiscardItem() => TycoonCarryHandler.DiscardItem(); public ItemData GetCurrentItemData() => TycoonCarryHandler.GetCurrentItemData(); #endregion } }