Inventory: per-player items backbone (DR-026 Phase 0)
Data-driven ItemDatabase catalog + per-player replicated InventorySlot ([GhostField] OwnerSendType.All, a StatModifier twin). Harvest reroutes to the firing player's personal inventory (optional ComponentLookup<GhostOwner> in ResourceHarvestSystem; remainder/un-owned -> ledger); the G-key InventoryDepositRequest RPC moves the bag into the shared ledger the build economy spends. Catalog asset (Aether/Ore/Biomass + Stone Pickaxe) wired into the Gameplay subscene; read-only HUD inventory panel. ushort ItemId subsumes ResourceId; byte Category/Tier baked for gear-tier progression. Session-only (no SaveData bump). Play-validated host+client: catalog baked into both worlds, the re-baked player ghost carries InventorySlot with a clean handshake, a server write replicates to the client owner, the deposit RPC round-trips, and the HUD renders catalog names. See DR-026. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
using Unity.Entities;
|
||||
|
||||
namespace ProjectM.Simulation
|
||||
{
|
||||
/// <summary>
|
||||
/// Singleton handle to the baked item-definition database (config, not replicated — baked identically
|
||||
/// into both worlds from the gameplay subscene, exactly like <see cref="AbilityDatabase"/>). A distinct
|
||||
/// component type, so <c>GetSingleton<ItemDatabase>()</c> resolves independently of the ability
|
||||
/// database (singleton-ness is per type). Optional at runtime: consumers that read it use
|
||||
/// <c>TryGetSingleton</c> and fall back to defaults (e.g. <c>Tuning.DefaultStackMax</c>) so the sim still
|
||||
/// runs before the catalog is authored.
|
||||
/// </summary>
|
||||
public struct ItemDatabase : IComponentData
|
||||
{
|
||||
public BlobAssetReference<ItemDatabaseBlob> Value;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user