using System; using System.Linq; using Sirenix.OdinInspector; using UnityEngine; namespace BlueWater.Tycoons { [Serializable] public class TycoonStatus { [SerializeField] private int _maxLevel; public int MaxLevel { get => _maxLevel; set => _maxLevel = value; } [SerializeField] private int _currentLevel; public int CurrentLevel { get => _currentLevel; set { _currentLevel = value; LevelUp(); } } [SerializeField] private int _maxPlayerHealth; public int MaxPlayerHealth { get { _maxPlayerHealth = GameManager.Instance.CurrentTycoonPlayer.PlayerHealthPoint.MaxHealthPoint; return _maxPlayerHealth; } set { _maxPlayerHealth = value; GameManager.Instance.CurrentTycoonPlayer.PlayerHealthPoint.SetMaxHealthPoint(value); } } [SerializeField] private int _currentPlayerHealth; public int CurrentPlayerHealth { get { _currentPlayerHealth = GameManager.Instance.CurrentTycoonPlayer.PlayerHealthPoint.CurrentHealthPoint; return _currentPlayerHealth; } set { _currentPlayerHealth = value; GameManager.Instance.CurrentTycoonPlayer.PlayerHealthPoint.SetCurrentHealthPoint(value); } } [SerializeField] private float _playerMoveSpeedMultiplier; public float PlayerMoveSpeedMultiplier { get { _playerMoveSpeedMultiplier = GameManager.Instance.CurrentTycoonPlayer.TycoonMovement.MoveSpeedMultiplier; return _playerMoveSpeedMultiplier; } set { _playerMoveSpeedMultiplier = value; GameManager.Instance.CurrentTycoonPlayer.TycoonMovement.SetMoveSpeedMultiplier(value); } } // 보류 [SerializeField] private int _currentExp; public int CurrentExp { get => _currentExp; set { if (CurrentLevel >= MaxLevel) return; _currentExp = value; } } [SerializeField] private float _expMultiplier; public float ExpMultiplier { get => _expMultiplier; set => _expMultiplier = value; } // 보류 [SerializeField] private int _currentGold; public int CurrentGold { get => _currentGold; set { _currentGold = value; EventManager.InvokeChangeGold(_currentGold); } } [SerializeField] private float _goldMultiplier; public float GoldMultiplier { get => _goldMultiplier; set => _goldMultiplier = value; } [Title("원액")] [SerializeField] private int _currentLiquidAmountA; public int CurrentLiquidAmountA { get { _currentLiquidAmountA = TycoonManager.Instance.TycoonIngredientController.LiquidBarrelA.CurrentAmount; return _currentLiquidAmountA; } set { _currentLiquidAmountA = value; TycoonManager.Instance.TycoonIngredientController.LiquidBarrelA.SetCurrentAmount(value, true); } } [SerializeField] private int _currentLiquidAmountB; public int CurrentLiquidAmountB { get { _currentLiquidAmountB = TycoonManager.Instance.TycoonIngredientController.LiquidBarrelB.CurrentAmount; return _currentLiquidAmountB; } set { _currentLiquidAmountB = value; TycoonManager.Instance.TycoonIngredientController.LiquidBarrelB.SetCurrentAmount(value, true); } } [SerializeField] private int _currentLiquidAmountC; public int CurrentLiquidAmountC { get { _currentLiquidAmountC = TycoonManager.Instance.TycoonIngredientController.LiquidBarrelC.CurrentAmount; return _currentLiquidAmountC; } set { _currentLiquidAmountC = value; TycoonManager.Instance.TycoonIngredientController.LiquidBarrelC.SetCurrentAmount(value, true); } } [SerializeField] private int _currentLiquidAmountD; public int CurrentLiquidAmountD { get { _currentLiquidAmountD = TycoonManager.Instance.TycoonIngredientController.LiquidBarrelD.CurrentAmount; return _currentLiquidAmountD; } set { _currentLiquidAmountD = value; TycoonManager.Instance.TycoonIngredientController.LiquidBarrelD.SetCurrentAmount(value, true); } } [SerializeField] private int _currentLiquidAmountE; public int CurrentLiquidAmountE { get { _currentLiquidAmountE = TycoonManager.Instance.TycoonIngredientController.LiquidBarrelE.CurrentAmount; return _currentLiquidAmountE; } set { _currentLiquidAmountE = value; TycoonManager.Instance.TycoonIngredientController.LiquidBarrelE.SetCurrentAmount(value, true); } } [Title("가니쉬")] [SerializeField] private int _currentGarnishAmount1; public int CurrentGarnishAmount1 { get { _currentGarnishAmount1 = TycoonManager.Instance.TycoonIngredientController.GarnishBarrel1.CurrentAmount; return _currentGarnishAmount1; } set { _currentGarnishAmount1 = value; TycoonManager.Instance.TycoonIngredientController.GarnishBarrel1.SetCurrentAmount(value, true); } } [SerializeField] private int _currentGarnishAmount2; public int CurrentGarnishAmount2 { get { _currentGarnishAmount2 = TycoonManager.Instance.TycoonIngredientController.GarnishBarrel2.CurrentAmount; return _currentGarnishAmount2; } set { _currentGarnishAmount2 = value; TycoonManager.Instance.TycoonIngredientController.GarnishBarrel2.SetCurrentAmount(value, true); } } public void Initialize() { var ingredientController = TycoonManager.Instance.TycoonIngredientController; ingredientController.LiquidBarrelA.OnAmountChanged += UpdateLiquidA; ingredientController.LiquidBarrelB.OnAmountChanged += UpdateLiquidB; ingredientController.LiquidBarrelC.OnAmountChanged += UpdateLiquidC; ingredientController.LiquidBarrelD.OnAmountChanged += UpdateLiquidD; ingredientController.LiquidBarrelE.OnAmountChanged += UpdateLiquidE; ingredientController.GarnishBarrel1.OnAmountChanged += UpdateGarnish1; ingredientController.GarnishBarrel2.OnAmountChanged += UpdateGarnish2; MaxLevel = int.Parse(TycoonManager.Instance.LevelDataSo.GetData().Last().Value.Idx); CurrentLevel = 1; CurrentGold = 0; CurrentExp = 0; ExpMultiplier = 1; GoldMultiplier = 1; MaxPlayerHealth = GameManager.Instance.CurrentTycoonPlayer.PlayerHealthPoint.MaxHealthPoint; CurrentPlayerHealth = GameManager.Instance.CurrentTycoonPlayer.PlayerHealthPoint.CurrentHealthPoint; PlayerMoveSpeedMultiplier = GameManager.Instance.CurrentTycoonPlayer.TycoonMovement.MoveSpeedMultiplier; } private void OnDestroy() { var ingredientController = TycoonManager.Instance.TycoonIngredientController; if (ingredientController != null) { ingredientController.LiquidBarrelA.OnAmountChanged -= UpdateLiquidA; ingredientController.LiquidBarrelB.OnAmountChanged -= UpdateLiquidB; ingredientController.LiquidBarrelC.OnAmountChanged -= UpdateLiquidC; ingredientController.LiquidBarrelD.OnAmountChanged -= UpdateLiquidD; ingredientController.LiquidBarrelE.OnAmountChanged -= UpdateLiquidE; ingredientController.GarnishBarrel1.OnAmountChanged -= UpdateGarnish1; ingredientController.GarnishBarrel2.OnAmountChanged -= UpdateGarnish2; } } private void UpdateLiquidA(int amount) => CurrentLiquidAmountA += amount; private void UpdateLiquidB(int amount) => CurrentLiquidAmountB += amount; private void UpdateLiquidC(int amount) => CurrentLiquidAmountC += amount; private void UpdateLiquidD(int amount) => CurrentLiquidAmountD += amount; private void UpdateLiquidE(int amount) => CurrentLiquidAmountE += amount; private void UpdateGarnish1(int amount) => CurrentGarnishAmount1 += amount; private void UpdateGarnish2(int amount) => CurrentGarnishAmount2 += amount; private void LevelUp() { // TODO : 레벨업 연출 추가 및 업그레이드 연출 var tycoonManager = TycoonManager.Instance; var currentLevelData = tycoonManager.GetCurrentLevelData(); EventManager.InvokeLevelUp(currentLevelData); switch (currentLevelData.OpenUpgrade) { case "Upgrade0": tycoonManager.CustomerTableController.ShowCustomerTable(0); tycoonManager.TycoonIngredientController.LiquidBarrelA.Activate(); break; case "Upgrade1": tycoonManager.CustomerTableController.ShowCustomerTable(1); tycoonManager.TycoonIngredientController.LiquidBarrelB.Activate(); break; case "Upgrade2": tycoonManager.CustomerTableController.ShowCustomerTable(2); tycoonManager.TycoonIngredientController.LiquidBarrelC.Activate(); break; case "Upgrade3": tycoonManager.CustomerTableController.ShowCustomerTable(3); tycoonManager.TycoonIngredientController.LiquidBarrelD.Activate(); break; case "Upgrade4": tycoonManager.CustomerTableController.ShowCustomerTable(4); tycoonManager.TycoonIngredientController.LiquidBarrelE.Activate(); break; case "Upgrade5": tycoonManager.CustomerTableController.ShowCustomerTable(5); tycoonManager.TycoonIngredientController.GarnishBarrel1.Activate(); break; case "Upgrade6": tycoonManager.CustomerTableController.ShowCustomerTable(6); tycoonManager.TycoonIngredientController.GarnishBarrel2.Activate(); break; } } } }