public void VisualizeAim(Actor actor)
        {
            if (!WaitingForInput)
            {
                return;
            }

            if (_mouseMove != null && _aimVisualization == null)
            {
                _aimVisualization = actor.Being.Equipment.GetMain().GetVisualization(actor, _mouseMove.NewPos);
                actor.MainBus.Send(new ParticleEvent(_aimVisualization));
            }

            if (_mouseMove != null)
            {
                _aimVisualization.UpdateTarget(_mouseMove.NewPos);
            }
        }
        public override ActorAction GetNextAction(Actor actor)
        {
            if (!actor.ReadyToAct())
            {
                return(null);
            }

            WaitingForInput = true;

            if (_input == null)
            {
                return(null);
            }

            Direction dir = null;

            int key = _input.KeyCode;

            if (key == _joystick.UpCode)
            {
                dir = Direction.UP;
            }
            else if (key == _joystick.RightCode)
            {
                dir = Direction.RIGHT;
            }
            else if (key == _joystick.DownCode)
            {
                dir = Direction.DOWN;
            }
            else if (key == _joystick.LeftCode)
            {
                dir = Direction.LEFT;
            }

            if (dir == null)
            {
                return(null);
            }

            WaitingForInput = false;
            _input          = null;
            _aimVisualization?.Stop();
            _aimVisualization = null;

            if (actor.Parent.CurrentMap.GetObject(actor.Parent.Position + dir)?.GetComponent <IInteractable>() is IInteractable interactable)
            {
                return(new InteractAction(actor, interactable));
            }

            if (actor.Parent.CurrentMap.GetObject(actor.Parent.Position + dir) != null &&
                actor.Being.Equipment.GetMain().CanUse(actor, actor.Parent.Position + dir))
            {
                return(new UseAction(actor, actor.Parent.Position + dir, actor.Being.Equipment.GetMain()));
            }

            if (actor.Parent.CurrentMap.GetObject(actor.Parent.Position + dir) != null && !actor.Parent.CurrentMap.GetObject(actor.Parent.Position + dir).IsWalkable)
            {
                return(null);
            }

            return(new MoveAction(actor, dir));
        }