Made respawn when hit centre

This commit is contained in:
Pasha Bibko
2025-11-20 14:21:46 +00:00
parent 19b2c06fab
commit 88fa7e4ff3
3 changed files with 42 additions and 6 deletions

View File

@@ -1,3 +1,4 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
@@ -41,6 +42,8 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
private OrbitalPosition m_PlayerOrbitalPosition;
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;
@@ -67,14 +70,42 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
z: 0
);
}
RestartSimulation();
}
private static bool s_RestartingSimulation = false;
private static IEnumerator RestartSimulationInternal()
{
//if (s_RestartingSimulation)
// yield break;
s_RestartingSimulation = true;
Time.timeScale = 3.5f;
AllowPlayerInput = false;
for (int i = 0; i < 500; i++)
{
yield return new WaitForEndOfFrame();
s_Instance.m_PlayerOrbitalPosition.m_AttachedRing = s_Instance.m_LastGeneratedRing;
}
yield return new WaitForSeconds(4f * Time.timeScale);
AllowPlayerInput = true;
Time.timeScale = 1f;
s_RestartingSimulation = true;
}
public static void RestartSimulation() => s_Instance.StartCoroutine(RestartSimulationInternal());
private void Update()
{
if (Time.time - m_TimeOfLastRingSpawn > GlobalOrbitalSettings.GapDistance)
{
GameObject newRing = Instantiate(GlobalOrbitalSettings.RingPrefab);
newRing.transform.localScale = new Vector3(10f, 10f, 1);
newRing.transform.localScale = new Vector3(12f, 12f, 1);
Ring ring = newRing.AddComponent<Ring>();
ring.m_ID = m_LastGeneratedRing + 1;
@@ -126,8 +157,8 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
{
if (!m_Distances.ContainsKey(orbitalPosition.m_AttachedRing))
{
orbitalPosition.m_Behaviour.OnReachCentre();
orbitalPosition.m_AttachedRing = m_LastGeneratedRing;
orbitalPosition.m_Behaviour.OnReachCentre();
}
float distance = m_Distances[orbitalPosition.m_AttachedRing];
@@ -156,7 +187,7 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
}
}
if (Random.Range(0, 20) == 0)
if (Random.Range(0, 20) == 0 && AllowPlayerInput)
Instantiate(GlobalOrbitalSettings.EnemyPrefab);
}