Files
Project-M/Assets/_Project/Scripts/Simulation/Debug/DevTelemetry.cs
T
2026-06-09 23:26:20 -07:00

50 lines
2.2 KiB
C#

using Unity.Entities;
using Unity.NetCode;
namespace ProjectM.Simulation
{
/// <summary>
/// MC-0 — server-only dev-telemetry accumulator (a singleton). Counters are incremented at the
/// combat stamp sites (wired in MC-1+) so the fun-gate is MEASURED, not argued. NOT a
/// <c>[GhostField]</c> (no ghost-hash change); shipped to dev clients via a periodic
/// <see cref="DebugTelemetryReport"/> RPC. The component type is unconditional (stable across
/// release/dev peers); only the dev send/sample/receive SYSTEMS are <c>#if UNITY_EDITOR</c>.
/// </summary>
public struct DevTelemetry : IComponentData
{
/// <summary>Hits a dash i-frame window negated (incremented in HealthApplyDamageSystem, MC-1).</summary>
public uint DashIFrameNegatedHits;
/// <summary>Dashes whose i-frame window negated nothing (spam signal, MC-1).</summary>
public uint DashesWasted;
/// <summary>Charger lunges that whiffed and opened a punish window (EnemyAISystem, MC-1).</summary>
public uint ChargerWhiffWindowsOpened;
/// <summary>Of those, the ones the player actually punished (MC-1).</summary>
public uint ChargerWhiffPunishesLanded;
/// <summary>Living Husks, sampled each report — proof-of-life (changes during play, no MC-1 dep).</summary>
public uint LiveEnemyCount;
/// <summary>Server tick at the last sample — proof-of-life that the pipe is live.</summary>
public uint LastSampleTick;
}
/// <summary>
/// MC-0 — server → dev-client telemetry snapshot (sent periodically by the editor-only sampler).
/// <b>Unconditional wire type</b> (like <see cref="DebugCommandRequest"/>) so the reflection-built
/// RpcCollection hash matches across release/dev peers; only the send/receive SYSTEMS are
/// <c>#if UNITY_EDITOR</c>. The dev overlay reads the latest snapshot to show live fun-gate counters.
/// </summary>
public struct DebugTelemetryReport : IRpcCommand
{
public uint DashIFrameNegatedHits;
public uint DashesWasted;
public uint ChargerWhiffWindowsOpened;
public uint ChargerWhiffPunishesLanded;
public uint LiveEnemyCount;
public uint LastSampleTick;
}
}