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