示例#1
0
        public void ResetCamera(NodeAddedEvent evt, AimingIdleStateNode weapon, AimingCameraNode cameraNode)
        {
            ShaftAimingCameraComponent   shaftAimingCamera   = cameraNode.shaftAimingCamera;
            CameraTransformDataComponent cameraTransformData = cameraNode.cameraTransformData;
            CameraComponent camera = cameraNode.camera;
            Transform       root   = cameraNode.cameraRootTransform.Root;

            root.SetPositionSafe(cameraTransformData.Data.Position);
            root.SetRotationSafe(cameraTransformData.Data.Rotation);
            Entity entity = cameraNode.Entity;

            entity.RemoveComponent <ShaftAimingCameraComponent>();
            entity.AddComponent <ShaftAimingCameraFOVRecoveringComponent>();
            entity.AddComponent <ApplyCameraTransformComponent>();
        }
示例#2
0
        public unsafe void UpdateCameraAtWorkingState(WeaponRotationUpdateShaftAimingCameraEvent e, AimingWorkingStateNode weapon, [JoinAll] AimingCameraNode cameraNode)
        {
            Transform           root     = cameraNode.cameraRootTransform.Root;
            MuzzleLogicAccessor accessor = new MuzzleLogicAccessor(weapon.muzzlePoint, weapon.weaponInstance);
            ShaftAimingCameraConfigEffectComponent shaftAimingCameraConfigEffect = weapon.shaftAimingCameraConfigEffect;
            ShaftAimingWorkingStateComponent       shaftAimingWorkingState       = weapon.shaftAimingWorkingState;

            root.SetPositionSafe(accessor.GetBarrelOriginWorld());
            root.SetRotationSafe(Quaternion.LookRotation(shaftAimingWorkingState.WorkingDirection, accessor.GetUpDirectionWorld()));
            Vector3 eulerAngles = root.eulerAngles;

            weapon.weaponRotationControl.MouseRotationCumulativeHorizontalAngle = Mathf.Clamp(weapon.weaponRotationControl.MouseRotationCumulativeHorizontalAngle, -weapon.shaftAimingRotationConfig.AimingOffsetClipping, weapon.shaftAimingRotationConfig.AimingOffsetClipping);
            float    num        = Mathf.Clamp(weapon.weaponRotationControl.MouseRotationCumulativeHorizontalAngle, -weapon.shaftAimingRotationConfig.MaxAimingCameraOffset, weapon.shaftAimingRotationConfig.MaxAimingCameraOffset);
            Vector3 *vectorPtr1 = &eulerAngles;

            vectorPtr1->y += num;
            Vector3 *vectorPtr2 = &eulerAngles;

            vectorPtr2->x        -= weapon.weaponRotationControl.MouseShaftAimCumulativeVerticalAngle;
            root.eulerAngles      = eulerAngles;
            cameraNode.camera.FOV = Mathf.Lerp(shaftAimingCameraConfigEffect.ActivationStateTargetFov, shaftAimingCameraConfigEffect.WorkingStateMinFov, shaftAimingWorkingState.InitialEnergy - weapon.weaponEnergy.Energy);
        }
示例#3
0
        public void InterpolateManualTargetingCamera(UpdateEvent evt, AimingWorkActivationStateNode weapon, [JoinAll] AimingCameraNode cameraNode)
        {
            MuzzleVisualAccessor       accessor          = new MuzzleVisualAccessor(weapon.muzzlePoint);
            CameraComponent            camera            = cameraNode.camera;
            Transform                  root              = cameraNode.cameraRootTransform.Root;
            ShaftAimingCameraComponent shaftAimingCamera = cameraNode.shaftAimingCamera;
            float t = Mathf.Clamp01(weapon.shaftAimingWorkActivationState.ActivationTimer / weapon.shaftStateConfig.ActivationToWorkingTransitionTimeSec);
            MuzzleLogicAccessor accessor2 = new MuzzleLogicAccessor(weapon.muzzlePoint, weapon.weaponInstance);

            root.SetPositionSafe(Vector3.Lerp(shaftAimingCamera.WorldInitialCameraPosition, accessor2.GetBarrelOriginWorld(), t));
            Quaternion quaternion2 = Quaternion.LookRotation(accessor.GetFireDirectionWorld(), accessor.GetUpDirectionWorld());

            weapon.weaponRotationControl.MouseRotationCumulativeHorizontalAngle = Mathf.Clamp(weapon.weaponRotationControl.MouseRotationCumulativeHorizontalAngle, -weapon.shaftAimingRotationConfig.AimingOffsetClipping, weapon.shaftAimingRotationConfig.AimingOffsetClipping);
            Vector3 eulerAngles = quaternion2.eulerAngles;

            root.SetRotationSafe(Quaternion.Slerp(shaftAimingCamera.WorldInitialCameraRotation, Quaternion.Euler(eulerAngles.x, eulerAngles.y + weapon.weaponRotationControl.MouseRotationCumulativeHorizontalAngle, eulerAngles.z), t));
            camera.FOV = Mathf.Lerp(shaftAimingCamera.InitialFOV, weapon.shaftAimingCameraConfigEffect.ActivationStateTargetFov, t);
        }
示例#4
0
        public void ApplyKickbackEffect(UpdateEvent evt, ShaftWeaponKickbackNode shaft, [JoinAll] AimingCameraNode cameraNode)
        {
            CameraComponent camera       = cameraNode.camera;
            Transform       root         = cameraNode.cameraRootTransform.Root;
            Vector3         lastPosition = shaft.shaftAimingCameraKickback.LastPosition;
            Quaternion      lastRotation = shaft.shaftAimingCameraKickback.LastRotation;
            Vector3         position     = shaft.weaponInstance.WeaponInstance.transform.position;
            Quaternion      rotation     = shaft.weaponInstance.WeaponInstance.transform.rotation;

            shaft.shaftAimingCameraKickback.LastRotation = rotation;
            shaft.shaftAimingCameraKickback.LastPosition = position;
            root.SetPositionSafe((root.position + position) - lastPosition);
            root.SetRotationSafe(root.rotation * (Quaternion.Inverse(lastRotation) * rotation));
        }