diff options
Diffstat (limited to 'Assets/Scripts/DamageVolumeSystem/SimpleHealth.cs')
| -rw-r--r-- | Assets/Scripts/DamageVolumeSystem/SimpleHealth.cs | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/Assets/Scripts/DamageVolumeSystem/SimpleHealth.cs b/Assets/Scripts/DamageVolumeSystem/SimpleHealth.cs new file mode 100644 index 0000000..c301d4a --- /dev/null +++ b/Assets/Scripts/DamageVolumeSystem/SimpleHealth.cs @@ -0,0 +1,55 @@ +using System; +using UnityEngine; + +namespace DamageVolumeSystem +{ + [RequireComponent(typeof(Rigidbody))] + public class SimpleHealth : MonoBehaviour + { + public int max = 10000; + public int health = 10000; + + private Rigidbody _rigidbody; + + private void Start() + { + _rigidbody = GetComponent<Rigidbody>(); + } + + public void Damage(Damage amount) + { + health -= amount.Force; + health = Mathf.Clamp(health, 0, max); + + _rigidbody.AddForce(amount.Direction * amount.Force / 200); + } + + public void Heal(Damage amount) + { + health += amount.Force; + health = Mathf.Clamp(health, 0, max); + } + + private void OnDrawGizmos() + { + var t = transform; + var size = (t.lossyScale.x + t.lossyScale.y + t.lossyScale.z) / 3; + + Gizmos.matrix = t.localToWorldMatrix; + + Gizmos.DrawWireCube(new Vector3(0, size, 0), new Vector3( + 2 / t.lossyScale.x, + 0.5f / t.lossyScale.y, + 0.5f / t.lossyScale.z + ) * size); + + Gizmos.color = new Color(1f, 0.44f, 0.37f); + + Gizmos.DrawCube(new Vector3(0, size, 0), new Vector3( + 2 / t.lossyScale.x * ((float) health / max), + 0.5f / t.lossyScale.y, + 0.5f / t.lossyScale.z + ) * size * 0.8f); + } + } +} |
