BUTR/Bannerlord.UIExtenderEx

View on GitHub
docs/articles/runtime/PrefabPatching.svg

Summary

Maintainability
Test Coverage
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1054" height="565" contentStyleType="text/css" preserveAspectRatio="none" style="width:1054px;height:565px;background:#fff" version="1.1" viewBox="0 0 1054 565" zoomAndPan="magnify"><g><rect width="550" height="64.582" x="498" fill="none" style="stroke:#000;stroke-width:1.5" y="358.367"/><line style="stroke:#181818;stroke-width:.5;stroke-dasharray:5,5" x1="27" x2="27" y1="83.621" y2="229.494"/><line style="stroke:#a80036;stroke-width:1;stroke-dasharray:1,4" x1="27" x2="27" y1="229.494" y2="257.494"/><line style="stroke:#181818;stroke-width:.5;stroke-dasharray:5,5" x1="27" x2="27" y1="257.494" y2="481.949"/><line style="stroke:#181818;stroke-width:.5;stroke-dasharray:5,5" x1="288.5" x2="288.5" y1="83.621" y2="229.494"/><line style="stroke:#a80036;stroke-width:1;stroke-dasharray:1,4" x1="288.5" x2="288.5" y1="229.494" y2="257.494"/><line style="stroke:#181818;stroke-width:.5;stroke-dasharray:5,5" x1="288.5" x2="288.5" y1="257.494" y2="481.949"/><line style="stroke:#181818;stroke-width:.5;stroke-dasharray:5,5" x1="382.5" x2="382.5" y1="83.621" y2="229.494"/><line style="stroke:#a80036;stroke-width:1;stroke-dasharray:1,4" x1="382.5" x2="382.5" y1="229.494" y2="257.494"/><line style="stroke:#181818;stroke-width:.5;stroke-dasharray:5,5" x1="382.5" x2="382.5" y1="257.494" y2="481.949"/><line style="stroke:#181818;stroke-width:.5;stroke-dasharray:5,5" x1="572" x2="572" y1="83.621" y2="229.494"/><line style="stroke:#a80036;stroke-width:1;stroke-dasharray:1,4" x1="572" x2="572" y1="229.494" y2="257.494"/><line style="stroke:#181818;stroke-width:.5;stroke-dasharray:5,5" x1="572" x2="572" y1="257.494" y2="481.949"/><line style="stroke:#181818;stroke-width:.5;stroke-dasharray:5,5" x1="697" x2="697" y1="83.621" y2="229.494"/><line style="stroke:#a80036;stroke-width:1;stroke-dasharray:1,4" x1="697" x2="697" y1="229.494" y2="257.494"/><line style="stroke:#181818;stroke-width:.5;stroke-dasharray:5,5" x1="697" x2="697" y1="257.494" y2="481.949"/><line style="stroke:#181818;stroke-width:.5;stroke-dasharray:5,5" x1="904" x2="904" y1="83.621" y2="229.494"/><line style="stroke:#a80036;stroke-width:1;stroke-dasharray:1,4" x1="904" x2="904" y1="229.494" y2="257.494"/><line style="stroke:#181818;stroke-width:.5;stroke-dasharray:5,5" x1="904" x2="904" y1="257.494" y2="481.949"/><line style="stroke:#181818;stroke-width:.5;stroke-dasharray:5,5" x1="1010" x2="1010" y1="83.621" y2="229.494"/><line style="stroke:#a80036;stroke-width:1;stroke-dasharray:1,4" x1="1010" x2="1010" y1="229.494" y2="257.494"/><line style="stroke:#181818;stroke-width:.5;stroke-dasharray:5,5" x1="1010" x2="1010" y1="257.494" y2="481.949"/><text x="5" y="80.107" fill="#000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="38">Game</text><ellipse cx="27" cy="13.5" fill="#E2E2F0" rx="8" ry="8" style="stroke:#181818;stroke-width:.5"/><path fill="none" d="M27,21.5 L27,48.5 M14,29.5 L40,29.5 M27,48.5 L14,63.5 M27,48.5 L40,63.5" style="stroke:#181818;stroke-width:.5"/><text x="5" y="496.057" fill="#000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="38">Game</text><ellipse cx="27" cy="508.07" fill="#E2E2F0" rx="8" ry="8" style="stroke:#181818;stroke-width:.5"/><path fill="none" d="M27,516.0703 L27,543.0703 M14,524.0703 L40,524.0703 M27,543.0703 L14,558.0703 M27,543.0703 L40,558.0703" style="stroke:#181818;stroke-width:.5"/><rect width="85" height="32.621" x="246.5" y="50" fill="#E2E2F0" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:.5"/><text x="253.5" y="72.107" fill="#000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="71">SubModule</text><rect width="85" height="32.621" x="246.5" y="480.949" fill="#E2E2F0" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:.5"/><text x="253.5" y="503.057" fill="#000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="71">SubModule</text><rect width="82" height="32.621" x="341.5" y="50" fill="#E2E2F0" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:.5"/><text x="348.5" y="72.107" fill="#000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="68">UIExtender</text><rect width="82" height="32.621" x="341.5" y="480.949" fill="#E2E2F0" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:.5"/><text x="348.5" y="503.057" fill="#000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="68">UIExtender</text><rect width="129" height="32.621" x="508" y="50" fill="#E2E2F0" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:.5"/><text x="515" y="72.107" fill="#000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="115">PrefabComponent</text><rect width="129" height="32.621" x="508" y="480.949" fill="#E2E2F0" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:.5"/><text x="515" y="503.057" fill="#000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="115">PrefabComponent</text><rect width="100" height="32.621" x="647" y="50" fill="#E2E2F0" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:.5"/><text x="654" y="72.107" fill="#000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="86">WidgetPrefab</text><rect width="100" height="32.621" x="647" y="480.949" fill="#E2E2F0" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:.5"/><text x="654" y="503.057" fill="#000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="86">WidgetPrefab</text><rect width="136" height="32.621" x="836" y="50" fill="#E2E2F0" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:.5"/><text x="843" y="72.107" fill="#000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="122">WidgetPrefabPatch</text><rect width="136" height="32.621" x="836" y="480.949" fill="#E2E2F0" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:.5"/><text x="843" y="503.057" fill="#000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="122">WidgetPrefabPatch</text><rect width="56" height="32.621" x="982" y="50" fill="#E2E2F0" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:.5"/><text x="989" y="72.107" fill="#000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="42">Prefab</text><rect width="56" height="32.621" x="982" y="480.949" fill="#E2E2F0" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:.5"/><text x="989" y="503.057" fill="#000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="42">Prefab</text><polygon fill="#181818" points="277 112.912 287 116.912 277 120.912 281 116.912" style="stroke:#181818;stroke-width:1"/><line style="stroke:#181818;stroke-width:1" x1="27" x2="283" y1="116.912" y2="116.912"/><text x="34" y="111.649" fill="#000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="238">OnBeforeInitialModuleScreenSetAsRoot()</text><polygon fill="#181818" points="370.5 144.203 380.5 148.203 370.5 152.203 374.5 148.203" style="stroke:#181818;stroke-width:1"/><line style="stroke:#181818;stroke-width:1" x1="289" x2="376.5" y1="148.203" y2="148.203"/><text x="296" y="142.94" fill="#000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="56">Register()</text><polygon fill="#181818" points="560.5 175.494 570.5 179.494 560.5 183.494 564.5 179.494" style="stroke:#181818;stroke-width:1"/><line style="stroke:#181818;stroke-width:1" x1="382.5" x2="566.5" y1="179.494" y2="179.494"/><text x="389.5" y="174.231" fill="#000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="166">Register(Type[] prefabTypes)</text><polygon fill="#181818" points="393.5 189.494 383.5 193.494 393.5 197.494 389.5 193.494" style="stroke:#181818;stroke-width:1"/><line style="stroke:#181818;stroke-width:1;stroke-dasharray:2,2" x1="387.5" x2="571.5" y1="193.494" y2="193.494"/><polygon fill="#181818" points="300 203.494 290 207.494 300 211.494 296 207.494" style="stroke:#181818;stroke-width:1"/><line style="stroke:#181818;stroke-width:1;stroke-dasharray:2,2" x1="294" x2="381.5" y1="207.494" y2="207.494"/><polygon fill="#181818" points="38 217.494 28 221.494 38 225.494 34 221.494" style="stroke:#181818;stroke-width:1"/><line style="stroke:#181818;stroke-width:1;stroke-dasharray:2,2" x1="32" x2="288" y1="221.494" y2="221.494"/><polygon fill="#181818" points="685 276.785 695 280.785 685 284.785 689 280.785" style="stroke:#181818;stroke-width:1"/><line style="stroke:#181818;stroke-width:1" x1="27" x2="691" y1="280.785" y2="280.785"/><text x="34" y="275.522" fill="#000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="66">LoadFrom()</text><polygon fill="#181818" points="892 308.076 902 312.076 892 316.076 896 312.076" style="stroke:#181818;stroke-width:1"/><line style="stroke:#181818;stroke-width:1" x1="697" x2="898" y1="312.076" y2="312.076"/><text x="704" y="306.813" fill="#000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="183">Harmony intercepts LoadFrom()</text><polygon fill="#181818" points="583.5 339.367 573.5 343.367 583.5 347.367 579.5 343.367" style="stroke:#181818;stroke-width:1"/><line style="stroke:#181818;stroke-width:1" x1="577.5" x2="903" y1="343.367" y2="343.367"/><text x="589.5" y="338.104" fill="#000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="139">ProcessMovieIfNeeded()</text><path fill="#EEE" d="M498,358.3672 L571,358.3672 L571,367.6582 L561,377.6582 L498,377.6582 L498,358.3672" style="stroke:#000;stroke-width:1.5"/><rect width="550" height="64.582" x="498" fill="none" style="stroke:#000;stroke-width:1.5" y="358.367"/><text x="513" y="373.396" fill="#000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="28">loop</text><text x="586" y="372.237" fill="#000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="123">[All registered Prefab]</text><polygon fill="#181818" points="998 396.949 1008 400.949 998 404.949 1002 400.949" style="stroke:#181818;stroke-width:1"/><line style="stroke:#181818;stroke-width:1" x1="572.5" x2="1004" y1="400.949" y2="400.949"/><text x="579.5" y="395.687" fill="#000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="148">Apply XML transformation</text><polygon fill="#181818" points="583.5 410.949 573.5 414.949 583.5 418.949 579.5 414.949" style="stroke:#181818;stroke-width:1"/><line style="stroke:#181818;stroke-width:1;stroke-dasharray:2,2" x1="577.5" x2="1009" y1="414.949" y2="414.949"/><polygon fill="#181818" points="892 431.949 902 435.949 892 439.949 896 435.949" style="stroke:#181818;stroke-width:1"/><line style="stroke:#181818;stroke-width:1;stroke-dasharray:2,2" x1="572.5" x2="898" y1="435.949" y2="435.949"/><polygon fill="#181818" points="708 445.949 698 449.949 708 453.949 704 449.949" style="stroke:#181818;stroke-width:1"/><line style="stroke:#181818;stroke-width:1;stroke-dasharray:2,2" x1="702" x2="903" y1="449.949" y2="449.949"/><polygon fill="#181818" points="38 459.949 28 463.949 38 467.949 34 463.949" style="stroke:#181818;stroke-width:1"/><line style="stroke:#181818;stroke-width:1;stroke-dasharray:2,2" x1="32" x2="696" y1="463.949" y2="463.949"/></g></svg>