Пример #1
0
 public static Vector3 FromRelVel(this OWRigidbody reference, Vector3 relVel, Vector3 pos) => relVel + reference.GetPointVelocity(pos);
Пример #2
0
        private RelativeLocationData relconstr(Vector3 body_position, Quaternion body_rotation, Vector3 body_velocity, OWRigidbody relativeBody, Transform relativeTransform = null)
        {
            if (relativeTransform == null)
            {
                relativeTransform = relativeBody.transform;
            }
            RelativeLocationData res = new RelativeLocationData(Locator.GetPlayerBody(), relativeBody);

            res.localPosition         = relativeTransform.InverseTransformPoint(body_position);
            res.localRotation         = Quaternion.Inverse(relativeTransform.rotation) * body_rotation;
            res.localRelativeVelocity = relativeTransform.InverseTransformDirection(body_velocity - relativeBody.GetPointVelocity(body_position));
            return(res);
        }
Пример #3
0
 public static Vector3 ToRelVel(this OWRigidbody reference, Vector3 vel, Vector3 pos) => vel - reference.GetPointVelocity(pos);
Пример #4
0
        public static bool Moon_CheckPlayerFogProximity(
            QuantumMoon __instance,
            int ____stateIndex,
            float ____eyeStateFogOffset,
            ref bool ____isPlayerInside,
            float ____fogRadius,
            float ____fogThickness,
            float ____fogRolloffDistance,
            string ____revealFactID,
            OWRigidbody ____moonBody,
            bool ____hasSunCollapsed,
            Transform ____vortexReturnPivot,
            OWAudioSource ____vortexAudio,
            ref int ____collapseToIndex,
            VisibilityTracker ____visibilityTracker,
            QuantumFogEffectBubbleController ____playerFogBubble,
            QuantumFogEffectBubbleController ____shipLandingCamFogBubble)
        {
            var playerDistance  = Vector3.Distance(__instance.transform.position, Locator.GetPlayerCamera().transform.position);
            var fogOffset       = (____stateIndex != 5) ? 0f : ____eyeStateFogOffset;
            var distanceFromFog = playerDistance - (____fogRadius + fogOffset);
            var fogAlpha        = 0f;

            if (!____isPlayerInside)
            {
                fogAlpha = Mathf.InverseLerp(____fogThickness + ____fogRolloffDistance, ____fogThickness, distanceFromFog);
                if (distanceFromFog < 0f)
                {
                    if ((bool)__instance.GetType().GetMethod("IsLockedByProbeSnapshot", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(__instance, null) || QuantumManager.IsVisibleUsingCameraFrustum((ShapeVisibilityTracker)____visibilityTracker, true))
                    {
                        ____isPlayerInside = true;
                        __instance.GetType().GetMethod("SetSurfaceState", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(__instance, new object[] { ____stateIndex });
                        Locator.GetShipLogManager().RevealFact(____revealFactID, true, true);
                        QSBEventManager.FireEvent("PlayerEnterQuantumMoon");
                    }
                    else
                    {
                        __instance.GetType().GetMethod("Collapse", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(__instance, new object[] { true });
                    }
                }
            }
            else if (____isPlayerInside)
            {
                fogAlpha = Mathf.InverseLerp(-____fogThickness - ____fogRolloffDistance, -____fogThickness, distanceFromFog);
                if (distanceFromFog >= 0f)
                {
                    if (____stateIndex != 5)
                    {
                        ____isPlayerInside = false;
                        if (!(bool)__instance.GetType().GetMethod("IsLockedByProbeSnapshot", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(__instance, null) && !QuantumManager.IsVisibleUsingCameraFrustum((ShapeVisibilityTracker)____visibilityTracker, true))
                        {
                            __instance.GetType().GetMethod("Collapse", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(__instance, new object[] { true });
                        }
                        __instance.GetType().GetMethod("SetSurfaceState", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(__instance, new object[] { -1 });
                        QSBEventManager.FireEvent("PlayerExitQuantumMoon");
                    }
                    else
                    {
                        var vector = Locator.GetPlayerTransform().position - __instance.transform.position;
                        Locator.GetPlayerBody().SetVelocity(____moonBody.GetPointVelocity(Locator.GetPlayerTransform().position) - (vector.normalized * 5f));
                        var d = 80f;
                        Locator.GetPlayerBody().SetPosition(__instance.transform.position + (____vortexReturnPivot.up * d));
                        if (!Physics.autoSyncTransforms)
                        {
                            Physics.SyncTransforms();
                        }
                        var component = Locator.GetPlayerCamera().GetComponent <PlayerCameraController>();
                        component.SetDegreesY(component.GetMinDegreesY());
                        ____vortexAudio.SetLocalVolume(0f);
                        ____collapseToIndex = 1;
                        __instance.GetType().GetMethod("Collapse", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(__instance, new object[] { true });
                    }
                }
            }
            ____playerFogBubble.SetFogAlpha(fogAlpha);
            ____shipLandingCamFogBubble.SetFogAlpha(fogAlpha);
            return(false);
        }