2024-09-23 02:00:21 +00:00
|
|
|
using System;
|
2024-10-08 13:44:20 +00:00
|
|
|
using System.Linq;
|
2024-09-23 02:00:21 +00:00
|
|
|
using Sirenix.OdinInspector;
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
namespace BlueWater.Tycoons
|
|
|
|
{
|
|
|
|
[Serializable]
|
|
|
|
public class TycoonStatus
|
|
|
|
{
|
2024-10-08 13:44:20 +00:00
|
|
|
[SerializeField]
|
|
|
|
private int _maxLevel;
|
|
|
|
public int MaxLevel
|
|
|
|
{
|
|
|
|
get => _maxLevel;
|
|
|
|
set => _maxLevel = value;
|
|
|
|
}
|
|
|
|
|
2024-09-30 09:41:55 +00:00
|
|
|
[SerializeField]
|
|
|
|
private int _currentLevel;
|
|
|
|
public int CurrentLevel
|
|
|
|
{
|
|
|
|
get => _currentLevel;
|
|
|
|
set
|
|
|
|
{
|
|
|
|
_currentLevel = value;
|
|
|
|
LevelUp();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-09-23 02:00:21 +00:00
|
|
|
[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
|
|
|
|
{
|
2024-09-30 09:41:55 +00:00
|
|
|
get => _currentExp;
|
2024-09-23 02:00:21 +00:00
|
|
|
set
|
|
|
|
{
|
2024-10-08 13:44:20 +00:00
|
|
|
if (_currentLevel >= _maxLevel) return;
|
|
|
|
|
2024-10-08 06:13:52 +00:00
|
|
|
var previousExp = _currentExp;
|
|
|
|
var maxExp = TycoonManager.Instance.GetCurrentLevelData().RequiredExp;
|
|
|
|
var addedExp = (int)((value - previousExp) * _expMultiplier);
|
|
|
|
var newExp = previousExp + addedExp;
|
|
|
|
|
2024-09-30 09:41:55 +00:00
|
|
|
if (value >= maxExp)
|
2024-10-08 06:13:52 +00:00
|
|
|
{
|
|
|
|
_currentExp = newExp - maxExp;
|
2024-09-30 09:41:55 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2024-10-08 06:13:52 +00:00
|
|
|
_currentExp = newExp;
|
2024-09-30 09:41:55 +00:00
|
|
|
}
|
2024-10-06 23:41:09 +00:00
|
|
|
|
2024-10-08 06:13:52 +00:00
|
|
|
EventManager.OnChangeExp?.Invoke(new ExpData(_currentLevel, previousExp, addedExp));
|
2024-09-23 02:00:21 +00:00
|
|
|
}
|
|
|
|
}
|
2024-10-08 06:13:52 +00:00
|
|
|
|
|
|
|
[SerializeField]
|
|
|
|
private float _expMultiplier;
|
|
|
|
public float ExpMultiplier
|
|
|
|
{
|
|
|
|
get => _expMultiplier;
|
|
|
|
set => _expMultiplier = value;
|
|
|
|
}
|
2024-09-23 02:00:21 +00:00
|
|
|
|
|
|
|
// 보류
|
|
|
|
[SerializeField]
|
|
|
|
private int _currentGold;
|
2024-09-30 09:41:55 +00:00
|
|
|
public int CurrentGold
|
|
|
|
{
|
|
|
|
get => _currentGold;
|
2024-10-06 23:41:09 +00:00
|
|
|
set
|
|
|
|
{
|
2024-10-10 05:44:37 +00:00
|
|
|
_currentGold = value;
|
|
|
|
EventManager.OnChangeGold?.Invoke(value);
|
2024-10-06 23:41:09 +00:00
|
|
|
}
|
2024-09-30 09:41:55 +00:00
|
|
|
}
|
2024-10-08 06:13:52 +00:00
|
|
|
|
|
|
|
[SerializeField]
|
|
|
|
private float _goldMultiplier;
|
|
|
|
public float GoldMultiplier
|
|
|
|
{
|
|
|
|
get => _goldMultiplier;
|
|
|
|
set => _goldMultiplier = value;
|
|
|
|
}
|
2024-09-23 02:00:21 +00:00
|
|
|
|
|
|
|
[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;
|
2024-09-30 12:05:19 +00:00
|
|
|
ingredientController.GarnishBarrel1.OnAmountChanged += UpdateGarnish1;
|
|
|
|
ingredientController.GarnishBarrel2.OnAmountChanged += UpdateGarnish2;
|
2024-10-08 13:44:20 +00:00
|
|
|
|
|
|
|
MaxLevel = int.Parse(TycoonManager.Instance.LevelDataSo.GetData().Last().Value.Idx);
|
2024-10-06 23:41:09 +00:00
|
|
|
CurrentLevel = 1;
|
|
|
|
CurrentGold = 0;
|
|
|
|
CurrentExp = 0;
|
2024-10-08 06:13:52 +00:00
|
|
|
ExpMultiplier = 1;
|
|
|
|
GoldMultiplier = 1;
|
2024-10-06 23:41:09 +00:00
|
|
|
MaxPlayerHealth = GameManager.Instance.CurrentTycoonPlayer.PlayerHealthPoint.MaxHealthPoint;
|
|
|
|
CurrentPlayerHealth = GameManager.Instance.CurrentTycoonPlayer.PlayerHealthPoint.CurrentHealthPoint;
|
|
|
|
PlayerMoveSpeedMultiplier = GameManager.Instance.CurrentTycoonPlayer.TycoonMovement.MoveSpeedMultiplier;
|
2024-09-23 02:00:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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;
|
2024-09-30 12:05:19 +00:00
|
|
|
ingredientController.GarnishBarrel1.OnAmountChanged -= UpdateGarnish1;
|
|
|
|
ingredientController.GarnishBarrel2.OnAmountChanged -= UpdateGarnish2;
|
2024-09-23 02:00:21 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-10-06 23:41:09 +00:00
|
|
|
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;
|
2024-09-30 09:41:55 +00:00
|
|
|
|
|
|
|
private void LevelUp()
|
|
|
|
{
|
|
|
|
// TODO : 레벨업 연출 추가 및 업그레이드 연출
|
|
|
|
var tycoonManager = TycoonManager.Instance;
|
|
|
|
var currentLevelData = tycoonManager.GetCurrentLevelData();
|
|
|
|
switch (currentLevelData.OpenUpgrade)
|
|
|
|
{
|
|
|
|
case "Upgrade0":
|
|
|
|
tycoonManager.CustomerTableController.ShowCustomerTable(0);
|
2024-09-30 12:05:19 +00:00
|
|
|
tycoonManager.TycoonIngredientController.LiquidBarrelA.Activate();
|
2024-09-30 09:41:55 +00:00
|
|
|
break;
|
|
|
|
case "Upgrade1":
|
|
|
|
tycoonManager.CustomerTableController.ShowCustomerTable(1);
|
2024-09-30 12:05:19 +00:00
|
|
|
tycoonManager.TycoonIngredientController.LiquidBarrelB.Activate();
|
2024-09-30 09:41:55 +00:00
|
|
|
break;
|
|
|
|
case "Upgrade2":
|
|
|
|
tycoonManager.CustomerTableController.ShowCustomerTable(2);
|
2024-09-30 12:05:19 +00:00
|
|
|
tycoonManager.TycoonIngredientController.LiquidBarrelC.Activate();
|
2024-09-30 09:41:55 +00:00
|
|
|
break;
|
|
|
|
case "Upgrade3":
|
|
|
|
tycoonManager.CustomerTableController.ShowCustomerTable(3);
|
2024-09-30 12:05:19 +00:00
|
|
|
tycoonManager.TycoonIngredientController.LiquidBarrelD.Activate();
|
2024-09-30 09:41:55 +00:00
|
|
|
break;
|
|
|
|
case "Upgrade4":
|
|
|
|
tycoonManager.CustomerTableController.ShowCustomerTable(4);
|
2024-09-30 12:05:19 +00:00
|
|
|
tycoonManager.TycoonIngredientController.LiquidBarrelE.Activate();
|
2024-09-30 09:41:55 +00:00
|
|
|
break;
|
|
|
|
case "Upgrade5":
|
|
|
|
tycoonManager.CustomerTableController.ShowCustomerTable(5);
|
2024-09-30 12:05:19 +00:00
|
|
|
tycoonManager.TycoonIngredientController.GarnishBarrel1.Activate();
|
2024-09-30 09:41:55 +00:00
|
|
|
break;
|
|
|
|
case "Upgrade6":
|
|
|
|
tycoonManager.CustomerTableController.ShowCustomerTable(6);
|
2024-09-30 12:05:19 +00:00
|
|
|
tycoonManager.TycoonIngredientController.GarnishBarrel2.Activate();
|
2024-09-30 09:41:55 +00:00
|
|
|
break;
|
|
|
|
}
|
2024-10-08 06:45:46 +00:00
|
|
|
|
2024-09-30 09:41:55 +00:00
|
|
|
EventManager.OnLevelUp?.Invoke(currentLevelData);
|
|
|
|
}
|
2024-09-23 02:00:21 +00:00
|
|
|
}
|
|
|
|
}
|