aboutsummaryrefslogtreecommitdiffstats
path: root/code/pawn/component/FallDamageComponent.cs
blob: 97d24a46098bd4dedc50a87fd31ef5b1056a524a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using Sandbox;

namespace MurderGame;

public class FallDamageComponent : EntityComponent<Player>, ISingletonComponent
{
	private const float LethalFallSpeed = 1024;
	private const float SafeFallSpeed = 580;
	private const float DamageForSpeed = 100 / (LethalFallSpeed - SafeFallSpeed); // damage per unit per second.
	private float PreviousZVelocity;

	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;
	}
}