using System; using UnityEngine; public class CashierDesk : BaseInteractableObject { [SerializeField] private ContainerSO _containerSO; [SerializeField] private JobInfoSO _jobInfo; public override void Interact(Player player) { base.Interact(player); if (player.IsHoldContainerItem()) { BuyItems(); } else { // if player work here if (player.JobPosition == _jobInfo.JobPosition) { UIManager.Instance.ShowTimeSliderDialog($"Work", $"Work as {_jobInfo.Description}", OnCancel, OnConfirm); } else { print("You don't work here"); } } } private void BuyItems() { var playerContainer = _player.GetContainerItem(); if (playerContainer.IsSalebleItems()) { var playerItemsList = playerContainer.GetItems(); _player.ClearContainerItem(); float finalPrice = 0; foreach (SellableItemSO item in playerItemsList) { finalPrice += item.Price; } var transform = Instantiate(_containerSO.prefab, _interactionPoint); var containerItem = transform.GetComponent(); if (containerItem == null) { Debug.LogError("Container Item is null"); return; } _player.Pay(finalPrice); foreach (var item in playerContainer.GetItems()) { var foodItemSO = ScriptableObject.CreateInstance(); foodItemSO.ItemName = item.ItemName; foodItemSO.Energy = 0; containerItem.AddItem(foodItemSO); } _player.SetContainerItem(containerItem); } } private void OnCancel() { OnFastForwardEnd(); } float _totalSalary; private void OnConfirm(TimeSpan time) { _totalSalary = (float)(time.TotalHours * _jobInfo.Salary); _player.SetPlayerActing(PlayerStates.Working); TimeManager.Instance.FastForward(time); TimeManager.Instance.OnFastForwardEnd += OnFastForwardEnd; } private void OnFastForwardEnd() { _player.AddMoney(_totalSalary); _player.SetPlayerActing(PlayerStates.Awake); TimeManager.Instance.OnFastForwardEnd -= OnFastForwardEnd; } }