Create FPS Test minigame with other shit

This commit is contained in:
Keenan Turley
2023-08-03 21:32:33 -07:00
parent bdb25fd3ce
commit 97a2442d03
15 changed files with 758 additions and 13 deletions

View File

@@ -0,0 +1,164 @@
using Sandbox;
using System.ComponentModel;
using LuckerGame.Minigames.FpsTest.Weapons;
namespace LuckerGame.Minigames.FpsTest;
public partial class Pawn : AnimatedEntity
{
[Net, Predicted]
public FpsWeapon ActiveFpsWeapon { get; set; }
public Vector3 InputDirection
{
get => PropertyProxy?.InputDirection ?? Vector3.Zero;
set
{
if ( PropertyProxy == null ) return;
PropertyProxy.InputDirection = value;
}
}
public Angles ViewAngles {
get => PropertyProxy?.ViewAngles ?? Angles.Zero;
set
{
if ( PropertyProxy == null ) return;
PropertyProxy.ViewAngles = value;
}
}
/// <summary>
/// Position a player should be looking from in world space.
/// </summary>
[Browsable( false )]
public Vector3 EyePosition
{
get => Transform.PointToWorld( EyeLocalPosition );
set => EyeLocalPosition = Transform.PointToLocal( value );
}
/// <summary>
/// Position a player should be looking from in local to the entity coordinates.
/// </summary>
[Net, Predicted, Browsable( false )]
public Vector3 EyeLocalPosition { get; set; }
/// <summary>
/// Rotation of the entity's "eyes", i.e. rotation for the camera when this entity is used as the view entity.
/// </summary>
[Browsable( false )]
public Rotation EyeRotation
{
get => Transform.RotationToWorld( EyeLocalRotation );
set => EyeLocalRotation = Transform.RotationToLocal( value );
}
/// <summary>
/// Rotation of the entity's "eyes", i.e. rotation for the camera when this entity is used as the view entity. In local to the entity coordinates.
/// </summary>
[Net, Predicted, Browsable( false )]
public Rotation EyeLocalRotation { get; set; }
public BBox Hull
{
get => new
(
new Vector3( -16, -16, 0 ),
new Vector3( 16, 16, 64 )
);
}
[BindComponent] public PawnController Controller { get; }
[BindComponent] public PawnAnimator Animator { get; }
public override Ray AimRay => new Ray( EyePosition, EyeRotation.Forward );
private PawnPropertyProxyComponent PropertyProxy { get => Owner?.Components.Get<PawnPropertyProxyComponent>(); }
/// <summary>
/// Called when the entity is first created
/// </summary>
public override void Spawn()
{
SetModel( "models/citizen/citizen.vmdl" );
EnableDrawing = true;
EnableHideInFirstPerson = true;
EnableShadowInFirstPerson = true;
Components.Create<PawnController>();
Components.Create<PawnAnimator>();
}
public void SetActiveWeapon( FpsWeapon fpsWeapon )
{
ActiveFpsWeapon?.OnHolster();
ActiveFpsWeapon = fpsWeapon;
ActiveFpsWeapon.OnEquip( this );
}
public void DressFromClient( IClient cl )
{
var c = new ClothingContainer();
c.LoadFromClient( cl );
c.DressEntity( this );
}
public override void Simulate( IClient cl )
{
SimulateRotation();
Controller?.Simulate( cl );
Animator?.Simulate();
ActiveFpsWeapon?.Simulate( cl );
EyeLocalPosition = Vector3.Up * (64f * Scale);
}
public override void BuildInput()
{
InputDirection = Input.AnalogMove;
if ( Input.StopProcessing )
return;
}
public override void FrameSimulate( IClient cl )
{
SimulateRotation();
}
public TraceResult TraceBBox( Vector3 start, Vector3 end, float liftFeet = 0.0f )
{
return TraceBBox( start, end, Hull.Mins, Hull.Maxs, liftFeet );
}
public TraceResult TraceBBox( Vector3 start, Vector3 end, Vector3 mins, Vector3 maxs, float liftFeet = 0.0f )
{
if ( liftFeet > 0 )
{
start += Vector3.Up * liftFeet;
maxs = maxs.WithZ( maxs.z - liftFeet );
}
var tr = Trace.Ray( start, end )
.Size( mins, maxs )
.WithAnyTags( "solid", "playerclip", "passbullets" )
.Ignore( this )
.Run();
return tr;
}
public void SetupOwner( Entity owner )
{
Owner = owner;
owner.Components.GetOrCreate<PawnPropertyProxyComponent>();
}
protected void SimulateRotation()
{
EyeRotation = ViewAngles.ToRotation();
Rotation = ViewAngles.WithPitch( 0f ).ToRotation();
}
}