ControlsPaintReview.cs
using Sandbox;
namespace PaintballBaddies;
public sealed class ControlsPaintReview : Component
{
[Property] public string CaptureId { get; set; }="";
[Property] public bool ShowMenu { get; set; }
private int frame;
private PaintballControls controls;
protected override void OnUpdate()
{
frame++;
if(frame==30)
{
var model=Scene.GetAllComponents<ArenaOpponent>().First(x=>x.WorldPosition.z>900);
model.Components.Create<PaintballCombatant>().Team=1;
var collider=model.Components.Create<BoxCollider>();collider.Scale=new Vector3(28,28,66);collider.Center=new Vector3(0,0,33);
}
if(frame!=90)return;
controls=Scene.GetAllComponents<PaintballControls>().First();
var old=controls.Bindings["cover"];
var other=controls.Bindings["vault"];
var rebound=controls.Rebind("cover",other) && controls.Bindings["vault"]==old;
controls.Rebind("cover",old);
var restored=controls.Bindings["cover"]==old && controls.Bindings["vault"]==other;
var actor=Scene.GetAllComponents<ArenaOpponent>().First(x=>x.WorldPosition.z>900);
var impacts=PaintImpactSystem.Find(Scene);
int hits=0;
for(int i=0;i<16;i++)
{
var spot=actor.WorldPosition+Vector3.Up*(35+i%4*5)+Vector3.Right*(i%3-1)*3;
var ray=Scene.Trace.Ray(spot-Vector3.Forward*100,spot+Vector3.Forward*10).Run();
if(ray.Hit && PaintballCombatant.Find(ray.GameObject)==actor.Components.Get<PaintballCombatant>())
{impacts.Spawn(ray,new Color(1,.12f,.6f));hits++;}
}
var audio=Sound.Play("sounds/paintball/marker.sound",Scene.Camera.WorldPosition+Scene.Camera.WorldRotation.Forward*20);
var definition=ResourceLibrary.Get<SoundEvent>("sounds/paintball/marker.sound");
Log.Info("CONTROLS_PAINT_REVIEW "+Json.Serialize(new {capture_id=CaptureId,rebound,restored,hits,
marks=actor.Components.Get<CharacterPaint>()?.Count,master_volume=Sound.MasterVolume,
sound_valid=audio.IsValid,sound_volume=audio.Volume,event_volume=definition.Volume.FixedValue,event_sounds=definition.Sounds,listener=Sound.Listener.Position,
camera=Scene.Camera.WorldPosition,flight_speed=PaintballFlight.Speed,flight_lifetime=PaintballFlight.Lifetime}));
if(ShowMenu)controls.Toggle();
}
protected override void OnDestroy(){if(controls.IsValid() && controls.Open)controls.Toggle();}
}