+ 상호작용 오브젝트 외곽선 기능 추가 + 손님 계산 기능 추가 + 손님 계산 시 Ui 출력 및 파티클, 효과 추가 + 대화 시스템 로직 수정 + 테이블 수정 + 캐릭터 스파인 교체
155 lines
4.6 KiB
C#
155 lines
4.6 KiB
C#
using BlueWater.Items;
|
|
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";
|
|
public const string IdleSide = "IdleSide";
|
|
public const string IdleServingDown = "ServingIdleDown";
|
|
public const string IdleServingUpside = "ServingIdleUpside";
|
|
public const string RunDown = "Tycoon/RunDown";
|
|
public const string RunSide = "Tycoon/RunUpSide";
|
|
public const string ServingDown = "Tycoon/ServingDown";
|
|
public const string ServingSide = "Tycoon/ServingUpSide";
|
|
}
|
|
|
|
[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 FoodBalloonUi FoodBalloonUi { 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<Rigidbody>();
|
|
CharacterCollider = GetComponent<CapsuleCollider>();
|
|
PlayerInput = GetComponent<PlayerInput>();
|
|
VisualLook = transform.Find("VisualLook");
|
|
SkeletonAnimation = VisualLook.GetComponent<SkeletonAnimation>();
|
|
FoodBalloonUi = transform.Find("Canvas/FoodBalloonUi").GetComponent<FoodBalloonUi>();
|
|
|
|
TycoonInput = GetComponent<TycoonInput>();
|
|
TycoonMovement = GetComponent<TycoonMovement>();
|
|
TycoonCarryHandler = GetComponent<TycoonCarryHandler>();
|
|
}
|
|
|
|
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 void GetMoney(int money) => DataManager.Instance.GetMoney(money);
|
|
public bool IsCarriedItem() => TycoonCarryHandler.IsCarriedItem();
|
|
|
|
public void CarryItem(int itemIdx, bool isUsingSprite = true, ItemQuality itemQuality = ItemQuality.Normal)
|
|
{
|
|
TycoonCarryHandler.CarryItem(itemIdx, isUsingSprite, itemQuality);
|
|
if (!isUsingSprite)
|
|
{
|
|
FoodBalloonUi.SetFoodImage(GetCurrentItemData().Idx);
|
|
FoodBalloonUi.ShowUi();
|
|
}
|
|
}
|
|
|
|
public void GiveItem()
|
|
{
|
|
TycoonCarryHandler.GiveItem();
|
|
FoodBalloonUi.HideUi();
|
|
FoodBalloonUi.SetFoodImage(null);
|
|
}
|
|
|
|
public void DiscardItem()
|
|
{
|
|
TycoonCarryHandler.DiscardItem();
|
|
FoodBalloonUi.HideUi();
|
|
FoodBalloonUi.SetFoodImage(null);
|
|
}
|
|
public ItemData GetCurrentItemData() => TycoonCarryHandler.GetCurrentItemData();
|
|
|
|
#endregion
|
|
}
|
|
} |