public override void _Process(float delta)
        {
            InputFlags = InputMoveFlags.None;

            ProcessMovement(delta);
            ProcessUseRay(delta);

            base._Process(delta);
        }
        protected virtual void ProcessMovement(float delta)
        {
            if (Input.IsActionPressed("move_forward"))
            {
                InputFlags |= InputMoveFlags.Move_Forward;
            }
            else if (Input.IsActionPressed("move_backward"))
            {
                InputFlags |= InputMoveFlags.Move_Backward;
            }

            if (Input.IsActionPressed("strafe"))
            {
                InputFlags |= InputMoveFlags.Strafe;
            }

            if (Input.IsActionPressed("turn_left"))
            {
                InputFlags |= InputMoveFlags.Turn_Left;
            }
            else if (Input.IsActionPressed("turn_right"))
            {
                InputFlags |= InputMoveFlags.Turn_Right;
            }

            if (!InputFlags.HasFlag(InputMoveFlags.Strafe))
            {
                float yaw = 0.0f;

                if (InputFlags.HasFlag(InputMoveFlags.Turn_Left))
                {
                    yaw = 1.0f;
                }
                else if (InputFlags.HasFlag(InputMoveFlags.Turn_Right))
                {
                    yaw = -1.0f;
                }

                _camera.Transform = _camera.Transform.Rotated(Vector3.Up, yaw * _turnSpeed * delta);
            }
        }