diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 0c751f7..8149f21 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -134,7 +134,6 @@ GameObject: - component: {fileID: 104400497} - component: {fileID: 104400501} - component: {fileID: 104400500} - - component: {fileID: 104400502} m_Layer: 0 m_Name: Player m_TagString: Untagged @@ -162,7 +161,7 @@ MonoBehaviour: m_IsAttachedToRings: 0 m_Behaviour: {fileID: 0} m_SpinSpeed: 0 - m_Body: {fileID: 104400502} + m_Renderer: {fileID: 104400500} --- !u!4 &104400498 Transform: m_ObjectHideFlags: 0 @@ -228,33 +227,6 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 104400496} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} ---- !u!50 &104400502 -Rigidbody2D: - serializedVersion: 4 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 104400496} - m_BodyType: 0 - m_Simulated: 1 - m_UseFullKinematicContacts: 0 - m_UseAutoMass: 0 - m_Mass: 1 - m_LinearDrag: 0 - m_AngularDrag: 0.05 - m_GravityScale: 0 - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_Interpolate: 1 - m_SleepingMode: 1 - m_CollisionDetection: 0 - m_Constraints: 0 --- !u!1 &519420028 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/OrbitalPosition.cs b/Assets/Scripts/OrbitalPosition.cs index 831ab09..86b30fc 100644 --- a/Assets/Scripts/OrbitalPosition.cs +++ b/Assets/Scripts/OrbitalPosition.cs @@ -89,8 +89,12 @@ public class GlobalOrbitalPositionManager : MonoBehaviour if (PlayerController.IsPlayerAttached) s_Instance.m_PlayerOrbitalPosition.m_AttachedRing = s_Instance.m_LastGeneratedRing; } - + PlayerController.AttachPlayer(); + foreach (OrbitalPosition behaviour in s_Instance.m_ObjectInstances) + { + behaviour.m_Behaviour.OnSimulationRestart(); + } yield return new WaitForSeconds(1.3f); AllowPlayerInput = true; @@ -223,4 +227,6 @@ public abstract class OrbitalPositionBehaviour : MonoBehaviour public virtual void OnReachCentre() { } public virtual void OnCollision(OrbitalPositionBehaviour other) { } + + public virtual void OnSimulationRestart() { } } diff --git a/Assets/Scripts/PlayerController.cs b/Assets/Scripts/PlayerController.cs index ae90bd2..fba1f54 100644 --- a/Assets/Scripts/PlayerController.cs +++ b/Assets/Scripts/PlayerController.cs @@ -6,7 +6,11 @@ public class PlayerController : OrbitalPositionBehaviour public static bool IsPlayerAttached => s_Instance.m_OrbitalPosition.m_IsAttachedToRings; public static void AttachPlayer() { s_Instance.m_OrbitalPosition.m_IsAttachedToRings = true; } - public Rigidbody2D m_Body; + private Vector3 m_SuicidePoint; + private bool m_KillingItself = false; + private float m_DeathLerp = 0f; + + public MeshRenderer m_Renderer; protected override void OnStart() { @@ -17,7 +21,7 @@ public class PlayerController : OrbitalPositionBehaviour m_OrbitalPosition.m_ObjectRadius = 0.4f; m_OrbitalPosition.m_SpinSpeed = 0.2f; } - + public void Update() { if (Input.GetKeyDown(KeyCode.Space) && GlobalOrbitalPositionManager.AllowPlayerInput) @@ -25,23 +29,29 @@ public class PlayerController : OrbitalPositionBehaviour m_OrbitalPosition.m_AttachedRing += 1; } - if (Input.GetKeyDown(KeyCode.R)) - { - OnCollision(null); // Fake collision - } + if (!m_KillingItself) + return; + + transform.position = Vector3.Lerp(m_SuicidePoint, Vector3.zero, m_DeathLerp); + m_DeathLerp += Time.deltaTime; + } public override void OnCollision(OrbitalPositionBehaviour other) { - GlobalOrbitalPositionManager.RestartSimulation(); - if (!m_OrbitalPosition.m_IsAttachedToRings) return; + + GlobalOrbitalPositionManager.RestartSimulation(); + m_SuicidePoint = transform.position; + m_KillingItself = true; + m_DeathLerp = 0f; + } - m_OrbitalPosition.m_IsAttachedToRings = false; - Vector3 direction = (-transform.position).normalized; - m_Body.AddForce(direction * 5f, ForceMode2D.Impulse); - + public override void OnSimulationRestart() + { + m_KillingItself = false; + m_Renderer.enabled = true; } public override void OnReachCentre()