0.3.2.17 버전 업데이트

This commit is contained in:
NTG_Lenovo 2024-10-29 21:17:00 +09:00
parent 3cb6c7b52b
commit 726063fcf6
17 changed files with 3054 additions and 2770 deletions

File diff suppressed because it is too large Load Diff

View File

@ -77,6 +77,7 @@ namespace BlueWater.Npcs.Crews.Bartender
} }
MyBartenderTable.CompleteMakingCocktail(_makingCocktailData); MyBartenderTable.CompleteMakingCocktail(_makingCocktailData);
EventManager.InvokeCocktailCompleted(_makingCocktailData, false);
ResetMission(); ResetMission();
} }
} }

View File

@ -141,8 +141,6 @@ namespace BlueWater.Npcs.Customers
private int _paidAmount; private int _paidAmount;
private int _foodPrice; private int _foodPrice;
private int _tipAmount; private int _tipAmount;
private bool _isQuitting;
// State // State
public StateMachineController<Customer> StateMachineController { get; private set; } public StateMachineController<Customer> StateMachineController { get; private set; }
@ -170,11 +168,6 @@ namespace BlueWater.Npcs.Customers
EventManager.OnGaugeResetCustomers += ResetGauge; EventManager.OnGaugeResetCustomers += ResetGauge;
} }
private void OnApplicationQuit()
{
_isQuitting = true;
}
private void Update() private void Update()
{ {
StateMachineController.UpdateState(this); StateMachineController.UpdateState(this);
@ -303,7 +296,7 @@ namespace BlueWater.Npcs.Customers
IsOrderedSucceed = currentPickupItem.Idx == OrderedCocktailData.Idx; IsOrderedSucceed = currentPickupItem.Idx == OrderedCocktailData.Idx;
IsReceivedItem = true; IsReceivedItem = true;
ServedItem(servedCocktailData); ServedItem(servedCocktailData);
EventManager.InvokeCocktailServedToCustomer(servedCocktailData); EventManager.InvokeCocktailServedToCustomer(servedCocktailData, true);
EventManager.InvokeOrderResult(this, IsOrderedSucceed); EventManager.InvokeOrderResult(this, IsOrderedSucceed);
break; break;
default: default:
@ -335,6 +328,7 @@ namespace BlueWater.Npcs.Customers
IsOrderedSucceed = currentPickupItem.Idx == OrderedCocktailData.Idx; IsOrderedSucceed = currentPickupItem.Idx == OrderedCocktailData.Idx;
IsReceivedItem = true; IsReceivedItem = true;
ServedItem(servedCocktailData); ServedItem(servedCocktailData);
EventManager.InvokeCocktailServedToCustomer(servedCocktailData, false);
serverCrew.BalloonUi.DiscardItem(); serverCrew.BalloonUi.DiscardItem();
serverCrew.ResetMission(); serverCrew.ResetMission();
EventManager.InvokeOrderResult(this, IsOrderedSucceed); EventManager.InvokeOrderResult(this, IsOrderedSucceed);
@ -347,7 +341,7 @@ namespace BlueWater.Npcs.Customers
public bool CanInteractionCrew(Crew crew = null) public bool CanInteractionCrew(Crew crew = null)
{ {
return !IsReceivedItem && CurrentTableSeat; return IsOrderedCocktail();
} }
public virtual void ShowInteractionUi() public virtual void ShowInteractionUi()
@ -470,12 +464,17 @@ namespace BlueWater.Npcs.Customers
public void ResetGauge() public void ResetGauge()
{ {
if (!CurrentTableSeat || IsReceivedItem) return; if (!IsOrderedCocktail()) return;
BalloonUi.ResetGauge(); BalloonUi.ResetGauge();
CurrentBill.ResetGauge(); CurrentBill.ResetGauge();
} }
public bool IsOrderedCocktail()
{
return CurrentTableSeat && !IsReceivedItem;
}
#endregion #endregion
} }
} }

