public override void Update()
        {
            WeaponMuzzle muzzle = this.GetMuzzle();

            this.pointShootingRaycast = muzzle.GetPosition();
            this.pointShootingWeapon  = muzzle.GetPosition();

            this.shooter.SetPitch(0f);
            this.aimToVector = muzzle.GetDirection() * this.shooter.currentAmmo.distance;
        }
        public override void Update()
        {
            Camera camera = HookCamera.Instance.Get <Camera>();

            Ray       cursorFromCameraRay = camera.ScreenPointToRay(Input.mousePosition);
            Transform shooterPosition     = this.shooter.transform;

            Plane plane = default(Plane);
            float rayDistance;

            WeaponMuzzle muzzle = this.GetMuzzle();

            this.pointShootingRaycast = muzzle.GetPosition();
            this.pointShootingWeapon  = muzzle.GetPosition();

            switch (this.coordinates)
            {
            case Coordinates.XY:
                plane = new Plane(Vector3.forward, shooterPosition.position);
                this.pointShootingRaycast = new Vector3(
                    this.pointShootingRaycast.x,
                    this.pointShootingRaycast.y,
                    shooterPosition.position.z
                    );
                break;

            case Coordinates.YZ:
                plane = new Plane(Vector3.right, shooterPosition.position);
                this.pointShootingRaycast = new Vector3(
                    shooterPosition.position.x,
                    this.pointShootingRaycast.y,
                    this.pointShootingRaycast.z
                    );
                break;
            }

            Vector3 aimDirection = muzzle.GetDirection();

            if (plane.Raycast(cursorFromCameraRay, out rayDistance))
            {
                Vector3 cursor = cursorFromCameraRay.GetPoint(rayDistance);
                aimDirection = cursor - this.pointShootingRaycast;
            }

            float angle = this.GetPitch(aimDirection);

            this.shooter.SetPitch(angle);
            this.aimToVector = aimDirection.normalized * this.shooter.currentAmmo.distance;

            if (this.character)
            {
                this.character.characterLocomotion.overrideFaceDirection = (
                    CharacterLocomotion.OVERRIDE_FACE_DIRECTION.Target
                    );

                switch (this.coordinates)
                {
                case Coordinates.XY:
                    Vector3 targetPositionXY = (
                        this.shooter.transform.position +
                        (aimDirection.x > 0f ? Vector3.right : Vector3.left)
                        );

                    TargetPosition xyFace = new TargetPosition(TargetPosition.Target.Position);
                    xyFace.targetPosition = targetPositionXY;
                    this.character.characterLocomotion.overrideFaceDirectionTarget = xyFace;
                    break;

                case Coordinates.YZ:
                    Vector3 targetPositionYZ = (
                        this.character.transform.position +
                        (aimDirection.z > 0f ? Vector3.forward : Vector3.back)
                        );

                    TargetPosition yzFace = new TargetPosition(TargetPosition.Target.Position);
                    yzFace.targetPosition = targetPositionYZ;

                    this.character.characterLocomotion.overrideFaceDirection = (
                        CharacterLocomotion.OVERRIDE_FACE_DIRECTION.Target
                        );
                    this.character.characterLocomotion.overrideFaceDirectionTarget = yzFace;
                    break;
                }
            }
        }