Code/PlayerControllerPlus/Modes/Walk.cs
namespace Sandbox.MovementPlus;

public class MoveModeWalkPlus : MoveModePlus
{
	public override bool AllowGrounding => true;
	public override bool AllowFalling => true;
	public override bool UseLateralAirControl => true;

	public override int Score( PlayerControllerPlus controller ) => 0;

	public override void AddVelocity()
	{
		Controller.WishVelocity = Controller.WishVelocity.WithZ( 0 );
		base.AddVelocity();
	}

	public override void PrePhysicsStep()
	{
		base.PrePhysicsStep();

		if ( Controller.WalkStepUpHeight > 0 )
		{
			TrySteppingUp( Controller.WalkStepUpHeight );
		}
	}

	public override void PostPhysicsStep()
	{
		base.PostPhysicsStep();

		StickToGround( Controller.WalkStepDownHeight );
	}

	public override bool IsStandableSurface( in SceneTraceResult result )
	{
		if ( Vector3.GetAngle( Vector3.Up, result.Normal ) > Controller.WalkGroundAngle )
			return false;

		return true;
	}

	public override Vector3 UpdateMove( Rotation eyes, Vector3 input )
	{
		eyes = eyes.Angles() with { pitch = 0 };

		return base.UpdateMove( eyes, input );
	}
}