View File

@ -24,18 +24,14 @@ namespace BlueWater.Players.Tycoons
private void Start() private void Start()
{ {
EventManager.OnCocktailStarted += PickupUnfinishedCocktail; EventManager.OnMakeCocktailStarted += PickupUnfinishedCocktail;
EventManager.OnCocktailCompleted += PickupItem; EventManager.OnMakeCocktailCompleted += PickupItem;
EventManager.OnCocktailDiscarded += DiscardItem;
EventManager.OnCocktailServedToCustomer += GiveItem;
} }
private void OnDestroy() private void OnDestroy()
{ {
EventManager.OnCocktailStarted -= PickupUnfinishedCocktail; EventManager.OnMakeCocktailStarted -= PickupUnfinishedCocktail;
EventManager.OnCocktailCompleted -= PickupItem; EventManager.OnMakeCocktailCompleted -= PickupItem;
EventManager.OnCocktailDiscarded -= DiscardItem;
EventManager.OnCocktailServedToCustomer -= GiveItem;
} }
[Button("컴포넌트 초기화")] [Button("컴포넌트 초기화")]
@ -49,8 +45,10 @@ namespace BlueWater.Players.Tycoons
_isUnfinishedCocktailPickedUp = true; _isUnfinishedCocktailPickedUp = true;
} }
public void PickupItem(IPickup item) public void PickupItem(IPickup item, bool isMadePlayer)
{ {
if (!isMadePlayer) return;
if (_isPickedUpItem) if (_isPickedUpItem)
{ {
Debug.Log("이미 아이템을 들고 있습니다."); Debug.Log("이미 아이템을 들고 있습니다.");
@ -64,7 +62,7 @@ namespace BlueWater.Players.Tycoons
_isPickedUpItem = true; _isPickedUpItem = true;
} }
public void GiveItem(IPickup item) public void ServedItem(IPickup item)
{ {
if (!_isPickedUpItem || _currentPickupItem == null) if (!_isPickedUpItem || _currentPickupItem == null)
{ {

View File

@ -1,4 +1,5 @@
using BlueWater.Interfaces; using BlueWater.Interfaces;
using BlueWater.Items;
using BlueWater.Tycoons; using BlueWater.Tycoons;
using BlueWater.Uis; using BlueWater.Uis;
using Sirenix.OdinInspector; using Sirenix.OdinInspector;
@ -93,11 +94,10 @@ namespace BlueWater.Players.Tycoons
TycoonInput.OnMoveInputReceived += TycoonMovement.HandleInputMovement; TycoonInput.OnMoveInputReceived += TycoonMovement.HandleInputMovement;
EventManager.OnDead += Die; EventManager.OnDead += Die;
var balloonUi = InteractionCanvas.BalloonUi; EventManager.OnMakeCocktailStarted += MakeCocktailStarted;
EventManager.OnCocktailStarted += balloonUi.PickupUnfinishedCocktail; EventManager.OnMakeCocktailCompleted += MakeCocktailCompleted;
EventManager.OnCocktailCompleted += balloonUi.SetItemImage; EventManager.OnCocktailDiscarded += DiscardCocktail;
EventManager.OnCocktailDiscarded += balloonUi.DiscardItem; EventManager.OnCocktailServedToCustomer += ServedCocktail;
EventManager.OnCocktailServedToCustomer += balloonUi.GiveItem;
IdleStateMachine = new IdleStateMachine(); IdleStateMachine = new IdleStateMachine();
WalkingStateMachine = new WalkingStateMachine(); WalkingStateMachine = new WalkingStateMachine();
@ -121,11 +121,10 @@ namespace BlueWater.Players.Tycoons
TycoonInput.OnMoveInputReceived -= TycoonMovement.HandleInputMovement; TycoonInput.OnMoveInputReceived -= TycoonMovement.HandleInputMovement;
EventManager.OnDead -= Die; EventManager.OnDead -= Die;
var balloonUi = InteractionCanvas.BalloonUi; EventManager.OnMakeCocktailStarted -= MakeCocktailStarted;
EventManager.OnCocktailStarted -= balloonUi.PickupUnfinishedCocktail; EventManager.OnMakeCocktailCompleted -= MakeCocktailCompleted;
EventManager.OnCocktailCompleted -= balloonUi.SetItemImage; EventManager.OnCocktailDiscarded -= DiscardCocktail;
EventManager.OnCocktailDiscarded -= balloonUi.DiscardItem; EventManager.OnCocktailServedToCustomer -= ServedCocktail;
EventManager.OnCocktailServedToCustomer -= balloonUi.GiveItem;
} }
#endregion #endregion
@ -172,6 +171,34 @@ namespace BlueWater.Players.Tycoons
CurrentStateMachine.EnterState(this); CurrentStateMachine.EnterState(this);
} }
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();
}
#endregion #endregion
} }
} }

