CapersProject/Assets/02.Scripts/Character/Player/Tycoon/TycoonPlayer.cs

203 lines
7.1 KiB
C#
Raw Normal View History

2024-10-14 11:13:08 +00:00
using BlueWater.Interfaces;
2024-10-29 12:17:00 +00:00
using BlueWater.Items;
2024-10-28 09:10:34 +00:00
using BlueWater.Tycoons;
using BlueWater.Uis;
using Sirenix.OdinInspector;
using Spine.Unity;
using UnityEngine;
using UnityEngine.InputSystem;
namespace BlueWater.Players.Tycoons
{
public static class TycoonPlayerSpineAnimation
{
public const string Idle = "Idle";
2024-10-14 11:13:08 +00:00
public const string Walking = "Run";
public const string ServingIdle = "ServingIdle";
public const string Serving = "Serving";
2024-11-04 12:22:07 +00:00
public const string Dash = "Dash";
2024-10-14 11:13:08 +00:00
public const string CleaningFloor = "CleaningFloor";
public const string CleaningTable = "CleaningTable";
public const string MakingCocktail = "BeerMaker";
}
[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]
2024-09-26 11:50:39 +00:00
public InteractionCanvas InteractionCanvas { get; private set; }
2024-10-06 23:41:09 +00:00
[field: SerializeField]
public SpineController SpineController { get; private set; }
2024-09-23 02:00:21 +00:00
[field: SerializeField]
public PlayerHealthPoint PlayerHealthPoint { get; private set; }
[field: SerializeField]
public TycoonInput TycoonInput { get; private set; }
[field: SerializeField]
public TycoonMovement TycoonMovement { get; private set; }
[field: SerializeField]
2024-09-10 10:52:32 +00:00
public TycoonPickupHandler TycoonPickupHandler { get; private set; }
2024-10-14 11:13:08 +00:00
public bool IsCleaningFloor { get; set; }
public bool IsCleaningTable { get; set; }
public bool IsMakingCocktail { get; set; }
// State
2024-11-04 12:22:07 +00:00
public StateMachineController<TycoonPlayer> StateMachineController { get; private set; }
public IStateMachine<TycoonPlayer> IdleState { get; private set; }
public IStateMachine<TycoonPlayer> WalkingState { get; private set; }
public IStateMachine<TycoonPlayer> DashState { get; private set; }
public IStateMachine<TycoonPlayer> ServingIdleState { get; private set; }
public IStateMachine<TycoonPlayer> ServingState { get; private set; }
public IStateMachine<TycoonPlayer> CleaningFloorState { get; private set; }
public IStateMachine<TycoonPlayer> CleaningTableState { get; private set; }
public IStateMachine<TycoonPlayer> MakingCocktailState { get; private set; }
2024-10-14 11:13:08 +00:00
#endregion
// Unity events
#region Unity events
private void Awake()
{
InitializeComponents();
if (!GameManager.Instance.CurrentTycoonPlayer)
{
GameManager.Instance.SetCurrentTycoonPlayer(this);
}
}
private void Start()
{
2024-10-14 11:13:08 +00:00
TycoonInput.OnMoveInputReceived += TycoonMovement.HandleInputMovement;
2024-11-04 12:22:07 +00:00
TycoonInput.OnDashInputReceived += Dash;
2024-10-14 11:13:08 +00:00
EventManager.OnDead += Die;
2024-10-29 12:17:00 +00:00
EventManager.OnMakeCocktailCompleted += MakeCocktailCompleted;
EventManager.OnCocktailDiscarded += DiscardCocktail;
EventManager.OnCocktailServedToCustomer += ServedCocktail;
2024-10-14 11:13:08 +00:00
2024-11-04 12:22:07 +00:00
IdleState = new IdleState();
WalkingState = new WalkingState();
DashState = new DashState();
ServingIdleState = new ServingIdleState();
ServingState = new ServingState();
CleaningFloorState = new CleaningFloorState();
CleaningTableState = new CleaningTableState();
MakingCocktailState = new MakingCocktailState();
2024-10-14 11:13:08 +00:00
2024-11-04 12:22:07 +00:00
StateMachineController = new StateMachineController<TycoonPlayer>(this, IdleState);
2024-10-14 11:13:08 +00:00
}
private void Update()
{
2024-11-04 12:22:07 +00:00
StateMachineController.UpdateState(this);
}
private void OnDestroy()
{
2024-10-14 11:13:08 +00:00
TycoonInput.OnMoveInputReceived -= TycoonMovement.HandleInputMovement;
2024-11-04 12:22:07 +00:00
TycoonInput.OnDashInputReceived -= Dash;
2024-10-14 11:13:08 +00:00
EventManager.OnDead -= Die;
2024-10-29 12:17:00 +00:00
EventManager.OnMakeCocktailCompleted -= MakeCocktailCompleted;
EventManager.OnCocktailDiscarded -= DiscardCocktail;
EventManager.OnCocktailServedToCustomer -= ServedCocktail;
}
#endregion
// Initialize methods
#region Initialize methods
[Button("컴포넌트 초기화")]
private void InitializeComponents()
{
Rigidbody = GetComponent<Rigidbody>();
CharacterCollider = GetComponent<CapsuleCollider>();
PlayerInput = GetComponent<PlayerInput>();
VisualLook = transform.Find("VisualLook");
SkeletonAnimation = VisualLook.GetComponent<SkeletonAnimation>();
2024-09-26 11:50:39 +00:00
InteractionCanvas = transform.GetComponentInChildren<InteractionCanvas>();
2024-10-06 23:41:09 +00:00
SpineController = GetComponent<SpineController>();
2024-09-23 02:00:21 +00:00
PlayerHealthPoint = GetComponent<PlayerHealthPoint>();
TycoonInput = GetComponent<TycoonInput>();
TycoonMovement = GetComponent<TycoonMovement>();
2024-09-10 10:52:32 +00:00
TycoonPickupHandler = GetComponent<TycoonPickupHandler>();
2024-09-26 11:50:39 +00:00
var renderer = VisualLook.GetComponent<Renderer>();
renderer.sortingLayerName = "Default";
renderer.sortingOrder = 5;
}
#endregion
// Methods
#region Methods
2024-10-06 23:41:09 +00:00
private void Die()
{
2024-11-05 12:27:46 +00:00
var percent = 0.5f + TycoonManager.Instance.TycoonStatus.EndGoldMultiplier;
var saveGold = (int)(TycoonManager.Instance.TycoonStatus.CurrentGold * percent);
2024-10-28 09:10:34 +00:00
ES3.Save("Gold", saveGold);
}
2024-10-29 12:17:00 +00:00
public void MakeCocktailCompleted(CocktailData cocktailData, bool isMadePlayer)
{
if (!isMadePlayer) return;
InteractionCanvas.BalloonUi.SetItemImage(cocktailData);
}
public void DiscardCocktail(CocktailData cocktailData, bool isDiscardedPlayer)
{
if (!isDiscardedPlayer) return;
TycoonPickupHandler.DiscardItem();
InteractionCanvas.BalloonUi.DiscardItem();
}
public void ServedCocktail(CocktailData cocktailData, bool isServedPlayer)
{
if (!isServedPlayer) return;
TycoonPickupHandler.ServedItem(cocktailData);
2024-11-04 12:22:07 +00:00
InteractionCanvas.BalloonUi.DiscardItem();
}
private void Dash()
{
if (!TycoonMovement.CanDash()) return;
StateMachineController.TransitionToState(DashState, this);
TycoonMovement.Dash();
2024-10-29 12:17:00 +00:00
}
#endregion
}
}