using System; using BehaviorDesigner.Runtime.Tasks; using BlueWater.Npcs.Customers; using BlueWater.Uis; using PixelCrushers.DialogueSystem; namespace BlueWater.BehaviorTrees.Actions { [TaskCategory("Custom/Npc/Customer")] [Serializable] public class PayMoney : Conditional { private Customer _customer; private CustomerData _customerData; private BalloonUi _balloonUi; private int _goldIdx; private bool _isPaidMoney; public override void OnAwake() { _customer = GetComponent(); _customerData = _customer.CustomerData; } public override void OnStart() { _balloonUi = _customer.BalloonUi; _balloonUi.PayMoney(_customerData.WaitTime, _customerData.HurryTime); _customer.OnInteraction += HandlePayMoneyInteraction; _customer.RegisterPlayerInteraction(); } public override TaskStatus OnUpdate() { if (_isPaidMoney) { return TaskStatus.Success; } if (_balloonUi.IsWaitTimeOver()) { _customer.OnInteraction -= HandlePayMoneyInteraction; _customer.UnregisterPlayerInteraction(); _balloonUi.CancelOrder(); _balloonUi.HideUi(); // _customer.AddHappyPoint(-3); // if (_customer.HappyPoint <= 0) // { // _foodBalloonUi.CancelOrder(); // _customer.Bark("CancelOrder"); // } return TaskStatus.Failure; } return TaskStatus.Running; } private void HandlePayMoneyInteraction() { var tycoonPlayer = GameManager.Instance.CurrentTycoonPlayer; var foodPrice = _customer.ItemData.Price; float tipCoefficient; string barkName; switch (_customer.HappyPoint) { case >= 3: tipCoefficient = 2f; barkName = "SatisfactoryEvaluation"; break; case >= 2: tipCoefficient = 1.5f; barkName = "MediocreEvaluation"; break; case >= 1: tipCoefficient = 1.1f; barkName = "MediocreEvaluation"; break; default: tipCoefficient = 1f; barkName = "UnsatisfactoryEvaluation"; break; } var tipAmount = foodPrice * (int)tipCoefficient; var paidAmount = foodPrice + tipAmount; tycoonPlayer.GetMoney(paidAmount); _customer.PayMoney(foodPrice, tipAmount); _balloonUi.HideUi(); _customer.OnInteraction -= HandlePayMoneyInteraction; _customer.Bark(barkName, BarkOrder.FirstValid); _customer.UnregisterPlayerInteraction(); _balloonUi.CancelOrder(); _isPaidMoney = true; } } }