RosterHelmetChecks.cs
using Sandbox;
namespace PaintballBaddies;
/// <summary>Opt-in checks for swaps between integrated and separate protective equipment.</summary>
public sealed class RosterHelmetChecks : Component
{
private readonly int[] order = { 0, 1, 2, 3, 5, 0, 4 };
private float elapsed;
private int phase;
private RosterHelmet gear;
private void CheckEquipment(RosterSelection roster)
{
var body=roster.Components.Get<PlayerController>().Renderer;
var path=RosterSelection.GetModelPath(roster.Selected);
var integrated=CoveredRosterAssets.CharacterIndex(path)>=0;
var name=roster.CharacterName;
Check($"{name} correct body",body.Model?.Name==path);
var helmets=Scene.GetAllComponents<ModelRenderer>().Count(x=>x.GameObject.Name.EndsWith(" fitted helmet"));
var seals=Scene.GetAllComponents<SkinnedModelRenderer>().Count(x=>x.GameObject.Name.EndsWith(" fitted neck seal"));
Check($"{name} no duplicate protective gear",roster.Components.Get<RosterHelmet>()?.Equipped==!integrated
&& helmets==(integrated ? 0 : 1) && seals==(integrated ? 0 : 1));
var expected=CoveredRosterAssets.ReloadTrack(path);
var track=roster.Components.Get<ReloadPresentationTrack>();
Check($"{name} correct belt gear",expected is null ? !track.IsValid() : track.IsValid() && track.TrackPath==expected && track.Docked);
}
protected override void OnUpdate()
{
var roster=Scene.GetAllComponents<RosterSelection>().FirstOrDefault();
if (!roster.IsValid()) return;
elapsed+=Time.Delta;
if (elapsed<.5f) return;
elapsed=0;
if (!gear.IsValid()) gear=roster.Components.Get<RosterHelmet>();
if (phase==0) roster.Select(order[0]);
else if (phase<=order.Length)
{
CheckEquipment(roster);
if (phase<order.Length) roster.Select(order[phase]);
else
{
var player=roster.Components.Get<PlayerController>();
Check("normal controls retained",player.UseInputControls && player.UseCameraControls && player.UseLookControls);
gear.Enabled=false;
}
}
else if (phase==order.Length+1)
{
Check("disabled separate equipment clears",!gear.Equipped
&& !Scene.GetAllComponents<ModelRenderer>().Any(x=>x.GameObject.Name.EndsWith(" fitted helmet"))
&& !Scene.GetAllComponents<SkinnedModelRenderer>().Any(x=>x.GameObject.Name.EndsWith(" fitted neck seal")));
gear.Enabled=true;
}
else
{
CheckEquipment(roster);roster.Select(0);
Log.Info("ROSTER_GEAR COMPLETE");Destroy();
}
phase++;
}
private static void Check(string name,bool passed)=>Log.Info($"ROSTER_GEAR {(passed ? "PASS" : "FAIL")} {name}");
}