aboutsummaryrefslogtreecommitdiffstats
path: root/code/pawn/component/FallDamageComponent.cs
diff options
context:
space:
mode:
authorLeonardo Bishop <me@leonardobishop.com>2023-07-30 02:45:36 +0100
committerLeonardo Bishop <me@leonardobishop.com>2023-07-30 02:45:36 +0100
commit914512435d37d9f1e1ea4c045afd4ec5612b7534 (patch)
treeaca7ae248159ad9dd6bf5ec09c4f6b2b4eb92848 /code/pawn/component/FallDamageComponent.cs
parentd599275439cd35e0d3e3146e39be809df55459bd (diff)
Replace movement controllers
Diffstat (limited to 'code/pawn/component/FallDamageComponent.cs')
-rw-r--r--code/pawn/component/FallDamageComponent.cs23
1 files changed, 23 insertions, 0 deletions
diff --git a/code/pawn/component/FallDamageComponent.cs b/code/pawn/component/FallDamageComponent.cs
new file mode 100644
index 0000000..59e75d3
--- /dev/null
+++ b/code/pawn/component/FallDamageComponent.cs
@@ -0,0 +1,23 @@
+using Sandbox;
+
+namespace MurderGame;
+
+public partial class FallDamageComponent : EntityComponent<Player>, ISingletonComponent
+{
+ float PreviousZVelocity = 0;
+ const float LethalFallSpeed = 1024;
+ const float SafeFallSpeed = 580;
+ const float DamageForSpeed = (float)100 / (LethalFallSpeed - SafeFallSpeed); // damage per unit per second.
+ public void Simulate( IClient cl )
+ {
+ var FallSpeed = -PreviousZVelocity;
+ if ( FallSpeed > (SafeFallSpeed * Entity.Scale) && Entity.GroundEntity != null )
+ {
+ var FallDamage = (FallSpeed - (SafeFallSpeed * Entity.Scale)) * (DamageForSpeed * Entity.Scale);
+ var info = DamageInfo.Generic( FallDamage ).WithTag( "fall" );
+ Entity.TakeDamage( info );
+ Entity.PlaySound( "fall" );
+ }
+ PreviousZVelocity = Entity.Velocity.z;
+ }
+}