From 07de9b4fe92912cec6938743d7b36948c2e8164d Mon Sep 17 00:00:00 2001 From: Pasha Bibko <156938226+PashaBibko@users.noreply.github.com> Date: Thu, 20 Nov 2025 15:08:40 +0000 Subject: [PATCH] Made local time scale --- Assets/Scripts/OrbitalPosition.cs | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/Assets/Scripts/OrbitalPosition.cs b/Assets/Scripts/OrbitalPosition.cs index 69ccc83..e13a2a0 100644 --- a/Assets/Scripts/OrbitalPosition.cs +++ b/Assets/Scripts/OrbitalPosition.cs @@ -43,7 +43,7 @@ public class GlobalOrbitalPositionManager : MonoBehaviour public static void SetPlayer(OrbitalPosition player) => s_Instance.m_PlayerOrbitalPosition = player; public static bool AllowPlayerInput { get; private set; } = true; - + private float m_TimeOfLastRingSpawn = float.NegativeInfinity; private int m_LastGeneratedRing; @@ -51,6 +51,9 @@ public class GlobalOrbitalPositionManager : MonoBehaviour private const int CirclePoints = 100; + private float m_LocalDeltaTimeScale = 1f; + private float LocalDeltaTime => Time.deltaTime * m_LocalDeltaTimeScale; + private Vector3[] m_PrecalculatedPositions; [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] private static void OnApplicationStart() @@ -73,36 +76,27 @@ public class GlobalOrbitalPositionManager : MonoBehaviour RestartSimulation(); } - - private static bool s_RestartingSimulation = false; private static IEnumerator RestartSimulationInternal() { - //if (s_RestartingSimulation) - // yield break; - - s_RestartingSimulation = true; - - Time.timeScale = 3.5f; + s_Instance.m_LocalDeltaTimeScale = 7f; AllowPlayerInput = false; - for (int i = 0; i < 500; i++) + for (int i = 0; i < 100; i++) { - yield return new WaitForEndOfFrame(); + yield return new WaitForFixedUpdate(); s_Instance.m_PlayerOrbitalPosition.m_AttachedRing = s_Instance.m_LastGeneratedRing; } - yield return new WaitForSeconds(4f * Time.timeScale); + yield return new WaitForSeconds(1.3f); AllowPlayerInput = true; - Time.timeScale = 1f; - - s_RestartingSimulation = true; + s_Instance.m_LocalDeltaTimeScale = 1f; } public static void RestartSimulation() => s_Instance.StartCoroutine(RestartSimulationInternal()); private void Update() { - if (Time.time - m_TimeOfLastRingSpawn > GlobalOrbitalSettings.GapDistance) + if (Time.time - m_TimeOfLastRingSpawn > (GlobalOrbitalSettings.GapDistance / m_LocalDeltaTimeScale)) { GameObject newRing = Instantiate(GlobalOrbitalSettings.RingPrefab); newRing.transform.localScale = new Vector3(12f, 12f, 1); @@ -127,7 +121,7 @@ public class GlobalOrbitalPositionManager : MonoBehaviour foreach (Ring ring in m_Rings) { - float diff = Time.deltaTime * GlobalOrbitalSettings.DistanceSpeed; + float diff = LocalDeltaTime * GlobalOrbitalSettings.DistanceSpeed; ring.transform.localScale -= new Vector3(diff, diff, 0f); LineRenderer lineRenderer = ring.GetComponentInChildren(); @@ -163,7 +157,7 @@ public class GlobalOrbitalPositionManager : MonoBehaviour float distance = m_Distances[orbitalPosition.m_AttachedRing]; orbitalPosition.m_DistanceFromCentre = distance; - orbitalPosition.m_DistanceAlongRadius = (orbitalPosition.m_DistanceAlongRadius + Time.deltaTime * GlobalOrbitalSettings.RadiusSpeed * orbitalPosition.m_SpinSpeed) % (Mathf.PI * 2); + orbitalPosition.m_DistanceAlongRadius = (orbitalPosition.m_DistanceAlongRadius + LocalDeltaTime * GlobalOrbitalSettings.RadiusSpeed * orbitalPosition.m_SpinSpeed) % (Mathf.PI * 2); orbitalPosition.m_Owner.position = orbitalPosition.TranslateToVec3(); }