Made local time scale
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user