Made local time scale

This commit is contained in:
Pasha Bibko
2025-11-20 15:08:40 +00:00
parent c0ab668a8d
commit 07de9b4fe9

View File

@@ -43,7 +43,7 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
public static void SetPlayer(OrbitalPosition player) => s_Instance.m_PlayerOrbitalPosition = player; public static void SetPlayer(OrbitalPosition player) => s_Instance.m_PlayerOrbitalPosition = player;
public static bool AllowPlayerInput { get; private set; } = true; public static bool AllowPlayerInput { get; private set; } = true;
private float m_TimeOfLastRingSpawn = float.NegativeInfinity; private float m_TimeOfLastRingSpawn = float.NegativeInfinity;
private int m_LastGeneratedRing; private int m_LastGeneratedRing;
@@ -51,6 +51,9 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
private const int CirclePoints = 100; private const int CirclePoints = 100;
private float m_LocalDeltaTimeScale = 1f;
private float LocalDeltaTime => Time.deltaTime * m_LocalDeltaTimeScale;
private Vector3[] m_PrecalculatedPositions; private Vector3[] m_PrecalculatedPositions;
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] private static void OnApplicationStart() [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] private static void OnApplicationStart()
@@ -73,36 +76,27 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
RestartSimulation(); RestartSimulation();
} }
private static bool s_RestartingSimulation = false;
private static IEnumerator RestartSimulationInternal() private static IEnumerator RestartSimulationInternal()
{ {
//if (s_RestartingSimulation) s_Instance.m_LocalDeltaTimeScale = 7f;
// yield break;
s_RestartingSimulation = true;
Time.timeScale = 3.5f;
AllowPlayerInput = false; 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; 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; AllowPlayerInput = true;
Time.timeScale = 1f; s_Instance.m_LocalDeltaTimeScale = 1f;
s_RestartingSimulation = true;
} }
public static void RestartSimulation() => s_Instance.StartCoroutine(RestartSimulationInternal()); public static void RestartSimulation() => s_Instance.StartCoroutine(RestartSimulationInternal());
private void Update() private void Update()
{ {
if (Time.time - m_TimeOfLastRingSpawn > GlobalOrbitalSettings.GapDistance) if (Time.time - m_TimeOfLastRingSpawn > (GlobalOrbitalSettings.GapDistance / m_LocalDeltaTimeScale))
{ {
GameObject newRing = Instantiate(GlobalOrbitalSettings.RingPrefab); GameObject newRing = Instantiate(GlobalOrbitalSettings.RingPrefab);
newRing.transform.localScale = new Vector3(12f, 12f, 1); newRing.transform.localScale = new Vector3(12f, 12f, 1);
@@ -127,7 +121,7 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
foreach (Ring ring in m_Rings) 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); ring.transform.localScale -= new Vector3(diff, diff, 0f);
LineRenderer lineRenderer = ring.GetComponentInChildren<LineRenderer>(); LineRenderer lineRenderer = ring.GetComponentInChildren<LineRenderer>();
@@ -163,7 +157,7 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
float distance = m_Distances[orbitalPosition.m_AttachedRing]; float distance = m_Distances[orbitalPosition.m_AttachedRing];
orbitalPosition.m_DistanceFromCentre = distance; 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(); orbitalPosition.m_Owner.position = orbitalPosition.TranslateToVec3();
} }