using System; using BlueWater.Players; using BlueWater.Uis; using UnityEngine; namespace BlueWater.Tycoons { [Serializable] public class Pump : InteractionFurniture { [SerializeField] private SpineController _spineController; [SerializeField] private float _playerHoldingTime = 1f; [SerializeField] private PumpingMessage _pumpingMessageObject; [SerializeField] private Vector3 _offset; [SerializeField, Range(0, 1000)] private int addedLiquid = 400; private bool _isPlayerInteracting; protected override void Awake() { base.Awake(); _spineController = GetComponent(); } protected override void Start() { base.Start(); _spineController.PlayAnimation("Idle", true); } private void Update() { if (IsShowing) { var holdingGauge = Mathf.Clamp(HoldingElapsedTime / _playerHoldingTime, 0f, 1f); EventManager.InvokeHoldInteracting(holdingGauge); } if (HoldingElapsedTime > _playerHoldingTime) { HoldingElapsedTime -= _playerHoldingTime; EventManager.InvokeAddBarrels(addedLiquid); var pumpingMessage = Instantiate(_pumpingMessageObject, transform.position + _offset, Quaternion.identity, TycoonUiManager.Instance.WorldCanvas.transform); pumpingMessage.Initialize(addedLiquid); } if (_isPlayerInteracting) { HoldingElapsedTime += Time.deltaTime; } else { if (HoldingElapsedTime > 0f) { HoldingElapsedTime -= Time.deltaTime; } } } public override void Interaction() { _isPlayerInteracting = true; _spineController.PlayAnimation("Run", true); } public override void CancelInteraction() { _isPlayerInteracting = false; _spineController.PlayAnimation("Idle", true); } public override bool CanInteraction() { return !GameManager.Instance.CurrentTycoonPlayer.TycoonPickupHandler.IsPickedUpAnything(); } public override void ShowInteractionUi() { _spineController.EnableCustomMaterial(); EventManager.InvokeShowInteractionUi(InteractionMessage); IsShowing = true; } public override void HideInteractionUi() { _spineController.DisableCustomMaterial(); EventManager.InvokeHideInteractionUi(); IsShowing = false; } } }