CapersProject/Assets/02.Scripts/BlueWater/Character/Npc/Crew/Bartender/BartenderCrew.cs
2025-02-18 06:47:56 +09:00

126 lines
3.7 KiB
C#

using System;
using DDD.Interfaces;
using DDD.Items;
using DDD.Npcs.Customers;
using DDD.Tycoons;
using UnityEngine;
namespace DDD.Npcs.Crews.Bartender
{
public class BartenderCrew : Crew
{
[SerializeField]
private int _makingCocktailTime = 15;
public BartenderTable MyBartenderTable { get; private set; }
public Customer OrderedCustomer { get; set; }
public bool IsMakingCocktail { get; private set; }
public StateMachineController<BartenderCrew> StateMachineController { get; private set; }
public IStateMachine<BartenderCrew> IdleState { get; private set; }
public IStateMachine<BartenderCrew> MakingCocktailState { get; private set; }
private CocktailData _makingCocktailData;
private bool _isFeverTime;
private float _feverTime;
private float _feverMultiply = 1f;
protected override void Update()
{
StateMachineController.UpdateState(this);
base.Update();
if (_isFeverTime)
{
if (_feverTime > 0f)
{
_feverTime -= Time.deltaTime;
}
else
{
_feverTime = 0f;
_feverMultiply = 1f;
_isFeverTime = false;
}
}
}
public override void Initialize()
{
EventManager.OnCleaningBonus += FeverTime;
IdleState = new IdleState();
MakingCocktailState = new MakingCocktailState();
StateMachineController = new StateMachineController<BartenderCrew>(this, IdleState);
base.Initialize();
}
private void OnDestroy()
{
EventManager.OnCleaningBonus -= FeverTime;
}
public override void ResetMission()
{
CrewInteraction = null;
IsOnMission = false;
BalloonUi.DiscardItem();
OrderedCustomer = null;
IsMakingCocktail = false;
_makingCocktailData = null;
}
public override bool IsCompletedMission()
{
return !OrderedCustomer && !IsMakingCocktail;
}
public void SetBartenderTable(BartenderTable bartenderTable)
{
MyBartenderTable = bartenderTable;
//MyBartenderTable.Active();
}
public void SetOrderedCustomer(Customer orderedCustomer)
{
OrderedCustomer = orderedCustomer;
_makingCocktailData = OrderedCustomer.OrderedCocktailData;
IsOnMission = true;
}
public void MakingCocktail()
{
if (OrderedCustomer && OrderedCustomer.CurrentBill)
{
OrderedCustomer.CurrentBill.BartenderMakingCocktail();
}
var makingTime = (_makingCocktailTime - TycoonManager.Instance.TycoonStatus.BartenderMakingReduction) / _feverMultiply;
BalloonUi.OrderItem(_makingCocktailData.Idx, 0, makingTime);
IsMakingCocktail = true;
}
public void CompletedMakingCocktail()
{
if (OrderedCustomer && OrderedCustomer.CurrentBill)
{
OrderedCustomer.CurrentBill.BartenderCompleteMakingCocktail();
}
//MyBartenderTable.CompleteMakingCocktail(_makingCocktailData);
EventManager.InvokeCocktailCompleted(_makingCocktailData, false);
ResetMission();
}
public void FeverTime(int feverTime, float multiply)
{
_feverTime += feverTime;
_feverMultiply = multiply;
_isFeverTime = true;
}
}
}