diff --git a/Aetheria.State.Daemon/Program.cs b/Aetheria.State.Daemon/Program.cs index 5e33c3ae8..7d422ae00 100644 --- a/Aetheria.State.Daemon/Program.cs +++ b/Aetheria.State.Daemon/Program.cs @@ -746,9 +746,6 @@ static string ParseCultMeshAssetPath(string recordKey) if (text.Length == 0) return ""; - if (text.StartsWith("resources://", StringComparison.OrdinalIgnoreCase)) - return text.Substring("resources://".Length).Trim('/'); - if (!text.StartsWith("cultmesh://", StringComparison.OrdinalIgnoreCase)) return text.Trim('/'); @@ -778,6 +775,7 @@ static string ResolveCultMeshAssetResourcePath(string assetPath) ["map/entity/ship"] = "Sprites/Icons/Stroked/Ship", ["map/entity/orbital"] = "Sprites/Icons/Stroked/orbital", ["map/entity/station"] = "Sprites/Icons/station1", + ["map/entity/projectile"] = "Sprites/Icons/Lightning Bolt", ["map/body/planet"] = "Sprites/Icons/Stroked/Planet", ["map/body/sun"] = "Sprites/Icons/Stroked/Sun", ["map/body/asteroid"] = "Sprites/Icons/Stroked/Planet", diff --git a/Aetheria.State.Verify/Program.cs b/Aetheria.State.Verify/Program.cs index 6984a0a39..8c78e009b 100644 --- a/Aetheria.State.Verify/Program.cs +++ b/Aetheria.State.Verify/Program.cs @@ -11279,6 +11279,8 @@ static void RequireDaemonVersePublication(string root) var daemonSoaDocumentsPath = Path.Combine(root, "Packages", "org.gamecult.aetheria.state", "Runtime", "AetheriaRuntimeDaemonSoaDocuments.cs"); var daemonSoaFramePublisherPath = Path.Combine(root, "Packages", "org.gamecult.aetheria.state", "Runtime", "AetheriaRuntimeDaemonSoaFramePublisher.cs"); var assetDocumentsPath = Path.Combine(root, "Packages", "org.gamecult.aetheria.state", "Runtime", "AetheriaRuntimeAssetDocuments.cs"); + var runtimeAssetsPath = Path.Combine(root, "Packages", "org.gamecult.aetheria.state", "Runtime", "AetheriaRuntimeAssets.cs"); + var runtimeGameDocumentsPath = Path.Combine(root, "Packages", "org.gamecult.aetheria.state", "Runtime", "AetheriaRuntimeGameDocuments.cs"); var daemonRenderAssetCatalogPath = Path.Combine(root, "Assets", "Scripts", "Gameplay", "AetheriaDaemonRenderAssetCatalog.cs"); var daemonIndirectRendererPath = Path.Combine(root, "Assets", "Scripts", "Gameplay", "AetheriaDaemonIndirectRenderer.cs"); var daemonStateRefsPath = Path.Combine(root, "Packages", "org.gamecult.aetheria.state", "Runtime", "AetheriaRuntimeDaemonStateRefs.cs"); @@ -11309,6 +11311,8 @@ static void RequireDaemonVersePublication(string root) daemonSoaDocumentsPath, daemonSoaFramePublisherPath, assetDocumentsPath, + runtimeAssetsPath, + runtimeGameDocumentsPath, daemonRenderAssetCatalogPath, daemonIndirectRendererPath, daemonStateRefsPath, @@ -11348,6 +11352,8 @@ static void RequireDaemonVersePublication(string root) var daemonSoaDocuments = File.ReadAllText(daemonSoaDocumentsPath); var daemonSoaFramePublisher = File.ReadAllText(daemonSoaFramePublisherPath); var assetDocuments = File.ReadAllText(assetDocumentsPath); + var runtimeAssets = File.ReadAllText(runtimeAssetsPath); + var runtimeGameDocuments = File.ReadAllText(runtimeGameDocumentsPath); var daemonRenderAssetCatalog = File.ReadAllText(daemonRenderAssetCatalogPath); var daemonIndirectRenderer = File.ReadAllText(daemonIndirectRendererPath); var daemonStateRefs = File.ReadAllText(daemonStateRefsPath); @@ -11461,6 +11467,8 @@ static void RequireDaemonVersePublication(string root) if (assetDocuments.Contains("UnityAddressable", StringComparison.Ordinal) || assetDocuments.Contains("unity_addressable", StringComparison.Ordinal) || + assetDocuments.Contains("public const string Resources", StringComparison.Ordinal) || + assetDocuments.Contains("\"resources\"", StringComparison.Ordinal) || daemonSoaFramePublisher.Contains("AetheriaRuntimeAssetTransports.Resources", StringComparison.Ordinal) || daemonSoaFramePublisher.Contains("resources://Aetheria/Daemon/EntityProxy", StringComparison.Ordinal) || !daemonSoaFramePublisher.Contains("AetheriaRuntimeAssetTransports.CultMesh", StringComparison.Ordinal) || @@ -11471,6 +11479,15 @@ static void RequireDaemonVersePublication(string root) "Daemon SoA render groups must publish CultMesh CDN asset refs, not renderer-local Resources or Unity Addressables transport."); } + if (runtimeAssets.Contains("sourceTransport", StringComparison.Ordinal) || + runtimeAssets.Contains("resources://", StringComparison.Ordinal) || + runtimeGameDocuments.Contains("resources://", StringComparison.Ordinal) || + daemonHostProgram.Contains("text.StartsWith(\"resources://\"", StringComparison.Ordinal)) + { + throw new InvalidOperationException( + "Aetheria asset refs and daemon CDN requests must stay CultMesh-native; Resources paths are source resolution details, not public transport."); + } + if (daemonRenderAssetCatalog.Contains("Resources.Load", StringComparison.Ordinal) || daemonRenderAssetCatalog.Contains("resources://", StringComparison.Ordinal) || daemonRenderAssetCatalog.Contains("AetheriaRuntimeAssetTransports.Resources", StringComparison.Ordinal) || diff --git a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeAssetDocuments.cs b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeAssetDocuments.cs index 77f884122..cc5836e1e 100644 --- a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeAssetDocuments.cs +++ b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeAssetDocuments.cs @@ -21,7 +21,6 @@ namespace GameCult.Aetheria.State.Verse public static class AetheriaRuntimeAssetTransports { public const string CultMesh = "cultmesh"; - public const string Resources = "resources"; } [MessagePackObject] diff --git a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeAssets.cs b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeAssets.cs index 5b21c8501..9ff77b16e 100644 --- a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeAssets.cs +++ b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeAssets.cs @@ -18,6 +18,7 @@ namespace GameCult.Aetheria.State.Verse Add(entries, MapIcon("entity.ship", "Ship", "Sprites/Icons/Stroked/Ship")); Add(entries, MapIcon("entity.orbital", "Orbital", "Sprites/Icons/Stroked/orbital")); Add(entries, MapIcon("entity.station", "Station", "Sprites/Icons/station1")); + Add(entries, MapIcon("entity.projectile", "Projectile", "Sprites/Icons/Lightning Bolt")); Add(entries, MapIcon("body.planet", "Planet", "Sprites/Icons/Stroked/Planet")); Add(entries, MapIcon("body.sun", "Sun", "Sprites/Icons/Stroked/Sun")); Add(entries, MapIcon("body.asteroid", "Asteroid", "Sprites/Icons/Stroked/Planet")); @@ -63,6 +64,8 @@ namespace GameCult.Aetheria.State.Verse return Sprite("map.entity.station", "Sprites/Icons/station1"); if (kind.IndexOf("orbital", StringComparison.Ordinal) >= 0) return Sprite("map.entity.orbital", "Sprites/Icons/Stroked/orbital"); + if (kind.IndexOf("projectile", StringComparison.Ordinal) >= 0) + return Sprite("map.entity.projectile", "Sprites/Icons/Lightning Bolt"); return Sprite("map.entity.ship", "Sprites/Icons/Stroked/Ship"); } @@ -176,20 +179,13 @@ namespace GameCult.Aetheria.State.Verse string resourcePath, string mimeType) { - var normalizedResourcePath = NormalizeResourcePath(resourcePath); return new AetheriaRuntimeAssetRef { AssetKey = key ?? "", Kind = kind ?? "", Uri = CultMeshAssetUri(key), Transport = AetheriaRuntimeAssetTransports.CultMesh, - MimeType = mimeType ?? "", - Metadata = new Dictionary(StringComparer.Ordinal) - { - ["resourcePath"] = normalizedResourcePath, - ["sourceUri"] = $"resources://{normalizedResourcePath}", - ["sourceTransport"] = AetheriaRuntimeAssetTransports.Resources - } + MimeType = mimeType ?? "" }; } diff --git a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeGameDocuments.cs b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeGameDocuments.cs index 9ea62b37e..899b13bf7 100644 --- a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeGameDocuments.cs +++ b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeGameDocuments.cs @@ -895,9 +895,11 @@ namespace GameCult.Aetheria.State.Verse }, Inventory = Array.Empty(), IconAsset = AetheriaRuntimeAssetRef.FromKey( - "aetheria.asset.sprite.game.projectile", + "map.entity.projectile", AetheriaRuntimeAssetKinds.Sprite, - "resources://Sprites/Icons/Lightning Bolt") + "cultmesh://aetheria/assets/map/entity/projectile", + AetheriaRuntimeAssetTransports.CultMesh, + "image/*") }; }