From 8e7791fbf43426d6f22c8d8e79438b8b61407146 Mon Sep 17 00:00:00 2001 From: Vitalii Mikhailov Date: Sun, 7 Jan 2024 15:42:12 +0200 Subject: [PATCH 01/16] new UIExtender replcaed with UIExtender.Create Added the ability to disable specific Prefabs and Mixins Added the ability to deregister UIExtender Added the ability to get another mods UIExtender Updated PUML diagrams --- build/common.props | 2 +- changelog.txt | 4 + docs/articles/Interface/Overview.png | Bin 13986 -> 137939 bytes docs/articles/Interface/Overview.puml | 22 +- docs/articles/Interface/Prefab.png | Bin 0 -> 67291 bytes docs/articles/Interface/Prefab.puml | 53 ++ docs/articles/Interface/PrefabExtension.png | Bin 19635 -> 0 bytes docs/articles/Interface/PrefabExtension.puml | 33 - docs/articles/Interface/ViewModelMixin.png | Bin 6041 -> 25607 bytes docs/articles/Interface/ViewModelMixin.puml | 25 +- docs/articles/Runtime/ExtendedVMRuntime.png | Bin 37884 -> 0 bytes docs/articles/Runtime/ExtendedVMRuntime.puml | 45 -- docs/articles/Runtime/Overview.png | Bin 30915 -> 30932 bytes docs/articles/Runtime/Overview.puml | 49 +- docs/articles/Runtime/PrefabPatching.png | Bin 22715 -> 33991 bytes docs/articles/Runtime/PrefabPatching.puml | 36 +- docs/articles/Runtime/Registration.png | Bin 42153 -> 53584 bytes docs/articles/Runtime/Registration.puml | 27 +- docs/articles/Runtime/VMPatching.png | Bin 50428 -> 0 bytes docs/articles/Runtime/VMPatching.puml | 41 - docs/articles/Runtime/ViewModelPatching.png | Bin 0 -> 58099 bytes docs/articles/Runtime/ViewModelPatching.puml | 49 ++ docs/articles/interface/Overview.md | 3 + docs/articles/interface/Prefab.md | 3 + docs/articles/interface/ViewModelMixin.md | 3 + docs/articles/interface/toc.yml | 6 + docs/articles/runtime/Overview.md | 3 + docs/articles/runtime/PrefabPatching.md | 3 + docs/articles/runtime/Registration.md | 3 + docs/articles/runtime/ViewModelPatching.md | 3 + docs/articles/runtime/toc.yml | 8 + docs/articles/toc.yml | 6 + docs/articles/v2/Overview.md | 2 +- docs/docfx.json | 2 +- src/Bannerlord.UIExtenderEx.sln | 34 + .../Attributes/BaseUIExtenderAttribute.cs | 17 +- .../Attributes/DataSourceMethodAttribute.cs | 17 +- .../Attributes/PrefabExtensionAttribute.cs | 83 +- .../Attributes/ViewModelMixinAttribute.cs | 47 +- src/Bannerlord.UIExtenderEx/BUTRViewModel.cs | 194 +++-- .../Components/PrefabComponent.Prefabs.cs | 303 ++++---- .../Components/PrefabComponent.Prefabs2.cs | 653 ++++++++-------- .../Components/PrefabComponent.cs | 315 ++++---- .../Components/ViewModelComponent.cs | 244 +++--- .../ConditionalWeakTableExtensions.cs | 15 +- .../Extensions/ReflectionHelpers.cs | 101 ++- .../Extensions/ViewModelExtensions.cs | 129 ++-- .../Patches/GauntletMoviePatch.cs | 62 +- .../Patches/UIConfigPatch.cs | 21 +- .../Patches/ViewModelPatch.cs | 63 +- .../Patches/ViewModelWithMixinPatch.cs | 207 +++-- .../Patches/WidgetPrefabPatch.cs | 228 +++--- .../Prefabs/CustomPatch.cs | 25 +- .../Prefabs/IPrefabPatch.cs | 15 +- .../Prefabs/InsertPatch.cs | 37 +- .../PrefabExtensionInsertAsSiblingPatch.cs | 37 +- .../Prefabs/PrefabExtensionInsertPatch.cs | 135 ++-- .../Prefabs/PrefabExtensionReplacePatch.cs | 19 +- .../PrefabExtensionSetAttributePatch.cs | 21 +- .../PrefabExtensionContentAttribute.cs | 237 +++--- .../Prefabs2/InsertType.cs | 19 +- .../Prefabs2/PrefabExtensionInsertPatch.cs | 101 ++- .../PrefabExtensionSetAttributePatch.cs | 31 +- .../ResourceManager/BrushFactoryManager.cs | 137 ++-- .../ResourceManager/WidgetFactoryManager.cs | 273 ++++--- .../Settings/ISettingsProvider.cs | 9 +- .../Settings/SettingsSubModuleTags.cs | 19 +- src/Bannerlord.UIExtenderEx/SubModule.cs | 77 +- src/Bannerlord.UIExtenderEx/UIExtender.cs | 231 +++--- .../UIExtenderExSettings.cs | 35 +- .../UIExtenderRuntime.cs | 227 +++--- .../UIPatchSubModule.cs | 67 +- .../Utils/MessageUtils.cs | 81 +- .../ViewModels/BaseViewModelMixin.cs | 207 +++-- .../ViewModels/IViewModelMixin.cs | 33 +- .../ViewModels/ViewModelWrapper.cs | 83 +- .../Bannerlord.UIExtenderEx.Tests.csproj | 6 +- .../BaseTests.cs | 146 ++-- .../Prefabs/IntegrationTests/PrefabsTests.cs | 105 +++ ...efabExtensionInsertAsSiblingAppendPatch.cs | 21 + ...fabExtensionInsertAsSiblingPrependPatch.cs | 21 + .../TestPrefabExtensionInsertPatch.cs | 23 + .../TestPrefabExtensionReplacePatch.cs | 20 + .../TestPrefabExtensionSetAttributePatch.cs | 12 + ...efabExtensionInsertAsSiblingAppendPatch.cs | 22 - ...fabExtensionInsertAsSiblingPrependPatch.cs | 22 - .../Prefabs/TestPrefabExtensionInsertPatch.cs | 24 - .../TestPrefabExtensionReplacePatch.cs | 21 - .../TestPrefabExtensionSetAttributePatch.cs | 13 - .../IntegrationTests/Prefabs2Tests.cs | 214 ++--- .../TestPrefabExtensionInsertFileNamePatch.cs | 17 +- ...ensionInsertFileNamePatchRemoveRootNode.cs | 17 +- .../TestPrefabExtensionInsertTextPatch.cs | 17 +- ...bExtensionInsertTextPatchRemoveRootNode.cs | 27 +- ...stPrefabExtensionInsertXmlDocumentPatch.cs | 29 +- ...ionInsertXmlDocumentPatchRemoveRootNode.cs | 35 +- .../TestPrefabExtensionInsertXmlNodePatch.cs | 29 +- ...tensionInsertXmlNodePatchRemoveRootNode.cs | 35 +- .../TestPrefabExtensionInsertXmlNodesPatch.cs | 29 +- .../TestPrefabExtensionRemovePatch.cs | 11 +- .../TestPrefabExtensionSetAttributePatch.cs | 19 +- .../UnitTests/PrefabComponentPrefabs2Tests.cs | 728 +++++++++--------- .../Prefabs2/Utilities/PatchCreator.cs | 185 +++-- .../Utilities/PrefabComponentExtensions.cs | 25 +- .../PrefabsTests.cs | 60 -- tests/Bannerlord.UIExtenderEx.Tests/TestVM.cs | 37 +- .../TestVMMixin.cs | 97 ++- .../Utils/ResourceDepotUtils.cs | 47 +- .../ViewModelMixinTests.cs | 110 +-- 109 files changed, 3877 insertions(+), 3667 deletions(-) create mode 100644 docs/articles/Interface/Prefab.png create mode 100644 docs/articles/Interface/Prefab.puml delete mode 100644 docs/articles/Interface/PrefabExtension.png delete mode 100644 docs/articles/Interface/PrefabExtension.puml delete mode 100644 docs/articles/Runtime/ExtendedVMRuntime.png delete mode 100644 docs/articles/Runtime/ExtendedVMRuntime.puml delete mode 100644 docs/articles/Runtime/VMPatching.png delete mode 100644 docs/articles/Runtime/VMPatching.puml create mode 100644 docs/articles/Runtime/ViewModelPatching.png create mode 100644 docs/articles/Runtime/ViewModelPatching.puml create mode 100644 docs/articles/interface/Overview.md create mode 100644 docs/articles/interface/Prefab.md create mode 100644 docs/articles/interface/ViewModelMixin.md create mode 100644 docs/articles/interface/toc.yml create mode 100644 docs/articles/runtime/Overview.md create mode 100644 docs/articles/runtime/PrefabPatching.md create mode 100644 docs/articles/runtime/Registration.md create mode 100644 docs/articles/runtime/ViewModelPatching.md create mode 100644 docs/articles/runtime/toc.yml create mode 100644 tests/Bannerlord.UIExtenderEx.Tests/Prefabs/IntegrationTests/PrefabsTests.cs create mode 100644 tests/Bannerlord.UIExtenderEx.Tests/Prefabs/IntegrationTests/TestPrefabs/TestPrefabExtensionInsertAsSiblingAppendPatch.cs create mode 100644 tests/Bannerlord.UIExtenderEx.Tests/Prefabs/IntegrationTests/TestPrefabs/TestPrefabExtensionInsertAsSiblingPrependPatch.cs create mode 100644 tests/Bannerlord.UIExtenderEx.Tests/Prefabs/IntegrationTests/TestPrefabs/TestPrefabExtensionInsertPatch.cs create mode 100644 tests/Bannerlord.UIExtenderEx.Tests/Prefabs/IntegrationTests/TestPrefabs/TestPrefabExtensionReplacePatch.cs create mode 100644 tests/Bannerlord.UIExtenderEx.Tests/Prefabs/IntegrationTests/TestPrefabs/TestPrefabExtensionSetAttributePatch.cs delete mode 100644 tests/Bannerlord.UIExtenderEx.Tests/Prefabs/TestPrefabExtensionInsertAsSiblingAppendPatch.cs delete mode 100644 tests/Bannerlord.UIExtenderEx.Tests/Prefabs/TestPrefabExtensionInsertAsSiblingPrependPatch.cs delete mode 100644 tests/Bannerlord.UIExtenderEx.Tests/Prefabs/TestPrefabExtensionInsertPatch.cs delete mode 100644 tests/Bannerlord.UIExtenderEx.Tests/Prefabs/TestPrefabExtensionReplacePatch.cs delete mode 100644 tests/Bannerlord.UIExtenderEx.Tests/Prefabs/TestPrefabExtensionSetAttributePatch.cs delete mode 100644 tests/Bannerlord.UIExtenderEx.Tests/PrefabsTests.cs diff --git a/build/common.props b/build/common.props index 0f3a29fe..4770de8c 100644 --- a/build/common.props +++ b/build/common.props @@ -4,7 +4,7 @@ - 2.8.1 + 2.9.0 2.2.2 3.2.0.77 diff --git a/changelog.txt b/changelog.txt index dd5d2aa2..96ebb7df 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,8 @@ --------------------------------------------------------------------------------------------------- +Version: 2.9.0 +Game Versions: v1.0.0,v1.0.1,v1.0.2,v1.0.3,v1.1.0,v1.1.1,v1.1.2,v1.1.3,v1.1.4,v1.1.5,v1.1.6,v1.2.8 +* Added the ability to disable specific Prefabs and Mixins, also to deregister a mods UIExtender +--------------------------------------------------------------------------------------------------- Version: 2.8.1 Game Versions: v1.0.0,v1.0.1,v1.0.2,v1.0.3,v1.1.0,v1.1.1,v1.1.2,v1.1.3,v1.1.4,v1.1.5,v1.1.6,v1.2.8 * Added UpdateInfo diff --git a/docs/articles/Interface/Overview.png b/docs/articles/Interface/Overview.png index 07c487b170e7c2f806d67db1994f9060005d8d9d..81ea0930666712fdd7d15937e2318865825caa4b 100644 GIT binary patch literal 137939 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�E-Ej#1;zT(OC}}jB)$PI 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

R0}xzxwcl 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Н(JK-f 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 aNV{RRUwwoxV?jissiqbaPfb|x^Zx);-1-;* literal 13986 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 Qx7Z_DNyXR2;_v+a5AqQDasU7T diff --git a/docs/articles/Interface/Overview.puml b/docs/articles/Interface/Overview.puml index 57731b0d..69b1cf5c 100644 --- a/docs/articles/Interface/Overview.puml +++ b/docs/articles/Interface/Overview.puml @@ -1,18 +1,18 @@ @startuml -SubModule --* UIExtender -SubModule --* ViewModelMixinClasses -SubModule --* PrefabExtensionClasses +!include ViewModelMixin.puml +!include Prefab.puml -class ViewModelMixinClasses { -[ViewModelMixin] -} +SubModule --* UIExtenderEx +UIExtenderEx --* UIExtenderExRuntime +UIExtenderExRuntime --* ViewModelComponent +UIExtenderExRuntime --* PrefabComponent -class PrefabExtensionClasses { -[PrefabExtension("Movie", "XPath")] -} +ViewModelComponent ..|> MyVMMixin : Uses +PrefabComponent ..|> MyPrefabComponent : Uses -ViewModelMixinClasses --|> BaseViewModelMixin -PrefabExtensionClasses --|> IPrefabExtension +class SubModule { +UIExtenderEx _uiExtenderEx = UIExtenderEx.Create("MyMod"); +} @enduml \ No newline at end of file diff --git a/docs/articles/Interface/Prefab.png b/docs/articles/Interface/Prefab.png new file mode 100644 index 0000000000000000000000000000000000000000..bd2be80821679312fded8492d75a7b456a619c32 GIT binary patch literal 67291 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%0A)6| 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 literal 0 HcmV?d00001 diff --git a/docs/articles/Interface/Prefab.puml b/docs/articles/Interface/Prefab.puml new file mode 100644 index 00000000..78074139 --- /dev/null +++ b/docs/articles/Interface/Prefab.puml @@ -0,0 +1,53 @@ +@startuml + +MyPrefabComponent --* v2.PrefabExtensionInsertPatch +MyPrefabComponent --* v2.PrefabExtensionSetAttributePatch +MyPrefabComponent --* v1.CustomPatch +MyPrefabComponent --* v1.InsertPatch +MyPrefabComponent --* v1.PrefabExtensionInsertAsSiblingPatch +MyPrefabComponent --* v1.PrefabExtensionReplacePatch +MyPrefabComponent --* v1.PrefabExtensionSetAttributePatch +v1.CustomPatch --* v1.IPrefabPatch +v1.InsertPatch --* v1.IPrefabPatch +v1.PrefabExtensionInsertAsSiblingPatch --* v1.IPrefabPatch +v1.PrefabExtensionReplacePatch --* v1.IPrefabPatch +v1.PrefabExtensionSetAttributePatch --* v1.IPrefabPatch + +class MyPrefabComponent { +[PrefabExtension("Movie", "XPath")] +} +abstract class v2.PrefabExtensionInsertPatch { ++ {abstract} InsertType Type ++ {abstract} int Index +} +abstract class v2.PrefabExtensionSetAttributePatch { ++ {abstract} List Attributes +} +abstract class v1.CustomPatch { ++ {abstract} string Id ++ {abstract} void Apply(T obj) +} +abstract class v1.InsertPatch { ++ {abstract} string Id ++ {abstract} int Position ++ {abstract} XmlDocument GetPrefabExtension() +} +abstract class v1.PrefabExtensionInsertAsSiblingPatch { ++ {abstract} string Id ++ {abstract} InsertType Type ++ {abstract} XmlDocument GetPrefabExtension() +} +abstract class v1.PrefabExtensionReplacePatch { ++ {abstract} string Id ++ {abstract} XmlDocument GetPrefabExtension() +} +abstract class v1.PrefabExtensionSetAttributePatch { ++ {abstract} string Id ++ {abstract} string Attribute ++ {abstract} string Value +} +interface v1.IPrefabPatch { ++ string Id +} + +@enduml \ No newline at end of file diff --git a/docs/articles/Interface/PrefabExtension.png b/docs/articles/Interface/PrefabExtension.png deleted file mode 100644 index f3374af9ca9ba215a1cd2c74c4f9ab57a6e17945..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19635 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 ST*^HO#P@Xdb6Mw<&;$Thsf4ir diff --git a/docs/articles/Interface/PrefabExtension.puml b/docs/articles/Interface/PrefabExtension.puml deleted file mode 100644 index eefbc008..00000000 --- a/docs/articles/Interface/PrefabExtension.puml +++ /dev/null @@ -1,33 +0,0 @@ -@startuml - -interface IPrefabPatch { -} - -abstract class InsertPatch { -+ Position -} - -class PrefabExtensionInsertAsSiblingPatch { -+ Type -+ Name -} - -class PrefabExtensionInsertPatch { -+ Name -} - -class PrefabExtensionReplacePatch { -+ Name -} - -class CustomPatch { -} - -CustomPatch --|> IPrefabPatch -InsertPatch --|> IPrefabPatch - -PrefabExtensionInsertPatch --|> InsertPatch -PrefabExtensionReplacePatch --|> IPrefabPatch -PrefabExtensionInsertAsSiblingPatch --|> IPrefabPatch - -@enduml \ No newline at end of file diff --git a/docs/articles/Interface/ViewModelMixin.png b/docs/articles/Interface/ViewModelMixin.png index a04e3b379f7a6b4b335f368cc423c35378959fe3..8062e39be30c583f3f5fa344e3fdd742a9d9ee1c 100644 GIT binary patch literal 25607 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

