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 StateMachineController { get; private set; } public IStateMachine IdleState { get; private set; } public IStateMachine 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(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; } } }