FastCoverReview.cs
using Sandbox;
namespace PaintballBaddies;
public sealed class FastCoverReview : Component
{
PlayerController player;CoverController cover;float elapsed,peekTime;int stage;float peekHold;
protected override void OnUpdate()
{
elapsed+=Time.Delta;
if(stage==0 && elapsed>1)
{
player=Scene.GetAllComponents<PlayerController>().First();cover=player.Components.Get<CoverController>();
cover.Leave();cover.TestInput=true;player.UseLookControls=false;player.WorldPosition=new(-10,0,2);player.EyeAngles=new(0,0,0);stage=1;elapsed=0;
}
else if(stage==1&&elapsed>.5f){Log.Info("FAST_COVER attach="+cover.TryEnter());cover.TestAim=true;stage=2;elapsed=0;}
else if(stage==2)
{
if(cover.Peeking)peekHold+=Time.Delta;
if(peekHold>.8f || elapsed>3)
{
peekTime=elapsed;Log.Info("FAST_COVER "+Json.Serialize(new{cover.Peeking,Seconds=peekTime,Standing=!player.IsDucking,Position=player.WorldPosition.ToString(),MarkerAlignment=Vector3.Dot(player.Components.Get<PaintballMarker>().PresentationAnchor.WorldRotation.Forward,player.EyeAngles.ToRotation().Forward)}));cover.TestAim=false;elapsed=0;stage=3;
}
}
else if(stage==3&&elapsed>1){Log.Info("FAST_RETURN "+Json.Serialize(new{cover.Attached,cover.Peeking,Position=player.WorldPosition.ToString()}));stage=4;}
}
protected override void OnDestroy(){if(cover.IsValid()){cover.Leave();cover.TestInput=false;}if(player.IsValid())player.UseLookControls=true;}
}