diff --git a/Assets/Src/ShipControls.cs b/Assets/Src/ShipControls.cs index e844565..c782101 100755 --- a/Assets/Src/ShipControls.cs +++ b/Assets/Src/ShipControls.cs @@ -1,3 +1,4 @@ +using System; using UnityEngine; using UnityEngine.InputSystem; @@ -30,6 +31,11 @@ public class ShipControls : MonoBehaviour, SpaceRaceInput.IShipActions { float camYaw; float clampAngle = 90.0f; + // Power Unit / Shields + float shields = 5000f; + float shieldsMax = 5000f; + float shieldsRegen = 10f; // * 100 ticks per second = 5s fully recharge + void Start() { Cursor.lockState = CursorLockMode.Locked; rigidBody = GetComponent(); @@ -102,6 +108,8 @@ public class ShipControls : MonoBehaviour, SpaceRaceInput.IShipActions { // stop the ship jiggling because of micro camera movement if (Quaternion.Angle(aim.transform.rotation, rigidBody.rotation) > 1f) rigidBody.rotation = Quaternion.RotateTowards(transform.rotation, aim.transform.rotation, step); + + RegenerateShields(); } void UpdateCamera() { @@ -172,6 +180,8 @@ public class ShipControls : MonoBehaviour, SpaceRaceInput.IShipActions { camPitch = initialAim.eulerAngles.x; camYaw = initialAim.eulerAngles.y; + + shields = shieldsMax; } void OnDrawGizmosSelected() { @@ -202,6 +212,22 @@ public class ShipControls : MonoBehaviour, SpaceRaceInput.IShipActions { return rigidBody.velocity.magnitude; } + public string Shields => $"{((shields / shieldsMax) * 100f):0}"; + + public void Damage(float amt, string src) { + Debug.Log($"Damage {amt} from {src}"); + shields = shields - amt; + + if (shields < 0f) { + Debug.Log($"Ddddestroyed by {src}"); + Respawn(); + } + } + + void RegenerateShields() { + shields = Math.Min(shields + shieldsRegen, shieldsMax); + } + // We don't use these because we poll instead // the callbacks are only invoked when the value changes // aka if you hold accelerate it doesn't do what you expect diff --git a/Assets/Src/ShipPhysics.cs b/Assets/Src/ShipPhysics.cs index 75c8be0..68e2f47 100644 --- a/Assets/Src/ShipPhysics.cs +++ b/Assets/Src/ShipPhysics.cs @@ -3,30 +3,20 @@ using UnityEngine; public class ShipPhysics : MonoBehaviour { ShipControls ship; - float maxDmg = 150f; - float maxImpulse = 5000f; - void Awake() { ship = GetComponent(); } void OnCollisionEnter(Collision collision) { - float totalForce = collision.impulse.magnitude / Time.fixedDeltaTime; - - Debug.Log($"mag {collision.relativeVelocity.magnitude}"); - Debug.Log($"impulse {collision.impulse} {collision.impulse.magnitude} {totalForce}"); - - // if (collision.relativeVelocity.magnitude > maxDmg) { - if (totalForce > maxImpulse) { - Debug.Log("Ddddestroyed by" + collision.gameObject.name); - ship.Respawn(); - return; - } - if (collision.gameObject.tag == "TrackLimits") { Debug.Log("Track Limits " + collision.gameObject.name); ship.Respawn(); return; } + + float totalForce = collision.impulse.magnitude / Time.fixedDeltaTime; + Debug.Log($"mag {collision.relativeVelocity.magnitude}"); + Debug.Log($"impulse {collision.impulse} {collision.impulse.magnitude} {totalForce}"); + ship.Damage(totalForce, collision.gameObject.name); } } \ No newline at end of file diff --git a/Assets/Src/UI/Controls.uxml b/Assets/Src/UI/Controls.uxml index 848cd71..3ad8c06 100644 --- a/Assets/Src/UI/Controls.uxml +++ b/Assets/Src/UI/Controls.uxml @@ -2,9 +2,16 @@