aboutsummaryrefslogtreecommitdiffstats
path: root/code/pawn/component/FallDamageComponent.cs
blob: 59e75d3fa27e2f4c8d556955c34dc3b78ad04b15 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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;
	}
}