View File

@ -120,24 +120,24 @@ namespace BlueWater
} }
// 플레이어 칵테일 제조 시작 이벤트 // 플레이어 칵테일 제조 시작 이벤트
public static Action OnCocktailStarted; public static Action OnMakeCocktailStarted;
public static void InvokeCocktailStarted() public static void InvokeCocktailStarted()
{ {
OnCocktailStarted?.Invoke(); OnMakeCocktailStarted?.Invoke();
} }
// 플레이어 칵테일 제조 완성 이벤트 // 칵테일 제조 완성 이벤트 (bool값은 player가 만들었으면 true, crew가 만들었으면 false)
public static Action<CocktailData> OnCocktailCompleted; public static Action<CocktailData, bool> OnMakeCocktailCompleted;
public static void InvokeCocktailCompleted(CocktailData completedCocktail) public static void InvokeCocktailCompleted(CocktailData completedCocktail, bool isMadePlayer)
{ {
OnCocktailCompleted?.Invoke(completedCocktail); OnMakeCocktailCompleted?.Invoke(completedCocktail, isMadePlayer);
} }
// 플레이어가 들고있는 칵테일 버리기 이벤트 // 플레이어가 들고있는 칵테일 버리기 이벤트
public static Action OnCocktailDiscarded; public static Action<CocktailData, bool> OnCocktailDiscarded;
public static void InvokeCocktailDiscarded() public static void InvokeCocktailDiscarded(CocktailData cocktailData, bool isDiscardedPlayer)
{ {
OnCocktailDiscarded?.Invoke(); OnCocktailDiscarded?.Invoke(cocktailData, isDiscardedPlayer);
} }
// 플레이어가 들고있는 칵테일을 서빙테이블에 올려두는 이벤트 // 플레이어가 들고있는 칵테일을 서빙테이블에 올려두는 이벤트
@ -169,10 +169,10 @@ namespace BlueWater
} }
// 손님이 칵테일을 받을때 이벤트 // 손님이 칵테일을 받을때 이벤트
public static Action<CocktailData> OnCocktailServedToCustomer; public static Action<CocktailData, bool> OnCocktailServedToCustomer;
public static void InvokeCocktailServedToCustomer(CocktailData servedCocktailData) public static void InvokeCocktailServedToCustomer(CocktailData servedCocktailData, bool isServedPlayer)
{ {
OnCocktailServedToCustomer?.Invoke(servedCocktailData); OnCocktailServedToCustomer?.Invoke(servedCocktailData, isServedPlayer);
} }
// 손님이 칵테일을 받을때 결과 이벤트 // 손님이 칵테일을 받을때 결과 이벤트

View File

