Made circle rendering work

This commit is contained in:
Pasha Bibko
2025-11-20 12:51:12 +00:00
parent 112a88d07e
commit 9bcc2b917c
2 changed files with 19 additions and 24 deletions

View File

@@ -255,7 +255,7 @@ Camera:
m_Enabled: 1 m_Enabled: 1
serializedVersion: 2 serializedVersion: 2
m_ClearFlags: 2 m_ClearFlags: 2
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} m_BackGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 0}
m_projectionMatrixMode: 1 m_projectionMatrixMode: 1
m_GateFitMode: 2 m_GateFitMode: 2
m_FOVAxisMode: 0 m_FOVAxisMode: 0

View File

@@ -1,4 +1,3 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine; using UnityEngine;
@@ -29,28 +28,27 @@ public class OrbitalPosition
public class Ring : MonoBehaviour public class Ring : MonoBehaviour
{ {
public int ID; public int m_ID;
} }
public class GlobalOrbitalPositionManager : MonoBehaviour public class GlobalOrbitalPositionManager : MonoBehaviour
{ {
static GlobalOrbitalPositionManager s_Instance = null; private static GlobalOrbitalPositionManager s_Instance = null;
private readonly List<OrbitalPosition> m_ObjectInstances = new(); private readonly List<OrbitalPosition> m_ObjectInstances = new();
private readonly List<Ring> m_Rings = new(); private readonly List<Ring> m_Rings = new();
private readonly Dictionary<Int64, float> m_Distances = new(); private readonly Dictionary<int, float> m_Distances = new();
private OrbitalPosition m_PlayerOrbitalPosition; private OrbitalPosition m_PlayerOrbitalPosition;
public static void SetPlayer(OrbitalPosition player) => s_Instance.m_PlayerOrbitalPosition = player; public static void SetPlayer(OrbitalPosition player) => s_Instance.m_PlayerOrbitalPosition = player;
private float m_TimeOfLastRingSpawn = float.NegativeInfinity; private float m_TimeOfLastRingSpawn = float.NegativeInfinity;
private int m_LastGeneratedRing = 0; private int m_LastGeneratedRing;
public static int LastRingID => s_Instance.m_LastGeneratedRing; public static int LastRingID => s_Instance.m_LastGeneratedRing;
public static float GetDistanceOf(int rowID) => s_Instance.m_Distances[rowID]; private const int CirclePoints = 100;
private const int CirclePoints = 360;
Vector3[] m_PrecalculatedPositions; private Vector3[] m_PrecalculatedPositions;
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] private static void OnApplicationStart() [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] private static void OnApplicationStart()
{ {
@@ -58,19 +56,17 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
DontDestroyOnLoad(manager); DontDestroyOnLoad(manager);
s_Instance = manager.AddComponent<GlobalOrbitalPositionManager>(); s_Instance = manager.AddComponent<GlobalOrbitalPositionManager>();
s_Instance.m_PrecalculatedPositions = new Vector3[CirclePoints + 1]; s_Instance.m_PrecalculatedPositions = new Vector3[CirclePoints];
for (int i = 0; i < CirclePoints; i++) for (int i = 0; i < s_Instance.m_PrecalculatedPositions.Length; i++)
{ {
s_Instance.m_PrecalculatedPositions[i] = new Vector3 s_Instance.m_PrecalculatedPositions[i] = new Vector3
( (
x: Mathf.Cos(Mathf.Deg2Rad * i), x: Mathf.Cos(Mathf.Deg2Rad * (359f / CirclePoints * i)),
y: Mathf.Sin(Mathf.Deg2Rad * i), y: Mathf.Sin(Mathf.Deg2Rad * (359f / CirclePoints * i)),
z: 0 z: 0
); );
} }
s_Instance.m_PrecalculatedPositions[CirclePoints] = s_Instance.m_PrecalculatedPositions[0];
} }
private void Update() private void Update()
@@ -81,21 +77,21 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
newRing.transform.localScale = new Vector3(10f, 10f, 1); newRing.transform.localScale = new Vector3(10f, 10f, 1);
Ring ring = newRing.AddComponent<Ring>(); Ring ring = newRing.AddComponent<Ring>();
ring.ID = m_LastGeneratedRing + 1; ring.m_ID = m_LastGeneratedRing + 1;
m_Rings.Add(ring); m_Rings.Add(ring);
LineRenderer lineRenderer = newRing.GetComponentInChildren<LineRenderer>(); LineRenderer lineRenderer = newRing.GetComponentInChildren<LineRenderer>();
lineRenderer.positionCount = CirclePoints + 1; lineRenderer.loop = true;
lineRenderer.positionCount = CirclePoints;
lineRenderer.startWidth = 0.1f; lineRenderer.startWidth = 0.1f;
lineRenderer.endWidth = 0.1f; lineRenderer.endWidth = 0.1f;
lineRenderer.material = new Material(Shader.Find("Sprites/Default")); lineRenderer.material = new Material(Shader.Find("Sprites/Default"));
m_LastGeneratedRing = ring.ID; m_LastGeneratedRing = ring.m_ID;
m_TimeOfLastRingSpawn = Time.time; m_TimeOfLastRingSpawn = Time.time;
} }
List<Ring> toRemove = new(); List<Ring> toRemove = new();
int index = 0;
m_Distances.Clear(); m_Distances.Clear();
foreach (Ring ring in m_Rings) foreach (Ring ring in m_Rings)
@@ -104,7 +100,7 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
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>();
for (int vert = 0; vert < CirclePoints + 1; vert++) for (int vert = 0; vert < CirclePoints; vert++)
{ {
lineRenderer.SetPosition(vert, m_PrecalculatedPositions[vert] * ring.transform.localScale.x); lineRenderer.SetPosition(vert, m_PrecalculatedPositions[vert] * ring.transform.localScale.x);
} }
@@ -120,8 +116,7 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
lineRenderer.startColor = c; lineRenderer.startColor = c;
lineRenderer.endColor = c; lineRenderer.endColor = c;
m_Distances[ring.ID] = ring.transform.localScale.x; m_Distances[ring.m_ID] = ring.transform.localScale.x;
index++;
} }
foreach (Ring ring in toRemove) foreach (Ring ring in toRemove)
@@ -140,7 +135,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_RadiusDistance = (orbitalPosition.m_RadiusDistance + (Time.deltaTime * GlobalOrbitalSettings.RadiusSpeed)) % (Mathf.PI * 2); orbitalPosition.m_RadiusDistance = (orbitalPosition.m_RadiusDistance + Time.deltaTime * GlobalOrbitalSettings.RadiusSpeed) % (Mathf.PI * 2);
orbitalPosition.m_Owner.position = orbitalPosition.TranslateToVec3(); orbitalPosition.m_Owner.position = orbitalPosition.TranslateToVec3();
} }
@@ -174,7 +169,7 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
public abstract class OrbitalPositionBehaviour : MonoBehaviour public abstract class OrbitalPositionBehaviour : MonoBehaviour
{ {
protected OrbitalPosition m_OrbitalPosition = null; protected OrbitalPosition m_OrbitalPosition;
private void Start() private void Start()
{ {