using System; using System.Collections.Generic; using System.Linq; using Sirenix.OdinInspector; using UnityEngine; namespace BlueWater.Tycoons { public enum PassiveCard { None = 0, DoubleServing = 1, RandomChange = 2, GoldAutoGain = 3, MakingBonus = 4, ServingBonus = 5, CleaningBonus = 6 } [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; } [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); } } [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); } } [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); } } [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); } } [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); } } [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); } } [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); } } [SerializeField] private int _playerDashCooldownReduction; public int PlayerDashCooldownReduction { get => _playerDashCooldownReduction; set => _playerDashCooldownReduction = value; } [SerializeField] private float _tipMultiplier; public float TipMultiplier { get => _tipMultiplier; set => _tipMultiplier = value; } [SerializeField] private float _endGoldMultiplier; public float EndGoldMultiplier { get => _endGoldMultiplier; set => _endGoldMultiplier = value; } [SerializeField] private int _customerHurryTimeIncrease; public int CustomerHurryTimeIncrease { get => _customerHurryTimeIncrease; set => _customerHurryTimeIncrease = value; } [SerializeField] private int _barrelAutoIncrease; public int BarrelAutoIncrease { get => _barrelAutoIncrease; set => _barrelAutoIncrease = value; } [SerializeField] private float _serverTipMultiplier; public float ServerTipMultiplier { get => _serverTipMultiplier; set => _serverTipMultiplier = value; } [SerializeField] private int _cleanerCleaningReduction; public int CleanerCleaningReduction { get => _cleanerCleaningReduction; set => _cleanerCleaningReduction = value; } [SerializeField] private int _bartenderMakingReduction; public int BartenderMakingReduction { get => _bartenderMakingReduction; set => _bartenderMakingReduction = value; } [field: ShowInInspector] public HashSet CurrentPassiveCard { get; } = new(6); public void Initialize() { EventManager.OnAddedGold += AddGold; MaxLevel = int.Parse(TycoonManager.Instance.LevelDataSo.GetData().Last().Value.Idx); CurrentLevel = 1; CurrentGold = 0; CurrentExp = 0; ExpMultiplier = 1f; GoldMultiplier = 1f; MaxPlayerHealth = GameManager.Instance.CurrentTycoonPlayer.PlayerHealthPoint.MaxHealthPoint; CurrentPlayerHealth = GameManager.Instance.CurrentTycoonPlayer.PlayerHealthPoint.CurrentHealthPoint; PlayerMoveSpeedMultiplier = GameManager.Instance.CurrentTycoonPlayer.TycoonMovement.MoveSpeedMultiplier; PlayerDashCooldownReduction = 0; TipMultiplier = 0f; EndGoldMultiplier = 0.5f; _customerHurryTimeIncrease = 0; BarrelAutoIncrease = 0; ServerTipMultiplier = 0f; CleanerCleaningReduction = 0; BartenderMakingReduction = 0; } public void Dispose() { EventManager.OnAddedGold -= AddGold; } 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; } } private void AddGold(int addedGold, bool isTip) => CurrentGold += addedGold; public void AddPassiveCard(PassiveCard card) { CurrentPassiveCard.Add(card); } public void RemovePassiveCard(PassiveCard card) { if (CurrentPassiveCard.Contains(card)) { CurrentPassiveCard.Remove(card); } } public bool ContainsPassiveCard(PassiveCard card) => CurrentPassiveCard.Contains(card); } }