LANTERN P1 step 1: 4-socket kit data model (player-ghost re-bake)
Additive socket data model per Phase1_Combat_Gym_Build_Spec §3 (no behaviour; legacy AbilityRef/AbilityCooldown left intact for the step-2 migration): - AbilitySocket: cold per-socket loadout buffer (EquipmentSlot-modelled, [GhostField] byte SparkId, SendToOwnerType.All, 4 rows baked empty). - SocketCooldown: hot owner-predicted per-socket cooldown (4x [GhostField] uint + Burst-safe switch indexer; SendToOwnerType.All for remote ability-feel parity with AbilityCooldown). - FrameId: replicated [GhostField] byte frame/class signal (SendToOwner; the class source the socket model needs since no single ability id maps 1:1 to a class). Baked onto the player ghost in PlayerAuthoring. L1 clean compile + domain reload. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -109,6 +109,16 @@ namespace ProjectM.Authoring
|
||||
// the Returning edge) + the server-only Blade-Dash per-dash dedup accumulator (non-replicated).
|
||||
AddComponent<BoonEffects>(entity);
|
||||
AddComponent<DashTrailState>(entity);
|
||||
// LANTERN Phase 1 (Step 1): 4-socket kit data model - parallels AbilityRef/AbilityCooldown
|
||||
// (both kept until the AbilityFireSystem migration in Step 2). AbilitySocket = cold per-socket
|
||||
// loadout (EquipmentSlot-modelled, 4 empty rows); SocketCooldown = hot owner-predicted per-socket
|
||||
// cooldown; FrameId = replicated frame/class signal (baked 0, written server-side at frame select).
|
||||
var sockets = AddBuffer<AbilitySocket>(entity);
|
||||
for (int sk = 0; sk < SocketId.Count; sk++)
|
||||
sockets.Add(new AbilitySocket { SparkId = 0 });
|
||||
AddComponent<SocketCooldown>(entity);
|
||||
AddComponent<FrameId>(entity);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user