52 lines
1.6 KiB
C#
52 lines
1.6 KiB
C#
using UnityEngine;
|
|
|
|
[DisallowMultipleComponent]
|
|
public sealed class CannonControlBinder : MonoBehaviour
|
|
{
|
|
[SerializeField] private NetworkCannonController cannon;
|
|
[SerializeField] private NetworkPhysicalLeverInteractable fireLever;
|
|
[SerializeField] private NetworkButtonInteractable decreaseTimerButton;
|
|
[SerializeField] private NetworkButtonInteractable increaseTimerButton;
|
|
|
|
private bool bound;
|
|
|
|
private void Update()
|
|
{
|
|
if (!bound)
|
|
TryBind();
|
|
}
|
|
|
|
private void OnDisable() => Unbind();
|
|
|
|
private void TryBind()
|
|
{
|
|
if (cannon == null || !cannon.IsSpawned || !cannon.IsServer)
|
|
return;
|
|
|
|
if (fireLever != null)
|
|
fireLever.MaximumReached += HandleFireLever;
|
|
if (decreaseTimerButton != null)
|
|
decreaseTimerButton.Pressed += HandleDecreaseTimer;
|
|
if (increaseTimerButton != null)
|
|
increaseTimerButton.Pressed += HandleIncreaseTimer;
|
|
bound = true;
|
|
}
|
|
|
|
private void Unbind()
|
|
{
|
|
if (!bound)
|
|
return;
|
|
if (fireLever != null)
|
|
fireLever.MaximumReached -= HandleFireLever;
|
|
if (decreaseTimerButton != null)
|
|
decreaseTimerButton.Pressed -= HandleDecreaseTimer;
|
|
if (increaseTimerButton != null)
|
|
increaseTimerButton.Pressed -= HandleIncreaseTimer;
|
|
bound = false;
|
|
}
|
|
|
|
private void HandleFireLever() => cannon.RequestStartCountdown();
|
|
private void HandleDecreaseTimer() => cannon.RequestDecreaseShotDelay();
|
|
private void HandleIncreaseTimer() => cannon.RequestIncreaseShotDelay();
|
|
}
|