Keep daemon assets CultMesh-native

This commit is contained in:
Meta Vens 2026-07-06 02:45:16 +01:00
commit cf6e7ffbc6
5 changed files with 26 additions and 14 deletions

View file

@ -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",

View file

@ -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) ||

View file

@ -21,7 +21,6 @@ namespace GameCult.Aetheria.State.Verse
public static class AetheriaRuntimeAssetTransports
{
public const string CultMesh = "cultmesh";
public const string Resources = "resources";
}
[MessagePackObject]

View file

@ -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<string, string>(StringComparer.Ordinal)
{
["resourcePath"] = normalizedResourcePath,
["sourceUri"] = $"resources://{normalizedResourcePath}",
["sourceTransport"] = AetheriaRuntimeAssetTransports.Resources
}
MimeType = mimeType ?? ""
};
}

View file

@ -895,9 +895,11 @@ namespace GameCult.Aetheria.State.Verse
},
Inventory = Array.Empty<AetheriaRuntimeInventoryItem>(),
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/*")
};
}