Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using AnimalSimulator.Gameplay;
- using AnimalSimulator.Gameplay.Input;
- using AnimalSimulator.Installers;
- using UniRx;
- using Zenject;
- using IState = AnimalSimulator.AI.States.IState;
- namespace AnimalSimulator.Targeting
- {
- public class TargetingStateSwitcher : ITickable, IInitializable
- {
- private readonly GameControl _control;
- private readonly TargetAnimalFinder _targetAnimalFinder;
- public readonly Subject<Unit> OnFreeTarget = new Subject<Unit>();
- public readonly Subject<Animal> OnLockTarget = new Subject<Animal>();
- public bool Targeting { get; private set; }
- public TargetingStateSwitcher(GameControl control, TargetAnimalFinder targetAnimalFinder)
- {
- _control = control;
- _targetAnimalFinder = targetAnimalFinder;
- }
- public void Initialize() =>
- FreeState();
- public void Tick()
- {
- if (_control.Camera.LockTarget.triggered)
- ToggleTargetingState();
- }
- private void ToggleTargetingState()
- {
- Targeting = !Targeting;
- if (Targeting)
- {
- Animal potentialTarget = _targetAnimalFinder.PotentialTarget.Value;
- if (potentialTarget == null)
- {
- Targeting = false;
- return;
- }
- OnLockTarget.OnNext(potentialTarget);
- }
- else
- {
- FreeState();
- }
- }
- private void FreeState() =>
- OnFreeTarget.OnNext(Unit.Default);
- public void DisableLock()
- {
- Targeting = false;
- FreeState();
- }
- }
- }
Add Comment
Please, Sign In to add comment