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;
|
2024-07-20 11:32:54 +00:00
|
|
|
using BlueWater.Uis;
|
2024-06-06 11:07:07 +00:00
|
|
|
using Sirenix.OdinInspector;
|
|
|
|
using Spine.Unity;
|
|
|
|
using UnityEngine;
|
|
|
|
using UnityEngine.InputSystem;
|
|
|
|
|
|
|
|
namespace BlueWater.Players.Tycoons
|
|
|
|
{
|
2024-07-20 11:32:54 +00:00
|
|
|
public static class TycoonPlayerSpineAnimation
|
2024-06-07 17:31:08 +00:00
|
|
|
{
|
2024-07-20 11:32:54 +00:00
|
|
|
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";
|
|
|
|
public const string CleaningFloor = "CleaningFloor";
|
|
|
|
public const string CleaningTable = "CleaningTable";
|
|
|
|
public const string MakingCocktail = "BeerMaker";
|
2024-06-07 17:31:08 +00:00
|
|
|
}
|
|
|
|
|
2024-07-08 20:06:22 +00:00
|
|
|
[DefaultExecutionOrder(-1)]
|
2024-06-06 11:07:07 +00:00
|
|
|
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; }
|
|
|
|
|
2024-07-20 11:32:54 +00:00
|
|
|
[field: SerializeField]
|
2024-09-26 11:50:39 +00:00
|
|
|
public InteractionCanvas InteractionCanvas { get; private set; }
|
2024-07-20 11:32:54 +00:00
|
|
|
|
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; }
|
|
|
|
|
2024-06-06 11:07:07 +00:00
|
|
|
[field: SerializeField]
|
|
|
|
public TycoonInput TycoonInput { get; private set; }
|
|
|
|
|
|
|
|
[field: SerializeField]
|
|
|
|
public TycoonMovement TycoonMovement { get; private set; }
|
|
|
|
|
2024-07-02 18:27:56 +00:00
|
|
|
[field: SerializeField]
|
2024-09-10 10:52:32 +00:00
|
|
|
public TycoonPickupHandler TycoonPickupHandler { get; private set; }
|
2024-07-02 18:27:56 +00:00
|
|
|
|
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-10-22 12:41:31 +00:00
|
|
|
public IStateMachine<TycoonPlayer> CurrentStateMachine { get; private set; }
|
|
|
|
public IStateMachine<TycoonPlayer> IdleStateMachine { get; private set; }
|
|
|
|
public IStateMachine<TycoonPlayer> WalkingStateMachine { get; private set; }
|
|
|
|
public IStateMachine<TycoonPlayer> ServingIdleStateMachine { get; private set; }
|
|
|
|
public IStateMachine<TycoonPlayer> ServingStateMachine { get; private set; }
|
|
|
|
public IStateMachine<TycoonPlayer> CleaningFloorStateMachine { get; private set; }
|
|
|
|
public IStateMachine<TycoonPlayer> CleaningTableStateMachine { get; private set; }
|
|
|
|
public IStateMachine<TycoonPlayer> MakingCocktailStateMachine { get; private set; }
|
2024-10-14 11:13:08 +00:00
|
|
|
|
2024-06-06 11:07:07 +00:00
|
|
|
#endregion
|
|
|
|
|
|
|
|
// Unity events
|
|
|
|
#region Unity events
|
|
|
|
|
|
|
|
private void Awake()
|
|
|
|
{
|
|
|
|
InitializeComponents();
|
2024-07-02 18:27:56 +00:00
|
|
|
|
|
|
|
if (!GameManager.Instance.CurrentTycoonPlayer)
|
|
|
|
{
|
|
|
|
GameManager.Instance.SetCurrentTycoonPlayer(this);
|
|
|
|
}
|
2024-06-06 11:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
private void Start()
|
|
|
|
{
|
2024-10-14 11:13:08 +00:00
|
|
|
TycoonInput.OnMoveInputReceived += TycoonMovement.HandleInputMovement;
|
|
|
|
|
|
|
|
EventManager.OnDead += Die;
|
2024-10-29 12:17:00 +00:00
|
|
|
EventManager.OnMakeCocktailStarted += MakeCocktailStarted;
|
|
|
|
EventManager.OnMakeCocktailCompleted += MakeCocktailCompleted;
|
|
|
|
EventManager.OnCocktailDiscarded += DiscardCocktail;
|
|
|
|
EventManager.OnCocktailServedToCustomer += ServedCocktail;
|
2024-10-14 11:13:08 +00:00
|
|
|
|
2024-10-22 12:41:31 +00:00
|
|
|
IdleStateMachine = new IdleStateMachine();
|
|
|
|
WalkingStateMachine = new WalkingStateMachine();
|
|
|
|
ServingIdleStateMachine = new ServingIdleStateMachine();
|
|
|
|
ServingStateMachine = new ServingStateMachine();
|
|
|
|
CleaningFloorStateMachine = new CleaningFloorStateMachine();
|
|
|
|
CleaningTableStateMachine = new CleaningTableStateMachine();
|
|
|
|
MakingCocktailStateMachine = new MakingCocktailStateMachine();
|
2024-10-14 11:13:08 +00:00
|
|
|
|
2024-10-22 12:41:31 +00:00
|
|
|
CurrentStateMachine = IdleStateMachine;
|
|
|
|
CurrentStateMachine.EnterState(this);
|
2024-10-14 11:13:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
private void Update()
|
|
|
|
{
|
2024-10-22 12:41:31 +00:00
|
|
|
CurrentStateMachine.UpdateState(this);
|
2024-06-06 11:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
private void OnDestroy()
|
|
|
|
{
|
2024-10-14 11:13:08 +00:00
|
|
|
TycoonInput.OnMoveInputReceived -= TycoonMovement.HandleInputMovement;
|
|
|
|
|
|
|
|
EventManager.OnDead -= Die;
|
2024-10-29 12:17:00 +00:00
|
|
|
EventManager.OnMakeCocktailStarted -= MakeCocktailStarted;
|
|
|
|
EventManager.OnMakeCocktailCompleted -= MakeCocktailCompleted;
|
|
|
|
EventManager.OnCocktailDiscarded -= DiscardCocktail;
|
|
|
|
EventManager.OnCocktailServedToCustomer -= ServedCocktail;
|
2024-06-06 11:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#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-06-06 11:07:07 +00:00
|
|
|
|
2024-10-06 23:41:09 +00:00
|
|
|
SpineController = GetComponent<SpineController>();
|
2024-09-23 02:00:21 +00:00
|
|
|
PlayerHealthPoint = GetComponent<PlayerHealthPoint>();
|
2024-06-06 11:07:07 +00:00
|
|
|
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;
|
2024-06-06 11:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
// Methods
|
|
|
|
#region Methods
|
2024-10-06 23:41:09 +00:00
|
|
|
|
|
|
|
private void Die()
|
|
|
|
{
|
2024-10-28 09:10:34 +00:00
|
|
|
var saveGold = TycoonManager.Instance.TycoonStatus.CurrentGold / 2;
|
|
|
|
ES3.Save("Gold", saveGold);
|
2024-06-06 11:07:07 +00:00
|
|
|
}
|
2024-10-14 11:13:08 +00:00
|
|
|
|
2024-10-22 12:41:31 +00:00
|
|
|
public void TransitionToState(IStateMachine<TycoonPlayer> newStateMachine)
|
2024-10-14 11:13:08 +00:00
|
|
|
{
|
2024-10-22 12:41:31 +00:00
|
|
|
CurrentStateMachine.ExitState(this);
|
|
|
|
CurrentStateMachine = newStateMachine;
|
|
|
|
CurrentStateMachine.EnterState(this);
|
2024-10-14 11:13:08 +00:00
|
|
|
}
|
2024-06-06 11:07:07 +00:00
|
|
|
|
2024-10-29 12:17:00 +00:00
|
|
|
public void MakeCocktailStarted()
|
|
|
|
{
|
|
|
|
InteractionCanvas.BalloonUi.PickupUnfinishedCocktail();
|
|
|
|
}
|
|
|
|
|
|
|
|
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);
|
|
|
|
InteractionCanvas.BalloonUi.ServedItem();
|
|
|
|
}
|
|
|
|
|
2024-06-06 11:07:07 +00:00
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
}
|