From 050b2019bd6faa4275013516870d1ded245ee391 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Mon, 20 Jul 2026 05:05:04 +0100 Subject: [PATCH] Package a visible runtime UI theme --- .../Runtime/EveUnityInputActionBar.cs | 13 +------ .../Runtime/EveUnityThermalHudSink.cs | 13 +------ .../Runtime/EveUnityUiDocumentRuntime.cs | 35 +++++++++++++++++++ .../Runtime/EveUnityUiDocumentRuntime.cs.meta | 2 ++ .../Runtime/EveUnityUiToolkitOverlay.cs | 11 +----- .../EveUnity/UnityDefaultRuntimeTheme.tss | 1 + .../UnityDefaultRuntimeTheme.tss.meta | 12 +++++++ .../EveUnitySceneSurfaceLowererTests.cs | 2 ++ .../org.gamecult.eve.unity-scene/package.json | 2 +- 9 files changed, 56 insertions(+), 35 deletions(-) create mode 100644 packages/org.gamecult.eve.unity-scene/Runtime/EveUnityUiDocumentRuntime.cs create mode 100644 packages/org.gamecult.eve.unity-scene/Runtime/EveUnityUiDocumentRuntime.cs.meta create mode 100644 packages/org.gamecult.eve.unity-scene/Runtime/Resources/EveUnity/UnityDefaultRuntimeTheme.tss create mode 100644 packages/org.gamecult.eve.unity-scene/Runtime/Resources/EveUnity/UnityDefaultRuntimeTheme.tss.meta diff --git a/packages/org.gamecult.eve.unity-scene/Runtime/EveUnityInputActionBar.cs b/packages/org.gamecult.eve.unity-scene/Runtime/EveUnityInputActionBar.cs index b9baf98..d434950 100644 --- a/packages/org.gamecult.eve.unity-scene/Runtime/EveUnityInputActionBar.cs +++ b/packages/org.gamecult.eve.unity-scene/Runtime/EveUnityInputActionBar.cs @@ -252,18 +252,7 @@ namespace GameCult.Eve.UnityScene AttachToDocument(); return; } - _document = GetComponent(); - if (_document == null) - { - var panel = ScriptableObject.CreateInstance(); - panel.name = "Eve playable-world HUD panel"; - panel.scaleMode = PanelScaleMode.ScaleWithScreenSize; - panel.referenceResolution = new Vector2Int(1920, 1080); - panel.match = 0.5f; - _document = gameObject.AddComponent(); - _document.panelSettings = panel; - _document.sortingOrder = 100; - } + _document = EveUnityUiDocumentRuntime.Ensure(gameObject); _root = new VisualElement { name = "eve-input-action-bar" }; _root.AddToClassList("eve-input-action-bar"); _root.style.position = Position.Absolute; diff --git a/packages/org.gamecult.eve.unity-scene/Runtime/EveUnityThermalHudSink.cs b/packages/org.gamecult.eve.unity-scene/Runtime/EveUnityThermalHudSink.cs index dba6538..1ea683d 100644 --- a/packages/org.gamecult.eve.unity-scene/Runtime/EveUnityThermalHudSink.cs +++ b/packages/org.gamecult.eve.unity-scene/Runtime/EveUnityThermalHudSink.cs @@ -30,18 +30,7 @@ namespace GameCult.Eve.UnityScene AttachToDocument(); return; } - _document = GetComponent(); - if (_document == null) - { - var panel = ScriptableObject.CreateInstance(); - panel.name = "Eve playable-world HUD panel"; - panel.scaleMode = PanelScaleMode.ScaleWithScreenSize; - panel.referenceResolution = new Vector2Int(1920, 1080); - panel.match = 0.5f; - _document = gameObject.AddComponent(); - _document.panelSettings = panel; - _document.sortingOrder = 100; - } + _document = EveUnityUiDocumentRuntime.Ensure(gameObject); _root = new VisualElement(); Build(_root); AttachToDocument(); diff --git a/packages/org.gamecult.eve.unity-scene/Runtime/EveUnityUiDocumentRuntime.cs b/packages/org.gamecult.eve.unity-scene/Runtime/EveUnityUiDocumentRuntime.cs new file mode 100644 index 0000000..34fa300 --- /dev/null +++ b/packages/org.gamecult.eve.unity-scene/Runtime/EveUnityUiDocumentRuntime.cs @@ -0,0 +1,35 @@ +using System; +using UnityEngine; +using UnityEngine.UIElements; + +#nullable enable + +namespace GameCult.Eve.UnityScene +{ + internal static class EveUnityUiDocumentRuntime + { + private const string ThemeResource = "EveUnity/UnityDefaultRuntimeTheme"; + + public static UIDocument Ensure(GameObject host) + { + var document = host.GetComponent(); + if (document != null) return document; + + var theme = Resources.Load(ThemeResource); + if (theme == null) + throw new InvalidOperationException($"EveUnity runtime theme resource '{ThemeResource}' is missing."); + + var panel = ScriptableObject.CreateInstance(); + panel.name = "Eve playable-world HUD panel"; + panel.scaleMode = PanelScaleMode.ScaleWithScreenSize; + panel.referenceResolution = new Vector2Int(1920, 1080); + panel.match = 0.5f; + panel.themeStyleSheet = theme; + + document = host.AddComponent(); + document.panelSettings = panel; + document.sortingOrder = 100; + return document; + } + } +} diff --git a/packages/org.gamecult.eve.unity-scene/Runtime/EveUnityUiDocumentRuntime.cs.meta b/packages/org.gamecult.eve.unity-scene/Runtime/EveUnityUiDocumentRuntime.cs.meta new file mode 100644 index 0000000..977f4f6 --- /dev/null +++ b/packages/org.gamecult.eve.unity-scene/Runtime/EveUnityUiDocumentRuntime.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 894b54214cb34993a7984f73cb45349f diff --git a/packages/org.gamecult.eve.unity-scene/Runtime/EveUnityUiToolkitOverlay.cs b/packages/org.gamecult.eve.unity-scene/Runtime/EveUnityUiToolkitOverlay.cs index f4a6202..efd74a1 100644 --- a/packages/org.gamecult.eve.unity-scene/Runtime/EveUnityUiToolkitOverlay.cs +++ b/packages/org.gamecult.eve.unity-scene/Runtime/EveUnityUiToolkitOverlay.cs @@ -56,16 +56,7 @@ namespace GameCult.Eve.UnityScene private void EnsureDocument() { - _document = GetComponent(); - if (_document != null) return; - var panel = ScriptableObject.CreateInstance(); - panel.name = "Eve playable-world surface panel"; - panel.scaleMode = PanelScaleMode.ScaleWithScreenSize; - panel.referenceResolution = new Vector2Int(1920, 1080); - panel.match = 0.5f; - _document = gameObject.AddComponent(); - _document.panelSettings = panel; - _document.sortingOrder = 100; + _document = EveUnityUiDocumentRuntime.Ensure(gameObject); } private void AttachToDocument() diff --git a/packages/org.gamecult.eve.unity-scene/Runtime/Resources/EveUnity/UnityDefaultRuntimeTheme.tss b/packages/org.gamecult.eve.unity-scene/Runtime/Resources/EveUnity/UnityDefaultRuntimeTheme.tss new file mode 100644 index 0000000..51924cb --- /dev/null +++ b/packages/org.gamecult.eve.unity-scene/Runtime/Resources/EveUnity/UnityDefaultRuntimeTheme.tss @@ -0,0 +1 @@ +@import url("unity-theme://default"); diff --git a/packages/org.gamecult.eve.unity-scene/Runtime/Resources/EveUnity/UnityDefaultRuntimeTheme.tss.meta b/packages/org.gamecult.eve.unity-scene/Runtime/Resources/EveUnity/UnityDefaultRuntimeTheme.tss.meta new file mode 100644 index 0000000..b26f42d --- /dev/null +++ b/packages/org.gamecult.eve.unity-scene/Runtime/Resources/EveUnity/UnityDefaultRuntimeTheme.tss.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0f30b970a2764f51ba064b032906259e +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12388, guid: 0000000000000000e000000000000000, type: 0} + disableValidation: 0 + unsupportedSelectorAction: 0 diff --git a/packages/org.gamecult.eve.unity-scene/Tests/Editor/EveUnitySceneSurfaceLowererTests.cs b/packages/org.gamecult.eve.unity-scene/Tests/Editor/EveUnitySceneSurfaceLowererTests.cs index 70f2f48..a65771c 100644 --- a/packages/org.gamecult.eve.unity-scene/Tests/Editor/EveUnitySceneSurfaceLowererTests.cs +++ b/packages/org.gamecult.eve.unity-scene/Tests/Editor/EveUnitySceneSurfaceLowererTests.cs @@ -11,6 +11,7 @@ using NUnit.Framework; using UnityEngine; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; +using UnityEngine.UIElements; #nullable enable @@ -1100,6 +1101,7 @@ namespace GameCult.Eve.UnityScene.Tests Assert.That(hostObject.GetComponent(), Is.Not.Null); Assert.That(hostObject.GetComponent(), Is.Not.Null); Assert.That(hostObject.GetComponent().Root, Is.Not.Null); + Assert.That(hostObject.GetComponent().panelSettings.themeStyleSheet, Is.Not.Null); Assert.That(bootstrap.CameraTransform, Is.Not.Null); Assert.That(provider.RefreshCount, Is.EqualTo(1)); diff --git a/packages/org.gamecult.eve.unity-scene/package.json b/packages/org.gamecult.eve.unity-scene/package.json index 4e417cf..c84f62f 100644 --- a/packages/org.gamecult.eve.unity-scene/package.json +++ b/packages/org.gamecult.eve.unity-scene/package.json @@ -1,7 +1,7 @@ { "name": "org.gamecult.eve.unity-scene", "displayName": "Eve Unity Scene Lowering", - "version": "0.3.102", + "version": "0.3.103", "unity": "6000.0", "description": "Provider-agnostic Unity scene shell for gamecult.eve.surface.v1 interactive world surfaces.", "dependencies": {