diff --git a/Assets/Prefabs/Enemy.prefab b/Assets/Prefabs/Enemy.prefab index 0d5a9f5..5692935 100644 --- a/Assets/Prefabs/Enemy.prefab +++ b/Assets/Prefabs/Enemy.prefab @@ -56,7 +56,6 @@ GameObject: - component: {fileID: 1739635715747709762} - component: {fileID: 5026174633141696716} - component: {fileID: 8577569336777110376} - - component: {fileID: 4859736940813683666} m_Layer: 0 m_Name: Model m_TagString: Enemy @@ -129,48 +128,3 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4804673878835712602} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!61 &4859736940813683666 -BoxCollider2D: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4804673878835712602} - m_Enabled: 1 - m_Density: 1 - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_ForceSendLayers: - serializedVersion: 2 - m_Bits: 4294967295 - m_ForceReceiveLayers: - serializedVersion: 2 - m_Bits: 4294967295 - m_ContactCaptureLayers: - serializedVersion: 2 - m_Bits: 4294967295 - m_CallbackLayers: - serializedVersion: 2 - m_Bits: 4294967295 - m_IsTrigger: 0 - m_UsedByEffector: 0 - m_UsedByComposite: 0 - m_Offset: {x: 0, y: 0} - m_SpriteTilingProperty: - border: {x: 0, y: 0, z: 0, w: 0} - pivot: {x: 0, y: 0} - oldSize: {x: 0, y: 0} - newSize: {x: 0, y: 0} - adaptiveTilingThreshold: 0 - drawMode: 0 - adaptiveTiling: 0 - m_AutoTiling: 0 - serializedVersion: 2 - m_Size: {x: 1, y: 1} - m_EdgeRadius: 0 diff --git a/Assets/Scripts/EnemyController.cs b/Assets/Scripts/EnemyController.cs index d64149e..e9a9b18 100644 --- a/Assets/Scripts/EnemyController.cs +++ b/Assets/Scripts/EnemyController.cs @@ -4,6 +4,12 @@ public class EnemyController : OrbitalPositionBehaviour { public override void OnStart() { - m_OrbitalPosition.m_DeletedAtCentre = true; + transform.position = new Vector3(0, 0, -200f); + m_OrbitalPosition.RadiusDistance = 0.2f; + } + + public override void OnReachCentre() + { + Destroy(gameObject); } } diff --git a/Assets/Scripts/OrbitalPosition.cs b/Assets/Scripts/OrbitalPosition.cs index dd573ba..e261acf 100644 --- a/Assets/Scripts/OrbitalPosition.cs +++ b/Assets/Scripts/OrbitalPosition.cs @@ -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 m_Rings = 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 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) { } } diff --git a/Assets/Scripts/PlayerController.cs b/Assets/Scripts/PlayerController.cs index 00cfd27..7582829 100644 --- a/Assets/Scripts/PlayerController.cs +++ b/Assets/Scripts/PlayerController.cs @@ -2,12 +2,12 @@ using UnityEngine; public class PlayerController : OrbitalPositionBehaviour { - float m_StartPosition; public GameObject m_EnemyPrefab; public override void OnStart() { - m_OrbitalPosition.DistanceFromCentre = m_StartPosition; + GlobalOrbitalPositionManager.SetPlayer(m_OrbitalPosition); + m_OrbitalPosition.RadiusDistance = 0.4f; } public void Update() @@ -22,4 +22,9 @@ public class PlayerController : OrbitalPositionBehaviour Instantiate(m_EnemyPrefab); } } + + public override void OnCollision(OrbitalPositionBehaviour other) + { + Debug.Log("HIT OBSTACLE IG"); + } } diff --git a/ProjectSettings/TimelineSettings.asset b/ProjectSettings/TimelineSettings.asset new file mode 100644 index 0000000..b21943a --- /dev/null +++ b/ProjectSettings/TimelineSettings.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 53 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a287be6c49135cd4f9b2b8666c39d999, type: 3} + m_Name: + m_EditorClassIdentifier: + assetDefaultFramerate: 60 + m_DefaultFrameRate: 60