Made circle rendering work
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user