RaisedMarkerReview.cs
using Sandbox;
namespace PaintballBaddies;
public sealed class RaisedMarkerReview : Component
{
PlayerController player; CoverController cover; GameObject obstacle; float time; int phase;
protected override void OnUpdate()
{
time+=Time.Delta;if(time<1)return;
if(phase==0)
{
player=Scene.GetAllComponents<PlayerController>().First();cover=player.Components.Get<CoverController>();
player.UseInputControls=player.UseLookControls=false;
obstacle=TrainingRange.Box(null,"Raised marker review cover",new(-250,-700,27.5f),new(35,140,55),Color.Gray,true);
obstacle.Components.Create<CoverSurface>();
player.WorldPosition=new(-310,-700,1);player.EyeAngles=new(0,0,0);player.Body.Velocity=Vector3.Zero;
cover.TestInput=true;phase=1;time=0;
}
else if(phase==1){cover.TryEnter();cover.TestAim=true;phase=2;time=0;}
else if(phase==2&&time>3)
{
var weapon=player.Components.Get<PaintballMarker>();var pose=player.Components.Get<CitizenPlayerPresentation>();
var trace=Scene.Trace.Sphere(.35f,weapon.Muzzle,weapon.Muzzle+Vector3.Forward*80).IgnoreGameObjectHierarchy(player.GameObject).WithoutTags("paintball_debris").WithSurfaceMeshes().Run();
Log.Info("RAISED_MARKER "+Json.Serialize(new{cover.Attached,cover.Peeking,pose.CoverGunLift,Muzzle=weapon.Muzzle.ToString(),Clear=!trace.Hit,Obstacle=trace.GameObject?.Name}));
PaintImpactSystem.Find(Scene).Clear();weapon.FireAt(new Vector3(1168,-700,60));phase=3;time=0;
}
else if(phase==3&&time>1)
{
var mark=PaintImpactSystem.Find(Scene).OldestDecal;
Log.Info("RAISED_SHOT receiver="+mark?.GameObject.Parent?.Name);
cover.TestAim=false;phase=4;time=0;
}
else if(phase==4&&time>1)
{
Log.Info("RAISED_RETURN "+Json.Serialize(new{cover.Attached,cover.Peeking,player.IsDucking,Lift=player.Components.Get<CitizenPlayerPresentation>().CoverGunLift}));phase=5;
}
}
protected override void OnDestroy(){obstacle?.Destroy();if(cover.IsValid()){cover.Leave();cover.TestInput=false;}if(player.IsValid())player.UseInputControls=player.UseLookControls=true;}
}