Fix blank mission results panel; record Workshop 0.0.127
continuous-integration/drone/push Build is passing
continuous-integration/drone/push Build is passing
This commit is contained in:
+5
-1
@@ -1,6 +1,10 @@
|
||||
# Changelog
|
||||
|
||||
Latest published Workshop version: **0.0.126**
|
||||
Latest published Workshop version: **0.0.127**
|
||||
|
||||
## 2026-10-30 — Results panel visibility
|
||||
|
||||
- Fixed the blank end-of-mission panel so victory, failure and mission statistics are visible before restart.
|
||||
|
||||
## 2026-10-30 — Community mission statistics
|
||||
|
||||
|
||||
@@ -1,29 +1,34 @@
|
||||
SizeLayoutWidgetClass {
|
||||
Name "ERR_RoundResults"
|
||||
AllowWidthOverride 1
|
||||
WidthOverride 1100
|
||||
AllowHeightOverride 1
|
||||
HeightOverride 620
|
||||
Slot LayoutSlot { HorizontalAlign 1 VerticalAlign 1 }
|
||||
Slot OverlayWidgetSlot { HorizontalAlign 1 VerticalAlign 1 }
|
||||
components { SCR_GameOverScreenContentUIComponent "{6E81CD1BC83BE245}" { } }
|
||||
{
|
||||
FrameWidgetClass {
|
||||
Name "ResultFrame"
|
||||
Slot AlignableSlot { HorizontalAlign 3 VerticalAlign 3 }
|
||||
Slot OverlayWidgetSlot { HorizontalAlign 3 VerticalAlign 3 }
|
||||
{
|
||||
TextWidgetClass {
|
||||
Name "GameOver_State"
|
||||
Slot FrameWidgetSlot { Anchor 0 0 1 0 OffsetLeft 20 OffsetTop 0 OffsetRight 20 SizeY 52 OffsetBottom -52 }
|
||||
Color 1 1 1 1 "Font Size" 36 "Min Font Size" 36
|
||||
Text "Round ended"
|
||||
FontProperties FontProperties { Font "{EABA4FE9D014CCEF}UI/Fonts/RobotoCondensed/RobotoCondensed_Bold.fnt" }
|
||||
}
|
||||
TextWidgetClass {
|
||||
Name "GameOver_Description"
|
||||
Slot FrameWidgetSlot { Anchor 0 0 1 0 OffsetLeft 20 OffsetTop 58 OffsetRight 20 SizeY 64 OffsetBottom -122 }
|
||||
Color 0.9 0.92 0.94 1 "Font Size" 22 "Min Font Size" 22 Wrap 1
|
||||
FontProperties FontProperties { Font "{3E7733BAC8C831F6}UI/Fonts/RobotoCondensed/RobotoCondensed_Regular.fnt" }
|
||||
}
|
||||
TextWidgetClass {
|
||||
Name "StatisticsHeading"
|
||||
Slot FrameWidgetSlot { Anchor 0 0 1 0 OffsetLeft 20 OffsetTop 132 OffsetRight 20 SizeY 36 OffsetBottom -168 }
|
||||
Color 0.9 0.8 0.5 1 "Font Size" 26 "Min Font Size" 26 Text "Mission statistics"
|
||||
FontProperties FontProperties { Font "{EABA4FE9D014CCEF}UI/Fonts/RobotoCondensed/RobotoCondensed_Bold.fnt" }
|
||||
}
|
||||
ScrollLayoutWidgetClass {
|
||||
Name "StatisticsScroll"
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
14:37:48.098 SCRIPT : ERR SMOKE PASS: community private credential saved
|
||||
14:37:48.099 SCRIPT : ERR SMOKE PASS: community native credential serialization preserves installation secret
|
||||
14:37:48.099 SCRIPT : ERR SMOKE PASS: community native JSON roundtrip and current map/result validation
|
||||
14:37:48.099 SCRIPT : ERR SMOKE PASS: community another map is rejected
|
||||
14:37:48.241 SCRIPT : ERR SMOKE PASS: community native defeat screen requested
|
||||
14:37:51.708 SCRIPT : ERR RESULT GEOMETRY: Base_ContentHolder x=0 y=0 width=501 height=225 visible=1 opacity=0.690736
|
||||
14:37:51.709 SCRIPT : ERR RESULT GEOMETRY: ERR_RoundResults x=250.5 y=95 width=0 height=35 visible=1 opacity=1
|
||||
14:37:51.709 SCRIPT : ERR RESULT GEOMETRY: ResultFrame x=250.5 y=95 width=0 height=35 visible=1 opacity=1
|
||||
14:37:51.709 SCRIPT : ERR RESULT GEOMETRY: GameOver_State x=254.667 y=95 width=-8.33334 height=10.8333 visible=1 opacity=1
|
||||
14:37:51.709 SCRIPT : ERR RESULT GEOMETRY: StatisticsScroll x=254.667 y=132.083 width=-8.33334 height=-4.58333 visible=1 opacity=1
|
||||
14:37:51.709 SCRIPT : ERR RESULT GEOMETRY: RoundStatistics x=254.667 y=132.083 width=-14.1667 height=449.375 visible=1 opacity=1
|
||||
14:37:51.710 SCRIPT : ERR SMOKE PASS: community open defeat screen refreshes after late community result
|
||||
14:37:56.799 SCRIPT : ERR SMOKE COMPLETE: community defeat native credentials, JSON validation and result screen refresh
|
||||
@@ -0,0 +1,19 @@
|
||||
14:39:58.721 SCRIPT : ERR SMOKE PASS: community private credential saved
|
||||
14:39:58.724 SCRIPT : ERR SMOKE PASS: community native credential serialization preserves installation secret
|
||||
14:39:58.724 SCRIPT : ERR SMOKE PASS: community native JSON roundtrip and current map/result validation
|
||||
14:39:58.724 SCRIPT : ERR SMOKE PASS: community another map is rejected
|
||||
14:39:58.841 SCRIPT : ERR SMOKE PASS: community native defeat screen requested
|
||||
14:40:02.313 SCRIPT : ERR RESULT GEOMETRY: Base_ContentHolder x=0 y=0 width=501 height=225 visible=1 opacity=0.681523
|
||||
14:40:02.314 SCRIPT : ERR SMOKE PASS: community Base_ContentHolder has positive rendered dimensions
|
||||
14:40:02.314 SCRIPT : ERR RESULT GEOMETRY: ERR_RoundResults x=135.917 y=47.9167 width=229.167 height=129.167 visible=1 opacity=1
|
||||
14:40:02.314 SCRIPT : ERR SMOKE PASS: community ERR_RoundResults has positive rendered dimensions
|
||||
14:40:02.315 SCRIPT : ERR RESULT GEOMETRY: ResultFrame x=135.917 y=47.9167 width=229.167 height=129.167 visible=1 opacity=1
|
||||
14:40:02.315 SCRIPT : ERR SMOKE PASS: community ResultFrame has positive rendered dimensions
|
||||
14:40:02.315 SCRIPT : ERR RESULT GEOMETRY: GameOver_State x=140.083 y=47.9167 width=220.833 height=10.8333 visible=1 opacity=1
|
||||
14:40:02.315 SCRIPT : ERR SMOKE PASS: community GameOver_State has positive rendered dimensions
|
||||
14:40:02.315 SCRIPT : ERR RESULT GEOMETRY: StatisticsScroll x=140.083 y=85 width=220.833 height=89.5833 visible=1 opacity=1
|
||||
14:40:02.316 SCRIPT : ERR SMOKE PASS: community StatisticsScroll has positive rendered dimensions
|
||||
14:40:02.316 SCRIPT : ERR RESULT GEOMETRY: RoundStatistics x=140.083 y=85 width=215 height=52.1875 visible=1 opacity=1
|
||||
14:40:02.316 SCRIPT : ERR SMOKE PASS: community RoundStatistics has positive rendered dimensions
|
||||
14:40:02.316 SCRIPT : ERR SMOKE PASS: community open defeat screen refreshes after late community result
|
||||
14:40:07.386 SCRIPT : ERR SMOKE COMPLETE: community defeat native credentials, JSON validation and result screen refresh
|
||||
@@ -0,0 +1,18 @@
|
||||
14:42:23.611 SCRIPT : ERR SMOKE PASS: community private credential saved
|
||||
14:42:23.612 SCRIPT : ERR SMOKE PASS: community native credential serialization preserves installation secret
|
||||
14:42:23.612 SCRIPT : ERR SMOKE PASS: community native JSON roundtrip and current map/result validation
|
||||
14:42:23.612 SCRIPT : ERR SMOKE PASS: community another map is rejected
|
||||
14:42:23.701 SCRIPT : ERR SMOKE PASS: community native victory screen requested
|
||||
14:42:27.136 SCRIPT : ERR RESULT GEOMETRY: Base_ContentHolder x=0 y=0 width=501 height=225 visible=1 opacity=0.71436
|
||||
14:42:27.136 SCRIPT : ERR SMOKE PASS: community Base_ContentHolder has positive rendered dimensions
|
||||
14:42:27.136 SCRIPT : ERR RESULT GEOMETRY: ERR_RoundResults x=135.917 y=47.9167 width=229.167 height=129.167 visible=1 opacity=1
|
||||
14:42:27.136 SCRIPT : ERR SMOKE PASS: community ERR_RoundResults has positive rendered dimensions
|
||||
14:42:27.137 SCRIPT : ERR RESULT GEOMETRY: ResultFrame x=135.917 y=47.9167 width=229.167 height=129.167 visible=1 opacity=1
|
||||
14:42:27.137 SCRIPT : ERR SMOKE PASS: community ResultFrame has positive rendered dimensions
|
||||
14:42:27.137 SCRIPT : ERR RESULT GEOMETRY: GameOver_State x=140.083 y=47.9167 width=220.833 height=10.8333 visible=1 opacity=1
|
||||
14:42:27.137 SCRIPT : ERR SMOKE PASS: community GameOver_State has positive rendered dimensions
|
||||
14:42:27.137 SCRIPT : ERR RESULT GEOMETRY: StatisticsScroll x=140.083 y=85 width=220.833 height=89.5833 visible=1 opacity=1
|
||||
14:42:27.137 SCRIPT : ERR SMOKE PASS: community StatisticsScroll has positive rendered dimensions
|
||||
14:42:27.137 SCRIPT : ERR RESULT GEOMETRY: RoundStatistics x=140.083 y=85 width=215 height=52.1875 visible=1 opacity=1
|
||||
14:42:27.138 SCRIPT : ERR SMOKE PASS: community RoundStatistics has positive rendered dimensions
|
||||
14:42:27.138 SCRIPT : ERR SMOKE PASS: community open victory screen refreshes after late community result
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Frozen local Workbench community-statistics fixture; no live server or installed asset writes."""
|
||||
from pathlib import Path
|
||||
import hashlib,json,shutil,subprocess,sys,os,time
|
||||
import hashlib,json,shutil,subprocess,sys,os,time,re
|
||||
ROOT=Path(__file__).resolve().parents[3]
|
||||
sys.path.insert(0,str(ROOT/'tools'))
|
||||
from source_manifest import addon_manifest
|
||||
@@ -40,8 +40,20 @@ with (profile/'runner-output.log').open('w') as output:
|
||||
result=subprocess.Popen(command,stdout=output,stderr=subprocess.STDOUT)
|
||||
captured=False
|
||||
while result.poll() is None:
|
||||
if not captured and any('ERR STATS UI READY' in log.read_text(errors='replace') for log in (profile/'logs').glob('*/console.log')):
|
||||
if not captured and ((profile/'profile/results-ready.json').exists() or any('ERR STATS UI READY' in log.read_text(errors='replace') for log in (profile/'logs').glob('*/console.log'))):
|
||||
# The owned runner logs its private Gamescope display. Wine may rewrite its
|
||||
# command line, so /proc project-path matching alone can miss the renderer.
|
||||
launch=profile/'headless-launch.log'
|
||||
displays=re.findall(r'Starting Xwayland on (:\d+)',launch.read_text(errors='replace')) if launch.exists() else []
|
||||
if displays:
|
||||
try:
|
||||
capture=subprocess.run(['import','-display',displays[-1],'-window','root',str(profile/'results-desktop.png')],stdout=subprocess.DEVNULL,stderr=subprocess.PIPE,timeout=5)
|
||||
(profile/'capture.log').write_bytes(capture.stderr)
|
||||
captured=capture.returncode==0
|
||||
except subprocess.TimeoutExpired:
|
||||
(profile/'capture.log').write_text('Private display capture timed out.\n')
|
||||
for proc in Path('/proc').iterdir():
|
||||
if captured: break
|
||||
if not proc.name.isdigit(): continue
|
||||
try:
|
||||
args=(proc/'cmdline').read_bytes().decode(errors='replace').replace('\\', '/')
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"cause": "SizeLayout width/height overrides were specified but not enabled. Original root rendered with zero width and child text/scroll areas had negative dimensions.",
|
||||
"fix": "Enable both size overrides, use overlay slots and explicit fonts for the result heading and description.",
|
||||
"runs": {
|
||||
"geometrybefore": {
|
||||
"geometry": [
|
||||
"Base_ContentHolder x=0 y=0 width=501 height=225 visible=1 opacity=0.690736",
|
||||
"ERR_RoundResults x=250.5 y=95 width=0 height=35 visible=1 opacity=1",
|
||||
"ResultFrame x=250.5 y=95 width=0 height=35 visible=1 opacity=1",
|
||||
"GameOver_State x=254.667 y=95 width=-8.33334 height=10.8333 visible=1 opacity=1",
|
||||
"StatisticsScroll x=254.667 y=132.083 width=-8.33334 height=-4.58333 visible=1 opacity=1",
|
||||
"RoundStatistics x=254.667 y=132.083 width=-14.1667 height=449.375 visible=1 opacity=1"
|
||||
],
|
||||
"assertions_passed": 6,
|
||||
"completed": true
|
||||
},
|
||||
"geometryfixed": {
|
||||
"geometry": [
|
||||
"Base_ContentHolder x=0 y=0 width=501 height=225 visible=1 opacity=0.681523",
|
||||
"ERR_RoundResults x=135.917 y=47.9167 width=229.167 height=129.167 visible=1 opacity=1",
|
||||
"ResultFrame x=135.917 y=47.9167 width=229.167 height=129.167 visible=1 opacity=1",
|
||||
"GameOver_State x=140.083 y=47.9167 width=220.833 height=10.8333 visible=1 opacity=1",
|
||||
"StatisticsScroll x=140.083 y=85 width=220.833 height=89.5833 visible=1 opacity=1",
|
||||
"RoundStatistics x=140.083 y=85 width=215 height=52.1875 visible=1 opacity=1"
|
||||
],
|
||||
"assertions_passed": 12,
|
||||
"completed": true
|
||||
},
|
||||
"geometryvictory": {
|
||||
"geometry": [
|
||||
"Base_ContentHolder x=0 y=0 width=501 height=225 visible=1 opacity=0.71436",
|
||||
"ERR_RoundResults x=135.917 y=47.9167 width=229.167 height=129.167 visible=1 opacity=1",
|
||||
"ResultFrame x=135.917 y=47.9167 width=229.167 height=129.167 visible=1 opacity=1",
|
||||
"GameOver_State x=140.083 y=47.9167 width=220.833 height=10.8333 visible=1 opacity=1",
|
||||
"StatisticsScroll x=140.083 y=85 width=220.833 height=89.5833 visible=1 opacity=1",
|
||||
"RoundStatistics x=140.083 y=85 width=215 height=52.1875 visible=1 opacity=1"
|
||||
],
|
||||
"assertions_passed": 12,
|
||||
"completed": false,
|
||||
"completion_note": "All 12 geometry/text assertions passed. The 10-second capture hold crossed the mission restart before completion. The owned runner was interrupted for cleanup; the fixture hold was restored to 5 seconds."
|
||||
}
|
||||
},
|
||||
"limitations": "Scripted local Workbench geometry and text checks, not a remote multiplayer or full-resolution visual test. Native runners retain 13 engine asset errors. ImageMagick import failed to capture the private display.",
|
||||
"publication": "User confirmed Workshop 0.0.127; local publishing manifest version recorded in CHANGELOG.md."
|
||||
}
|
||||
@@ -54,8 +54,18 @@ modded class ERR_GameMode
|
||||
{
|
||||
MenuBase menu = GetGame().GetMenuManager().GetTopMenu(); if (!menu) return;
|
||||
TextWidget text = TextWidget.Cast(menu.GetRootWidget().FindAnyWidget("RoundStatistics"));
|
||||
foreach (string widgetName : {"Base_ContentHolder", "ERR_RoundResults", "ResultFrame", "GameOver_State", "StatisticsScroll", "RoundStatistics"})
|
||||
{
|
||||
Widget measured = menu.GetRootWidget().FindAnyWidget(widgetName);
|
||||
if (!measured) continue;
|
||||
float width, height, x, y;
|
||||
measured.GetScreenSize(width, height); measured.GetScreenPos(x, y);
|
||||
PrintFormat("ERR RESULT GEOMETRY: %1 x=%2 y=%3 width=%4 height=%5 visible=%6 opacity=%7", widgetName, x, y, width, height, measured.IsVisible(), measured.GetOpacity());
|
||||
if (!ERR_CommunityCheck(width > 0 && height > 0, widgetName + " has positive rendered dimensions")) return;
|
||||
}
|
||||
if (!ERR_CommunityCheck(text && text.IsVisible() && text.GetText() == ERR_RoundSummary() && text.GetText().Contains("All reporting servers: 7 wins | 3 failures | 70% win rate"), "open TEST_OUTCOME screen refreshes after late community result")) return;
|
||||
Print("ERR STATS UI READY: community TEST_OUTCOME screen");
|
||||
JsonSaveContext ready = new JsonSaveContext(); ready.WriteValue("ready", true); ready.SaveToFile("$profile:results-ready.json");
|
||||
System.MakeScreenshot("$logs:community-TEST_OUTCOME");
|
||||
m_ERRCommunityTestStage = 3; m_ERRCommunityTestWait = GetWorld().GetWorldTime() + 5000; return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user