Added custom collision

This commit is contained in:
Pasha Bibko
2025-11-20 11:15:29 +00:00
parent 0dce94924c
commit 583f417e24
5 changed files with 69 additions and 63 deletions

View File

@@ -7,16 +7,17 @@ public class OrbitalPosition
public Int64 pRing = 0;
public float DistanceFromCentre = 0;
public float RadiusDistance = 0;
public float ObjectRadius = 0.1f;
public Transform owner = null;
public OrbitalPositionBehaviour Behaviour;
public Transform Owner = null;
public int m_SpinSpeed = 1;
public bool m_DeletedAtCentre = false;
public int SpinSpeed = 1;
public OrbitalPosition(GameObject _owner)
{
pRing = GlobalOrbitalPositionManager.LastRingID;
owner = _owner.transform;
Owner = _owner.transform;
}
public Vector3 TranslateToVec3() => new
@@ -38,6 +39,9 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
private readonly List<Ring> m_Rings = new();
private readonly Dictionary<Int64, 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 Int64 m_LastGeneratedRing = 0;
@@ -69,7 +73,7 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
s_Instance.m_PrecalculatedPositions[CIRCLE_POINTS] = s_Instance.m_PrecalculatedPositions[0];
}
public void Update()
private void Update()
{
if (Time.time - m_TimeOfLastRingSpawn > GlobalOrbitalSettings.GapDistance)
{
@@ -130,12 +134,7 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
{
if (!m_Distances.ContainsKey(orbitalPosition.pRing))
{
if (orbitalPosition.m_DeletedAtCentre)
{
Destroy(orbitalPosition.owner.gameObject);
continue;
}
orbitalPosition.Behaviour.OnReachCentre();
orbitalPosition.pRing = m_LastGeneratedRing;
}
@@ -143,7 +142,26 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
orbitalPosition.DistanceFromCentre = distance;
orbitalPosition.RadiusDistance = (orbitalPosition.RadiusDistance + (Time.deltaTime * GlobalOrbitalSettings.RadiusSpeed)) % (Mathf.PI * 2);
orbitalPosition.owner.position = orbitalPosition.TranslateToVec3();
orbitalPosition.Owner.position = orbitalPosition.TranslateToVec3();
}
}
private void FixedUpdate()
{
foreach (OrbitalPosition orbital in m_ObjectInstances)
{
if (orbital == m_PlayerOrbitalPosition)
continue;
Vector2 a = orbital.TranslateToVec3();
Vector2 b = m_PlayerOrbitalPosition.TranslateToVec3();
float distance = (a - b).magnitude;
float radii = orbital.ObjectRadius + m_PlayerOrbitalPosition.ObjectRadius;
if (distance < radii)
{
orbital.Behaviour.OnCollision(m_PlayerOrbitalPosition.Behaviour);
m_PlayerOrbitalPosition.Behaviour.OnCollision(orbital.Behaviour);
}
}
}
@@ -160,9 +178,12 @@ public abstract class OrbitalPositionBehaviour : MonoBehaviour
private void Start()
{
m_OrbitalPosition = new OrbitalPosition(gameObject);
GlobalOrbitalPositionManager.RegisterOrbitalPositionInstance(m_OrbitalPosition);
m_OrbitalPosition = new OrbitalPosition(gameObject)
{
Behaviour = this
};
GlobalOrbitalPositionManager.RegisterOrbitalPositionInstance(m_OrbitalPosition);
OnStart();
}
@@ -170,4 +191,8 @@ public abstract class OrbitalPositionBehaviour : MonoBehaviour
GlobalOrbitalPositionManager.UnregisterOrbitalPositionInstance(m_OrbitalPosition);
public virtual void OnStart() { }
public virtual void OnReachCentre() { }
public virtual void OnCollision(OrbitalPositionBehaviour other) { }
}