From 9bcc2b917cdbe443026fbd06ef3a49694b28125a Mon Sep 17 00:00:00 2001 From: Pasha Bibko <156938226+PashaBibko@users.noreply.github.com> Date: Thu, 20 Nov 2025 12:51:12 +0000 Subject: [PATCH] Made circle rendering work --- Assets/Scenes/SampleScene.unity | 2 +- Assets/Scripts/OrbitalPosition.cs | 41 ++++++++++++++----------------- 2 files changed, 19 insertions(+), 24 deletions(-) diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 3be90ae..96deae1 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -255,7 +255,7 @@ Camera: m_Enabled: 1 serializedVersion: 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_GateFitMode: 2 m_FOVAxisMode: 0 diff --git a/Assets/Scripts/OrbitalPosition.cs b/Assets/Scripts/OrbitalPosition.cs index 1eff4ec..bd252b9 100644 --- a/Assets/Scripts/OrbitalPosition.cs +++ b/Assets/Scripts/OrbitalPosition.cs @@ -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 m_ObjectInstances = new(); private readonly List m_Rings = new(); - private readonly Dictionary m_Distances = new(); + private readonly Dictionary 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(); - 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.ID = m_LastGeneratedRing + 1; + ring.m_ID = m_LastGeneratedRing + 1; m_Rings.Add(ring); LineRenderer lineRenderer = newRing.GetComponentInChildren(); - 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 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(); - 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() {