aeX>6SQzi}HAPS-Un#F@ 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 ST4lhk@4#s3YQ9jvc<0|C7!Cda literal 6041 zcmY+IcRX9~_rTR&K`3hP+1e3%gcu!Ei#DZJ6tQYFT6@$AHA}0iu|*Lo2&J_uM(r7@ zMrlzEwTqPcrJvvD_kDeTf82YY^PK0Ld!FaH_n!B;NmiC-0A_w>Dk>_#Wpn6F%5|4= z)G$(0&atMwQIv}u(gcQd_45z$adSsfnYrC}3v@xc-4lg}h$4_ke{Cfte;=3o$RJ-I zMOQyxpt6=A71cRKPa7EW|N5!UQQQQ-a!YgY{-At5VT!Ln+(SZRzI5JfY(gfKKVviQo49HpnVHr3vt`6-x#+v^5qH?^#l+Gf zwz@1C+pEDuOoJKw<9Z!@H>TJhTkGa5dF@bKmr8KYBbUJ zrxf=uDJ$2G`1yY6i0KiOl#-&Oqx<*(V~Hm3^omFXEPbF03;WHcl9>EmR$l%}e??W5 z@$h3hmRal5&wlNAJYM|~&-B+XUq<=xJ%uM^Z@_$|LygCDje~$T@-;QXyGL8U_V%*a z*oAd9U3*e2ude^v{M?%+q~o`sD<>lgdXbeXJ%yl4)d|V zhNTW1_>AQ11$v1kg2CY3-+#J!ol-;$9JP@_L8srcu0yp!AmrZakom^vrjbvdnxoGC zWJz0SKUifAq-PgSVTvVq6hwfXJE(3fbai#j&+DnHbB8LeSLNhPzf||`9~cODk(WpM z_DynDD}vkr%2ehO6cVzP=YBo^HlXCAu*<-6g|375C%Xd&2M3|8Z50(sutkVsd-W4u zrG=KDs>kms#?yFqf*x2y@k>eDZtM1K{ zuO{nUXExK|IpMD-8+$!ter6_^rS^VXWz`M8k%F@;s}l7S4A(fTvamPuf79@w<;r45xcuj2Z-m1&GdCkc6i*{%N`0O48ms3`v5C9s;|E7%G7mSmi?m_w zySM|qfI7E5(PO6BLvwhLmC0JhXK>ujBcgby^5c#2`?d;9x3vs%^getgP5MIni{ak7 zn4)-J(*`Suxdfc*_ye0uEQd|Uz4t%k=HS&yZ%?Y;v^_Q|&<){?Kipc}+T2X7Us_s1 zaBxWYP@Rg4ns!&+ev{nO*)kdoQglC$EiI)D^{X-Szceh~H|B-s=H>4Jb zgS={{*GA^fe@?FByY1&tu)e)f)Z95;^PTZ|{A+b0YvpW_|`^@a{`tA=-u15o4lsvK~l3Z#N;20nZUpc z_i7y8-6}Hs-lVA$_RFV%z0*{1{4%x^`P|+xq3TTw$RTDu&oMXt0|RDQ;u8<2Jp&zG zOgk8t@YXV4H)O2XgdXd93#A--NHd z{;KVFjbawbLi}iOQ9sIl^f4-v>hySTt%x-07cZ=G8A?r_m%;+W8h$iX`CWYDtE%u` zn&Do~Z~82St5)6&42fH9ziWmZma?zeHY*^>2EEv*^w3wo~$K+KKV^N-3^#{he(QAwcqq<@VT`%)o&$?Cj5JPrAs1 zBmY3&t+}1AUiP0ESXIr^!Z{R5a)$9qET0?X?rP7~Nx?tRmj7b87d9-9bg7BA3`aYj zS(;M+s$J$DE5kq2W!a~i#!wtV;S)thlBMK#M-U~?lQ+)0&2n2@#cj@GZ87#7(UY1 zJ&)Lyt@g9Z)>Z)j$jF&h2#<*=d@7Q)pj9HGO}E!?6j8c1m^)E6quu(3G_-j4-k+_9 zU<7$nVXIF~Brv#7lksEaM~JsHE-gJuMw^Vu(9uejm7h(HvlG(0*EcWD)np;+XjKag zi0@-%`vruqej_9#kXi5o`X_&`=JaQ_g*PuRgq>~nKTBVU;Jbb2{Sn=M8X*BN;Nuh7 z9=KuzWV&ScO-8V^|{dBp?v z5eZc!&4#2e&;|*mXn9RKj0*J8q}S5B*!2!M2~}+|u_ABSVSox7cB_S?=;{JqqlXPB zNUy5L%izn`3PfF_VaG+4Mu=IOMt$Btg(3M5o7g6jM;3!@00<-3&?#i8it8 zlabHYED8t+q4lh#`%sEe_UN!CU1>S41)Xlk0dskkp35P8Wx1876{8ga zI{gmLQ%|0EXZ6mhbC4|I)yE|{0X`8Uqha=V@B`yK7_awNZaC>2O{5Ixr~;IlV;~_x zkKT>2%vtnUGaEGCF+V44oS_}EThbGei&gc0E>P-#08`)5CGPlV+=fEmId@(%e+#iT zdeIHaAixG0XpQ>O{Dq!%EOIfUboKkKhmK;zCSg)6jil!ae8`I z#T&7hA)g%C)3(u50(!h~!!b_LkYU0!83i?on`e}))y&eMV>T%iPp=LbDi$L2{~Jzb z2ST*6C)&B$N6?;&R0EH|h?=OoV|Fn3j{yCga_Rmjp6P4cmiy{WegI6-khlm*-jFrE z3;q1Qt()8U46bCG*36}|33W}hrmypqlKgy{UzgB{mC-lN-Q!kHq<*Z6jB9}GKfb_} zG(Il0iy>ebUK$}KH{(zi>SuC@OknC`poEnYozH6(AL_!$7bndwRFh7z|^t=kJwDE2_`SveN?=SH!JT% z?lc^SFTT7#24kta=m^VJBi|W%9<&WCX^rA6RUucUdJm(5CUI@|_l6SRxjrjk{)YMd= zF8)2LDP=Ly1Cs_zzS>pMxj>qX4o-jSF$@Ni=90?%g86mQc3D1Aj)o{0XMdlH6Gm+* zIy*Nvr-Jo#(D-{Rz*!I|F&f6@&5x6&OpVfjTS!nErj$A2Fu;E$*aYfd3F}E2^jG?K z^j|Xy;8RAY{>RB*+rQF(d0G|a_;2yQ9plUFAAC(0B0J4k<;R+0t2@{j+U$Ari0(LR z&-k*DxWKn4e9+ALU~%mID8Kp(FaF3YCU%)%tGjBPPEFMIl`Nb)H~Bogz>o~H&su*lz$^@~lC?UTIZ=Db$#x#ss5*czIB@kv zH#0&b4x>&(H?_@@VD`DTN_Y1>zk##LISOp(p@AqA{@_!5|8=n$X{nGciIIYfHLDyz z@2Z9ql?UgVAgkA%BD2)yVu6gf##=h%S@O%bZ~$)g1nm z*3^qmOyY-MjHxjDR6d^@7k%9SQSZmX^9=OH|LXV2W_e1q+oFLClqTR`5syGcJ{}~HA}hLo^o|Z-S;cY*9k2G z0OPqLgXpqFP6MZ#7T9+}Bre?8TJprY-WM5oaZ(VwOX|{}gK7Ry_M=A(6Ok<{C~!R=+j zr{Sh>q5CpNFdu!z7PgYrh7Y%t=dU^vP=FdRnU<6R1w8kTp0f_?Kmm*mPJ50B@f zGVI{KMX;ux3GfL1YI#)EC#{m!>zMlzZwa%@l=9|os(NvNuCE7arnhh7Oxe`Y{rb23 zxf}U&0%Am-#DlS5{0}iFR~7nBU-#(EE+jDP%61;I(HL7ip4Sy@DASJd$gFjUc7)S!-8^1O)h{3+Z?* zy!R-3m66fh*{T2WbB)OWOQo0#4#PK%Itvh?iqyE7k4~Y03OxtzKMM}`nc(EqAPJR zy}}6VCqP_}D0q9EceT8B_^MVa@f+-2v!1kgDrvfko=s3xb#E7ZbaZk@Ud^pPN?89D zYrn5gq?26>jaFgr{3(;clb5@!0ccEM|C=l?Bzy~Yy& z@7U4et>Gc4FP!xshVN@ys%wbks}BI2&e2`_#aICL6|XTXVp)F)eC~YfOKq)x{r)zv z9GV^f=F@2H+H!XtB$hronLvK%Jl|^)(pv(+PV5I_>H3!+GOyFwnj1EXE!^Y_7=Tda z|GtSCbth0|I0_oEB(k+KXmN}^eY$C!FqaDY#sx4M?j)`Za8t@&K9RGuNw(|@Oay}$ z7sgACFwMf<2X~uqR*c3Yhn54*^MFOv03Ivl(CM=ikD9)X&xeXTGh#$yIWaz0W(8&p z3}`Piel1!GREZ9EN%Uypuo)F~N@w;={HMqj3^&v-3YTT|BxDJBbakC2(4SKgJ}eX= zNN{n#xqA!)u}#MHlmw`heCh5ESgxcjfl2S36~$6-o{@8t@je3KLX2Q)feJHP16HH^ z0z@s>lNL_<9A6#L^lD&xvcI*aq?%5c0xdi8O0EF-5|>*XmjBIWVLT8BF%JvunDM~>)^RQplODit8T{MUPC52~kyB7H;--}Hm15-*> z8GWa#S-8gPpA1Ndb8#4-EQD=wmx@J-pO|b@EuGi79}}b2P0vE$9*ak<7VQ{G0GkTw zN@cG3Q`@f%b3>3ti_ChDoh7sX2BD^4aAth%!r&B{JilwbyOl;%)JQ?DBHM%FjJ>&W%yY{ zl5BJauZspJ>?BFq*oy&j71C*XV}kJPHj$d z5kkk0%n~S^A;|;f@TCO^4Yl6DfZslJy?fi2(XP-&hnz(@%6y ztnNj4!+rl3jS_<6sr91m-HhD*GP?xm$)@7v{DhY`{@k6zhE0r0l5!@ zS&5Cpvg}V3kURf?93=;1yBGRCeQ=m!aZ(B&lqo5wIvRK|ie<4Y9=X2S#(-~DIaKu62(+L|Y+J^mA69o_9Ou26D;cPP6K?k5oM*pzU#iyR4d*x-i`&Ai0@hfyf` z>t6?l)y;ku*k->WO6-*5r@dMuMy*krNCCUQyz?Id!k&qcxK#e(zkfKe@t$|{(Zumn zuO&K_fXdhSkA5{*LS3bL&nuR^wQ$(Zw7 zF3)+N3-?&n=>@xLrb$UbkNAY+wb5)e0HzybEuWP8E_ktOCbZ&knXpGW5H)222fHrM z6U2XP7A7a5*mncUZ!-WXsz$A$b{Ycoe8#EgdTTW_G$`1X3Y$PsaLu~*jON$4?1gCk T&l;4U { -} - -interface IViewModelMixin { +MyVMMixin --* BaseViewModelMixin +BaseViewModelMixin --* IViewModel +class MyVMMixin { +[ViewModelMixin] +} +abstract class BaseViewModelMixin { +# TViewModel? ViewModel ++ BaseViewModelMixin(TViewModel vm) ++ void OnRefresh() ++ void OnFinalize() +# void OnPropertyChanged(string? propertyName = null) +# void OnPropertyChangedWithValue(object value, string? propertyName = null) +# TValue? GetPrivate(string name) +# void SetPrivate(string name, TValue? value) +# bool SetField(ref T field, T value, string propertyName) +} +interface IViewModel { ++ void OnRefresh() ++ void OnFinalize() } - -BaseViewModelMixin --|> IViewModelMixin @enduml \ No newline at end of file diff --git a/docs/articles/Runtime/ExtendedVMRuntime.png b/docs/articles/Runtime/ExtendedVMRuntime.png deleted file mode 100644 index 703621be87efddb9d6b47dbfd0a980977456ec6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37884 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

uH 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 X5{-W}M0aKu`2)p^XgU1(8~6VgC-c-> diff --git a/docs/articles/Runtime/ExtendedVMRuntime.puml b/docs/articles/Runtime/ExtendedVMRuntime.puml deleted file mode 100644 index 09b96702..00000000 --- a/docs/articles/Runtime/ExtendedVMRuntime.puml +++ /dev/null @@ -1,45 +0,0 @@ -@startuml - -actor Game - -Game -> ExtendedVM: Instantiation (constructor called) -ExtendedVM -> BaseVM: base constructor -BaseVM --> ExtendedVM - -ExtendedVM -> ViewModelComponent: InitializeMixinsForVMInstance() -ViewModelComponent -> ViewModelComponent: instantiate all mixins associated with this VM -ViewModelComponent --> ExtendedVM -ExtendedVM --> Game - -... -Game -> ExtendedVM: Destructor -ExtendedVM -> BaseVM: original destructor -BaseVM --> ExtendedVM - -ExtendedVM -> ViewModelComponent: DestructMixinsForVMInstance -ViewModelComponent --> ExtendedVM -ExtendedVM --> Game -... - -... -Game -> ExtendedVM: OnFinalize -ExtendedVM -> BaseVM: original OnFinalize -BaseVM --> ExtendedVM - -ExtendedVM -> ViewModelComponent: FinalizeMixinsForVMInstance -ViewModelComponent --> ExtendedVM -ExtendedVM --> Game -... - -Game -> ExtendedVM: method access (and getters/setters) -alt original method - ExtendedVM -> BaseVM: property access -else mixin method - ExtendedVM -> ViewModelComponent: MixinInstanceForVMInstance - ViewModelComponent -> ExtendedVM - ExtendedVM -> Mixin: property access - Mixin --> ExtendedVM -end -ExtendedVM --> Game - -@enduml \ No newline at end of file diff --git a/docs/articles/Runtime/Overview.png b/docs/articles/Runtime/Overview.png index 726f6804410dbf1fc4aa283518cca6c8a2112db7..3d0a976be8571b85ff9ceab6a65373aac575cb9a 100644 GIT binary patch literal 30932 zcmeFZWmuJK+bujr6i^94K|xAl3MkzjA|NS9h=fQZ-3=m(mYS5LAPCYDBCP^SDj*?^ zba&@Ir?Fh?-S2bkcYlAr@5i^E<2h8A_kHzwjxo-0%|ImuDcm!pXAlSku8j0eWds6) z6#jn$8v}l_l77e(9_P(5^^GO@R}w&Q1Eu{PJU zw0E#DXV$l}aQxg%i9noqYkF71{`b!jC*VEKiP6dfmSe009^2}zGz*NXsRO~z+07X~ z4MPDK1x!Tv4;Wr|eAAQ7St@gi1$cR1|<+F2lpZeA-eC>=&%$bPvW;cxxfBX}9 zw|tQ2-&-|XuwD+Drq@#|joT(q|LPLtG$+JCua%=ZVkltT;dh(GjV7jh_(86Ck)&>y zNjIaUHjS5_AKCax<-n5ukaOWWuZyn4AhSbPKY7S8i!B?bis+0`n{^HHy51)}s7q!$ z%&g8!YwbHZFSGt2w}3~#<#iwCevpOdY2&x_8w2OdbC)l@5X1>(G_#R-pG4`X!PiU4 z`ledqj6ePThu`?Mbu~WOUU^}^Lb)4~hjS}q>U>VqtK@*d#cxpUIi4{fVwX3F`e9($VlOzr?mPWT*^x8m)r>OF3^h z+BX=o45tOPl1~dq@LDXq#0uWMRzav@$Wz{5$gSDolq>5`F*qDRvbBb^y(*UNfIv8= z%G?yY>#VbogyVcyvS<5b5CH}%;F1Kv-2fVyMhqE*yf4*gfIF`b9yb4zCrslX==F$L zpLhol5MyD7m}8uQ|D6}Rql76HL#;>R{y4nQmv(VskAK;To-0POJ8wXC@1@oD;c>F( zTB2LFW%uI7?E3Ot&31C(@k!V&+46A<@CTv_%N91{JA6?E_{YwPMjZG<1i=S8Y7~nK z3I8}iOkg_8OG-B66x8s$tWC(giy{|rY&;e~h?6wpti+pseVHWW)^lp`wNYEVYK~gd zu`ojX0{n(_Z}0|E;kjOO6vJ9AzBj=sTa2pHwqtw+)m!lg%O|OBK2AgwJWh1Ro51A7 zLVw;gs>{Z%r<9QMB-)4ztK zBay`t+#g6UnXs|5lM%PaH7&7BA*_*bh_mQFU5=aby%AR4J^w|O-<)N z;mA-S-|@jGd!=oQoZC8~$;ryW0@-@3O~n>zrfb&-{Lcve{z!nWvYJj0b58Z{GF`!rynw;W{Y1hTUauvt!>)}MBSKyn| z+;4YBrXWY?GY=TklO;alk_owTQr?i0=^K1Onmnp%Z0AmP=J&*0LzX#Jc8p?1-tePqNG}b6+DE2CT)0OzSV0Cr;cUOHBvB3;(DaEKGg;fYG*1WU1U;Y6>+%4Yfa@4 z`t+%G;e*G#1(u0EK0Y%uGr76fhl&35D39=d_3A3S3~l_dEzM-lonoDdWUl?*GP#gP z(WES!T16g`w{M@Jl#f2MbO$%E&L6)FHg9fjZhE?JiQe|oP(G8uH2gO?nIz(M)b&cG zp!SHruT{}Q8nLxBbpPJHa`#YdhBmy9NE*h zj{77ckSAbo(lj?cZL`#>-qx0(&9B&FY|gXtD!;WxCb(tsyz7gUN`|;<1S^fk*NG;S z9sFl&YobcMD4Cv_8NA)CC@uZq^rl{a9nUkdG5d{~J4ROD3Lo#wf9xxLM6%8CXSWcJ z@at$Nb!Dpt+s@B<6t!lBl{r?87j)y?(a}*T7iMIfn=hy}qIhj*U@+m;kQwBpY;`Lw`RVED68?Cr@}UX} zot>QuiM;O@^6r<}*7}dL{+XpB!}*wyR>w%`+`;wG?|~m?lk#WEYpm@Y9p5+)$>`|l zR5~u!9IVOi?Hun;r<7TZcrFc==Q6Y=C0^mPrKO>HQ595Qe{;)Dy3P-Gd!f&6u8Tpv zdz6S??ivF_YTN4gC#Sitz{P90jXdk?>#&xlf8Ev4kfyQwcQ2Ih-Fw!}AY0Ao*{wcL z;i31SrT*D1&fX}$)O5|`)|zo+_ub@NG5MK zs5+#rR5;9Qq?A7DEn04u#=m;?>RfMuq9X+7_EZTnF0-4-OGA~E0*-Q|_l6RAZ64a& zb1t%5^mG1e1!j}A6S%Ez%gAnSC2P+gmjn`1zBML6Q2&T`u21&9)9B1NjtnJ_+;OgZ z--drQ_dbF~>h`!V#qV%&mydykWqDm`ME78gLUAt1d}mHXv$H@~q)XrgRTMfN-kGdd z&A7(L$7g!kl%?%!GG$eb_4;7OdViUf;yfYJB=9U8T1<3&O-*DybLI@c(^6s|+oP3W ziQ_`cqsXw>S|{tT&Ez@6RvP^DPUen|+@*d8%XC+N_dsrM@n{lGAYOO|U zGBPs!@hOcGl$m&>t^S0*&eN}+bd@Wn2pfM+q`vb?y+G&q=rA}qxS@It_Wj!0=M)jI zxvp2ex?V} zdwJ(4ZkEYJQZZs~2PdSB3^MfNl5!GowJ!gj!B;MPeU(lHsp0_%er9?z7Z!iU4x8GM zzj47;RQ%MEL8vHC07LktMVO0s~6a^=*E*WJ`U;(~uU@zAA~|6kuVo`rwO0 zM@LsOzOy!S z)SLbuQyxezg@Zqmkr%?svogI1vAX*EI(EyYDZS{a&xCsc1ILtFTuv@z0Rz!R6;4EO6;LQP zpq&5zFaKYhgfmwJ97851U=?joBA&nWPV|00?N8}xa=(GaYge{t(g-2?6i~U?7hfEr zcurH>@uxhFi~SDoeNNeOAfDfX&yP-hd#x{@!2R^q*w%oRqMTg4x()&pvk?dT;kRBb zIoV4ddmHcn`J=SNQ6?4y2ApwBHUN%9rM@<>*D^CQnzTFo8B?!Bx-hF$>>Bjvx7fOA5=-{uEo&qPHPd!Gr{~}CyOtUlhUa?x9=J!@+1O^;8 zOrZlN7WcMOq6qlNbAOLX$oo)=IdH&^%tu2OFV-$nRL@Y640KsR2 z8IEcnE$!7o>1ra(PfpaI7gZ2H*@#of5l$rafEj5xX_zytd$==-v|6^8%IR5UV`E#* zBP!xI7UDVBy>Y+nu9{l2fHwk=rX!FlY+g3a`DI%`vWC?dUA^ z8W#0xqE~b^x@Gh!S3ZHK$<0R;mg&c1=O)u99?p6jdnH802wGY)%LFWm65issediw8A{Rbw5!381d+hv$Cg30vUs$6X~xAhTO z`>@z4`2}}%W7#j8{pEI<3uhE^odFCyFs4F=ibkPSmkSiWv?^tcEsEqV3S{Y`rd~VD zcUNbq2A}^bHDu#tB(9m(bt6Z=2LQv4iJqR`V2of|>e^R4b>%Wk?Y>DS`r=DhDTce% zb;*f{I3B$7j*KKMPcaTqtRJB1_&vin`Tk9krc^?^>>A(dy^so92F+%~iwr-gNnFaB5fj4W7DPC@D7iXnR zPCWITZ{f1zx$!o0x!TWm&A)UVKxwm-3hHI{RWnL}IYK?T_v#j+nbbQA&2ODv4nBM%KK7M4@C=^Xp=TQ(7 z6SKFsS5qS%m^i#V;=V3#U_e`(p;lw+%=%${N0I0CdX>xij5H~aWtB-s+Th?|R@Svu zhPRyl&5+FnPQtcLODwrLL?%U*Y4t z8?JU^VqyXos4yG13*3+2s5K5?J#ed1%b|FDLw1Fc8jn{Z1k{c6n~0F&0|!g6jq^c>QOp%g;R z3%F$5*0oK%ut;N`HfGIhoTtdYeN`06dlQsU@#Oq|@aHF3_>nfNW0FN-SNN_vw39QQ z{CflZVQuXF{~K$=;ru6SGl)ZYBu;yn485yd)&5XdXPQ^H@HJD>4w@!m)_TA_aKW@E zw=dv4&CX3dS3WkuORsBZF4UThPdBdORY({DEJ%8s$cu4DfxVccdqjbhr#v~bSN1G@ z_8zqmv4zIfBS+<0&qG*Dhr;dNP~T@Oei<20dq=@!aK zHF9Axy`&^+zna{inBd;Mdt)CY%^g$^rC+!?`gz)An#|)x|Kqq=?yS!})2^m;3uo87 zJO0RD?sAREenQT6O+uNY!Y#+j7#thrFKo4xOv!!GiHQfZnJH^+io(0JTwKw8etdTy zu1z!n&r4*}_xm2JEh8i2k4HY1a7FvHqO7cd%@}5JndMOP;c)19c4x!F!h&H-%;h&g zf7G`Z&K*uEboBgl#{UBY6mdiy@q83O3{-D78?Dt5yI3;Ce@r3bDVar{whz9PEhFeX6fG{-`NqB*nxU+F^ zd6D-Ve-#L02qobqK={6MGg#>CCgwNM~_ItCWbouXSMsz#iUQ$t4 z&X~GK=~4&D={IsAXTz|K)!C1XzF9RfY(1;AAJ%pnqSL-8;xN}md_%Jf_zw)e*!ato zC!2rv+iZmkI%SsR^Tm#fnp@q*`4t?!po7jzRHNSge$ib%8&!te3JMCExB6w*OQx|3 zSOx{1W~;Uq2fkKdY7$xl(fb`P-`^r3TMg{Ax>#YtmQQ(adZP zE&F7?eap+n)-iB*=}j$?++-NEnhu&0f8O6CzNs+GS19B$%psCsFLFqC-!k7vc?%F+ zreexxA-k#8%WMxZ6(=uVya-Gm@CgV?pbTGUWPEtk63c>rg?Gh|%rfAIW_Mzl#ne01 zt1IhHueKBUqJTjo0ja;!^SVpI?!3z%o%%p?sooxzCDOKQ<0>0+9Jp^)-5}7Kz!TsnL< z!#&XU{M?F)iX4}R+f;U2SZW19I9gYgOXOXRkfP8#0xlAInZu8msKjl)ClA+9VsPS? zr>Ccm4#iW)-z;`G6=DM@s6bbv9Ay*~=rdBwO(r=#51c!>hg1Ix6Mj{o!+%4~r?^ETyj zMY%aZ)*q>^y-8*weg8|e_UP|+*QchYg!dPU4XQReW#Q;gdZvM9cOY<;-Q@hcg_V_+ zq9S&q6k!j|Xk1eiSwuvH9)`Q<(zu- zLDtb}TvDyKE2z&l&RCk(B{0oZRf%p>tJaI4r=GJbEL^=y?|JZzJEdkN@H4@>-JKcV&zq7ZIhvP zP{%=`UOif<&+adM^r@jCPpe#6{*ZGNQO4x|y$E-r=5Xu&ugxTCDt+A_&nM!y zj39f~+rk@gjC%JrEr_E@53T4G60cR}BB@ZW4NR(NIn7i1L?IE3l_V%Q_-kk9(b0Bo z3$B{@*N$|~(m|-U62hy`DhjUFhg{|`DA;UI4-+|hyKoBOjAk4@UxfE_0XH8XOp8pO zo==q-D6^^sYFB;&F^UU}(z)jNXdgg^j}Jz9>dT$cC;0r13p+zjBTcvnL>SPj`5T0anp#X;oby;cPI;;kpUawoxcG;^&XP==MtB>GDu{Yt z7Ixo}WvQlhJNZ6c29@l##MgHgv2qSbF)bF}6=`|-L*UAjexfVAwMV6JN_0JUGtdJ9 z^$`2gF$~jfW9GG4H)A=qbrpmM5RLc0`%|J{FF=K)dJrBSo*16hh279;zWoIy%+6cN<|uD)1nyTpX+3&dT?qUJCRco@k6HB0)Sj z19aIN@D5AK!G4y_T!iLt#Aau=BW@(GP}%gnSV>*0L<5+}~Q1h4HuO z9$n=@AVNSvAe{ux>^Ao*)1W~6GPil0eEv7AcSkUsHXDc>zP`S8)1RAg9W$V+1AFI0 zZOSEt7-Z_MD<`q=65&WMl=65Tj8pD!%+k1>K%5CDQj&0o0s}d}{SHho9nZIf<=W#K zcnNTpNHPRM9Z(3@d#4c(r|Bdo%f2E>OYGAC7Na8~R>QmwBw)3~LZKX-`_TSk5zo#upk~j-p1?EcA6|bu5r zT7k|GAYQNI{Sg@AXCPt+A7gIZha)_bea)1A>4&56(a(?v2u$9PC(a?xX zOkA)nhq0pTSUdhueiGjLreD;18FY=Rov~mz8U8?gJV${xz*NGPk0whLb8&G|R_=r@ zPr@WYwPWWoGTHgz-o|WEugrDriV~;gVR#T-EbN{v{vr(e{gBAILabEOMHE1psZlQf$@vb z_8^23Sh>%z-0stz8M44$kP3<6WQolXdI$*#6_N!Rco3rqfQ3$=LGSI49P4cHC+x0I zZ!eGNZejfRjTC7A3GwlJv9$-1me$-O9^2ZWQH$)1o-9A%tpuCG9RiK#+v#LCP#$P_ zypQ*5AySlBjSPR!tT=%Mo4BU%VM9=|klR>~KR<=r0^0#Sej-ev^V60|K=jPluSb!+ z3%fu<@~OW594Tj3R+hBoFJpiUfFvl28nC=2j6@|^RxmI#=SziA02(m|d)Tc27C|~7nW_or1&9u|A_#Gi^jD&44;QUWO-+AB z-jMKUTKbpwij9D$p!QD?FaqSylzYZL`OG*uqFVIHb$T{75Ff8_7=;Ytd!uD~!7%_$ zG7tp3j;aO`ob8%7BT*@kYM{Ci_3H&v2YV2I>L`z>+#V-G_}N?>;Nj+uX_3*=8U)p9 z!V}>O!D^J^w$HO?&tM^v1`&f|^W|t*7T7G$Gvu3q`-A}GwLwuv+fU?9<|8%QmIw;F z)v<;XCr@))4PS{oCk_YEx^AJb7&Og0efL%F-o0D3HSDV zJPX7Xy!jv=z*dG>9z$jp^xNctC?t9WYh7vi zs1^al12R}(8mMLsLJbYTb2BcN0(MK2-%~QnWoIc@qmSb>De*O~J!F(OwD+fRH)74# z(nlgXm~#%Bokk*^PQIgn1(d2<`EV8j7pnR(742ktRh4_=3U!ky!#Hqx-x-Ro_^6nJ z`gO$^ZDy1|f~p;!aKobzjEjsE|9+JR)2AIp)ESAjC-^PHxa^{Ct}@+CSEUs2j0_J{ zV&#!cK1N_)gVpmx&jmzz_xZfC2|vVnS6g=X`jvd4%Ie}{AyvV1lwGI`lY#FQn@*k} zP=Z0>0^F{FT`6-H{pp9c%1TP%@xw;D%-i#Xt73p)fHtWW^51lvILes%Sp>dRb&_&nGYA;qu7vw z*N~8qIDP+cs>y4%GXoBj=Xx6th^xw|X<9nEwiFRvTM$E#NTjTS-5|x2Z{J&=aXdMV zYt~<4>g>!bUt-?Jo~j>y2d%(fJb(#}0V#r(o?dw?f(+yKwWg-5ju*+KhXSgyp2_a_ z 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ʠ%1xZ4pUC2 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