@ -12,7 +12,7 @@ namespace BlueWater.Tycoons
// 테이블의 칵테일을 가져가는 경우 // 테이블의 칵테일을 가져가는 경우
if (CurrentPickupItem != null) if (CurrentPickupItem != null)
{ {
CurrentTycoonPlayer.TycoonPickupHandler.PickupItem(CurrentPickupItem); CurrentTycoonPlayer.TycoonPickupHandler.PickupItem(CurrentPickupItem, true);
CurrentTycoonPlayer.InteractionCanvas.BalloonUi.SetItemImage(CurrentPickupItem); CurrentTycoonPlayer.InteractionCanvas.BalloonUi.SetItemImage(CurrentPickupItem);
CocktailGlassImage.enabled = false; CocktailGlassImage.enabled = false;
InteractionCanvas.BalloonUi.DiscardItem(); InteractionCanvas.BalloonUi.DiscardItem();

View File

@ -1,4 +1,3 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
using BlueWater.Items; using BlueWater.Items;
using BlueWater.Uis; using BlueWater.Uis;
@ -50,8 +49,10 @@ namespace BlueWater.Tycoons
base.OnEnable(); base.OnEnable();
} }
private void Start() protected override void Start()
{ {
base.Start();
CookGauge.enabled = false; CookGauge.enabled = false;
FireWoodQuantity.enabled = false; FireWoodQuantity.enabled = false;
FoodQuantity.enabled = false; FoodQuantity.enabled = false;
@ -121,7 +122,7 @@ namespace BlueWater.Tycoons
var carriedItemData = CurrentTycoonPlayer.TycoonPickupHandler.GetCurrentPickupItem(); var carriedItemData = CurrentTycoonPlayer.TycoonPickupHandler.GetCurrentPickupItem();
if (carriedItemData.Idx == FireWoodIdx) if (carriedItemData.Idx == FireWoodIdx)
{ {
CurrentTycoonPlayer.TycoonPickupHandler.GiveItem(carriedItemData); CurrentTycoonPlayer.TycoonPickupHandler.ServedItem(carriedItemData);
_currentFireWoodCount++; _currentFireWoodCount++;
} }
} }

View File

