Broken UI and Loading screens

This commit is contained in:
Jan Racek
2026-03-26 19:14:15 +01:00
parent a8aa674a9c
commit d5be174247
6 changed files with 542 additions and 1 deletions

View File

@@ -13,7 +13,7 @@ namespace SplashEdit.RuntimeCode
/// </summary>
public static class PSXUIExporter
{
/// <summary>
/// <summary>
/// Collect all PSXCanvas components and their child UI elements,
/// converting RectTransform coordinates to PS1 pixel space.
/// Also collects and deduplicates custom fonts.
@@ -37,6 +37,42 @@ namespace SplashEdit.RuntimeCode
return new PSXCanvasData[0];
}
return CollectCanvasesInternal(canvases, resolution, out fonts);
}
/// <summary>
/// Collect a single canvas from a prefab instance for loading screen export.
/// The prefab must have a PSXCanvas on its root.
/// Note: Image elements that reference VRAM textures will NOT work in loading screens
/// since the VRAM hasn't been populated yet. Use Box, Text, and ProgressBar only.
/// </summary>
public static PSXCanvasData[] CollectCanvasFromPrefab(GameObject prefab, Vector2 resolution, out PSXFontData[] fonts)
{
if (prefab == null)
{
fonts = new PSXFontData[0];
return new PSXCanvasData[0];
}
PSXCanvas canvas = prefab.GetComponentInChildren<PSXCanvas>(true);
if (canvas == null)
{
Debug.LogWarning($"PSXUIExporter: Prefab '{prefab.name}' has no PSXCanvas component.");
fonts = new PSXFontData[0];
return new PSXCanvasData[0];
}
return CollectCanvasesInternal(new[] { canvas }, resolution, out fonts);
}
/// <summary>
/// Internal shared implementation for canvas collection.
/// Works on an explicit array of PSXCanvas components.
/// </summary>
private static PSXCanvasData[] CollectCanvasesInternal(PSXCanvas[] canvases, Vector2 resolution, out PSXFontData[] fonts)
{
List<PSXFontAsset> uniqueFonts = new List<PSXFontAsset>();
// First pass: collect unique fonts
foreach (PSXCanvas canvas in canvases)
{