Added custom collision
This commit is contained in:
@@ -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) { }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user