@ -64,7 +64,7 @@ namespace BlueWater.Tycoons
// 테이블의 칵테일을 가져가는 경우 // 테이블의 칵테일을 가져가는 경우
if (CurrentPickupItem != null) if (CurrentPickupItem != null)
{ {
CurrentTycoonPlayer.TycoonPickupHandler.PickupItem(CurrentPickupItem); CurrentTycoonPlayer.TycoonPickupHandler.PickupItem(CurrentPickupItem, true);
CurrentTycoonPlayer.InteractionCanvas.BalloonUi.SetItemImage(CurrentPickupItem); CurrentTycoonPlayer.InteractionCanvas.BalloonUi.SetItemImage(CurrentPickupItem);
CocktailGlassImage.enabled = false; CocktailGlassImage.enabled = false;
InteractionCanvas.BalloonUi.DiscardItem(); InteractionCanvas.BalloonUi.DiscardItem();

View File

@ -1,10 +1,15 @@
using BlueWater.Items;
namespace BlueWater.Tycoons namespace BlueWater.Tycoons
{ {
public class TrashCan : InteractionFurniture public class TrashCan : InteractionFurniture
{ {
public override void Interaction() public override void Interaction()
{ {
EventManager.InvokeCocktailDiscarded(); var discardCocktailDataIdx = CurrentTycoonPlayer.TycoonPickupHandler.GetCurrentPickupItem().Idx;
var discardCocktailData = ItemManager.Instance.CocktailDataSo.GetDataByIdx(discardCocktailDataIdx);
EventManager.InvokeCocktailDiscarded(discardCocktailData, true);
} }
public override bool CanInteraction() public override bool CanInteraction()

View File

@ -131,17 +131,26 @@ namespace BlueWater.Tycoons
private IEnumerator FindBartenderCrewCoroutine(Customer orderedCustomer) private IEnumerator FindBartenderCrewCoroutine(Customer orderedCustomer)
{ {
var waitTime = new WaitForSeconds(2f); var waitTime = new WaitForSeconds(2f);
var tycoonIngredientController = TycoonManager.Instance.TycoonIngredientController; var tycoonManager = TycoonManager.Instance;
var tycoonIngredientController = tycoonManager.TycoonIngredientController;
var orderedCocktailData = orderedCustomer.OrderedCocktailData;
yield return new WaitForSeconds(0.5f); yield return new WaitForSeconds(0.5f);
while (true) while (true)
{ {
var orderedCount = tycoonManager.CustomerController.OrderedCocktailCount(orderedCocktailData.Idx);
if (!tycoonManager.TycoonStageController.CanMakingCocktail(orderedCocktailData.Idx, orderedCount))
{
yield return waitTime;
continue;
}
foreach (var element in BartenderCrews) foreach (var element in BartenderCrews)
{ {
if (element.MyBartenderTable.CurrentPickupItem != null || element.IsOnMission) continue; if (element.MyBartenderTable.CurrentPickupItem != null || element.IsOnMission) continue;
var orderedCocktailIngredients = orderedCustomer.OrderedCocktailData.ValidIngredients; var orderedCocktailIngredients = orderedCocktailData.ValidIngredients;
if (!tycoonIngredientController.IsMakingCocktail(orderedCocktailIngredients)) break; if (!tycoonIngredientController.IsMakingCocktail(orderedCocktailIngredients)) break;
if (orderedCustomer.IsReceivedItem || orderedCustomer.IsMatchedServer) yield break; if (orderedCustomer.IsReceivedItem || orderedCustomer.IsMatchedServer) yield break;

View File

@ -1,6 +1,8 @@
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using BlueWater.Interfaces; using BlueWater.Interfaces;
using BlueWater.Items;
using BlueWater.Npcs.Customers; using BlueWater.Npcs.Customers;
using BlueWater.Utility; using BlueWater.Utility;
using Sirenix.OdinInspector; using Sirenix.OdinInspector;
@ -132,5 +134,10 @@ namespace BlueWater.Tycoons
return null; return null;
} }
public int OrderedCocktailCount(string cocktailDataIdx)
{
return InstanceCustomers.Count(element => element.IsOrderedCocktail() && element.OrderedCocktailData.Idx == cocktailDataIdx);
}
} }
} }

View File

@ -54,10 +54,10 @@ namespace BlueWater
private Transform _spawnLocation; private Transform _spawnLocation;
[SerializeField] [SerializeField]
private Vector3 _pushDirection; private Vector3 _pushDirection = new(-3f, -1f, 0f);
[SerializeField] [SerializeField]
private float _pushPower; private float _pushPower = 50;
[Title("Liquid / Garnish")] [Title("Liquid / Garnish")]
[SerializeField, Required, Tooltip("원액 프리팹")] [SerializeField, Required, Tooltip("원액 프리팹")]
@ -67,10 +67,10 @@ namespace BlueWater
private Garnish _garnishObject; private Garnish _garnishObject;
[SerializeField, Tooltip("초당 생성되는 액체 수(ml)")] [SerializeField, Tooltip("초당 생성되는 액체 수(ml)")]
private int _liquidsPerSecond = 80; private int _liquidsPerSecond = 100;
[SerializeField] [SerializeField]
private int _maxLiquidCount = 400; private int _maxLiquidCount = 300;
[SerializeField, Range(0f, 1f), Tooltip("목표 색상으로 변경되는데 걸리는 시간")] [SerializeField, Range(0f, 1f), Tooltip("목표 색상으로 변경되는데 걸리는 시간")]
private float _colorLerpSpeed = 0.5f; private float _colorLerpSpeed = 0.5f;
@ -78,6 +78,10 @@ namespace BlueWater
[SerializeField, Range(1f, 5f), Tooltip("목표 색상 * 밝기")] [SerializeField, Range(1f, 5f), Tooltip("목표 색상 * 밝기")]
private float _colorIntensity = 2f; private float _colorIntensity = 2f;
[Title("도착 지점")]
[SerializeField, Tooltip("도착 지점의 Lerp값")]
private Vector2 _reachedLerpPosition = new(-10.5f, 4f);
[Title("오브젝트 풀링")] [Title("오브젝트 풀링")]
[SerializeField, Tooltip("오브젝트 풀링 최대 개수")] [SerializeField, Tooltip("오브젝트 풀링 최대 개수")]
private int _objectPoolCount = 1000; private int _objectPoolCount = 1000;
@ -90,10 +94,10 @@ namespace BlueWater
private Sprite _playerBalloonImage; private Sprite _playerBalloonImage;
[SerializeField] [SerializeField]
private float _moveToPlayerDuration = 0.5f; private float _moveToPlayerDuration = 0.2f;
[SerializeField] [SerializeField]
private float _moveToCenterDuration = 0.2f; private float _moveToCenterDuration = 0.15f;
[SerializeField] [SerializeField]
private Vector3 _centerPosition = new(-300f, 0f, 0f); private Vector3 _centerPosition = new(-300f, 0f, 0f);
@ -124,6 +128,7 @@ namespace BlueWater
private Color _targetColor; private Color _targetColor;
private Camera _overlayCamera; private Camera _overlayCamera;
private TycoonPlayer _tycoonPlayer; private TycoonPlayer _tycoonPlayer;
private Vector2 _originalReachedPosition;
private Vector3 _lastPlayerPosition; private Vector3 _lastPlayerPosition;
private Vector3 _originalPanelScale; private Vector3 _originalPanelScale;
private Coroutine _movePanelToPlayerInstance; private Coroutine _movePanelToPlayerInstance;
@ -158,6 +163,7 @@ namespace BlueWater
_instanceMaterial = Instantiate(_liquidRenderer.material); _instanceMaterial = Instantiate(_liquidRenderer.material);
_liquidRenderer.material = _instanceMaterial; _liquidRenderer.material = _instanceMaterial;
_originalReachedPosition = _reachedCollider.transform.position;
_originalPanelScale = _liquidPanel.transform.localScale; _originalPanelScale = _liquidPanel.transform.localScale;
_instanceMaterial.SetFloat(LiquidAmountHash, 0f); _instanceMaterial.SetFloat(LiquidAmountHash, 0f);
_timeInterval = 1f / _liquidsPerSecond; _timeInterval = 1f / _liquidsPerSecond;
@ -312,8 +318,10 @@ namespace BlueWater
HidePanel(); HidePanel();
} }
public void ReleaseAllObject(CocktailData cocktailData) public void ReleaseAllObject(CocktailData cocktailData, bool isServedPlayer)
{ {
if (!isServedPlayer) return;
// 리스트 삭제는 뒤에서부터 해야 오류가 없음 // 리스트 삭제는 뒤에서부터 해야 오류가 없음
for (var i = _activeLiquidDatas.Count - 1; i >= 0; i--) for (var i = _activeLiquidDatas.Count - 1; i >= 0; i--)
{ {
@ -341,6 +349,7 @@ namespace BlueWater
_isCompleted = false; _isCompleted = false;
_currentMixedColor = barrel.GetLiquidData().Color; _currentMixedColor = barrel.GetLiquidData().Color;
_instanceMaterial.SetColor(LiquidColorHash, _currentMixedColor * _colorIntensity); _instanceMaterial.SetColor(LiquidColorHash, _currentMixedColor * _colorIntensity);
_reachedCollider.transform.position = _originalReachedPosition;
EventManager.InvokeCocktailStarted(); EventManager.InvokeCocktailStarted();
} }
@ -474,7 +483,7 @@ namespace BlueWater
yield return new WaitForSeconds(1f); yield return new WaitForSeconds(1f);
HidePanel(); HidePanel();
EventManager.InvokeCocktailCompleted(matchingCocktail); EventManager.InvokeCocktailCompleted(matchingCocktail, true);
} }
/// <summary> /// <summary>
@ -508,6 +517,9 @@ namespace BlueWater
_liquidReachedTime = Time.time; _liquidReachedTime = Time.time;
SetCurrentAmount(++_currentLiquidAmount); SetCurrentAmount(++_currentLiquidAmount);
var liquidAmount = Mathf.Clamp(_currentLiquidAmount / _maxLiquidCount, 0f, 1f); var liquidAmount = Mathf.Clamp(_currentLiquidAmount / _maxLiquidCount, 0f, 1f);
var reachedColliderPositionY = Mathf.Lerp(_reachedLerpPosition.x, _reachedLerpPosition.y, liquidAmount);
_reachedCollider.transform.position = new Vector3(_reachedCollider.transform.position.x,
reachedColliderPositionY, _reachedCollider.transform.position.z);
_instanceMaterial.SetFloat(LiquidAmountHash, liquidAmount); _instanceMaterial.SetFloat(LiquidAmountHash, liquidAmount);
_targetColor = MixColorsByTime(); _targetColor = MixColorsByTime();

View File

@ -1,7 +1,7 @@
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using BlueWater.Npcs.Customers; using BlueWater.Items;
using BlueWater.Utility; using BlueWater.Utility;
using Sirenix.OdinInspector; using Sirenix.OdinInspector;
using UnityEngine; using UnityEngine;
@ -13,8 +13,7 @@ namespace BlueWater.Tycoons
[field: SerializeField, Required] [field: SerializeField, Required]
public StageDataSo StageDataSo { get; private set; } public StageDataSo StageDataSo { get; private set; }
[SerializeField] public Dictionary<string, int> InstanceCocktailDatas { get; private set; } = new();
private List<CustomerVisitInfo> _dailyCustomerVisitInfos;
private bool _isClosedTime; private bool _isClosedTime;
private TycoonManager _tycoonManager; private TycoonManager _tycoonManager;
@ -24,20 +23,23 @@ namespace BlueWater.Tycoons
private void Start() private void Start()
{ {
_tycoonManager = TycoonManager.Instance; _tycoonManager = TycoonManager.Instance;
_dailyCustomerVisitInfos = new List<CustomerVisitInfo>();
EventManager.OnInitializedPlayerInput += StartStage; EventManager.OnInitializedPlayerInput += StartStage;
EventManager.OnMakeCocktailCompleted += AddInstanceCocktail;
EventManager.OnCocktailServedToCustomer += RemoveInstanceCocktail;
EventManager.OnCocktailDiscarded += RemoveInstanceCocktail;
} }
private void OnDestroy() private void OnDestroy()
{ {
EventManager.OnInitializedPlayerInput -= StartStage; EventManager.OnInitializedPlayerInput -= StartStage;
EventManager.OnMakeCocktailCompleted -= AddInstanceCocktail;
EventManager.OnCocktailServedToCustomer -= RemoveInstanceCocktail;
EventManager.OnCocktailDiscarded -= RemoveInstanceCocktail;
} }
private void StartStage() private void StartStage()
{ {
_dailyCustomerVisitInfos.Clear();
Utils.StartUniqueCoroutine(this, ref _startStageCoroutineInstance, StartStageCoroutine()); Utils.StartUniqueCoroutine(this, ref _startStageCoroutineInstance, StartStageCoroutine());
EventManager.InvokeTycoonGameStarted(); EventManager.InvokeTycoonGameStarted();
@ -65,14 +67,38 @@ namespace BlueWater.Tycoons
} }
} }
public void RegisterCustomerVisitInfo(CustomerVisitInfo customerVisitInfo) public void AddInstanceCocktail(CocktailData cocktailData, bool isMadePlayer)
{ {
Utils.RegisterList(_dailyCustomerVisitInfos, customerVisitInfo); var idx = cocktailData.Idx;
if (!InstanceCocktailDatas.TryAdd(idx, 1))
{
InstanceCocktailDatas[idx]++;
}
} }
public void UnregisterCustomerVisitInfo(CustomerVisitInfo customerVisitInfo) public void RemoveInstanceCocktail(CocktailData cocktailData, bool isRemovedPlayer)
{ {
Utils.UnregisterList(_dailyCustomerVisitInfos, customerVisitInfo); var idx = cocktailData.Idx;
if (InstanceCocktailDatas.ContainsKey(idx))
{
InstanceCocktailDatas[idx]--;
}
}
public bool CanMakingCocktail(string cocktailDataIdx, int orderedCount)
{
if (!InstanceCocktailDatas.TryGetValue(cocktailDataIdx, out var instanceCount)) return true;
return instanceCount < orderedCount;
}
private void PrintInstanceCocktailDatas()
{
foreach (var element in InstanceCocktailDatas)
{
print($"key : {element.Key}, Value : {element.Value}");
}
print("\n");
} }
} }
} }

