Player/Mechanics/CrouchMechanic.cs
namespace Opium;
public partial class CrouchMechanic : PlayerMechanic
{
public override bool ShouldBecomeActive()
{
return Player.Input.WantsToCrouch && !HasTag( "sprint" ) && !HasTag( "takeover" );
}
bool CanUncrouch()
{
var tr = Player.CharacterController.TraceDirection( Vector3.Up * ( GetEyeHeight().Value ) );
return !tr.Hit; // hit nothing - we can!
}
public override bool ShouldBecomeInactive()
{
if ( IsActive )
{
if ( !CanUncrouch() ) return false;
}
return base.ShouldBecomeInactive();
}
public override IEnumerable<string> GetTags()
{
yield return "crouch";
}
public override float? GetEyeHeight()
{
return 32f;
}
public override float? GetGroundFriction()
{
return base.GetGroundFriction() * 2f;
}
public override float? GetSpeed()
{
return 77.0f;
}
}