;}kZ9vY>4tef7 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 diff --git a/docs/articles/Runtime/Overview.puml b/docs/articles/Runtime/Overview.puml index 66e34676..82d53611 100644 --- a/docs/articles/Runtime/Overview.puml +++ b/docs/articles/Runtime/Overview.puml @@ -6,54 +6,37 @@ class UIExtender { class UIExtenderRuntime { + ModuleName -- _userMessages } class PrefabComponent { +- _moduleName - _moviePatches +- _enabledPatches ~ RegisterPatch() +~ Deregister() +~ Enable() +~ Disable() ~ ProcessMovieIfNeeded() -~ ForceReloadMovies() } class ViewModelComponent { -- _assemblyBuilder -- _mixins -- _mixinInstanceCache +- _moduleName +- _harmony +~ Mixins +~ MixinInstanceCache +~ MixinInstanceRefreshFromConstructorCache +- _mixinTypeEnabled +- _mixinTypePropertyCache +- _mixinTypeMethodCache ~ RegisterViewModelMixin() -~ ExtendsViewModelType() -~ ExtendedViewModelForType() -~ MixinInstanceForObject() +~ Deregister() +~ Enable() +~ Disable() ~ InitializeMixinsForVMInstance() -~ RefreshMixinsForVMInstance() -~ FinalizeMixinsForVMInstance() -~ DestructMixinsForVMInstance() -} - -class CodePatcherComponent { -- _harmony -- _patchesAssemblyBuilder -- _transpilers -- _postfixes -~ AddViewModelInstantiationPatch() -~ AddViewModelRefreshPatch() -~ AddWidgetLoadPatch() -~ AddViewModelExecutePatch() -~ ApplyPatches() -} - -class CodePatchesAssemblyBuilder { -- _assemblyBuilder -~ AddTranspiler() -~ AddPostfix() -~ SaveAndLoadLibraryType() } UIExtender --* UIExtenderRuntime UIExtenderRuntime --* PrefabComponent UIExtenderRuntime --* ViewModelComponent -UIExtenderRuntime --* CodePatcherComponent - -CodePatcherComponent --* CodePatchesAssemblyBuilder @enduml \ No newline at end of file diff --git a/docs/articles/Runtime/PrefabPatching.png b/docs/articles/Runtime/PrefabPatching.png index c6e6e0442eec79694fe36ef744dc489ad0a4e47c..a1781715cd8c5d259df426299b6106ffc6305d9a 100644 GIT binary patch literal 33991 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 Patch: apply with Harmony - alt widget load patch transpiler - Patch -> Patch: find marks of existing patch - alt existing patch found - Patch -> Patch: replace existing call with new DynamicMethod\nwhich calls both both previous and current `ProcessMovieDocumentIfNeeded` - else otherwise - Patch -> Patch: replace beginning of method with mark,\ncall to `LoadXmlDocument` and `ProcessMovieDocumentIfNeeded` - end - else otherwise - note over Patch - See `VMPatching` diagram. - endnote - end + +actor Game + +Game -> SubModule: OnBeforeInitialModuleScreenSetAsRoot() +SubModule -> UIExtender: Register() +UIExtender -> PrefabComponent: Register(Type[] prefabTypes) +PrefabComponent --> UIExtender +UIExtender --> SubModule +SubModule --> Game + +... + +Game -> WidgetPrefab: LoadFrom() +WidgetPrefab -> WidgetPrefabPatch: Harmony intercepts LoadFrom() +WidgetPrefabPatch -> PrefabComponent: ProcessMovieIfNeeded() +loop All registered Prefab + PrefabComponent -> Prefab: Apply XML transformation + Prefab --> PrefabComponent end +PrefabComponent --> WidgetPrefabPatch +WidgetPrefabPatch --> WidgetPrefab +WidgetPrefab --> Game + @enduml \ No newline at end of file diff --git a/docs/articles/Runtime/Registration.png b/docs/articles/Runtime/Registration.png index 37ed5824685e99dbc4b660eff24b7d6ac9dd6dc6..b581023ced98b6e8d949179f481b88adc70806a9 100644 GIT binary patch literal 53584 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 literal 42153 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 diff --git a/docs/articles/Runtime/Registration.puml b/docs/articles/Runtime/Registration.puml index cedbd48a..cdfb2ddb 100644 --- a/docs/articles/Runtime/Registration.puml +++ b/docs/articles/Runtime/Registration.puml @@ -1,10 +1,11 @@ @startuml -actor UserLibrary +actor Game -UserLibrary -> UIExtender: Register() +Game -> SubModule: OnBeforeInitialModuleScreenSetAsRoot() +SubModule -> UIExtender: Register() -UIExtender -> UIExtender: Find attributed types in calling assembly +UIExtender -> UIExtender: Find attributed types UIExtender -> UIExtender: Create runtime for module and store it UIExtender -> UIExtenderRuntime: Register() loop for each type @@ -13,28 +14,20 @@ loop for each type PrefabComponent --> UIExtenderRuntime PrefabComponent -> PrefabComponent: store extension for later PrefabComponent --> UIExtenderRuntime + UIExtenderRuntime -> GauntletMoviePatch: Register(AutoGenName) + GauntletMoviePatch --> UIExtenderRuntime else if view model extension UIExtenderRuntime -> ViewModelComponent: RegisterViewModelMixin() ViewModelComponent -> ViewModelComponent: store mixin for later ViewModelComponent --> UIExtenderRuntime end end -UIExtenderRuntime -> UIExtenderRuntime: Patching (see separate diagram) +UIExtenderRuntime -> UIExtenderRuntime: Patching (see separate diagram) note over UIExtenderRuntime - See `VMPatching` and `PrefabPatching` diagrams. + See `ViewModelPatching` and `PrefabPatching` diagrams. endnote UIExtenderRuntime --> UIExtender -UIExtender --> UserLibrary - -... - -UserLibrary -> UIExtender: Verify() -UIExtender -> UIExtenderRuntime: Verify() -alt any errors encountered during registration -UIExtenderRuntime -> UIExtenderRuntime: display errors to the user -end -UIExtenderRuntime --> UIExtender -UIExtender --> UserLibrary - +UIExtender --> SubModule +SubModule --> Game @enduml \ No newline at end of file diff --git a/docs/articles/Runtime/VMPatching.png b/docs/articles/Runtime/VMPatching.png deleted file mode 100644 index 4b4adda19a50c47479359c5e5da3945fe99b29f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50428 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 KTzJ7U^nU;$uQ22Q diff --git a/docs/articles/Runtime/VMPatching.puml b/docs/articles/Runtime/VMPatching.puml deleted file mode 100644 index d0b27a6c..00000000 --- a/docs/articles/Runtime/VMPatching.puml +++ /dev/null @@ -1,41 +0,0 @@ -@startuml -UIExtenderRuntime -> StandardPatchLibrary: AddPatches() -StandardPatchLibrary -> CodePatcher: add standard patches -CodePatcher --> StandardPatchLibrary -StandardPatchLibrary --> UIExtenderRuntime -alt errors encountered - UIExtenderRuntime -> UIExtenderRuntime: store user error message for later -end - -UIExtenderRuntime -> CodePatcher: ApplyPatches() - -loop for each Patch - CodePatcher -> Patch: apply with Harmony - alt view model instantiation callsite transpiler - Patch -> Patch: search for `newobj` calls in code - Patch -> ViewModelComponent: ExtendsViewModelType() - ViewModelComponent --> Patch - alt component extends this view model type - Patch -> ViewModelComponent: ExtendedViewModelTypeForType() - ViewModelComponent -> ViewModelComponent: generate extended view model type - ViewModelComponent --> Patch - Patch -> Patch: replace original VM type in `newobj`\nwith extended VM type, making game\ncreate extended VM instances in place\nof original (base) ones - end - else view model refresh callsite postfix - Patch -> Patch: add refresh postfix - note over Patch - See `ExtendedVMRuntime` diagram. - endnote - else otherwise - note over Patch - See `PrefabPatching` diagram. - endnote - end -end - -CodePatcher --> UIExtenderRuntime - -UIExtenderRuntime -> ViewModelComponent: SaveDebugImages() -ViewModelComponent --> UIExtenderRuntime - -@enduml \ No newline at end of file diff --git a/docs/articles/Runtime/ViewModelPatching.png b/docs/articles/Runtime/ViewModelPatching.png new file mode 100644 index 0000000000000000000000000000000000000000..444cd3fca3141b23787c7c34c9ce50db0b1f50ce GIT binary patch literal 58099 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 OdO8=+WSzS5;J*Op-GvSS literal 0 HcmV?d00001 diff --git a/docs/articles/Runtime/ViewModelPatching.puml b/docs/articles/Runtime/ViewModelPatching.puml new file mode 100644 index 00000000..3b309bae --- /dev/null +++ b/docs/articles/Runtime/ViewModelPatching.puml @@ -0,0 +1,49 @@ +@startuml + +actor Game + +Game -> SubModule: OnBeforeInitialModuleScreenSetAsRoot() +SubModule -> UIExtender: Register() +UIExtender -> ViewModelComponent: Register(Type[] mixinTypes) +ViewModelComponent --> UIExtender +UIExtender --> SubModule +SubModule --> Game + +... + +Game -> ViewModel: Constructor() +ViewModel -> ViewModelWithMixinPatch: Harmony intercepts Constructor() +ViewModelWithMixinPatch -> ViewModelComponent: InitializeMixinsForVMInstance() +loop All registered ViewModelMixin + ViewModelComponent -> ViewModelMixin: Constructor() + ViewModelMixin -> ViewModel: Refresh() (if the original Constructor() calls it) + ViewModel --> ViewModelMixin + ViewModelMixin --> ViewModelComponent +end +ViewModelComponent --> ViewModelWithMixinPatch +ViewModelWithMixinPatch --> ViewModel +ViewModel --> Game + +... + +Game -> ViewModel: Refresh() +ViewModel -> ViewModelWithMixinPatch: Harmony intercepts Refresh() +loop All registered ViewModelMixin + ViewModelWithMixinPatch -> ViewModelMixin: Refresh() + ViewModelMixin --> ViewModelWithMixinPatch +end +ViewModelWithMixinPatch --> ViewModel +ViewModel --> Game + +... + +Game -> ViewModel: OnFinalize() +ViewModel -> ViewModelWithMixinPatch: Harmony intercepts OnFinalize() +loop All registered ViewModelMixin + ViewModelWithMixinPatch -> ViewModelMixin: OnFinalize() + ViewModelMixin --> ViewModelWithMixinPatch +end +ViewModelWithMixinPatch --> ViewModel +ViewModel --> Game + +@enduml \ No newline at end of file diff --git a/docs/articles/interface/Overview.md b/docs/articles/interface/Overview.md new file mode 100644 index 00000000..a792de3d --- /dev/null +++ b/docs/articles/interface/Overview.md @@ -0,0 +1,3 @@ +# Overview + +![image](Overview.png) \ No newline at end of file diff --git a/docs/articles/interface/Prefab.md b/docs/articles/interface/Prefab.md new file mode 100644 index 00000000..469ffa6b --- /dev/null +++ b/docs/articles/interface/Prefab.md @@ -0,0 +1,3 @@ +# Overview + +![image](Prefab.png) \ No newline at end of file diff --git a/docs/articles/interface/ViewModelMixin.md b/docs/articles/interface/ViewModelMixin.md new file mode 100644 index 00000000..63a3febe --- /dev/null +++ b/docs/articles/interface/ViewModelMixin.md @@ -0,0 +1,3 @@ +# ViewModelMixin + +![image](ViewModelMixin.png) \ No newline at end of file diff --git a/docs/articles/interface/toc.yml b/docs/articles/interface/toc.yml new file mode 100644 index 00000000..7018247e --- /dev/null +++ b/docs/articles/interface/toc.yml @@ -0,0 +1,6 @@ +- name: Overview + href: Overview.md +- name: Prefab + href: Prefab.md +- name: ViewModelMixin + href: ViewModelMixin.md diff --git a/docs/articles/runtime/Overview.md b/docs/articles/runtime/Overview.md new file mode 100644 index 00000000..a792de3d --- /dev/null +++ b/docs/articles/runtime/Overview.md @@ -0,0 +1,3 @@ +# Overview + +![image](Overview.png) \ No newline at end of file diff --git a/docs/articles/runtime/PrefabPatching.md b/docs/articles/runtime/PrefabPatching.md new file mode 100644 index 00000000..ecd477df --- /dev/null +++ b/docs/articles/runtime/PrefabPatching.md @@ -0,0 +1,3 @@ +# Prefab Patching + +![image](PrefabPatching.png) \ No newline at end of file diff --git a/docs/articles/runtime/Registration.md b/docs/articles/runtime/Registration.md new file mode 100644 index 00000000..d7b0d60c --- /dev/null +++ b/docs/articles/runtime/Registration.md @@ -0,0 +1,3 @@ +# Registration + +![image](Registration.png) \ No newline at end of file diff --git a/docs/articles/runtime/ViewModelPatching.md b/docs/articles/runtime/ViewModelPatching.md new file mode 100644 index 00000000..1aa7c7f2 --- /dev/null +++ b/docs/articles/runtime/ViewModelPatching.md @@ -0,0 +1,3 @@ +# ViewModel Patching + +![image](ViewModelPatching.png) \ No newline at end of file diff --git a/docs/articles/runtime/toc.yml b/docs/articles/runtime/toc.yml new file mode 100644 index 00000000..80d02a8c --- /dev/null +++ b/docs/articles/runtime/toc.yml @@ -0,0 +1,8 @@ +- name: Overview + href: Overview.md +- name: Registration + href: Registration.md +- name: PrefabPatching + href: PrefabPatching.md +- name: ViewModelPatching + href: ViewModelPatching.md diff --git a/docs/articles/toc.yml b/docs/articles/toc.yml index 826b4db0..dd8ebace 100644 --- a/docs/articles/toc.yml +++ b/docs/articles/toc.yml @@ -5,3 +5,9 @@ items: - name: APIv1 href: v1/toc.yml homepage: v1/Overview.md +- name: Interface + href: interface/toc.yml + homepage: interface/Overview.md +- name: Runtime + href: runtime/toc.yml + homepage: runtime/Overview.md diff --git a/docs/articles/v2/Overview.md b/docs/articles/v2/Overview.md index 5b0b3090..580da15f 100644 --- a/docs/articles/v2/Overview.md +++ b/docs/articles/v2/Overview.md @@ -1,5 +1,5 @@ ## Quickstart -*See [here](../v1) for the PrefabsV1 API documentation.* +*See [here](../v1/toc.yml) for the PrefabsV1 API documentation.* It contains both the v1 API usage and how to generally register UIExtenderEx to make it work! Version 2 of the API builds off of the the concepts of the original API, but offers a bit more versatility, and aggregates some of the original prefab types to offer a (hopefully) simpler API. diff --git a/docs/docfx.json b/docs/docfx.json index fe87a04d..1b663afb 100644 --- a/docs/docfx.json +++ b/docs/docfx.json @@ -27,7 +27,7 @@ ], "resource": [ { - "files": [ "**/images/**", "codesnippet/**", "CNAME" ], + "files": [ "**/images/**", "codesnippet/**", "CNAME", "**/**.{png}" ], "exclude": [ "_site/**", "obj/**" ] } ], diff --git a/src/Bannerlord.UIExtenderEx.sln b/src/Bannerlord.UIExtenderEx.sln index ba9ab787..dbd0fc86 100644 --- a/src/Bannerlord.UIExtenderEx.sln +++ b/src/Bannerlord.UIExtenderEx.sln @@ -32,6 +32,7 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{6A6FB1BE-5426-4835-A308-0E74E66299D5}" ProjectSection(SolutionItems) = preProject ..\docs\articles\toc.yml = ..\docs\articles\toc.yml + ..\docs\docfx.json = ..\docs\docfx.json EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "v1", "v1", "{395402D4-28B5-4974-943D-04B7D5F6673D}" @@ -50,6 +51,37 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "v2", "v2", "{B4D6A888-2D8F- ..\docs\articles\v2\ViewModelMixin.md = ..\docs\articles\v2\ViewModelMixin.md EndProjectSection EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "interface", "interface", "{252A68C5-9E10-4E28-AF49-37E6DF1E62F0}" + ProjectSection(SolutionItems) = preProject + ..\docs\articles\Interface\Overview.png = ..\docs\articles\Interface\Overview.png + ..\docs\articles\Interface\Overview.puml = ..\docs\articles\Interface\Overview.puml + ..\docs\articles\Interface\Prefab.png = ..\docs\articles\Interface\Prefab.png + ..\docs\articles\Interface\Prefab.puml = ..\docs\articles\Interface\Prefab.puml + ..\docs\articles\Interface\ViewModelMixin.png = ..\docs\articles\Interface\ViewModelMixin.png + ..\docs\articles\Interface\ViewModelMixin.puml = ..\docs\articles\Interface\ViewModelMixin.puml + ..\docs\articles\Interface\Overview.md = ..\docs\articles\Interface\Overview.md + ..\docs\articles\Interface\Prefab.md = ..\docs\articles\Interface\Prefab.md + ..\docs\articles\Interface\ViewModelMixin.md = ..\docs\articles\Interface\ViewModelMixin.md + ..\docs\articles\Interface\toc.yml = ..\docs\articles\Interface\toc.yml + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runtime", "runtime", "{8969A5E2-BC12-46F8-BF4A-E8F73771E4E5}" + ProjectSection(SolutionItems) = preProject + ..\docs\articles\Runtime\ViewModelPatching.png = ..\docs\articles\Runtime\ViewModelPatching.png + ..\docs\articles\Runtime\ViewModelPatching.puml = ..\docs\articles\Runtime\ViewModelPatching.puml + ..\docs\articles\Runtime\Overview.png = ..\docs\articles\Runtime\Overview.png + ..\docs\articles\Runtime\Overview.puml = ..\docs\articles\Runtime\Overview.puml + ..\docs\articles\Runtime\PrefabPatching.png = ..\docs\articles\Runtime\PrefabPatching.png + ..\docs\articles\Runtime\PrefabPatching.puml = ..\docs\articles\Runtime\PrefabPatching.puml + ..\docs\articles\Runtime\Registration.png = ..\docs\articles\Runtime\Registration.png + ..\docs\articles\Runtime\Registration.puml = ..\docs\articles\Runtime\Registration.puml + ..\docs\articles\Runtime\Overview.md = ..\docs\articles\Runtime\Overview.md + ..\docs\articles\Runtime\PrefabPatching.md = ..\docs\articles\Runtime\PrefabPatching.md + ..\docs\articles\Runtime\Registration.md = ..\docs\articles\Runtime\Registration.md + ..\docs\articles\Runtime\ViewModelPatching.md = ..\docs\articles\Runtime\ViewModelPatching.md + ..\docs\articles\Runtime\toc.yml = ..\docs\articles\Runtime\toc.yml + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Beta_Release|x64 = Beta_Release|x64 @@ -88,6 +120,8 @@ Global {6A6FB1BE-5426-4835-A308-0E74E66299D5} = {9D2C61D6-D1B6-4C89-80B2-6DAE2D5FCEE4} {395402D4-28B5-4974-943D-04B7D5F6673D} = {6A6FB1BE-5426-4835-A308-0E74E66299D5} {B4D6A888-2D8F-49A4-87C5-6CD18D8F818B} = {6A6FB1BE-5426-4835-A308-0E74E66299D5} + {252A68C5-9E10-4E28-AF49-37E6DF1E62F0} = {6A6FB1BE-5426-4835-A308-0E74E66299D5} + {8969A5E2-BC12-46F8-BF4A-E8F73771E4E5} = {6A6FB1BE-5426-4835-A308-0E74E66299D5} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {31629F18-48B4-4C3E-87C3-BDCB9BBF1BBD} diff --git a/src/Bannerlord.UIExtenderEx/Attributes/BaseUIExtenderAttribute.cs b/src/Bannerlord.UIExtenderEx/Attributes/BaseUIExtenderAttribute.cs index e98a6425..04416c7c 100644 --- a/src/Bannerlord.UIExtenderEx/Attributes/BaseUIExtenderAttribute.cs +++ b/src/Bannerlord.UIExtenderEx/Attributes/BaseUIExtenderAttribute.cs @@ -1,12 +1,11 @@ using System; using System.Diagnostics.CodeAnalysis; -namespace Bannerlord.UIExtenderEx.Attributes -{ - ///

- /// Base class for extensions attributes - /// - [SuppressMessage("CodeQuality", "IDE0079:Remove unnecessary suppression", Justification = "For ReSharper")] - [SuppressMessage("Design", "RCS1203:Use AttributeUsageAttribute.", Justification = "Implemented in the derived attributes.")] - public abstract class BaseUIExtenderAttribute : Attribute { } -} \ No newline at end of file +namespace Bannerlord.UIExtenderEx.Attributes; + +/// +/// Base class for extensions attributes +/// +[SuppressMessage("CodeQuality", "IDE0079:Remove unnecessary suppression", Justification = "For ReSharper")] +[SuppressMessage("Design", "RCS1203:Use AttributeUsageAttribute.", Justification = "Implemented in the derived attributes.")] +public abstract class BaseUIExtenderAttribute : Attribute { } \ No newline at end of file diff --git a/src/Bannerlord.UIExtenderEx/Attributes/DataSourceMethodAttribute.cs b/src/Bannerlord.UIExtenderEx/Attributes/DataSourceMethodAttribute.cs index 107fa3c1..6b1da658 100644 --- a/src/Bannerlord.UIExtenderEx/Attributes/DataSourceMethodAttribute.cs +++ b/src/Bannerlord.UIExtenderEx/Attributes/DataSourceMethodAttribute.cs @@ -1,11 +1,10 @@ using System; -namespace Bannerlord.UIExtenderEx.Attributes -{ - /// - /// Attribute for mixin methods to be added to view models. - /// Only methods specified by this attribute will actually end up in extended view model - /// - [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] - public sealed class DataSourceMethodAttribute : Attribute { } -} \ No newline at end of file +namespace Bannerlord.UIExtenderEx.Attributes; + +/// +/// Attribute for mixin methods to be added to view models. +/// Only methods specified by this attribute will actually end up in extended view model +/// +[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] +public sealed class DataSourceMethodAttribute : Attribute { } \ No newline at end of file diff --git a/src/Bannerlord.UIExtenderEx/Attributes/PrefabExtensionAttribute.cs b/src/Bannerlord.UIExtenderEx/Attributes/PrefabExtensionAttribute.cs index c8f9ed10..424d9cec 100644 --- a/src/Bannerlord.UIExtenderEx/Attributes/PrefabExtensionAttribute.cs +++ b/src/Bannerlord.UIExtenderEx/Attributes/PrefabExtensionAttribute.cs @@ -1,53 +1,52 @@ using System; -namespace Bannerlord.UIExtenderEx.Attributes +namespace Bannerlord.UIExtenderEx.Attributes; + +/// +/// Attribute for prefab XML extensions. +/// Extension classes should inherit from one of the `IPrefabPatch` base classes and should be marked with this attribute +/// +[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] +public sealed class PrefabExtensionAttribute : BaseUIExtenderAttribute { /// - /// Attribute for prefab XML extensions. - /// Extension classes should inherit from one of the `IPrefabPatch` base classes and should be marked with this attribute + /// Gauntlet Movie name to extend /// - [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] - public sealed class PrefabExtensionAttribute : BaseUIExtenderAttribute - { - /// - /// Gauntlet Movie name to extend - /// - public string Movie { get; } + public string Movie { get; } - /// - /// XPath of the node to operate against (optional) - /// - public string? XPath { get; } + /// + /// XPath of the node to operate against (optional) + /// + public string? XPath { get; } - /// - /// Gauntlet Movie name to prevent from loading as an auto-generated Widget (optional) - /// - [Obsolete("AutoGens are globally disabled for now. When the game will be released on Linux/OSX we'll reuse this property again.")] - public string? AutoGenWidgetName { get; } + /// + /// Gauntlet Movie name to prevent from loading as an auto-generated Widget (optional) + /// + [Obsolete("AutoGens are globally disabled for now. When the game will be released on Linux/OSX we'll reuse this property again.")] + public string? AutoGenWidgetName { get; } - /// - /// Constructor - /// - /// Gauntlet Movie name to extend - /// XPath of the node to operate against (optional) - public PrefabExtensionAttribute(string movie, string? xpath = null) - { - Movie = movie; - XPath = xpath; - } + /// + /// Constructor + /// + /// Gauntlet Movie name to extend + /// XPath of the node to operate against (optional) + public PrefabExtensionAttribute(string movie, string? xpath = null) + { + Movie = movie; + XPath = xpath; + } - /// - /// Constructor - /// - /// Gauntlet Movie name to extend - /// XPath of the node to operate against (optional) - /// Gauntlet Movie name to prevent from loading as an auto-generated Widget (optional) - [Obsolete("AutoGens are globally disabled for now. When the game will be released on Linux/OSX we'll reuse this property again.")] - public PrefabExtensionAttribute(string movie, string? xpath = null, string? autoGenWidgetName = null) - { - Movie = movie; - XPath = xpath; - AutoGenWidgetName = autoGenWidgetName; - } + /// + /// Constructor + /// + /// Gauntlet Movie name to extend + /// XPath of the node to operate against (optional) + /// Gauntlet Movie name to prevent from loading as an auto-generated Widget (optional) + [Obsolete("AutoGens are globally disabled for now. When the game will be released on Linux/OSX we'll reuse this property again.")] + public PrefabExtensionAttribute(string movie, string? xpath = null, string? autoGenWidgetName = null) + { + Movie = movie; + XPath = xpath; + AutoGenWidgetName = autoGenWidgetName; } } \ No newline at end of file diff --git a/src/Bannerlord.UIExtenderEx/Attributes/ViewModelMixinAttribute.cs b/src/Bannerlord.UIExtenderEx/Attributes/ViewModelMixinAttribute.cs index 93bbeeeb..dc3296bb 100644 --- a/src/Bannerlord.UIExtenderEx/Attributes/ViewModelMixinAttribute.cs +++ b/src/Bannerlord.UIExtenderEx/Attributes/ViewModelMixinAttribute.cs @@ -2,31 +2,30 @@ using System; -namespace Bannerlord.UIExtenderEx.Attributes +namespace Bannerlord.UIExtenderEx.Attributes; + +/// +/// Attribute to mark view model mixins. +/// Mixin classes should extend from and should be marked with this attribute +/// +[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)] +public sealed class ViewModelMixinAttribute : BaseUIExtenderAttribute { - /// - /// Attribute to mark view model mixins. - /// Mixin classes should extend from and should be marked with this attribute - /// - [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)] - public sealed class ViewModelMixinAttribute : BaseUIExtenderAttribute - { - public string? RefreshMethodName { get; } - public bool HandleDerived { get; } + public string? RefreshMethodName { get; } + public bool HandleDerived { get; } - public ViewModelMixinAttribute() { } - public ViewModelMixinAttribute(string refreshMethodName) - { - RefreshMethodName = refreshMethodName; - } - public ViewModelMixinAttribute(bool handleDerived) - { - HandleDerived = handleDerived; - } - public ViewModelMixinAttribute(string? refreshMethodName = null, bool handleDerived = false) - { - RefreshMethodName = refreshMethodName; - HandleDerived = handleDerived; - } + public ViewModelMixinAttribute() { } + public ViewModelMixinAttribute(string refreshMethodName) + { + RefreshMethodName = refreshMethodName; + } + public ViewModelMixinAttribute(bool handleDerived) + { + HandleDerived = handleDerived; + } + public ViewModelMixinAttribute(string? refreshMethodName = null, bool handleDerived = false) + { + RefreshMethodName = refreshMethodName; + HandleDerived = handleDerived; } } \ No newline at end of file diff --git a/src/Bannerlord.UIExtenderEx/BUTRViewModel.cs b/src/Bannerlord.UIExtenderEx/BUTRViewModel.cs index 281e08a6..f28a89f5 100644 --- a/src/Bannerlord.UIExtenderEx/BUTRViewModel.cs +++ b/src/Bannerlord.UIExtenderEx/BUTRViewModel.cs @@ -12,135 +12,133 @@ using TaleWorlds.Library; -namespace Bannerlord.UIExtenderEx -{ - // TODO: v3 - - [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)] - internal class BUTRDataSourcePropertyAttribute : Attribute - { - public string? OverrideName { get; set; } - } - [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] - internal class BUTRDataSourceMethodAttribute : Attribute - { - public string? OverrideName { get; set; } - } +namespace Bannerlord.UIExtenderEx; +// TODO: v3 - /// - /// A custom ViewModel with the static property/method cache disabled entirely. - /// Also, has it's own property/method discovery mechanism - /// - internal abstract class BUTRViewModel : ViewModel +[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)] +internal class BUTRDataSourcePropertyAttribute : Attribute +{ + public string? OverrideName { get; set; } +} +[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] +internal class BUTRDataSourceMethodAttribute : Attribute +{ + public string? OverrideName { get; set; } +} + +/// +/// A custom ViewModel with the static property/method cache disabled entirely. +/// Also, has it's own property/method discovery mechanism +/// +internal abstract class BUTRViewModel : ViewModel +{ + protected BUTRViewModel() { - protected BUTRViewModel() + var properties = GetType().GetProperties(AccessTools.all); + foreach (var propertyInfo in properties) { - var properties = GetType().GetProperties(AccessTools.all); - foreach (var propertyInfo in properties) + if (propertyInfo.GetCustomAttribute() is { } attribute) { - if (propertyInfo.GetCustomAttribute() is { } attribute) - { - if (propertyInfo.GetMethod?.IsPrivate == true || propertyInfo.SetMethod?.IsPrivate == true) throw new Exception(); + if (propertyInfo.GetMethod?.IsPrivate == true || propertyInfo.SetMethod?.IsPrivate == true) throw new Exception(); - this.AddProperty(attribute.OverrideName ?? propertyInfo.Name, propertyInfo); - } + this.AddProperty(attribute.OverrideName ?? propertyInfo.Name, propertyInfo); } + } - var methods = GetType().GetMethods(AccessTools.all); - foreach (var methodInfo in methods) + var methods = GetType().GetMethods(AccessTools.all); + foreach (var methodInfo in methods) + { + if (methodInfo.GetCustomAttribute() is { } attribute) { - if (methodInfo.GetCustomAttribute() is { } attribute) - { - if (methodInfo.IsPrivate) throw new Exception(); + if (methodInfo.IsPrivate) throw new Exception(); - this.AddMethod(attribute.OverrideName ?? methodInfo.Name, methodInfo); - } + this.AddMethod(attribute.OverrideName ?? methodInfo.Name, methodInfo); } } } +} + +/// +/// An advanced ViewModel mixin with the same discovery mechanism as BUTRViewModel +/// +/// +/// +internal abstract class BUTRViewModelMixin : IViewModelMixin + where TViewModelMixin : BUTRViewModelMixin + where TViewModel : ViewModel +{ + private readonly WeakReference _vm; - /// - /// An advanced ViewModel mixin with the same discovery mechanism as BUTRViewModel - /// - /// - /// - internal abstract class BUTRViewModelMixin : IViewModelMixin - where TViewModelMixin : BUTRViewModelMixin - where TViewModel : ViewModel - { - private readonly WeakReference _vm; + protected TViewModel? ViewModel => _vm.TryGetTarget(out var vm) ? vm : null; - protected TViewModel? ViewModel => _vm.TryGetTarget(out var vm) ? vm : null; + public TViewModelMixin Mixin => (TViewModelMixin) this; - public TViewModelMixin Mixin => (TViewModelMixin) this; + protected BUTRViewModelMixin(TViewModel vm) + { + _vm = new WeakReference(vm); - protected BUTRViewModelMixin(TViewModel vm) + SetVMProperty(nameof(Mixin), GetType().Name); + foreach (var propertyInfo in GetType().GetProperties(AccessTools.all)) { - _vm = new WeakReference(vm); - - SetVMProperty(nameof(Mixin), GetType().Name); - foreach (var propertyInfo in GetType().GetProperties(AccessTools.all)) + if (propertyInfo.GetCustomAttribute() is { } attribute) { - if (propertyInfo.GetCustomAttribute() is { } attribute) - { - if (propertyInfo.GetMethod?.IsPrivate == true || propertyInfo.SetMethod?.IsPrivate == true) throw new Exception(); - - var wrappedPropertyInfo = new WrappedPropertyInfo(propertyInfo, this); - vm.AddProperty(attribute.OverrideName ?? propertyInfo.Name, wrappedPropertyInfo); - wrappedPropertyInfo.PropertyChanged += (_, e) => ViewModel?.OnPropertyChanged(e.PropertyName); - } + if (propertyInfo.GetMethod?.IsPrivate == true || propertyInfo.SetMethod?.IsPrivate == true) throw new Exception(); + + var wrappedPropertyInfo = new WrappedPropertyInfo(propertyInfo, this); + vm.AddProperty(attribute.OverrideName ?? propertyInfo.Name, wrappedPropertyInfo); + wrappedPropertyInfo.PropertyChanged += (_, e) => ViewModel?.OnPropertyChanged(e.PropertyName); } - foreach (var methodInfo in GetType().GetMethods(AccessTools.all)) + } + foreach (var methodInfo in GetType().GetMethods(AccessTools.all)) + { + if (methodInfo.GetCustomAttribute() is { } attribute) { - if (methodInfo.GetCustomAttribute() is { } attribute) - { - if (methodInfo.IsPrivate) throw new Exception(); + if (methodInfo.IsPrivate) throw new Exception(); - var wrappedMethodInfo = new WrappedMethodInfo(methodInfo, this); - vm.AddMethod(attribute.OverrideName ?? methodInfo.Name, wrappedMethodInfo); - } + var wrappedMethodInfo = new WrappedMethodInfo(methodInfo, this); + vm.AddMethod(attribute.OverrideName ?? methodInfo.Name, wrappedMethodInfo); } } + } - /// - public abstract void OnRefresh(); + /// + public abstract void OnRefresh(); - /// - public abstract void OnFinalize(); + /// + public abstract void OnFinalize(); - protected void OnPropertyChanged([CallerMemberName] string? propertyName = null) - { - var t = ViewModel?.GetPropertyValue(propertyName); - ViewModel?.OnPropertyChanged(propertyName); - } + protected void OnPropertyChanged([CallerMemberName] string? propertyName = null) + { + var t = ViewModel?.GetPropertyValue(propertyName); + ViewModel?.OnPropertyChanged(propertyName); + } - protected void OnPropertyChangedWithValue(object? value, [CallerMemberName] string? propertyName = null) - { - ViewModel?.OnPropertyChangedWithValue(value, propertyName); - } + protected void OnPropertyChangedWithValue(object? value, [CallerMemberName] string? propertyName = null) + { + ViewModel?.OnPropertyChangedWithValue(value, propertyName); + } - protected bool SetField(ref T field, T value, string propertyName) + protected bool SetField(ref T field, T value, string propertyName) + { + if (EqualityComparer.Default.Equals(field, value)) { - if (EqualityComparer.Default.Equals(field, value)) - { - return false; - } - field = value; - OnPropertyChangedWithValue(value, propertyName); - return true; + return false; } + field = value; + OnPropertyChangedWithValue(value, propertyName); + return true; + } - protected void SetVMProperty(string property, string? overrideName = null) - { - var propertyInfo = new WrappedPropertyInfo(AccessTools2.Property(GetType(), property)!, this); - ViewModel?.AddProperty(overrideName ?? property, propertyInfo); - propertyInfo.PropertyChanged += (_, e) => ViewModel?.OnPropertyChanged(e.PropertyName); - } + protected void SetVMProperty(string property, string? overrideName = null) + { + var propertyInfo = new WrappedPropertyInfo(AccessTools2.Property(GetType(), property)!, this); + ViewModel?.AddProperty(overrideName ?? property, propertyInfo); + propertyInfo.PropertyChanged += (_, e) => ViewModel?.OnPropertyChanged(e.PropertyName); + } - protected void SetVMMethod(string method, string? overrideName = null) - { - var methodInfo = new WrappedMethodInfo(AccessTools2.Method(GetType(), method)!, this); - ViewModel?.AddMethod(overrideName ?? method, methodInfo); - } + protected void SetVMMethod(string method, string? overrideName = null) + { + var methodInfo = new WrappedMethodInfo(AccessTools2.Method(GetType(), method)!, this); + ViewModel?.AddMethod(overrideName ?? method, methodInfo); } } \ No newline at end of file diff --git a/src/Bannerlord.UIExtenderEx/Components/PrefabComponent.Prefabs.cs b/src/Bannerlord.UIExtenderEx/Components/PrefabComponent.Prefabs.cs index 25f1599e..8c55ee78 100644 --- a/src/Bannerlord.UIExtenderEx/Components/PrefabComponent.Prefabs.cs +++ b/src/Bannerlord.UIExtenderEx/Components/PrefabComponent.Prefabs.cs @@ -4,160 +4,159 @@ using System; using System.Xml; -namespace Bannerlord.UIExtenderEx.Components +namespace Bannerlord.UIExtenderEx.Components; + +/// +/// Component that deals with Gauntlet prefab XML files +/// +internal partial class PrefabComponent { /// - /// Component that deals with Gauntlet prefab XML files + /// Register snippet insert patch + /// + /// + /// + /// + [Obsolete("Use Prefabs2.PrefabExtensionInsertPatch instead.")] + public void RegisterPatch(string movie, string? xpath, PrefabExtensionInsertPatch patch) => RegisterPatch(movie, xpath, patch.GetType(), node => + { + if (node.OwnerDocument is not { } ownerDocument) + { + MessageUtils.Fail($"XML original document for {movie} is null!"); + return; + } + + if (patch.GetPrefabExtension().DocumentElement is not { } extensionNode) + { + MessageUtils.Fail($"XML patch document for {movie} is null!"); + return; + } + + if (!TryRemoveComments(extensionNode)) + { + MessageUtils.Fail($"XML patch document's root node was a comment."); + return; + } + + var importedExtensionNode = ownerDocument.ImportNode(extensionNode, true); + var position = Math.Min(patch.Position, node.ChildNodes.Count - 1); + position = Math.Max(position, 0); + if (position >= node.ChildNodes.Count) + { + MessageUtils.Fail($"Invalid position ({position}) for insert (patching in {patch.Id})"); + return; + } + + node.InsertAfter(importedExtensionNode, node.ChildNodes[position]); + }); + + /// + /// Register snippet set attribute patch /// - internal partial class PrefabComponent + /// + /// + /// + public void RegisterPatch(string movie, string? xpath, PrefabExtensionSetAttributePatch patch) => RegisterPatch(movie, xpath, patch.GetType(), node => { - /// - /// Register snippet insert patch - /// - /// - /// - /// - [Obsolete("Use Prefabs2.PrefabExtensionInsertPatch instead.")] - public void RegisterPatch(string movie, string? xpath, PrefabExtensionInsertPatch patch) => RegisterPatch(movie, xpath, node => - { - if (node.OwnerDocument is not { } ownerDocument) - { - MessageUtils.Fail($"XML original document for {movie} is null!"); - return; - } - - if (patch.GetPrefabExtension().DocumentElement is not { } extensionNode) - { - MessageUtils.Fail($"XML patch document for {movie} is null!"); - return; - } - - if (!TryRemoveComments(extensionNode)) - { - MessageUtils.Fail($"XML patch document's root node was a comment."); - return; - } - - var importedExtensionNode = ownerDocument.ImportNode(extensionNode, true); - var position = Math.Min(patch.Position, node.ChildNodes.Count - 1); - position = Math.Max(position, 0); - if (position >= node.ChildNodes.Count) - { - MessageUtils.Fail($"Invalid position ({position}) for insert (patching in {patch.Id})"); - return; - } - - node.InsertAfter(importedExtensionNode, node.ChildNodes[position]); - }); - - /// - /// Register snippet set attribute patch - /// - /// - /// - /// - public void RegisterPatch(string movie, string? xpath, PrefabExtensionSetAttributePatch patch) => RegisterPatch(movie, xpath, node => - { - if (node.OwnerDocument is not { } ownerDocument) - { - return; - } - - if (node.NodeType != XmlNodeType.Element) - { - return; - } - - if (node.Attributes![patch.Attribute] is null) - { - var attribute = ownerDocument.CreateAttribute(patch.Attribute); - node.Attributes.Append(attribute); - } - - node.Attributes![patch.Attribute].Value = patch.Value; - }); - - /// - /// Register snippet replace patch - /// - /// - /// - /// - public void RegisterPatch(string movie, string? xpath, PrefabExtensionReplacePatch patch) => RegisterPatch(movie, xpath, node => - { - if (node.OwnerDocument is not { } ownerDocument) - { - MessageUtils.Fail($"XML original document for {movie} is null!"); - return; - } - - if (node.ParentNode is null) - { - MessageUtils.Fail($"XML original document parent node for {movie} is null!"); - return; - } - - if (patch.GetPrefabExtension().DocumentElement is not { } extensionNode) - { - MessageUtils.Fail($"XML patch document for {movie} is null!"); - return; - } - - if (!TryRemoveComments(extensionNode)) - { - MessageUtils.Fail($"XML patch document's root node was a comment."); - return; - } - - var importedExtensionNode = ownerDocument.ImportNode(extensionNode, true); - - node.ParentNode.ReplaceChild(importedExtensionNode, node); - }); - - /// - /// Register snippet insert as sibling patch - /// - /// - /// - /// - public void RegisterPatch(string movie, string? xpath, PrefabExtensionInsertAsSiblingPatch patch) => RegisterPatch(movie, xpath, node => - { - if (node.OwnerDocument is not { } ownerDocument) - { - MessageUtils.Fail($"XML original document for {movie} is null!"); - return; - } - - if (node.ParentNode is null) - { - MessageUtils.Fail($"XML original document parent node for {movie} is null!"); - return; - } - - if (patch.GetPrefabExtension().DocumentElement is not { } extensionNode) - { - MessageUtils.Fail($"XML patch document for {movie} is null!"); - return; - } - - if (!TryRemoveComments(extensionNode)) - { - MessageUtils.Fail($"XML patch document's root node was a comment."); - return; - } - - var importedExtensionNode = ownerDocument.ImportNode(extensionNode, true); - - switch (patch.Type) - { - case PrefabExtensionInsertAsSiblingPatch.InsertType.Append: - node.ParentNode.InsertAfter(importedExtensionNode, node); - break; - - case PrefabExtensionInsertAsSiblingPatch.InsertType.Prepend: - node.ParentNode.InsertBefore(importedExtensionNode, node); - break; - } - }); - } + if (node.OwnerDocument is not { } ownerDocument) + { + return; + } + + if (node.NodeType != XmlNodeType.Element) + { + return; + } + + if (node.Attributes![patch.Attribute] is null) + { + var attribute = ownerDocument.CreateAttribute(patch.Attribute); + node.Attributes.Append(attribute); + } + + node.Attributes![patch.Attribute].Value = patch.Value; + }); + + /// + /// Register snippet replace patch + /// + /// + /// + /// + public void RegisterPatch(string movie, string? xpath, PrefabExtensionReplacePatch patch) => RegisterPatch(movie, xpath, patch.GetType(), node => + { + if (node.OwnerDocument is not { } ownerDocument) + { + MessageUtils.Fail($"XML original document for {movie} is null!"); + return; + } + + if (node.ParentNode is null) + { + MessageUtils.Fail($"XML original document parent node for {movie} is null!"); + return; + } + + if (patch.GetPrefabExtension().DocumentElement is not { } extensionNode) + { + MessageUtils.Fail($"XML patch document for {movie} is null!"); + return; + } + + if (!TryRemoveComments(extensionNode)) + { + MessageUtils.Fail($"XML patch document's root node was a comment."); + return; + } + + var importedExtensionNode = ownerDocument.ImportNode(extensionNode, true); + + node.ParentNode.ReplaceChild(importedExtensionNode, node); + }); + + /// + /// Register snippet insert as sibling patch + /// + /// + /// + /// + public void RegisterPatch(string movie, string? xpath, PrefabExtensionInsertAsSiblingPatch patch) => RegisterPatch(movie, xpath, patch.GetType(), node => + { + if (node.OwnerDocument is not { } ownerDocument) + { + MessageUtils.Fail($"XML original document for {movie} is null!"); + return; + } + + if (node.ParentNode is null) + { + MessageUtils.Fail($"XML original document parent node for {movie} is null!"); + return; + } + + if (patch.GetPrefabExtension().DocumentElement is not { } extensionNode) + { + MessageUtils.Fail($"XML patch document for {movie} is null!"); + return; + } + + if (!TryRemoveComments(extensionNode)) + { + MessageUtils.Fail($"XML patch document's root node was a comment."); + return; + } + + var importedExtensionNode = ownerDocument.ImportNode(extensionNode, true); + + switch (patch.Type) + { + case PrefabExtensionInsertAsSiblingPatch.InsertType.Append: + node.ParentNode.InsertAfter(importedExtensionNode, node); + break; + + case PrefabExtensionInsertAsSiblingPatch.InsertType.Prepend: + node.ParentNode.InsertBefore(importedExtensionNode, node); + break; + } + }); } \ No newline at end of file diff --git a/src/Bannerlord.UIExtenderEx/Components/PrefabComponent.Prefabs2.cs b/src/Bannerlord.UIExtenderEx/Components/PrefabComponent.Prefabs2.cs index 175ca2a1..1dfeac1a 100644 --- a/src/Bannerlord.UIExtenderEx/Components/PrefabComponent.Prefabs2.cs +++ b/src/Bannerlord.UIExtenderEx/Components/PrefabComponent.Prefabs2.cs @@ -9,419 +9,418 @@ using System.Reflection; using System.Xml; -namespace Bannerlord.UIExtenderEx.Components +namespace Bannerlord.UIExtenderEx.Components; + +/// +/// Component that deals with Gauntlet prefab XML files +/// +internal partial class PrefabComponent { + private readonly Lazy> _contentAttributeTypes = new(() => + { + var contentAttributeType = typeof(PrefabExtensionInsertPatch.PrefabExtensionContentAttribute); + return contentAttributeType.Assembly.GetTypes().Where(t => !t.IsAbstract && contentAttributeType.IsAssignableFrom(t)).ToList(); + }); + + private delegate string StringSignature(); + private delegate XmlNode XmlNodeSignature(); + private delegate XmlDocument XmlDocumentSignature(); + private delegate IEnumerable IEnumerableXmlNodeSignature(); + /// - /// Component that deals with Gauntlet prefab XML files + /// Register snippet insert patch /// - internal partial class PrefabComponent + /// + /// + /// + public void RegisterPatch(string movie, string? xpath, PrefabExtensionInsertPatch patch) => RegisterPatch(movie, xpath, patch.GetType(), node => { - private readonly Lazy> _contentAttributeTypes = new(() => + if (node.OwnerDocument is not { } ownerDocument) { - var contentAttributeType = typeof(PrefabExtensionInsertPatch.PrefabExtensionContentAttribute); - return contentAttributeType.Assembly.GetTypes().Where(t => !t.IsAbstract && contentAttributeType.IsAssignableFrom(t)).ToList(); - }); - - private delegate string StringSignature(); - private delegate XmlNode XmlNodeSignature(); - private delegate XmlDocument XmlDocumentSignature(); - private delegate IEnumerable IEnumerableXmlNodeSignature(); - - /// - /// Register snippet insert patch - /// - /// - /// - /// - public void RegisterPatch(string movie, string? xpath, PrefabExtensionInsertPatch patch) => RegisterPatch(movie, xpath, node => + MessageUtils.Fail($"XML original document for {movie} is null!"); + return; + } + + if (!TryGetNodes(patch, out var nodes, out var errorMessage)) { - if (node.OwnerDocument is not { } ownerDocument) - { - MessageUtils.Fail($"XML original document for {movie} is null!"); - return; - } + MessageUtils.Fail(errorMessage); + return; + } - if (!TryGetNodes(patch, out var nodes, out var errorMessage)) - { - MessageUtils.Fail(errorMessage); - return; - } + if (patch.Type != InsertType.Child && node.ParentNode is null) + { + MessageUtils.Fail($"Trying to place multiple root nodes into {movie}!"); + return; + } - if (patch.Type != InsertType.Child && node.ParentNode is null) + var lastPlacedNode = default(XmlNode); + var oldChildNodes = default(XmlNodeList); + var nodesArray = nodes!.ToArray(); + var firstNodeInserted = false; + for (var i = 0; i < nodesArray.Length; ++i) + { + var currentNode = nodesArray[i]; + if (!TryRemoveComments(currentNode)) { - MessageUtils.Fail($"Trying to place multiple root nodes into {movie}!"); - return; + continue; } - var lastPlacedNode = default(XmlNode); - var oldChildNodes = default(XmlNodeList); - var nodesArray = nodes!.ToArray(); - var firstNodeInserted = false; - for (var i = 0; i < nodesArray.Length; ++i) - { - var currentNode = nodesArray[i]; - if (!TryRemoveComments(currentNode)) - { - continue; - } + var importedNode = ownerDocument.ImportNode(currentNode, true); - var importedNode = ownerDocument.ImportNode(currentNode, true); - - if (!firstNodeInserted) + if (!firstNodeInserted) + { + firstNodeInserted = true; + // Insert initial node. + lastPlacedNode = patch.Type switch { - firstNodeInserted = true; - // Insert initial node. - lastPlacedNode = patch.Type switch - { - InsertType.Prepend => node.ParentNode!.InsertBefore(importedNode, node), - InsertType.ReplaceKeepChildren => ReplaceKeepChildren(node, importedNode, patch.Index == 0 || nodesArray.Length == 1, out oldChildNodes), - InsertType.Replace => ReplaceNode(node, importedNode), - InsertType.Child => InsertAsChild(node, importedNode, patch.Index), - InsertType.Append => node.ParentNode!.InsertAfter(importedNode, node), - InsertType.Remove => node.ParentNode!.RemoveChild(node), - _ => throw new ArgumentOutOfRangeException() - }; - } - else + InsertType.Prepend => node.ParentNode!.InsertBefore(importedNode, node), + InsertType.ReplaceKeepChildren => ReplaceKeepChildren(node, importedNode, patch.Index == 0 || nodesArray.Length == 1, out oldChildNodes), + InsertType.Replace => ReplaceNode(node, importedNode), + InsertType.Child => InsertAsChild(node, importedNode, patch.Index), + InsertType.Append => node.ParentNode!.InsertAfter(importedNode, node), + InsertType.Remove => node.ParentNode!.RemoveChild(node), + _ => throw new ArgumentOutOfRangeException() + }; + } + else + { + // Append successive nodes after the current node. + var insertedNode = lastPlacedNode!.ParentNode!.InsertAfter(importedNode, lastPlacedNode); + if (patch.Type == InsertType.ReplaceKeepChildren && oldChildNodes != null && patch.Index == i) { - // Append successive nodes after the current node. - var insertedNode = lastPlacedNode!.ParentNode!.InsertAfter(importedNode, lastPlacedNode); - if (patch.Type == InsertType.ReplaceKeepChildren && oldChildNodes != null && patch.Index == i) + foreach (XmlNode childNode in oldChildNodes) { - foreach (XmlNode childNode in oldChildNodes) - { - insertedNode.AppendChild(childNode); - } + insertedNode.AppendChild(childNode); } - lastPlacedNode = insertedNode; } + lastPlacedNode = insertedNode; } - }); - - private static XmlNode ReplaceNode(XmlNode targetNode, XmlNode importedNode) - { - targetNode.ParentNode!.ReplaceChild(importedNode, targetNode); - return importedNode; } + }); - private static XmlNode ReplaceKeepChildren(XmlNode targetNode, XmlNode importedNode, bool appendChildren, out XmlNodeList oldChildNodes) - { - oldChildNodes = targetNode.ChildNodes; - targetNode.ParentNode!.ReplaceChild(importedNode, targetNode); - if (appendChildren) - { - while (oldChildNodes.Count > 0) - { - importedNode.AppendChild(oldChildNodes.Item(0)!); - } - } + private static XmlNode ReplaceNode(XmlNode targetNode, XmlNode importedNode) + { + targetNode.ParentNode!.ReplaceChild(importedNode, targetNode); + return importedNode; + } - return importedNode; - } - private static XmlNode InsertAsChild(XmlNode targetNode, XmlNode importedNode, int index) + private static XmlNode ReplaceKeepChildren(XmlNode targetNode, XmlNode importedNode, bool appendChildren, out XmlNodeList oldChildNodes) + { + oldChildNodes = targetNode.ChildNodes; + targetNode.ParentNode!.ReplaceChild(importedNode, targetNode); + if (appendChildren) { - if (targetNode.ChildNodes.Count == 0) + while (oldChildNodes.Count > 0) { - // Fixes issue in original API where you could not insert a node as a child if the target node had no pre-existing children. - return targetNode.AppendChild(importedNode); - } - - if (index >= targetNode.ChildNodes.Count) - { - // Fixes issue in original API where you could not insert a node as the last child of the target node. - return targetNode.InsertAfter(importedNode, targetNode.ChildNodes[targetNode.ChildNodes.Count - 1]); + importedNode.AppendChild(oldChildNodes.Item(0)!); } + } - return targetNode.InsertBefore(importedNode, targetNode.ChildNodes[Math.Max(0, index)]); + return importedNode; + } + private static XmlNode InsertAsChild(XmlNode targetNode, XmlNode importedNode, int index) + { + if (targetNode.ChildNodes.Count == 0) + { + // Fixes issue in original API where you could not insert a node as a child if the target node had no pre-existing children. + return targetNode.AppendChild(importedNode); } - /// - /// Performs validation on class, and returns true if everything is okay. - /// - private bool TryGetNodes(PrefabExtensionInsertPatch patch, out IEnumerable? nodes, out string errorMessage) + if (index >= targetNode.ChildNodes.Count) { - nodes = null; + // Fixes issue in original API where you could not insert a node as the last child of the target node. + return targetNode.InsertAfter(importedNode, targetNode.ChildNodes[targetNode.ChildNodes.Count - 1]); + } - var patchType = patch.GetType(); - var contentMembers = patchType.GetMembers().Where(m => _contentAttributeTypes.Value.Any(t => Attribute.GetCustomAttribute(m, t) is not null)).ToArray(); + return targetNode.InsertBefore(importedNode, targetNode.ChildNodes[Math.Max(0, index)]); + } - // Validate single members with Content attribute. - if (contentMembers.Length != 1) - { - errorMessage = $"{patch.GetType().Name} contains {contentMembers.Length} members with Content Attributes. " + - $"Insertion Patches must contain a single property or method with a {nameof(PrefabExtensionInsertPatch.PrefabExtensionContentAttribute)}."; - return false; - } + /// + /// Performs validation on class, and returns true if everything is okay. + /// + private bool TryGetNodes(PrefabExtensionInsertPatch patch, out IEnumerable? nodes, out string errorMessage) + { + nodes = null; - var contentAttributes = _contentAttributeTypes.Value.Select(t => Attribute.GetCustomAttribute(contentMembers[0], t)).Where(a => a != null).ToArray(); + var patchType = patch.GetType(); + var contentMembers = patchType.GetMembers().Where(m => _contentAttributeTypes.Value.Any(t => Attribute.GetCustomAttribute(m, t) is not null)).ToArray(); - // Validate member has single content attribute. - if (contentAttributes.Length != 1) - { - errorMessage = $"{contentMembers[0].Name} in {patch.GetType().Name} contains {contentAttributes.Length} attributes of type " + - $"{nameof(PrefabExtensionInsertPatch.PrefabExtensionContentAttribute)}. Should only have a single Content attribute."; - return false; - } + // Validate single members with Content attribute. + if (contentMembers.Length != 1) + { + errorMessage = $"{patch.GetType().Name} contains {contentMembers.Length} members with Content Attributes. " + + $"Insertion Patches must contain a single property or method with a {nameof(PrefabExtensionInsertPatch.PrefabExtensionContentAttribute)}."; + return false; + } - errorMessage = $"{contentMembers[0].Name} in {patch.GetType().Name} "; - nodes = contentAttributes[0] switch - { - PrefabExtensionInsertPatch.PrefabExtensionXmlDocumentAttribute attribute => GetNodes(contentMembers[0], attribute, patch, ref errorMessage), - PrefabExtensionInsertPatch.PrefabExtensionXmlNodeAttribute attribute => GetNodes(contentMembers[0], attribute, patch, ref errorMessage), - PrefabExtensionInsertPatch.PrefabExtensionXmlNodesAttribute attribute => GetNodes(contentMembers[0], attribute, patch, ref errorMessage), - PrefabExtensionInsertPatch.PrefabExtensionTextAttribute attribute => GetNodes(contentMembers[0], attribute, patch, ref errorMessage), - PrefabExtensionInsertPatch.PrefabExtensionFileNameAttribute attribute => GetNodes(contentMembers[0], attribute, patch, ref errorMessage), - _ => throw new ArgumentOutOfRangeException(nameof(contentAttributes), contentAttributes[0], null) - }; - - if (nodes is null) - { - return false; - } + var contentAttributes = _contentAttributeTypes.Value.Select(t => Attribute.GetCustomAttribute(contentMembers[0], t)).Where(a => a != null).ToArray(); - errorMessage = ""; - return true; + // Validate member has single content attribute. + if (contentAttributes.Length != 1) + { + errorMessage = $"{contentMembers[0].Name} in {patch.GetType().Name} contains {contentAttributes.Length} attributes of type " + + $"{nameof(PrefabExtensionInsertPatch.PrefabExtensionContentAttribute)}. Should only have a single Content attribute."; + return false; } - /// - /// Validates that a method or property flagged with - /// is of type , then retrieves its nodes if everything is okay. - /// - private static IEnumerable? GetNodes(MemberInfo contentMemberInfo, - PrefabExtensionInsertPatch.PrefabExtensionXmlDocumentAttribute attribute, - PrefabExtensionInsertPatch instance, - ref string errorMessage) + errorMessage = $"{contentMembers[0].Name} in {patch.GetType().Name} "; + nodes = contentAttributes[0] switch { - if (!TryGetContent(contentMemberInfo, instance, ref errorMessage, out XmlDocument? xmlDocument) || xmlDocument is null) - { - return null; - } - - return attribute.RemoveRootNode ? xmlDocument.DocumentElement!.ChildNodes.Cast() : new List { xmlDocument.DocumentElement }; + PrefabExtensionInsertPatch.PrefabExtensionXmlDocumentAttribute attribute => GetNodes(contentMembers[0], attribute, patch, ref errorMessage), + PrefabExtensionInsertPatch.PrefabExtensionXmlNodeAttribute attribute => GetNodes(contentMembers[0], attribute, patch, ref errorMessage), + PrefabExtensionInsertPatch.PrefabExtensionXmlNodesAttribute attribute => GetNodes(contentMembers[0], attribute, patch, ref errorMessage), + PrefabExtensionInsertPatch.PrefabExtensionTextAttribute attribute => GetNodes(contentMembers[0], attribute, patch, ref errorMessage), + PrefabExtensionInsertPatch.PrefabExtensionFileNameAttribute attribute => GetNodes(contentMembers[0], attribute, patch, ref errorMessage), + _ => throw new ArgumentOutOfRangeException(nameof(contentAttributes), contentAttributes[0], null) + }; + + if (nodes is null) + { + return false; } - /// - /// Validates that a method or property flagged with - /// is of type , then retrieves its nodes if everything is okay. - /// - private static IEnumerable? GetNodes(MemberInfo contentMemberInfo, - PrefabExtensionInsertPatch.PrefabExtensionXmlNodeAttribute attribute, - PrefabExtensionInsertPatch instance, - ref string errorMessage) + errorMessage = ""; + return true; + } + + /// + /// Validates that a method or property flagged with + /// is of type , then retrieves its nodes if everything is okay. + /// + private static IEnumerable? GetNodes(MemberInfo contentMemberInfo, + PrefabExtensionInsertPatch.PrefabExtensionXmlDocumentAttribute attribute, + PrefabExtensionInsertPatch instance, + ref string errorMessage) + { + if (!TryGetContent(contentMemberInfo, instance, ref errorMessage, out XmlDocument? xmlDocument) || xmlDocument is null) { - if (!TryGetContent(contentMemberInfo, instance, ref errorMessage, out XmlNode? xmlNode) || xmlNode is null) - { - return null; - } + return null; + } - // Catches potential issue where XmlDocuments cannot be imported into other documents. - if (xmlNode is XmlDocument document) - { - xmlNode = document.DocumentElement; - } + return attribute.RemoveRootNode ? xmlDocument.DocumentElement!.ChildNodes.Cast() : new List { xmlDocument.DocumentElement }; + } - return attribute.RemoveRootNode ? xmlNode!.ChildNodes.Cast() : new List { xmlNode }; + /// + /// Validates that a method or property flagged with + /// is of type , then retrieves its nodes if everything is okay. + /// + private static IEnumerable? GetNodes(MemberInfo contentMemberInfo, + PrefabExtensionInsertPatch.PrefabExtensionXmlNodeAttribute attribute, + PrefabExtensionInsertPatch instance, + ref string errorMessage) + { + if (!TryGetContent(contentMemberInfo, instance, ref errorMessage, out XmlNode? xmlNode) || xmlNode is null) + { + return null; } - /// - /// Validates that a method or property flagged with - /// is an of type , then retrieves its nodes if everything is okay. - /// - // ReSharper disable once UnusedParameter.Local - private static IEnumerable? GetNodes(MemberInfo contentMemberInfo, - PrefabExtensionInsertPatch.PrefabExtensionXmlNodesAttribute attribute, - PrefabExtensionInsertPatch instance, - ref string errorMessage) + // Catches potential issue where XmlDocuments cannot be imported into other documents. + if (xmlNode is XmlDocument document) { - var result = !TryGetContent(contentMemberInfo, instance, ref errorMessage, out IEnumerable? xmlNodes) ? null : xmlNodes!.ToArray(); + xmlNode = document.DocumentElement; + } + + return attribute.RemoveRootNode ? xmlNode!.ChildNodes.Cast() : new List { xmlNode }; + } + + /// + /// Validates that a method or property flagged with + /// is an of type , then retrieves its nodes if everything is okay. + /// + // ReSharper disable once UnusedParameter.Local + private static IEnumerable? GetNodes(MemberInfo contentMemberInfo, + PrefabExtensionInsertPatch.PrefabExtensionXmlNodesAttribute attribute, + PrefabExtensionInsertPatch instance, + ref string errorMessage) + { + var result = !TryGetContent(contentMemberInfo, instance, ref errorMessage, out IEnumerable? xmlNodes) ? null : xmlNodes!.ToArray(); - // Catches potential issue where XmlDocuments cannot be imported into other documents. - if (result is not null) + // Catches potential issue where XmlDocuments cannot be imported into other documents. + if (result is not null) + { + for (var i = 0; i < result.Length; i++) { - for (var i = 0; i < result.Length; i++) + if (result[i] is XmlDocument document) { - if (result[i] is XmlDocument document) - { - result[i] = document.DocumentElement!; - } + result[i] = document.DocumentElement!; } } + } + + return result; + } - return result; + /// + /// Validates that a method or property flagged with + /// is of type , then retrieves its nodes if everything is okay. + /// + private static IEnumerable? GetNodes(MemberInfo contentMemberInfo, + PrefabExtensionInsertPatch.PrefabExtensionTextAttribute attribute, + PrefabExtensionInsertPatch instance, + ref string errorMessage) + { + if (!TryGetContent(contentMemberInfo, instance, ref errorMessage, out string? text) || text is null) + { + return null; + } + + XmlDocument document = new(); + try + { + document.LoadXml(text); } + catch (XmlException e) + { + errorMessage += $"failed to load or parse. Exception: {e}"; + return null; + } + + return attribute.RemoveRootNode ? document.DocumentElement!.ChildNodes.Cast() : new List { document.DocumentElement }; + } - /// - /// Validates that a method or property flagged with - /// is of type , then retrieves its nodes if everything is okay. - /// - private static IEnumerable? GetNodes(MemberInfo contentMemberInfo, - PrefabExtensionInsertPatch.PrefabExtensionTextAttribute attribute, - PrefabExtensionInsertPatch instance, - ref string errorMessage) + /// + /// Validates that a method or property flagged with + /// is of type , then attempts to load its nodes from file. + /// + private IEnumerable? GetNodes(MemberInfo contentMemberInfo, + PrefabExtensionInsertPatch.PrefabExtensionFileNameAttribute attribute, + PrefabExtensionInsertPatch instance, + ref string errorMessage) + { + XmlDocument document = new(); + try { - if (!TryGetContent(contentMemberInfo, instance, ref errorMessage, out string? text) || text is null) + if (!TryGetContent(contentMemberInfo, instance, ref errorMessage, out string? fileName) || fileName is null) { return null; } - XmlDocument document = new(); - try + fileName = Path.GetFileNameWithoutExtension(fileName); + + var moduleInfo = ModuleInfoHelper.LoadFromId(_moduleName); + if (moduleInfo is null) { - document.LoadXml(text); + errorMessage += $"Module {_moduleName} is not found."; + return null; } - catch (XmlException e) + var moduleDirectoryPath = Path.Combine(ModuleInfoHelper.GetModulePath(moduleInfo), "GUI"); + var files = Directory.GetFiles(moduleDirectoryPath, "*.xml", SearchOption.AllDirectories); + files = files.Where(x => string.Equals(Path.GetFileNameWithoutExtension(x), fileName, StringComparison.InvariantCultureIgnoreCase)).ToArray(); + if (files.Length != 1) { - errorMessage += $"failed to load or parse. Exception: {e}"; + errorMessage += $"Found {files.Length} files matching {fileName}."; return null; } - return attribute.RemoveRootNode ? document.DocumentElement!.ChildNodes.Cast() : new List { document.DocumentElement }; + document.Load(files[0]); } - - /// - /// Validates that a method or property flagged with - /// is of type , then attempts to load its nodes from file. - /// - private IEnumerable? GetNodes(MemberInfo contentMemberInfo, - PrefabExtensionInsertPatch.PrefabExtensionFileNameAttribute attribute, - PrefabExtensionInsertPatch instance, - ref string errorMessage) + catch (Exception e) { - XmlDocument document = new(); - try - { - if (!TryGetContent(contentMemberInfo, instance, ref errorMessage, out string? fileName) || fileName is null) - { - return null; - } - - fileName = Path.GetFileNameWithoutExtension(fileName); + errorMessage += $"exception was thrown while loading the document. Exception: {e}"; + return null; + } - var moduleInfo = ModuleInfoHelper.LoadFromId(_moduleName); - if (moduleInfo is null) - { - errorMessage += $"Module {_moduleName} is not found."; - return null; - } - var moduleDirectoryPath = Path.Combine(ModuleInfoHelper.GetModulePath(moduleInfo), "GUI"); - var files = Directory.GetFiles(moduleDirectoryPath, "*.xml", SearchOption.AllDirectories); - files = files.Where(x => string.Equals(Path.GetFileNameWithoutExtension(x), fileName, StringComparison.InvariantCultureIgnoreCase)).ToArray(); - if (files.Length != 1) - { - errorMessage += $"Found {files.Length} files matching {fileName}."; - return null; - } + return attribute.RemoveRootNode ? document.DocumentElement!.ChildNodes.Cast() : new List { document.DocumentElement }; + } - document.Load(files[0]); - } - catch (Exception e) - { - errorMessage += $"exception was thrown while loading the document. Exception: {e}"; - return null; - } + /// + /// Validates that the Property/Method specified in is of type . + /// Returns true if everything is okay, and outputs the cast content in . + /// + private static bool TryGetContent(MemberInfo memberInfo, + PrefabExtensionInsertPatch instance, + ref string errorMessage, + out T? output) + { + output = default; - return attribute.RemoveRootNode ? document.DocumentElement!.ChildNodes.Cast() : new List { document.DocumentElement }; + var value = GetFunction(typeof(T), instance, memberInfo)(); + if (value is null) + { + Type memberType = memberInfo is PropertyInfo propertyInfo ? propertyInfo.PropertyType : ((MethodInfo) memberInfo).ReturnType; + errorMessage += $"is of type: {memberType.Name}. A Member flagged with a Content attribute must be " + + $"of one of the types listed in {nameof(PrefabExtensionInsertPatch.PrefabExtensionContentAttribute)}"; + return false; } - /// - /// Validates that the Property/Method specified in is of type . - /// Returns true if everything is okay, and outputs the cast content in . - /// - private static bool TryGetContent(MemberInfo memberInfo, - PrefabExtensionInsertPatch instance, - ref string errorMessage, - out T? output) + if (value is not T castContent) { - output = default; + var memberType = memberInfo is PropertyInfo propertyInfo ? propertyInfo.PropertyType : ((MethodInfo) memberInfo).ReturnType; + errorMessage += $"is of type: {memberType.Name}, while its attribute type expects a {typeof(T).Name}. " + + $"See {nameof(PrefabExtensionInsertPatch.PrefabExtensionContentAttribute)} for more information."; + return false; + } - var value = GetFunction(typeof(T), instance, memberInfo)(); - if (value is null) - { - Type memberType = memberInfo is PropertyInfo propertyInfo ? propertyInfo.PropertyType : ((MethodInfo) memberInfo).ReturnType; - errorMessage += $"is of type: {memberType.Name}. A Member flagged with a Content attribute must be " + - $"of one of the types listed in {nameof(PrefabExtensionInsertPatch.PrefabExtensionContentAttribute)}"; - return false; - } + errorMessage = ""; + output = castContent; - if (value is not T castContent) - { - var memberType = memberInfo is PropertyInfo propertyInfo ? propertyInfo.PropertyType : ((MethodInfo) memberInfo).ReturnType; - errorMessage += $"is of type: {memberType.Name}, while its attribute type expects a {typeof(T).Name}. " + - $"See {nameof(PrefabExtensionInsertPatch.PrefabExtensionContentAttribute)} for more information."; - return false; - } - - errorMessage = ""; - output = castContent; + return true; + } - return true; + /// + /// Register snippet set attribute patch + /// + public void RegisterPatch(string movie, string? xpath, PrefabExtensionSetAttributePatch patch) => RegisterPatch(movie, xpath, patch.GetType(), node => + { + if (node.OwnerDocument is not { } ownerDocument) + { + return; } - /// - /// Register snippet set attribute patch - /// - public void RegisterPatch(string movie, string? xpath, PrefabExtensionSetAttributePatch patch) => RegisterPatch(movie, xpath, node => + if (node.NodeType != XmlNodeType.Element) { - if (node.OwnerDocument is not { } ownerDocument) - { - return; - } + return; + } - if (node.NodeType != XmlNodeType.Element) + foreach (var attribute in patch.Attributes) + { + if (node.Attributes![attribute.Name] is null) { - return; + var newAttribute = ownerDocument.CreateAttribute(attribute.Name); + node.Attributes.Append(newAttribute); } - foreach (var attribute in patch.Attributes) - { - if (node.Attributes![attribute.Name] is null) - { - var newAttribute = ownerDocument.CreateAttribute(attribute.Name); - node.Attributes.Append(newAttribute); - } - - node.Attributes![attribute.Name].Value = attribute.Value; - } - }); + node.Attributes![attribute.Name].Value = attribute.Value; + } + }); - private static Func GetFunction(Type returnType, - PrefabExtensionInsertPatch instance, - MemberInfo memberInfo) + private static Func GetFunction(Type returnType, + PrefabExtensionInsertPatch instance, + MemberInfo memberInfo) + { + var methodInfo = memberInfo switch { - var methodInfo = memberInfo switch - { - PropertyInfo pi => pi.GetMethod, - MethodInfo mi => mi, - _ => null - }; - - if (methodInfo is null) - { - return () => null; - } - - if (returnType == typeof(string)) - { - var @delegate = Delegate.CreateDelegate(typeof(StringSignature), instance, methodInfo) as StringSignature; - return () => @delegate?.Invoke(); - } - if (returnType == typeof(XmlNode)) - { - var @delegate = Delegate.CreateDelegate(typeof(XmlNodeSignature), instance, methodInfo) as XmlNodeSignature; - return () => @delegate?.Invoke(); - } - if (returnType == typeof(XmlDocument)) - { - var @delegate = Delegate.CreateDelegate(typeof(XmlDocumentSignature), instance, methodInfo) as XmlDocumentSignature; - return () => @delegate?.Invoke(); - } - if (returnType == typeof(IEnumerable)) - { - var @delegate = Delegate.CreateDelegate(typeof(IEnumerableXmlNodeSignature), instance, methodInfo) as IEnumerableXmlNodeSignature; - return () => @delegate?.Invoke(); - } + PropertyInfo pi => pi.GetMethod, + MethodInfo mi => mi, + _ => null + }; + if (methodInfo is null) + { return () => null; } + + if (returnType == typeof(string)) + { + var @delegate = Delegate.CreateDelegate(typeof(StringSignature), instance, methodInfo) as StringSignature; + return () => @delegate?.Invoke(); + } + if (returnType == typeof(XmlNode)) + { + var @delegate = Delegate.CreateDelegate(typeof(XmlNodeSignature), instance, methodInfo) as XmlNodeSignature; + return () => @delegate?.Invoke(); + } + if (returnType == typeof(XmlDocument)) + { + var @delegate = Delegate.CreateDelegate(typeof(XmlDocumentSignature), instance, methodInfo) as XmlDocumentSignature; + return () => @delegate?.Invoke(); + } + if (returnType == typeof(IEnumerable)) + { + var @delegate = Delegate.CreateDelegate(typeof(IEnumerableXmlNodeSignature), instance, methodInfo) as IEnumerableXmlNodeSignature; + return () => @delegate?.Invoke(); + } + + return () => null; } } \ No newline at end of file diff --git a/src/Bannerlord.UIExtenderEx/Components/PrefabComponent.cs b/src/Bannerlord.UIExtenderEx/Components/PrefabComponent.cs index d69d5083..2346df92 100644 --- a/src/Bannerlord.UIExtenderEx/Components/PrefabComponent.cs +++ b/src/Bannerlord.UIExtenderEx/Components/PrefabComponent.cs @@ -8,184 +8,229 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.IO; +using System.Linq; using System.Xml; using TaleWorlds.Engine.GauntletUI; using TaleWorlds.GauntletUI.PrefabSystem; -namespace Bannerlord.UIExtenderEx.Components +namespace Bannerlord.UIExtenderEx.Components; + +/// +/// Component that deals with Gauntlet prefab XML files +/// +internal partial class PrefabComponent { + private sealed record PrefabPatch(Type Type, Action Patcher); + + private delegate Dictionary GetPrefabNamesAndPathsFromCurrentPathDelegate(object instance); + private static readonly GetPrefabNamesAndPathsFromCurrentPathDelegate? PrefabNamesMethod = + AccessTools2.GetDeclaredDelegate(typeof(WidgetFactory), "GetPrefabNamesAndPathsFromCurrentPath"); + + + [SuppressMessage("CodeQuality", "IDE0079:Remove unnecessary suppression", Justification = "For ReSharper")] + [SuppressMessage("ReSharper", "NotAccessedField.Local")] + [SuppressMessage("CodeQuality", "IDE0052:Remove unread private members", Justification = "Keeping it for consistency>")] + private readonly string _moduleName; + /// - /// Component that deals with Gauntlet prefab XML files + /// Registered movie patches /// - internal partial class PrefabComponent + private readonly ConcurrentDictionary> _moviePatches = new(); + private readonly ConcurrentDictionary _enabledPatches = new(); + + public PrefabComponent(string moduleName) { - private delegate Dictionary GetPrefabNamesAndPathsFromCurrentPathDelegate(object instance); - private static readonly GetPrefabNamesAndPathsFromCurrentPathDelegate? PrefabNamesMethod = - AccessTools2.GetDeclaredDelegate(typeof(WidgetFactory), "GetPrefabNamesAndPathsFromCurrentPath"); + _moduleName = moduleName; + } + /// + /// Enables all Prefabs. + /// + public void Enable() + { + foreach (var patchId in _enabledPatches.Keys) + _enabledPatches[patchId] = true; + } - [SuppressMessage("CodeQuality", "IDE0079:Remove unnecessary suppression", Justification = "For ReSharper")] - [SuppressMessage("ReSharper", "NotAccessedField.Local")] - [SuppressMessage("CodeQuality", "IDE0052:Remove unread private members", Justification = "Keeping it for consistency>")] - private readonly string _moduleName; + /// + /// Disables all Prefabs. + /// + public void Disable() + { + foreach (var patchId in _enabledPatches.Keys) + _enabledPatches[patchId] = false; + } - /// - /// Registered movie patches - /// - private readonly ConcurrentDictionary>> _moviePatches = new(); + /// + /// Enables a specific prefab. + /// + /// The Prefab + public void Enable(Type prefabType) + { + if (_enabledPatches.ContainsKey(prefabType)) + _enabledPatches[prefabType] = true; + } - public bool Enabled { get; private set; } + /// + /// Disables a specific prefab. + /// + /// The Prefab + public void Disable(Type prefabType) + { + if (_enabledPatches.ContainsKey(prefabType)) + _enabledPatches[prefabType] = false; + } - public PrefabComponent(string moduleName) + /// + /// Register general XmlDocument patch + /// + /// + /// + /// + public void RegisterPatch(string movie, Type prefabType, Action patcher) + { + if (string.IsNullOrEmpty(movie)) { - _moduleName = moduleName; + MessageUtils.Fail("Invalid movie name!"); + return; } - public void Enable() + _moviePatches.GetOrAdd(movie, _ => new List()).Add(new(prefabType, patcher)); + _enabledPatches[prefabType] = false; + } + + /// + /// Register general XmlDocument patch + /// + /// + /// + /// + public void RegisterPatch(string movie, Type prefabType, Action patcher) + { + //RegisterPatch(movie, (XmlDocument node) => patcher(node)); + if (string.IsNullOrEmpty(movie)) { - Enabled = true; + MessageUtils.Fail("Invalid movie name!"); + return; } - public void Disable() + + _moviePatches.GetOrAdd(movie, _ => new List()).Add(new(prefabType, patcher)); + _enabledPatches[prefabType] = false; + } + + /// + /// Register patch operating at node specified by XPath + /// + /// + /// + /// + /// + public void RegisterPatch(string movie, string? xpath, Type prefabType, Action patcher) => RegisterPatch(movie, prefabType, node => + { + var node2 = node.SelectSingleNode(xpath ?? string.Empty); + if (node2 is null) { - Enabled = false; + MessageUtils.DisplayUserError($"Failed to apply extension to {movie}: node at {xpath} not found."); + return; } - /// - /// Register general XmlDocument patch - /// - /// - /// - public void RegisterPatch(string movie, Action patcher) - { - if (string.IsNullOrEmpty(movie)) - { - MessageUtils.Fail("Invalid movie name!"); - return; - } + patcher(node2); + }); - _moviePatches.GetOrAdd(movie, _ => new List>()).Add(patcher); - } + public void Deregister() + { + _moviePatches.Clear(); + _enabledPatches.Clear(); + } - /// - /// Register general XmlDocument patch - /// - /// - /// - public void RegisterPatch(string movie, Action patcher) - { - //RegisterPatch(movie, (XmlDocument node) => patcher(node)); - if (string.IsNullOrEmpty(movie)) - { - MessageUtils.Fail("Invalid movie name!"); - return; - } - _moviePatches.GetOrAdd(movie, _ => new List>()).Add(patcher); + /// + /// Fixes issue where game will crash if injected patch contains comments.
+ /// Returns false when is a comment, or is null. + ///
+ private static bool TryRemoveComments(XmlNode? node) + { + if (string.Equals(node?.Name, "#comment")) + { + return false; } - /// - /// Register patch operating at node specified by XPath - /// - /// - /// - /// - public void RegisterPatch(string movie, string? xpath, Action patcher) => RegisterPatch(movie, node => + if (node?.SelectNodes("//comment()") is not { } commentNodes) { - var node2 = node.SelectSingleNode(xpath ?? string.Empty); - if (node2 is null) - { - MessageUtils.DisplayUserError($"Failed to apply extension to {movie}: node at {xpath} not found."); - return; - } - - patcher(node2); - }); - + return false; + } - /// - /// Fixes issue where game will crash if injected patch contains comments.
- /// Returns false when is a comment, or is null. - ///
- private static bool TryRemoveComments(XmlNode? node) + foreach (XmlNode xmlNode in commentNodes) { - if (string.Equals(node?.Name, "#comment")) - { - return false; - } - - if (node?.SelectNodes("//comment()") is not { } commentNodes) - { - return false; - } + xmlNode.ParentNode!.RemoveChild(xmlNode); + } - foreach (XmlNode xmlNode in commentNodes) - { - xmlNode.ParentNode!.RemoveChild(xmlNode); - } + return true; + } - return true; + /// + /// Get path for movie from WidgetFactory + /// + /// + private static string? PathForMovie(string movie) + { + if (PrefabNamesMethod?.Invoke(UIResourceManager.WidgetFactory) is { } paths) + { + return paths[movie]; } - - /// - /// Get path for movie from WidgetFactory - /// - /// - private static string? PathForMovie(string movie) + else { - if (PrefabNamesMethod?.Invoke(UIResourceManager.WidgetFactory) is { } paths) - { - return paths[movie]; - } - else - { - MessageUtils.DisplayUserError("UIExtenderEx could not find WidgetFactory.GetPrefabNamesAndPathsFromCurrentPath!"); - return null; - } + MessageUtils.DisplayUserError("UIExtenderEx could not find WidgetFactory.GetPrefabNamesAndPathsFromCurrentPath!"); + return null; } + } - /// - /// Apply patches to movie (if any is registered) - /// - /// - /// - public void ProcessMovieIfNeeded(string movie, XmlDocument document) + /// + /// Apply patches to movie (if any is registered) + /// + /// + /// + public void ProcessMovieIfNeeded(string movie, XmlDocument document) + { + if (!_moviePatches.TryGetValue(movie, out var patches)) + return; + + if (_enabledPatches.Values.All(x => !x)) + return; + + foreach (var (id, patch) in patches) { - if (!_moviePatches.TryGetValue(movie, out var patches)) - { - return; - } + if (!_enabledPatches.TryGetValue(id, out var enabled) || !enabled) + continue; - foreach (var patch in patches) - { - patch(document); - } + patch(document); + } - if (UIExtenderExSettings.Instance.DumpXML) - { - DumpXml(_moduleName, movie, document); - } + if (UIExtenderExSettings.Instance.DumpXML) + { + DumpXml(_moduleName, movie, document); } + } - private static void DumpXml(string moduleName, string movie, XmlDocument document) + private static void DumpXml(string moduleName, string movie, XmlDocument document) + { + if (ModuleInfoHelper.GetModuleByType(typeof(SubModule)) is { } module) { - if (ModuleInfoHelper.GetModuleByType(typeof(SubModule)) is { } module) + var dumpPath = Path.Combine(module.Path, "Dumps", $"{movie}_{moduleName}.xml"); + var file = new FileInfo(dumpPath); + file.Directory?.Create(); + using var fs = file.Open(FileMode.OpenOrCreate, FileAccess.Write); + fs.SetLength(0); + using var writer = new StreamWriter(fs); + using var xmlWriter = XmlWriter.Create(writer, new XmlWriterSettings { - var dumpPath = Path.Combine(module.Path, "Dumps", $"{movie}_{moduleName}.xml"); - var file = new FileInfo(dumpPath); - file.Directory?.Create(); - using var fs = file.Open(FileMode.OpenOrCreate, FileAccess.Write); - fs.SetLength(0); - using var writer = new StreamWriter(fs); - using var xmlWriter = XmlWriter.Create(writer, new XmlWriterSettings - { - Indent = true, - IndentChars = " ", - NewLineChars = Environment.NewLine, - NewLineHandling = NewLineHandling.Replace - }); - document.Save(xmlWriter); - } + Indent = true, + IndentChars = " ", + NewLineChars = Environment.NewLine, + NewLineHandling = NewLineHandling.Replace + }); + document.Save(xmlWriter); } } } \ No newline at end of file diff --git a/src/Bannerlord.UIExtenderEx/Components/ViewModelComponent.cs b/src/Bannerlord.UIExtenderEx/Components/ViewModelComponent.cs index 884dc17c..2a765562 100644 --- a/src/Bannerlord.UIExtenderEx/Components/ViewModelComponent.cs +++ b/src/Bannerlord.UIExtenderEx/Components/ViewModelComponent.cs @@ -12,149 +12,195 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using TaleWorlds.Library; -namespace Bannerlord.UIExtenderEx.Components +namespace Bannerlord.UIExtenderEx.Components; + +/// +/// Component that deals with extended VM generation and runtime support +/// +internal class ViewModelComponent { + private readonly string _moduleName; + private readonly Harmony _harmony; + + /// + /// List of registered mixin types + /// + public readonly ConcurrentDictionary> Mixins = new(); + /// - /// Component that deals with extended VM generation and runtime support + /// Cache of mixin instances. Key is generated by `mixinCacheKey`. Instances are removed when original view model is deallocated /// - internal class ViewModelComponent + internal readonly ConditionalWeakTable> MixinInstanceCache = new(); + + internal readonly ConditionalWeakTable> MixinInstanceRefreshFromConstructorCache = new(); + + private readonly ConcurrentDictionary _mixinTypeEnabled = new(); + private readonly ConcurrentDictionary> _mixinTypePropertyCache = new(); + private readonly ConcurrentDictionary> _mixinTypeMethodCache = new(); + + public ViewModelComponent(string moduleName) { - [SuppressMessage("CodeQuality", "IDE0079:Remove unnecessary suppression", Justification = "For ReSharper")] - [SuppressMessage("ReSharper", "PrivateFieldCanBeConvertedToLocalVariable")] - private readonly string _moduleName; - private readonly Harmony _harmony; + _moduleName = moduleName; + _harmony = new Harmony($"bannerlord.uiextender.ex.viewmodels.{_moduleName}"); + } - /// - /// List of registered mixin types - /// - public readonly ConcurrentDictionary> Mixins = new(); + /// + /// Enables all Mixins. + /// + public void Enable() + { + foreach (var mixinType in _mixinTypeEnabled.Keys) + _mixinTypeEnabled[mixinType] = true; + } - /// - /// Cache of mixin instances. Key is generated by `mixinCacheKey`. Instances are removed when original view model is deallocated - /// - internal readonly ConditionalWeakTable> MixinInstanceCache = new(); + /// + /// Disables all Mixins. + /// + public void Disable() + { + foreach (var mixinType in _mixinTypeEnabled.Keys) + _mixinTypeEnabled[mixinType] = false; + } - internal readonly ConditionalWeakTable> MixinInstanceRefreshFromConstructorCache = new(); + /// + /// Enables a specific mixin. + /// + /// The Mixin + public void Enable(Type mixinType) + { + if (_mixinTypeEnabled.ContainsKey(mixinType)) + _mixinTypeEnabled[mixinType] = true; + } - private readonly ConcurrentDictionary> MixinTypePropertyCache = new(); - private readonly ConcurrentDictionary> MixinTypeMethodCache = new(); + /// + /// Disables a specific mixin. + /// + /// The Mixin + public void Disable(Type mixinType) + { + if (_mixinTypeEnabled.ContainsKey(mixinType)) + _mixinTypeEnabled[mixinType] = false; + } - public bool Enabled { get; private set; } + /// + /// Register mixin type. + /// + /// mixin type, should be a subclass of where + /// the type parameter specifies the view model to extend + /// + /// + public void RegisterViewModelMixin(Type mixinType, string? refreshMethodName = null, bool handleDerived = false) + { + void Patch(Type viewModelType_) + { + Mixins.GetOrAdd(viewModelType_, _ => []).Add(mixinType); + _mixinTypeEnabled[mixinType] = false; + ViewModelWithMixinPatch.Patch(_harmony, viewModelType_, refreshMethodName); + } - public ViewModelComponent(string moduleName) + var viewModelType = GetViewModelType(mixinType); + if (viewModelType is null) { - _moduleName = moduleName; - _harmony = new Harmony($"bannerlord.uiextender.ex.viewmodels.{_moduleName}"); + MessageUtils.Fail($"Failed to find base type for mixin {mixinType}, should be specialized as T of ViewModelMixin!"); + return; } - public void Enable() + if (handleDerived) { - Enabled = true; + foreach (var type in AccessTools2.AllTypes().Where(t => viewModelType.IsAssignableFrom(t))) + { + Patch(type); + } } - public void Disable() + else { - Enabled = false; + Patch(viewModelType); } + } - /// - /// Register mixin type. - /// - /// mixin type, should be a subclass of where - /// the type parameter specifies the view model to extend - /// - /// - public void RegisterViewModelMixin(Type mixinType, string? refreshMethodName = null, bool handleDerived = false) + public void Deregister() + { + foreach (var patchedMethod in _harmony.GetPatchedMethods()) { - void Patch(Type viewModelType_) - { - Mixins.GetOrAdd(viewModelType_, _ => new List()).Add(mixinType); - ViewModelWithMixinPatch.Patch(_harmony, viewModelType_, refreshMethodName); - } + if (patchedMethod is not MethodInfo patchedMethodInfo) + continue; - var viewModelType = GetViewModelType(mixinType); - if (viewModelType is null) - { - MessageUtils.Fail($"Failed to find base type for mixin {mixinType}, should be specialized as T of ViewModelMixin!"); - return; - } + if (Harmony.GetOriginalMethod(patchedMethodInfo) is not { } originalMethodInfo) + continue; - if (handleDerived) - { - foreach (var type in AccessTools2.AllTypes().Where(t => viewModelType.IsAssignableFrom(t))) - { - Patch(type); - } - } - else - { - Patch(viewModelType); - } + _harmony.Unpatch(originalMethodInfo, patchedMethodInfo); } - /// - /// Initialize mixin instances for specified view model instance, called in extended VM constructor. - /// - /// base type of VM (as found in game) - /// instance of extended VM - public void InitializeMixinsForVMInstance(ViewModel instance) - { - var mixins = MixinInstanceCache.GetOrAdd(instance, _ => new List()); + Mixins.Clear(); + //MixinInstanceCache.Clear(); + //MixinInstanceRefreshFromConstructorCache.Clear(); + _mixinTypeEnabled.Clear(); + _mixinTypePropertyCache.Clear(); + _mixinTypeMethodCache.Clear(); + } - var type = instance.GetType(); - if (!Mixins.ContainsKey(type)) - return; + /// + /// Initialize mixin instances for specified view model instance, called in extended VM constructor. + /// + /// instance of extended VM + public void InitializeMixinsForVMInstance(ViewModel instance) + { + var mixins = MixinInstanceCache.GetOrAdd(instance, _ => new List()); + + var type = instance.GetType(); + if (!Mixins.ContainsKey(type)) + return; - var newMixins = Mixins[type] - .Where(mixinType => mixins.All(mixin => mixin.GetType() != mixinType)) - .Select(mixinType => Activator.CreateInstance(mixinType, instance) as IViewModelMixin) - .Where(mixin => mixin is not null) - .Cast() - .ToList(); + var newMixins = Mixins[type] + .Where(mixinType => _mixinTypeEnabled.TryGetValue(mixinType, out var enabled) && enabled) + .Where(mixinType => mixins.All(mixin => mixin.GetType() != mixinType)) + .Select(mixinType => Activator.CreateInstance(mixinType, instance) as IViewModelMixin) + .Where(mixin => mixin is not null) + .Cast() + .ToList(); - mixins.AddRange(newMixins); + mixins.AddRange(newMixins); - foreach (var viewModelMixin in newMixins) + foreach (var viewModelMixin in newMixins) + { + var properties = _mixinTypePropertyCache.GetOrAdd(viewModelMixin.GetType(), static x => x.GetProperties().Where(p => p.CustomAttributes.Any(a => a.AttributeType == typeof(DataSourceProperty))).ToList()); + foreach (var property in properties) { - var properties = MixinTypePropertyCache.GetOrAdd(viewModelMixin.GetType(), static x => x.GetProperties().Where(p => p.CustomAttributes.Any(a => a.AttributeType == typeof(DataSourceProperty))).ToList()); - foreach (var property in properties) - { - instance.AddProperty(property.Name, new WrappedPropertyInfo(property, viewModelMixin)); - } + instance.AddProperty(property.Name, new WrappedPropertyInfo(property, viewModelMixin)); + } - var methods = MixinTypeMethodCache.GetOrAdd(viewModelMixin.GetType(), static x => x.GetMethods().Where(p => p.CustomAttributes.Any(a => a.AttributeType == typeof(DataSourceMethodAttribute))).ToList()); - foreach (var method in methods) - { - instance.AddMethod(method.Name, new WrappedMethodInfo(method, viewModelMixin)); - } + var methods = _mixinTypeMethodCache.GetOrAdd(viewModelMixin.GetType(), static x => x.GetMethods().Where(p => p.CustomAttributes.Any(a => a.AttributeType == typeof(DataSourceMethodAttribute))).ToList()); + foreach (var method in methods) + { + instance.AddMethod(method.Name, new WrappedMethodInfo(method, viewModelMixin)); } } + } - private static Type? GetViewModelType(Type mixinType) + private static Type? GetViewModelType(Type mixinType) + { + Type? viewModelType = null; + var node = mixinType; + while (node is not null) { - Type? viewModelType = null; - var node = mixinType; - while (node is not null) + if (typeof(IViewModelMixin).IsAssignableFrom(node)) { - if (typeof(IViewModelMixin).IsAssignableFrom(node)) + viewModelType = node.GetGenericArguments().FirstOrDefault(); + if (viewModelType is not null) { - viewModelType = node.GetGenericArguments().FirstOrDefault(); - if (viewModelType is not null) - { - break; - } + break; } - - node = node.BaseType; } - return viewModelType; + node = node.BaseType; } + + return viewModelType; } } \ No newline at end of file diff --git a/src/Bannerlord.UIExtenderEx/Extensions/ConditionalWeakTableExtensions.cs b/src/Bannerlord.UIExtenderEx/Extensions/ConditionalWeakTableExtensions.cs index adc82dd1..7626b87a 100644 --- a/src/Bannerlord.UIExtenderEx/Extensions/ConditionalWeakTableExtensions.cs +++ b/src/Bannerlord.UIExtenderEx/Extensions/ConditionalWeakTableExtensions.cs @@ -1,15 +1,14 @@ using System; using System.Runtime.CompilerServices; -namespace Bannerlord.UIExtenderEx.Extensions +namespace Bannerlord.UIExtenderEx.Extensions; + +internal static class ConditionalWeakTableExtensions { - internal static class ConditionalWeakTableExtensions + public static TValue GetOrAdd(this ConditionalWeakTable table, TKey key, Func valueFactory) + where TKey : class + where TValue : class { - public static TValue GetOrAdd(this ConditionalWeakTable table, TKey key, Func valueFactory) - where TKey : class - where TValue : class - { - return table.GetValue(key, k => valueFactory(k)); - } + return table.GetValue(key, k => valueFactory(k)); } } \ No newline at end of file diff --git a/src/Bannerlord.UIExtenderEx/Extensions/ReflectionHelpers.cs b/src/Bannerlord.UIExtenderEx/Extensions/ReflectionHelpers.cs index df5ccecb..ea4c20c7 100644 --- a/src/Bannerlord.UIExtenderEx/Extensions/ReflectionHelpers.cs +++ b/src/Bannerlord.UIExtenderEx/Extensions/ReflectionHelpers.cs @@ -7,64 +7,63 @@ using System.Linq; using System.Reflection; -namespace Bannerlord.UIExtenderEx.Extensions +namespace Bannerlord.UIExtenderEx.Extensions; + +internal static class ReflectionHelpers { - internal static class ReflectionHelpers - { - private delegate void SetMemberValue(object instance, T? value); - private delegate T? GetMemberValue(object instance); + private delegate void SetMemberValue(object instance, T? value); + private delegate T? GetMemberValue(object instance); - private static readonly ConcurrentDictionary> _fieldPropertyCache = new(); - private static readonly ConcurrentDictionary _getDelegateCache = new(); - private static readonly ConcurrentDictionary _setDelegateCache = new(); + private static readonly ConcurrentDictionary> _fieldPropertyCache = new(); + private static readonly ConcurrentDictionary _getDelegateCache = new(); + private static readonly ConcurrentDictionary _setDelegateCache = new(); - /// - /// Can be null - /// - public static T? PrivateValue(this object? o, string fieldPropertyName) - { - if (o is null) return default; + /// + /// Can be null + /// + public static T? PrivateValue(this object? o, string fieldPropertyName) + { + if (o is null) return default; - var membersCache = _fieldPropertyCache.GetOrAdd(o.GetType(), static x => x.GetProperties().OfType().Concat(x.GetFields()).ToDictionary(x => x.Name, x => x)); - if (!membersCache.TryGetValue(fieldPropertyName, out var member)) return default; - var @delegate = _getDelegateCache.GetOrAdd(member, static x => x switch - { - FieldInfo fieldInfo => AccessTools2.FieldRefAccess(fieldInfo.Name), - PropertyInfo propertyInfo => AccessTools2.GetPropertyGetterDelegate>(propertyInfo), - var _ => null - }); - switch (@delegate) - { - case GetMemberValue del: - return del(o); - case AccessTools.FieldRef del: - return del(o); - case var _: - return default; - } + var membersCache = _fieldPropertyCache.GetOrAdd(o.GetType(), static x => x.GetProperties().OfType().Concat(x.GetFields()).ToDictionary(x => x.Name, x => x)); + if (!membersCache.TryGetValue(fieldPropertyName, out var member)) return default; + var @delegate = _getDelegateCache.GetOrAdd(member, static x => x switch + { + FieldInfo fieldInfo => AccessTools2.FieldRefAccess(fieldInfo.Name), + PropertyInfo propertyInfo => AccessTools2.GetPropertyGetterDelegate>(propertyInfo), + var _ => null + }); + switch (@delegate) + { + case GetMemberValue del: + return del(o); + case AccessTools.FieldRef del: + return del(o); + case var _: + return default; } + } - public static void PrivateValueSet(this object? o, string fieldPropertyName, T? value) - { - if (o is null) return; + public static void PrivateValueSet(this object? o, string fieldPropertyName, T? value) + { + if (o is null) return; - var membersCache = _fieldPropertyCache.GetOrAdd(o.GetType(), static x => x.GetProperties().OfType().Concat(x.GetFields()).ToDictionary(x => x.Name, x => x)); - if (!membersCache.TryGetValue(fieldPropertyName, out var member)) return; - var @delegate = _setDelegateCache.GetOrAdd(member, static x => x switch - { - FieldInfo fieldInfo => AccessTools2.FieldRefAccess(fieldInfo.Name), - PropertyInfo propertyInfo => AccessTools2.GetPropertySetterDelegate>(propertyInfo), - var _ => null - }); - switch (@delegate) - { - case SetMemberValue del: - del(o, value); - break; - case AccessTools.FieldRef del: - del(o) = value; - break; - } + var membersCache = _fieldPropertyCache.GetOrAdd(o.GetType(), static x => x.GetProperties().OfType().Concat(x.GetFields()).ToDictionary(x => x.Name, x => x)); + if (!membersCache.TryGetValue(fieldPropertyName, out var member)) return; + var @delegate = _setDelegateCache.GetOrAdd(member, static x => x switch + { + FieldInfo fieldInfo => AccessTools2.FieldRefAccess(fieldInfo.Name), + PropertyInfo propertyInfo => AccessTools2.GetPropertySetterDelegate>(propertyInfo), + var _ => null + }); + switch (@delegate) + { + case SetMemberValue del: + del(o, value); + break; + case AccessTools.FieldRef del: + del(o) = value; + break; } } } \ No newline at end of file diff --git a/src/Bannerlord.UIExtenderEx/Extensions/ViewModelExtensions.cs b/src/Bannerlord.UIExtenderEx/Extensions/ViewModelExtensions.cs index 3ba9bd0a..8911ebd4 100644 --- a/src/Bannerlord.UIExtenderEx/Extensions/ViewModelExtensions.cs +++ b/src/Bannerlord.UIExtenderEx/Extensions/ViewModelExtensions.cs @@ -9,93 +9,92 @@ using TaleWorlds.Library; -namespace Bannerlord.UIExtenderEx.Extensions +namespace Bannerlord.UIExtenderEx.Extensions; + +internal static class ViewModelExtensions { - internal static class ViewModelExtensions - { - private static readonly string NestedType = "TaleWorlds.Library.ViewModel+DataSourceTypeBindingPropertiesCollection"; + private static readonly string NestedType = "TaleWorlds.Library.ViewModel+DataSourceTypeBindingPropertiesCollection"; - private static readonly AccessTools.FieldRef? PropertiesAndMethods = - AccessTools2.FieldRefAccess("_propertiesAndMethods"); + private static readonly AccessTools.FieldRef? PropertiesAndMethods = + AccessTools2.FieldRefAccess("_propertiesAndMethods"); - private delegate Dictionary GetPropertiesDelegate(object instance); - private static readonly GetPropertiesDelegate? GetProperties = - AccessTools2.GetDeclaredPropertyGetterDelegate($"{NestedType}:Properties"); + private delegate Dictionary GetPropertiesDelegate(object instance); + private static readonly GetPropertiesDelegate? GetProperties = + AccessTools2.GetDeclaredPropertyGetterDelegate($"{NestedType}:Properties"); - private delegate Dictionary GetMethodsDelegate(object instance); - private static readonly GetMethodsDelegate? GetMethods = - AccessTools2.GetDeclaredPropertyGetterDelegate($"{NestedType}:Methods"); + private delegate Dictionary GetMethodsDelegate(object instance); + private static readonly GetMethodsDelegate? GetMethods = + AccessTools2.GetDeclaredPropertyGetterDelegate($"{NestedType}:Methods"); - private static readonly AccessTools.FieldRef? CachedViewModelProperties = - AccessTools2.StaticFieldRefAccess(typeof(ViewModel), "_cachedViewModelProperties"); + private static readonly AccessTools.FieldRef? CachedViewModelProperties = + AccessTools2.StaticFieldRefAccess(typeof(ViewModel), "_cachedViewModelProperties"); - public delegate object DataSourceTypeBindingPropertiesCollectionCtorDelegate(Dictionary properties, Dictionary methods); - public static readonly DataSourceTypeBindingPropertiesCollectionCtorDelegate? DataSourceTypeBindingPropertiesCollectionCtor = - AccessTools2.GetDeclaredConstructorDelegate(NestedType, new[] { typeof(Dictionary), typeof(Dictionary) }); + public delegate object DataSourceTypeBindingPropertiesCollectionCtorDelegate(Dictionary properties, Dictionary methods); + public static readonly DataSourceTypeBindingPropertiesCollectionCtorDelegate? DataSourceTypeBindingPropertiesCollectionCtor = + AccessTools2.GetDeclaredConstructorDelegate(NestedType, new[] { typeof(Dictionary), typeof(Dictionary) }); - public static void AddProperty(this ViewModel viewModel, string name, PropertyInfo propertyInfo) - { - if (!GetOrCreateIndividualStorage(viewModel, out var propDict, out var _)) - return; + public static void AddProperty(this ViewModel viewModel, string name, PropertyInfo propertyInfo) + { + if (!GetOrCreateIndividualStorage(viewModel, out var propDict, out var _)) + return; - propDict[name] = propertyInfo; - } + propDict[name] = propertyInfo; + } - public static void AddMethod(this ViewModel viewModel, string name, MethodInfo methodInfo) - { - if (!GetOrCreateIndividualStorage(viewModel, out var _, out var methodDict)) - return; + public static void AddMethod(this ViewModel viewModel, string name, MethodInfo methodInfo) + { + if (!GetOrCreateIndividualStorage(viewModel, out var _, out var methodDict)) + return; - methodDict[name] = methodInfo; - } + methodDict[name] = methodInfo; + } - public static IReadOnlyCollection GetViewModelProperties(this ViewModel viewModel) - { - if (PropertiesAndMethods is null || CachedViewModelProperties is null || DataSourceTypeBindingPropertiesCollectionCtor is null || GetProperties is null || GetMethods is null) - return Array.Empty(); + public static IReadOnlyCollection GetViewModelProperties(this ViewModel viewModel) + { + if (PropertiesAndMethods is null || CachedViewModelProperties is null || DataSourceTypeBindingPropertiesCollectionCtor is null || GetProperties is null || GetMethods is null) + return Array.Empty(); - if (PropertiesAndMethods(viewModel) is not { } storage) - return Array.Empty(); + if (PropertiesAndMethods(viewModel) is not { } storage) + return Array.Empty(); - var properties = GetProperties(storage); - return properties.Values; - } + var properties = GetProperties(storage); + return properties.Values; + } - public static IReadOnlyCollection GetViewModelMethods(this ViewModel viewModel) - { - if (PropertiesAndMethods is null || CachedViewModelProperties is null || DataSourceTypeBindingPropertiesCollectionCtor is null || GetProperties is null || GetMethods is null) - return Array.Empty(); + public static IReadOnlyCollection GetViewModelMethods(this ViewModel viewModel) + { + if (PropertiesAndMethods is null || CachedViewModelProperties is null || DataSourceTypeBindingPropertiesCollectionCtor is null || GetProperties is null || GetMethods is null) + return Array.Empty(); - if (PropertiesAndMethods(viewModel) is not { } storage) - return Array.Empty(); + if (PropertiesAndMethods(viewModel) is not { } storage) + return Array.Empty(); - var methods = GetMethods(storage); - return methods.Values; - } + var methods = GetMethods(storage); + return methods.Values; + } - private static bool GetOrCreateIndividualStorage(ViewModel viewModel, [NotNullWhen(true)] out Dictionary? propDict, [NotNullWhen(true)] out Dictionary? methodDict) - { - propDict = null; - methodDict = null; + private static bool GetOrCreateIndividualStorage(ViewModel viewModel, [NotNullWhen(true)] out Dictionary? propDict, [NotNullWhen(true)] out Dictionary? methodDict) + { + propDict = null; + methodDict = null; - if (PropertiesAndMethods is null || CachedViewModelProperties is null || DataSourceTypeBindingPropertiesCollectionCtor is null || GetProperties is null || GetMethods is null) - return false; + if (PropertiesAndMethods is null || CachedViewModelProperties is null || DataSourceTypeBindingPropertiesCollectionCtor is null || GetProperties is null || GetMethods is null) + return false; - if (PropertiesAndMethods(viewModel) is not { } storage || CachedViewModelProperties() is not { } staticStorageDict) - return false; + if (PropertiesAndMethods(viewModel) is not { } storage || CachedViewModelProperties() is not { } staticStorageDict) + return false; - var type = viewModel.GetType(); - if (!staticStorageDict.Contains(type) || staticStorageDict[type] is not { } staticStorage) - return false; + var type = viewModel.GetType(); + if (!staticStorageDict.Contains(type) || staticStorageDict[type] is not { } staticStorage) + return false; - if ((propDict = GetProperties(storage)) is null || (methodDict = GetMethods(storage)) is null) - return false; + if ((propDict = GetProperties(storage)) is null || (methodDict = GetMethods(storage)) is null) + return false; - // TW caches the properties, since we modify each VM individually, we need to copy them - if (ReferenceEquals(storage, staticStorage)) - PropertiesAndMethods(viewModel) = DataSourceTypeBindingPropertiesCollectionCtor(propDict = new(propDict), methodDict = new(methodDict)); + // TW caches the properties, since we modify each VM individually, we need to copy them + if (ReferenceEquals(storage, staticStorage)) + PropertiesAndMethods(viewModel) = DataSourceTypeBindingPropertiesCollectionCtor(propDict = new(propDict), methodDict = new(methodDict)); - return true; - } + return true; } } \ No newline at end of file diff --git a/src/Bannerlord.UIExtenderEx/Patches/GauntletMoviePatch.cs b/src/Bannerlord.UIExtenderEx/Patches/GauntletMoviePatch.cs index 780a92d4..d72f851d 100644 --- a/src/Bannerlord.UIExtenderEx/Patches/GauntletMoviePatch.cs +++ b/src/Bannerlord.UIExtenderEx/Patches/GauntletMoviePatch.cs @@ -5,43 +5,45 @@ using System.Collections.Generic; using System.Linq; -namespace Bannerlord.UIExtenderEx.Patches +namespace Bannerlord.UIExtenderEx.Patches; + +internal static class GauntletMoviePatch { - internal static class GauntletMoviePatch + private static readonly ConcurrentDictionary> WidgetNames = new(); + + public static void Register(UIExtenderRuntime runtime, string? autoGenWidgetName) { - private static readonly ConcurrentDictionary> WidgetNames = new(); + if (string.IsNullOrEmpty(autoGenWidgetName)) + return; - public static void Register(UIExtenderRuntime runtime, string? autoGenWidgetName) + WidgetNames.AddOrUpdate(runtime, _ => [autoGenWidgetName], (_, list) => { - if (string.IsNullOrEmpty(autoGenWidgetName)) - return; - - WidgetNames.AddOrUpdate(runtime, - _ => new List { autoGenWidgetName! }, - (_, list) => - { - list.Add(autoGenWidgetName!); - return list; - }); - } + list.Add(autoGenWidgetName!); + return list; + }); + } - public static void Patch(Harmony harmony) - { - if (AccessTools2.DeclaredMethod("TaleWorlds.GauntletUI.Data.GauntletMovie:Load") is { } methodInfo && - methodInfo.GetParameters() is { } @params && - @params.Any(p => p.Name == "doNotUseGeneratedPrefabs")) - { - harmony.Patch( - methodInfo, - prefix: new HarmonyMethod(typeof(GauntletMoviePatch), nameof(LoadPrefix))); - } - } + public static void Deregister(UIExtenderRuntime runtime) + { + WidgetNames.TryRemove(runtime, out var _); + } - private static void LoadPrefix(string movieName, ref bool doNotUseGeneratedPrefabs) + public static void Patch(Harmony harmony) + { + if (AccessTools2.DeclaredMethod("TaleWorlds.GauntletUI.Data.GauntletMovie:Load") is { } methodInfo && + methodInfo.GetParameters() is { } @params && + @params.Any(p => p.Name == "doNotUseGeneratedPrefabs")) { - var movies = WidgetNames.Where(kv => kv.Key.PrefabComponent.Enabled).SelectMany(kv => kv.Value); - if (movies.Contains(movieName)) - doNotUseGeneratedPrefabs = true; + harmony.Patch( + methodInfo, + prefix: new HarmonyMethod(typeof(GauntletMoviePatch), nameof(LoadPrefix))); } } + + private static void LoadPrefix(string movieName, ref bool doNotUseGeneratedPrefabs) + { + var movies = WidgetNames.SelectMany(kv => kv.Value); + if (movies.Contains(movieName)) + doNotUseGeneratedPrefabs = true; + } } \ No newline at end of file diff --git a/src/Bannerlord.UIExtenderEx/Patches/UIConfigPatch.cs b/src/Bannerlord.UIExtenderEx/Patches/UIConfigPatch.cs index 698ecea4..40ec37ae 100644 --- a/src/Bannerlord.UIExtenderEx/Patches/UIConfigPatch.cs +++ b/src/Bannerlord.UIExtenderEx/Patches/UIConfigPatch.cs @@ -1,18 +1,17 @@ using HarmonyLib; using HarmonyLib.BUTR.Extensions; -namespace Bannerlord.UIExtenderEx.Patches +namespace Bannerlord.UIExtenderEx.Patches; + +internal static class UIConfigPatch { - internal static class UIConfigPatch + public static void Patch(Harmony harmony) { - public static void Patch(Harmony harmony) - { - harmony.TryPatch( - AccessTools2.DeclaredPropertySetter("TaleWorlds.Engine.GauntletUI.UIConfig:DoNotUseGeneratedPrefabs"), - prefix: AccessTools2.DeclaredMethod("Bannerlord.UIExtenderEx.Patches.UIConfigPatch:Prefix")); - } - - // Disable setting a value to DoNotUseGeneratedPrefabs - private static bool Prefix() => false; + harmony.TryPatch( + AccessTools2.DeclaredPropertySetter("TaleWorlds.Engine.GauntletUI.UIConfig:DoNotUseGeneratedPrefabs"), + prefix: AccessTools2.DeclaredMethod("Bannerlord.UIExtenderEx.Patches.UIConfigPatch:Prefix")); } + + // Disable setting a value to DoNotUseGeneratedPrefabs + private static bool Prefix() => false; } \ No newline at end of file diff --git a/src/Bannerlord.UIExtenderEx/Patches/ViewModelPatch.cs b/src/Bannerlord.UIExtenderEx/Patches/ViewModelPatch.cs index 7341b9b5..8e9579be 100644 --- a/src/Bannerlord.UIExtenderEx/Patches/ViewModelPatch.cs +++ b/src/Bannerlord.UIExtenderEx/Patches/ViewModelPatch.cs @@ -10,46 +10,45 @@ using TaleWorlds.Library; -namespace Bannerlord.UIExtenderEx.Patches +namespace Bannerlord.UIExtenderEx.Patches; + +internal static class ViewModelPatch { - internal static class ViewModelPatch + public static void Patch(Harmony harmony) { - public static void Patch(Harmony harmony) - { - harmony.TryPatch( - AccessTools2.DeclaredConstructor(typeof(ViewModel)), - prefix: AccessTools2.DeclaredMethod(typeof(ViewModelPatch), nameof(ViewModelCtorPrefix))); + harmony.TryPatch( + AccessTools2.DeclaredConstructor(typeof(ViewModel)), + prefix: AccessTools2.DeclaredMethod(typeof(ViewModelPatch), nameof(ViewModelCtorPrefix))); - harmony.Patch( - AccessTools2.Method(typeof(ViewModel), "ExecuteCommand"), - prefix: new HarmonyMethod(typeof(ViewModelPatch), nameof(ExecuteCommandPatch))); - } + harmony.Patch( + AccessTools2.Method(typeof(ViewModel), "ExecuteCommand"), + prefix: new HarmonyMethod(typeof(ViewModelPatch), nameof(ExecuteCommandPatch))); + } - private static bool ViewModelCtorPrefix(ViewModel __instance, ref Type ____type, ref object ____propertiesAndMethods) + private static bool ViewModelCtorPrefix(ViewModel __instance, ref Type ____type, ref object ____propertiesAndMethods) + { + if (__instance is BUTRViewModel && ViewModelExtensions.DataSourceTypeBindingPropertiesCollectionCtor is { } ctor) { - if (__instance is BUTRViewModel && ViewModelExtensions.DataSourceTypeBindingPropertiesCollectionCtor is { } ctor) - { - ____type = __instance.GetType(); - ____propertiesAndMethods = ctor(new Dictionary(), new Dictionary()); - - return false; - } - return true; + ____type = __instance.GetType(); + ____propertiesAndMethods = ctor(new Dictionary(), new Dictionary()); + + return false; } + return true; + } - /// - /// Trigger ExecuteCommand in the wrapped VM - /// We can't extend\copy methods like we do with properties - /// - private static bool ExecuteCommandPatch(object __instance, string commandName, object[] parameters) + /// + /// Trigger ExecuteCommand in the wrapped VM + /// We can't extend\copy methods like we do with properties + /// + private static bool ExecuteCommandPatch(object __instance, string commandName, object[] parameters) + { + if (__instance is ViewModelWrapper { Object: { } viewModel }) { - if (__instance is ViewModelWrapper { Object: { } viewModel }) - { - viewModel.ExecuteCommand(commandName, parameters); - return false; - } - - return true; + viewModel.ExecuteCommand(commandName, parameters); + return false; } + + return true; } } \ No newline at end of file diff --git a/src/Bannerlord.UIExtenderEx/Patches/ViewModelWithMixinPatch.cs b/src/Bannerlord.UIExtenderEx/Patches/ViewModelWithMixinPatch.cs index 39aaf36f..e8e1b025 100644 --- a/src/Bannerlord.UIExtenderEx/Patches/ViewModelWithMixinPatch.cs +++ b/src/Bannerlord.UIExtenderEx/Patches/ViewModelWithMixinPatch.cs @@ -14,155 +14,144 @@ using TaleWorlds.Library; -namespace Bannerlord.UIExtenderEx.Patches +namespace Bannerlord.UIExtenderEx.Patches; + +internal static class ViewModelWithMixinPatch { - internal static class ViewModelWithMixinPatch - { - private static ConcurrentDictionary ViewModelInitializations { get; } = new(); - private static ConcurrentDictionary ViewModelsRefreshPatches { get; } = new(); + private static ConcurrentDictionary ViewModelInitializations { get; } = new(); + private static ConcurrentDictionary ViewModelsRefreshPatches { get; } = new(); - [SuppressMessage("CodeQuality", "IDE0079:Remove unnecessary suppression", Justification = "For ReSharper")] - [SuppressMessage("ReSharper", "IteratorMethodResultIsIgnored")] - public static void Patch(Harmony harmony, Type viewModelType, string? refreshMethodName = null) + [SuppressMessage("CodeQuality", "IDE0079:Remove unnecessary suppression", Justification = "For ReSharper")] + [SuppressMessage("ReSharper", "IteratorMethodResultIsIgnored")] + public static void Patch(Harmony harmony, Type viewModelType, string? refreshMethodName = null) + { + if (ViewModelInitializations.TryAdd(viewModelType, null)) // first initialization { - if (ViewModelInitializations.TryAdd(viewModelType, null)) // first initialization + foreach (var constructor in AccessTools.GetDeclaredConstructors(viewModelType, false)) { - foreach (var constructor in AccessTools.GetDeclaredConstructors(viewModelType, false)) - { - harmony.Patch( - constructor, - transpiler: new HarmonyMethod(typeof(ViewModelWithMixinPatch), nameof(ViewModel_Constructor_Transpiler))); - } - harmony.Patch( - AccessTools2.DeclaredMethod(viewModelType, nameof(ViewModel.OnFinalize), logErrorInTrace: false) ?? - AccessTools2.DeclaredMethod("TaleWorlds.Library.ViewModel:OnFinalize"), - transpiler: new HarmonyMethod(typeof(ViewModelWithMixinPatch), nameof(ViewModel_Finalize_Transpiler))); + constructor, + transpiler: new HarmonyMethod(typeof(ViewModelWithMixinPatch), nameof(ViewModel_Constructor_Transpiler))); } - if (ViewModelsRefreshPatches.TryAdd($"{viewModelType.FullName}:{refreshMethodName}", null)) // first initialization - { - // multiple mixins have their own name - if (refreshMethodName is not null && AccessTools2.Method(viewModelType, refreshMethodName) is { } method) - { - harmony.Patch( - method, - transpiler: new HarmonyMethod(typeof(ViewModelWithMixinPatch), nameof(ViewModel_Refresh_Transpiler))); - } - } + harmony.Patch( + AccessTools2.DeclaredMethod(viewModelType, nameof(ViewModel.OnFinalize), logErrorInTrace: false) ?? + AccessTools2.DeclaredMethod("TaleWorlds.Library.ViewModel:OnFinalize"), + transpiler: new HarmonyMethod(typeof(ViewModelWithMixinPatch), nameof(ViewModel_Finalize_Transpiler))); } - [SuppressMessage("CodeQuality", "IDE0079:Remove unnecessary suppression", Justification = "For ReSharper")] - [SuppressMessage("ReSharper", "UnusedMethodReturnValue.Local")] - [MethodImpl(MethodImplOptions.NoInlining)] - private static IEnumerable ViewModel_Constructor_Transpiler(IEnumerable instructions, MethodBase method) => - InsertMethodAtEnd(instructions, method, AccessTools2.DeclaredMethod(typeof(ViewModelWithMixinPatch), nameof(Constructor))); - [MethodImpl(MethodImplOptions.NoInlining)] - private static void Constructor(ViewModel viewModel, string _) + if (ViewModelsRefreshPatches.TryAdd($"{viewModelType.FullName}:{refreshMethodName}", null)) // first initialization { - foreach (var runtime in UIExtender.GetAllRuntimes()) + // multiple mixins have their own name + if (refreshMethodName is not null && AccessTools2.Method(viewModelType, refreshMethodName) is { } method) { - if (!runtime.ViewModelComponent.Enabled) - { - continue; - } + harmony.Patch( + method, + transpiler: new HarmonyMethod(typeof(ViewModelWithMixinPatch), nameof(ViewModel_Refresh_Transpiler))); + } + } + } - runtime.ViewModelComponent.InitializeMixinsForVMInstance(viewModel); + [SuppressMessage("CodeQuality", "IDE0079:Remove unnecessary suppression", Justification = "For ReSharper")] + [SuppressMessage("ReSharper", "UnusedMethodReturnValue.Local")] + [MethodImpl(MethodImplOptions.NoInlining)] + private static IEnumerable ViewModel_Constructor_Transpiler(IEnumerable instructions, MethodBase method) => + InsertMethodAtEnd(instructions, method, AccessTools2.DeclaredMethod(typeof(ViewModelWithMixinPatch), nameof(Constructor))); + [MethodImpl(MethodImplOptions.NoInlining)] + private static void Constructor(ViewModel viewModel, string _) + { + foreach (var runtime in UIExtender.GetAllRuntimes()) + { + runtime.ViewModelComponent.InitializeMixinsForVMInstance(viewModel); - if (!runtime.ViewModelComponent.MixinInstanceCache.TryGetValue(viewModel, out var list)) - { - continue; - } + if (!runtime.ViewModelComponent.MixinInstanceCache.TryGetValue(viewModel, out var list)) + { + continue; + } - // Call Refresh on Constructor end if it was called within it - if (runtime.ViewModelComponent.MixinInstanceRefreshFromConstructorCache.TryGetValue(viewModel, out var calledRefresMethods)) + // Call Refresh on Constructor end if it was called within it + if (runtime.ViewModelComponent.MixinInstanceRefreshFromConstructorCache.TryGetValue(viewModel, out var calledRefresMethods)) + { + foreach (var mixin in list) { - foreach (var mixin in list) + var attribute = mixin.GetType().GetCustomAttribute(); + foreach (var methodName in calledRefresMethods) { - var attribute = mixin.GetType().GetCustomAttribute(); - foreach (var methodName in calledRefresMethods) + if (methodName == attribute?.RefreshMethodName) { - if (methodName == attribute?.RefreshMethodName) - { - mixin.OnRefresh(); - } + mixin.OnRefresh(); } } - runtime.ViewModelComponent.MixinInstanceRefreshFromConstructorCache.Remove(viewModel); } + runtime.ViewModelComponent.MixinInstanceRefreshFromConstructorCache.Remove(viewModel); } } + } - [SuppressMessage("CodeQuality", "IDE0079:Remove unnecessary suppression", Justification = "For ReSharper")] - [SuppressMessage("ReSharper", "UnusedMethodReturnValue.Local")] - [MethodImpl(MethodImplOptions.NoInlining)] - private static IEnumerable ViewModel_Refresh_Transpiler(IEnumerable instructions, MethodBase method) => - InsertMethodAtEnd(instructions, method, AccessTools2.DeclaredMethod(typeof(ViewModelWithMixinPatch), nameof(Refresh))); - [MethodImpl(MethodImplOptions.NoInlining)] - private static void Refresh(ViewModel viewModel, string methodName) + [SuppressMessage("CodeQuality", "IDE0079:Remove unnecessary suppression", Justification = "For ReSharper")] + [SuppressMessage("ReSharper", "UnusedMethodReturnValue.Local")] + [MethodImpl(MethodImplOptions.NoInlining)] + private static IEnumerable ViewModel_Refresh_Transpiler(IEnumerable instructions, MethodBase method) => + InsertMethodAtEnd(instructions, method, AccessTools2.DeclaredMethod(typeof(ViewModelWithMixinPatch), nameof(Refresh))); + [MethodImpl(MethodImplOptions.NoInlining)] + private static void Refresh(ViewModel viewModel, string methodName) + { + foreach (var runtime in UIExtender.GetAllRuntimes()) { - foreach (var runtime in UIExtender.GetAllRuntimes()) + // Refresh was called from VM Constructor, delay the call to Refresh() + if (!runtime.ViewModelComponent.MixinInstanceCache.TryGetValue(viewModel, out var list)) { - if (!runtime.ViewModelComponent.Enabled) - { - continue; - } - - // Refresh was called from VM Constructor, delay the call to Refresh() - if (!runtime.ViewModelComponent.MixinInstanceCache.TryGetValue(viewModel, out var list)) - { - runtime.ViewModelComponent.MixinInstanceRefreshFromConstructorCache.GetOrAdd(viewModel, _ => new List()).Add(methodName); - continue; - } + runtime.ViewModelComponent.MixinInstanceRefreshFromConstructorCache.GetOrAdd(viewModel, _ => new List()).Add(methodName); + continue; + } - foreach (var mixin in list) + foreach (var mixin in list) + { + var attribute = mixin.GetType().GetCustomAttribute(); + if (methodName == attribute?.RefreshMethodName) { - var attribute = mixin.GetType().GetCustomAttribute(); - if (methodName == attribute?.RefreshMethodName) - { - mixin.OnRefresh(); - } + mixin.OnRefresh(); } } } + } - [SuppressMessage("CodeQuality", "IDE0079:Remove unnecessary suppression", Justification = "For ReSharper")] - [SuppressMessage("ReSharper", "UnusedMethodReturnValue.Local")] - [MethodImpl(MethodImplOptions.NoInlining)] - private static IEnumerable ViewModel_Finalize_Transpiler(IEnumerable instructions, MethodBase method) => - InsertMethodAtEnd(instructions, method, AccessTools2.DeclaredMethod(typeof(ViewModelWithMixinPatch), nameof(Finalize))); - [MethodImpl(MethodImplOptions.NoInlining)] - private static void Finalize(ViewModel viewModel, string _) + [SuppressMessage("CodeQuality", "IDE0079:Remove unnecessary suppression", Justification = "For ReSharper")] + [SuppressMessage("ReSharper", "UnusedMethodReturnValue.Local")] + [MethodImpl(MethodImplOptions.NoInlining)] + private static IEnumerable ViewModel_Finalize_Transpiler(IEnumerable instructions, MethodBase method) => + InsertMethodAtEnd(instructions, method, AccessTools2.DeclaredMethod(typeof(ViewModelWithMixinPatch), nameof(Finalize))); + [MethodImpl(MethodImplOptions.NoInlining)] + private static void Finalize(ViewModel viewModel, string _) + { + foreach (var runtime in UIExtender.GetAllRuntimes()) { - foreach (var runtime in UIExtender.GetAllRuntimes()) + if (!runtime.ViewModelComponent.MixinInstanceCache.TryGetValue(viewModel, out var list)) { - if (!runtime.ViewModelComponent.Enabled || !runtime.ViewModelComponent.MixinInstanceCache.TryGetValue(viewModel, out var list)) - { - continue; - } + continue; + } - foreach (var mixin in list) - { - mixin.OnFinalize(); - } + foreach (var mixin in list) + { + mixin.OnFinalize(); } } + } - private static IEnumerable InsertMethodAtEnd(IEnumerable instructions, MethodBase originalMethod, MethodInfo? method) + private static IEnumerable InsertMethodAtEnd(IEnumerable instructions, MethodBase originalMethod, MethodInfo? method) + { + foreach (var instruction in instructions) { - foreach (var instruction in instructions) + if (method is not null && instruction.opcode == OpCodes.Ret) { - if (method is not null && instruction.opcode == OpCodes.Ret) - { - var labels = instruction.labels; - instruction.labels = new List