View File

@ -104,7 +104,7 @@ namespace BlueWater.Uis
SetEmpty(); SetEmpty();
} }
public void GiveItem(IPickup item) public void ServedItem()
{ {
_isUnfinishedCocktailPickedUp = false; _isUnfinishedCocktailPickedUp = false;
HideUi(); HideUi();

View File

@ -508,38 +508,6 @@ MonoBehaviour:
m_Calls: [] m_Calls: []
m_ActionId: 0dbf1015-499a-43fe-b252-11c232b9a1ae m_ActionId: 0dbf1015-499a-43fe-b252-11c232b9a1ae
m_ActionName: 'Combat/HealthPointMax[/Keyboard/f3]' m_ActionName: 'Combat/HealthPointMax[/Keyboard/f3]'
- m_PersistentCalls:
m_Calls:
- m_Target: {fileID: 1674052485383758547}
m_TargetAssemblyTypeName: BlueWater.Players.Tycoons.TycoonInput, Assembly-CSharp
m_MethodName: OnPour
m_Mode: 0
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
m_ActionId: b02d861a-39ed-4c5e-abd0-7ce3c2a44707
m_ActionName: 'Bar/Pour[/Keyboard/e]'
- m_PersistentCalls:
m_Calls:
- m_Target: {fileID: 1674052485383758547}
m_TargetAssemblyTypeName: BlueWater.Players.Tycoons.TycoonInput, Assembly-CSharp
m_MethodName: OnCancel
m_Mode: 0
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
m_ActionId: 4752dd64-7a31-42ae-bfc9-45a01927bd07
m_ActionName: 'Bar/EscapeBar[/Keyboard/escape]'
- m_PersistentCalls: - m_PersistentCalls:
m_Calls: m_Calls:
- m_Target: {fileID: 1674052485383758547} - m_Target: {fileID: 1674052485383758547}

View File

@ -141,7 +141,7 @@ Rigidbody2D:
m_Mass: 10 m_Mass: 10
m_LinearDamping: 0 m_LinearDamping: 0
m_AngularDamping: 0 m_AngularDamping: 0
m_GravityScale: 3 m_GravityScale: 6
m_Material: {fileID: 6200000, guid: 98be3277bd162b947a951461d0862c30, type: 2} m_Material: {fileID: 6200000, guid: 98be3277bd162b947a951461d0862c30, type: 2}
m_IncludeLayers: m_IncludeLayers:
serializedVersion: 2 serializedVersion: 2
@ -165,6 +165,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: f725398f0fbd88e43b707a988c2b347a, type: 3} m_Script: {fileID: 11500000, guid: f725398f0fbd88e43b707a988c2b347a, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
_spriteRenderer: {fileID: 3772201455671009312} SpriteRenderer: {fileID: 3772201455671009312}
_rigidbody2D: {fileID: 3470010340248184897} Rigidbody2D: {fileID: 3470010340248184897}
_distanceThreshold: 0.5 _distanceThreshold: 0.5