Run Re-Do
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
using Unity.Entities;
|
||||
using Unity.NetCode;
|
||||
|
||||
namespace ProjectM.Simulation
|
||||
{
|
||||
/// <summary>
|
||||
/// A player's private choice-of-3 boon offer for the just-cleared room. OWNER-ONLY replication
|
||||
/// (<see cref="SendToOwnerType.SendToOwner"/>): the offer is an observe-only HUD read of the LOCAL player — no
|
||||
/// prediction, no teammate read — so the traffic-minimal owner-only path is correct (Play-validated at Step 9;
|
||||
/// the proven fallback is <see cref="SendToOwnerType.All"/>, which for HUD purposes still only surfaces each
|
||||
/// player's component on the client that owns that ghost). Written by <c>BoonOfferSystem</c> on the RoomReward
|
||||
/// entry edge (options drawn deterministically from Hash(RunSeed, room, NetworkId)); <see cref="Pending"/> is
|
||||
/// cleared by <c>BoonApplySystem</c> on a valid pick and zeroed by the Returning-edge strip. INERT until Step 9 —
|
||||
/// baked at Step 3 so the player ghost re-bakes exactly ONCE for the whole redesign.
|
||||
/// </summary>
|
||||
[GhostComponent(OwnerSendType = SendToOwnerType.SendToOwner)]
|
||||
public struct BoonOffer : IComponentData
|
||||
{
|
||||
/// <summary>1 = awaiting this player's pick.</summary>
|
||||
[GhostField] public byte Pending;
|
||||
/// <summary>Boon catalog id of option 0.</summary>
|
||||
[GhostField] public byte Option0;
|
||||
/// <summary>Boon catalog id of option 1.</summary>
|
||||
[GhostField] public byte Option1;
|
||||
/// <summary>Boon catalog id of option 2.</summary>
|
||||
[GhostField] public byte Option2;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c3c9cb8a1b819fd4b8474206e766076e
|
||||
@@ -0,0 +1,20 @@
|
||||
using Unity.Entities;
|
||||
using Unity.NetCode;
|
||||
|
||||
namespace ProjectM.Simulation
|
||||
{
|
||||
/// <summary>
|
||||
/// The player's expedition ready-check flag — a plain send-to-all <c>[GhostField]</c> byte on the player ghost so
|
||||
/// EVERY client can render the "N/M READY" staging panel (owner-only would hide teammates' readiness). Written
|
||||
/// server-only by <c>ReadyToggleSystem</c> from the <see cref="ReadyToggleRequest"/> RPC — honored during Staging
|
||||
/// AND the Launching countdown (an un-ready during the countdown is the launch-abort escape hatch); cleared for
|
||||
/// all players by <c>RunDirectorSystem</c> on the Returning edge. The N/M derivation counts live PlayerTag ghosts,
|
||||
/// which is valid ONLY because the party is co-located at base while Staging (the co-location invariant — N7);
|
||||
/// ready toggles are refused in every other lifecycle state.
|
||||
/// </summary>
|
||||
public struct PlayerReady : IComponentData
|
||||
{
|
||||
/// <summary>1 = ready to launch; 0 = not ready.</summary>
|
||||
[GhostField] public byte Value;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5423c043f8023a246b4244eb34e5fbdd
|
||||
Reference in New Issue
Block a user