599b9b4255
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>
18 lines
789 B
C#
18 lines
789 B
C#
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;
|
|
}
|
|
}
|