Added rings
They do not move with the player correctly
This commit is contained in:
@@ -1,11 +1,18 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class OrbitalPosition : MonoBehaviour
|
||||
public class OrbitalPosition
|
||||
{
|
||||
public float DistanceFromCentre = 0;
|
||||
public float RadiusDistance = 0;
|
||||
|
||||
public Transform owner = null;
|
||||
|
||||
public OrbitalPosition(GameObject _owner)
|
||||
{
|
||||
owner = _owner.transform;
|
||||
}
|
||||
|
||||
public Vector3 TranslateToVec3() => new
|
||||
(
|
||||
x: DistanceFromCentre * Mathf.Cos(RadiusDistance),
|
||||
@@ -17,13 +24,11 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
|
||||
{
|
||||
static GlobalOrbitalPositionManager s_Instance = null;
|
||||
private readonly List<OrbitalPosition> m_ObjectInstances = new();
|
||||
private readonly List<Transform> m_Rings = new();
|
||||
|
||||
[SerializeField, Range(0f, Mathf.PI * 2)] float m_RadiusSpeed = 2f;
|
||||
[SerializeField, Range(0f, 2f)] float m_DistanceSpeed = 0.6f;
|
||||
[SerializeField, Range(0f, 1f)] float m_GapDistance = 0.3f;
|
||||
private float m_TimeOfLastRingSpawn = float.NegativeInfinity;
|
||||
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
|
||||
private static void OnApplicationStart()
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] private static void OnApplicationStart()
|
||||
{
|
||||
GameObject manager = new("GLOBAL ORBITAL MANAGER");
|
||||
DontDestroyOnLoad(manager);
|
||||
@@ -33,12 +38,39 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
|
||||
|
||||
public void Update()
|
||||
{
|
||||
if (Time.time - m_TimeOfLastRingSpawn > GlobalOrbitalSettings.GapDistance)
|
||||
{
|
||||
GameObject newRing = Instantiate(GlobalOrbitalSettings.RingPrefab);
|
||||
m_Rings.Add(newRing.transform);
|
||||
newRing.transform.localScale = new Vector3(10f, 10f, 1);
|
||||
|
||||
m_TimeOfLastRingSpawn = Time.time;
|
||||
}
|
||||
|
||||
foreach (OrbitalPosition orbitalPosition in m_ObjectInstances)
|
||||
{
|
||||
orbitalPosition.DistanceFromCentre = Mathf.Clamp(orbitalPosition.DistanceFromCentre - (m_DistanceSpeed * Time.deltaTime * m_DistanceSpeed), 0f, float.PositiveInfinity);
|
||||
orbitalPosition.RadiusDistance = (orbitalPosition.RadiusDistance + (m_RadiusSpeed * Time.deltaTime * m_RadiusSpeed)) % (Mathf.PI * 2);
|
||||
orbitalPosition.DistanceFromCentre = Mathf.Clamp(orbitalPosition.DistanceFromCentre - (Time.deltaTime * GlobalOrbitalSettings.DistanceSpeed), 0f, float.PositiveInfinity);
|
||||
orbitalPosition.RadiusDistance = (orbitalPosition.RadiusDistance + (Time.deltaTime * GlobalOrbitalSettings.RadiusSpeed)) % (Mathf.PI * 2);
|
||||
|
||||
orbitalPosition.gameObject.transform.position = orbitalPosition.TranslateToVec3();
|
||||
orbitalPosition.owner.position = orbitalPosition.TranslateToVec3();
|
||||
}
|
||||
|
||||
List<Transform> toRemove = new();
|
||||
foreach (Transform ring in m_Rings)
|
||||
{
|
||||
float diff = Time.deltaTime * GlobalOrbitalSettings.DistanceSpeed;
|
||||
ring.localScale -= new Vector3(diff, diff, 0f);
|
||||
|
||||
if (ring.localScale.x < 0)
|
||||
{
|
||||
toRemove.Add(ring);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (Transform ring in toRemove)
|
||||
{
|
||||
m_Rings.Remove(ring);
|
||||
Destroy(ring.gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,19 +79,15 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
|
||||
|
||||
public static void UnregisterOrbitalPositionInstance(OrbitalPosition removedInstance) =>
|
||||
s_Instance.m_ObjectInstances.Remove(removedInstance);
|
||||
|
||||
public static float GetGapDistance() =>
|
||||
s_Instance.m_GapDistance;
|
||||
}
|
||||
|
||||
[RequireComponent(typeof(OrbitalPosition))]
|
||||
public abstract class OrbitalPositionBehaviour : MonoBehaviour
|
||||
{
|
||||
protected OrbitalPosition m_OrbitalPosition = null;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
m_OrbitalPosition = GetComponent<OrbitalPosition>();
|
||||
m_OrbitalPosition = new OrbitalPosition(gameObject);
|
||||
GlobalOrbitalPositionManager.RegisterOrbitalPositionInstance(m_OrbitalPosition);
|
||||
|
||||
OnStart();
|
||||
|
||||
Reference in New Issue
Block a user