From 3a2fe72742c02070b8b8e2c10245e8e1041d44ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Monta=C3=B1es=20Ojados?= Date: Tue, 6 Jan 2026 05:22:10 +0100 Subject: [PATCH] icon on center --- Class1.cs | 321 +++++++++++------- Textures.cs | 30 ++ .../net472/StrategicView-Plus.AssemblyInfo.cs | 2 +- ...trategicView-Plus.AssemblyInfoInputs.cache | 2 +- .../net472/StrategicView-Plus.assets.cache | Bin 225 -> 225 bytes ...icView-Plus.csproj.AssemblyReference.cache | Bin 27525 -> 115172 bytes ...icView-Plus.csproj.CoreCompileInputs.cache | 2 +- obj/Debug/net472/StrategicView-Plus.dll | Bin 8704 -> 11264 bytes obj/Debug/net472/StrategicView-Plus.pdb | Bin 10148 -> 11188 bytes obj/StrategicView-Plus.csproj.nuget.g.props | 2 +- obj/project.nuget.cache | 2 +- 11 files changed, 226 insertions(+), 135 deletions(-) create mode 100644 Textures.cs diff --git a/Class1.cs b/Class1.cs index 51e360b..bd5ef63 100644 --- a/Class1.cs +++ b/Class1.cs @@ -1,212 +1,273 @@ using BepInEx; -using HarmonyLib; // Necesario para Traverse +using HarmonyLib; using System.Collections; using System.Collections.Generic; +using System.Linq; using UnityEngine; +using UnityEngine.UI; using TMPro; -using UnityEngine.UI; // Necesario para Outline namespace StrategicMapPlus { - [BepInPlugin("com.mod.strategicmapplus", "Strategic Map Plus", "1.0.0")] + [BepInPlugin("com.mod.strategicmapplus", "Strategic Map Plus", "28.0.0")] public class StrategicMapMod : BaseUnityPlugin { private float timer = 0f; - // Escaneamos cada 0.5 segundos (balance perfecto entre respuesta y rendimiento) private float interval = 0.5f; + private bool texturesLoaded = false; + + public static Dictionary SpriteCache = new Dictionary(); + private HashSet reportedMissingKeys = new HashSet(); void Awake() { - Logger.LogInfo("Strategic Map Plus: Iniciado correctamente."); + Logger.LogInfo("Strategic Map Plus v28: Posición 0,0,0."); } void Update() { + if (!texturesLoaded && Time.time > 3f) LoadTextures(); + timer += Time.deltaTime; if (timer < interval) return; timer = 0f; - ScanStrategicMap(); + if (texturesLoaded) ScanStrategicMap(); + } + + void LoadTextures() + { + Texture2D[] allTextures = Resources.FindObjectsOfTypeAll(); + Dictionary textureLookup = new Dictionary(); + + foreach (var tex in allTextures) + { + if (tex != null && !string.IsNullOrEmpty(tex.name)) + { + if (!textureLookup.ContainsKey(tex.name)) textureLookup.Add(tex.name, tex); + } + } + + int loadedCount = 0; + + foreach (var kvp in Textures.TextureMap) + { + string logicKey = kvp.Key; + string texName = kvp.Value; + + if (textureLookup.ContainsKey(texName)) + { + Texture2D tex = textureLookup[texName]; + Sprite s = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new Vector2(0.5f, 0.5f)); + SpriteCache[logicKey] = s; + loadedCount++; + } + } + + if (loadedCount > 0) texturesLoaded = true; } void ScanStrategicMap() { - // Buscamos el contenedor de regiones GameObject regionsRoot = GameObject.Find("UI/2DRoot/Layout/Limit/FrontDialogs/StrategicView/Root/Regions"); - if (regionsRoot == null || !regionsRoot.activeInHierarchy) return; foreach (Transform region in regionsRoot.transform) { - // Buscamos el Army (contenedor lógico) Transform army = region.Find("Army"); if (army == null) continue; - // Buscamos el componente del juego (DefenseCountRenderer) por nombre Component defenseRenderer = army.GetComponent("iron.match.renderers.strategicview.DefenseCountRenderer"); - - // Buscamos el contenedor visual "Root" para anclar nuestro texto Transform visualRoot = army.Find("Root"); Transform targetParent = (visualRoot != null) ? visualRoot : army; if (defenseRenderer != null) - { ProcessRegion((MonoBehaviour)defenseRenderer, targetParent); - } } } void ProcessRegion(MonoBehaviour renderer, Transform parentTransform) { - // 1. Configurar o Buscar el Visualizador - var visualizer = parentTransform.GetComponent(); + var visualizer = parentTransform.GetComponent(); if (visualizer == null) { - visualizer = parentTransform.gameObject.AddComponent(); + visualizer = parentTransform.gameObject.AddComponent(); visualizer.Initialize(); } - // 2. Acceder al Modelo de datos usando Reflection (Traverse) var traverse = Traverse.Create(renderer); var model = traverse.Property("model").GetValue(); + if (model == null) { visualizer.Hide(); return; } - if (model == null) - { - visualizer.UpdateOrder("", false); - return; - } - - // 3. Obtener la lista de hijos (Children) - // Ya sabemos que es un Campo llamado "Children" (con mayúscula) var children = Traverse.Create(model).Field("Children").GetValue() as IEnumerable; - // Fallback a minúscula por si acaso cambia en otra versión if (children == null) children = Traverse.Create(model).Field("children").GetValue() as IEnumerable; - string finalText = ""; - bool foundOrder = false; + string orderType = ""; + bool isSpecial = false; + int strength = 0; + bool found = false; if (children != null) { foreach (var child in children) { - // 4. Leer Atributos Crudos var childTrav = Traverse.Create(child); var attributesObj = childTrav.Field("attributes").GetValue(); - if (attributesObj != null) { - // Accedemos al diccionario interno 'data' var valuesDict = Traverse.Create(attributesObj).Field("data").GetValue() as IDictionary; - - if (valuesDict != null) + if (valuesDict != null && valuesDict.Contains(400003)) { - // ID 400003 = IronType (Tipo de unidad) - if (valuesDict.Contains(400003)) + object typeCont = valuesDict[400003]; + object typeVal = Traverse.Create(typeCont).Property("Value").GetValue(); + + if (typeVal?.ToString() == "Order") { - // Desempaquetamos el MutableAttribute - object typeContainer = valuesDict[400003]; - object typeVal = Traverse.Create(typeContainer).Property("Value").GetValue(); - string typeName = typeVal?.ToString(); - - if (typeName == "Order") + if (valuesDict.Contains(400038)) // OrderType { - // ¡Es una orden! - - // ID 400038 = OrderType (Tipo de orden) - string orderCode = "?"; - if (valuesDict.Contains(400038)) - { - object orderContainer = valuesDict[400038]; - object orderVal = Traverse.Create(orderContainer).Property("Value").GetValue(); - - var list = orderVal as IList; - if (list != null && list.Count > 0) - { - orderCode = list[0].ToString(); - } - } - - // ID 400039 = HasStar (Es especial) - bool isStar = false; - if (valuesDict.Contains(400039)) - { - object starContainer = valuesDict[400039]; - object starVal = Traverse.Create(starContainer).Property("Value").GetValue(); - - if (starVal != null && starVal.ToString().ToLower() == "true") isStar = true; - } - - finalText = GetOrderShortName(orderCode, isStar); - foundOrder = true; - break; // Solo mostramos 1 orden por región + object oCont = valuesDict[400038]; + object oVal = Traverse.Create(oCont).Property("Value").GetValue(); + var list = oVal as IList; + if (list != null && list.Count > 0) orderType = list[0].ToString(); } + if (valuesDict.Contains(400039)) // HasStar + { + object sCont = valuesDict[400039]; + object sVal = Traverse.Create(sCont).Property("Value").GetValue(); + if (sVal != null && sVal.ToString().ToLower() == "true") isSpecial = true; + } + if (valuesDict.Contains(400004)) // Strength + { + object strCont = valuesDict[400004]; + object strVal = Traverse.Create(strCont).Property("Value").GetValue(); + int.TryParse(strVal?.ToString(), out strength); + } + found = true; + break; } } } } } - // 5. Actualizar UI - visualizer.UpdateOrder(finalText, foundOrder); - } - - static string GetOrderShortName(string typeName, bool isSpecial) - { - string symbol = ""; - string star = isSpecial ? "*" : ""; - - if (typeName.Contains("March")) symbol = "M"; - else if (typeName.Contains("Defense")) symbol = "D"; - else if (typeName.Contains("Support")) symbol = "S"; - else if (typeName.Contains("Raid")) symbol = "R"; - else if (typeName.Contains("Consolidate")) symbol = "$"; // Usamos $ porque parece una moneda/corona - else symbol = typeName.Substring(0, 1); - - return symbol + star; - } - } - - // --- COMPONENTE VISUAL --- - public class StrategicOrderDisplay : MonoBehaviour - { - private TextMeshProUGUI orderText; - private GameObject displayObj; - - public void Initialize() - { - if (displayObj != null) return; - - displayObj = new GameObject("OrderDisplay_Mod"); - displayObj.transform.SetParent(this.transform, false); - - // Ajustamos posición: X=60 (derecha del escudo), Z=-100 (encima de todo) - displayObj.transform.localPosition = new Vector3(60f, 0f, -100f); - - orderText = displayObj.AddComponent(); - orderText.fontSize = 24; - orderText.alignment = TextAlignmentOptions.Left; - // Amarillo Dorado (#FFD700) - Clásico de Game of Thrones - orderText.color = new Color(1f, 0.84f, 0f); - orderText.fontStyle = FontStyles.Bold; - orderText.enableWordWrapping = false; - - // Añadimos borde negro para que se lea bien sobre cualquier fondo - var outline = displayObj.AddComponent(); - outline.effectColor = Color.black; - outline.effectDistance = new Vector2(1, -1); - } - - public void UpdateOrder(string text, bool visible) - { - if (displayObj == null) Initialize(); - - // Gestión eficiente de SetActive para no parpadear - if (displayObj.activeSelf != visible) displayObj.SetActive(visible); - - if (visible && orderText != null && orderText.text != text) + if (!found) { - orderText.text = text; + visualizer.Hide(); + return; + } + + // Generar clave lógica + string generatedKey = $"{orderType}_{strength}"; + if (isSpecial) generatedKey += "_Star"; + + if (SpriteCache.ContainsKey(generatedKey)) + { + visualizer.ShowIcon(SpriteCache[generatedKey]); + } + else + { + if (!reportedMissingKeys.Contains(generatedKey)) + { + Logger.LogWarning($"[FALTA MAPEO] El juego pide: '{generatedKey}'"); + reportedMissingKeys.Add(generatedKey); + } + visualizer.ShowText(generatedKey); } } } + + // --- VISUALIZADOR --- + public class StrategicDisplay : MonoBehaviour + { + private GameObject displayObj; + private Image iconImage; + private TextMeshProUGUI debugText; + private bool isInitialized = false; + + public void Initialize() + { + if (isInitialized && displayObj != null) return; + if (displayObj != null) Destroy(displayObj); + + try + { + displayObj = new GameObject("OrderIcon_Mod"); + displayObj.transform.SetParent(this.transform, false); + + // POSICIÓN EXACTA 0,0,0 + displayObj.transform.localPosition = Vector3.zero; + + // Aseguramos capa correcta + displayObj.layer = this.gameObject.layer; + + RectTransform rt = displayObj.AddComponent(); + rt.sizeDelta = new Vector2(45, 45); // Tamaño del icono + + iconImage = displayObj.AddComponent(); + iconImage.raycastTarget = false; + iconImage.color = Color.white; + + // Backup Text + GameObject textObj = new GameObject("BackupText"); + textObj.transform.SetParent(displayObj.transform, false); + textObj.layer = this.gameObject.layer; + + RectTransform textRt = textObj.AddComponent(); + textRt.anchoredPosition = Vector2.zero; + + debugText = textObj.AddComponent(); + debugText.alignment = TextAlignmentOptions.Center; + debugText.fontSize = 14; + debugText.fontStyle = FontStyles.Bold; + debugText.color = Color.magenta; + + // CRUCIAL: Ponemos el icono al final de la lista de hijos para que se pinte ENCIMA + displayObj.transform.SetAsLastSibling(); + + isInitialized = true; + } + catch (System.Exception e) + { + Debug.LogWarning("Error UI: " + e.Message); + if (displayObj != null) Destroy(displayObj); + isInitialized = false; + } + } + + public void Hide() + { + if (displayObj != null && displayObj.activeSelf) displayObj.SetActive(false); + } + + public void ShowIcon(Sprite s) + { + if (!isInitialized) Initialize(); + if (!isInitialized) return; + + // Aseguramos orden de dibujado (Encima de todo) + displayObj.transform.SetAsLastSibling(); + + if (!displayObj.activeSelf) displayObj.SetActive(true); + + if (s != null) + { + iconImage.sprite = s; + iconImage.enabled = true; + if (debugText != null) debugText.text = ""; + } + } + + public void ShowText(string t) + { + if (!isInitialized) Initialize(); + if (!isInitialized) return; + + displayObj.transform.SetAsLastSibling(); + + if (!displayObj.activeSelf) displayObj.SetActive(true); + + if (iconImage != null) iconImage.enabled = false; + if (debugText != null) debugText.text = t; + } + } } \ No newline at end of file diff --git a/Textures.cs b/Textures.cs new file mode 100644 index 0000000..fcac604 --- /dev/null +++ b/Textures.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StrategicMapPlus +{ + public class Textures +{ + // ----------------------------------------------------------------------- + // --- ZONA DE CONFIGURACIÓN --- + // ----------------------------------------------------------------------- + public static Dictionary TextureMap = new Dictionary() + { + // --- CONSOLIDAR PODER (Fuerza suele ser 0) --- + { "ConsolidatePower_0", "T_tkn_Order_ConsolidatePower" }, + { "ConsolidatePower_0_Star", "T_tkn_Order_ConsolidatePowerStar" }, + + // March + {"March_130", "T_tkn_Order_MarchPlus0" }, + {"March_129_Star", "T_tkn_Order_MarchPlus1" }, + + // Defense + {"Defense_124_Star", "T_tkn_Order_DefendPlus2" }, + }; + // ----------------------------------------------------------------------- + + } +} diff --git a/obj/Debug/net472/StrategicView-Plus.AssemblyInfo.cs b/obj/Debug/net472/StrategicView-Plus.AssemblyInfo.cs index 165bbe1..a48e36e 100644 --- a/obj/Debug/net472/StrategicView-Plus.AssemblyInfo.cs +++ b/obj/Debug/net472/StrategicView-Plus.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("StrategicView-Plus")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+ae0a5853b586351c17dcfa88c3344792a4628614")] [assembly: System.Reflection.AssemblyProductAttribute("StrategicView-Plus")] [assembly: System.Reflection.AssemblyTitleAttribute("StrategicView-Plus")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/obj/Debug/net472/StrategicView-Plus.AssemblyInfoInputs.cache b/obj/Debug/net472/StrategicView-Plus.AssemblyInfoInputs.cache index 02753d1..8b16415 100644 --- a/obj/Debug/net472/StrategicView-Plus.AssemblyInfoInputs.cache +++ b/obj/Debug/net472/StrategicView-Plus.AssemblyInfoInputs.cache @@ -1 +1 @@ -273bd5731decc3a9326eaf60c8347c8c52258602c6bbbe66e14477d5903fa4e0 +2b75dcbe8616bb42f12edaec3fc9bc49fdb1555dee5fe1f058109fdefbb47f6b diff --git a/obj/Debug/net472/StrategicView-Plus.assets.cache b/obj/Debug/net472/StrategicView-Plus.assets.cache index a069305e689ef26cc3d20bdcf033d943511e6de1..0a62f409aeda45a5b6eb1309257379955969c887 100644 GIT binary patch delta 55 zcmV-70LcI00pS5DP)kQa3;+NCT6_P*dDhN_HwfD#Hz4CXs=o<#JuRT%eG_36{qAlW N-H|aPkw6HMRE=3|7GVGY delta 55 zcmV-70LcI00pS5DP)kQa3;+NClU)l0(?vo8vaNhi)q2`OF%$jAZ{n9mj4>(WuP6mV N-H|aPkw6HMRE;YL6*m9? diff --git a/obj/Debug/net472/StrategicView-Plus.csproj.AssemblyReference.cache b/obj/Debug/net472/StrategicView-Plus.csproj.AssemblyReference.cache index 553ad8b4732a63b8c2becadf911db59f7d2d4147..950b0bea1636f02137182344365e976163c038bb 100644 GIT binary patch literal 115172 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 J9K%}V{{ehcZzli% delta 23 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 literal 8704 zcmeHMYiu0Xbv}1yXLq?ImzrHZ^q{1rC_6N{T2n7ew4(<_>On;mB`!t9wG45%J0!>2 zox7TurA)hO6eMnKz(#E#KODe;ttN<_7vR7_5+^9!v`rsyjka)IH?14kaM3yl-2AA4 z!f_$>J9l=uq@)DyzZT7<_RPKKoO@pP+;i`Y#((Qc(upX7-}UQ6-^Y{NK?Q$3xB_x= z^AD2rou=1%zAsL^)-$!>_?e0)=RK>ODOj#6gUqa*@v3gdaWkV6`Ak_B?ObbXVrxzG zsl!Akgid$we)Y+^wzp|ZrdbRUtp_F=V*B^vnZfTMene|jUkmMKM2(H;3I@P)(`n`r zX61j4XKlzRv^VzpNRrg9)|Y%@eHz`b=B(bSE!UpLMW#aGbd7#~|P&IR^^0mg%C z0YFo}*6hYewG7cr&hxzjM#{E>=W&#lC(b9knkX&B3sd;{`4T$7ovbNNz)$2Gt!p?>C>0F z8zQuaVR7VIBoWPO11W6_s}9M1Se7XD6K#N;H-HACN#4Cs&<9HsiD-KtRyeV(IVw#& zJFkfW(bXKw8hgLaQlc^itV{#63@pWEJ30X-h*oOy-efa7fJsNpNGK;AH{-Bj!i;$D zFtwAZ21chvoi}PiXBY6>Fl#_Fqv@DwgqU=b*_2I@W*PxB3NzM+731uTODuKb?%%$C z{rXQk;#Jrr(g`z>jhhL%4itI|E|P#@8ttJ+Um;i(`uwMG7%?y@A`!2Fy1!{yk?jC- z17=I`fFff`nclY%xaOF5A53nSo0wrUKuf&+nt-jbY?`9pJcykVSsJCi1EFx(phn~h9GFwC2zPyU9iX{-~HnWX+*O+UDE-2o%%;(le>2Y{1 zfUr&xwrJkQWdd)nxVKvo znzYU?iT#OU6YCqmGaVZsGuHpm%0h))qXU=WP(5z2gkl(x;f*PGHW1*ra$w88#MuMr5&64VrY7LPQ zxsT;UvOS?wVH~sRa3uGGsP`QJMAjlX+7K~zRhI{O8uf3{`i8mJe<*+akf@z-d|oc@ z$_?gr4({9z>v^S0fX~3I-rqq@#KJ{jaBn{F9Cx10rnLI7vh~u5md-TlM zD4q{uTw&UwlAL8`Gz`Vr4vm^nYU!6^Cnr2tBkVP<>*`2v!jn%4SV$1B`pm;Pn1a@# z^O!OJDr}gvS7UfkOh(%15wJw*f_P4g(q_0Fr9T%8Kd<0b1)~Z-g?@rg>rWdAx*sq} zA4OV4l(t4*h$Lx9Zxu<}X)xv+l+}|o3Tle(5C6H?ql?%mZZ2~IY}i)Ku(li*BCybvz9h$6`fQvUeY`1hmn_{r5#$U7*>@zkD8n2l^wCCvE$nNFQbH=-oal|nO%zx-JLXfUt)hM9NNULa5X-F5PC!@$j7A@FQqbebE{(oNO|(BEuqjyfI=}?o z0l0>?D>$U!u!3U>o>uT)1uei1a_Bw1n|?yy(0k||RGfagNEVIK&*&ZFIQri;CILtE zX~bbLavv?xQDX*ui;7sYLE`~%z7NhNDuDAT>OpiE|0Tev@dD=dqJNc!#J2!HGF}3l z)@A_jqaV_@mCTpv*~pLRW$M-cjJ`&HtG!AeLi=Bn5P9PbRQz83C%|YC#y=bR8Q?!^ z{|@*;Y8f%altUZUF_Zg9+G(8Hq zfu0BKr56DQ=o%n4u9l;Fs0VO_a)6&w_&neU;xMG$4jC2tDgBa8i^vsT;g#)guuJi8 zxt$fqRo?)%Ynk#ia^lAJib9}*tRVc=E%;vMa&m*#jGD8XzDz^v*CB?miV8XA20M4q zv|R|KSAXuLPmarCwPf$7Gp-XX9d_p(*Up_8qba+_3N4<=N8GloPB(Pgx$+9l>j{eMx#3ZstGYl zNCf2EJmr`Cz%J)%>T)&5nWA#Y<;b6vUhyoFuEOXk8J^OVug?1Fyrv@ZrerNm%s!yB z&6cdf1#>gS53lA1FHBWku##qw-7Kt8xWFNvZf zziT7q0OrDaI%N5_%Bk8I;Vsy{KZ%_n-DTJ8xe_)4W5z~gsorPz@HTIiPDvlZ0u>?Q zB%rBr$O&^bw_-n19v@qlUBE`GWva?}WhBSc_K4TbBlv)wfXg%+%Uj$$Js zClGrTo%zO)LxJoJCDU-R$QDZ%YS{nAAa4h!R5B<5BUO(RBkW7;4;njx>W1(v+9&x- z4;Jn`FBl?+=Z*S zv)_&W7`ck-s5^rMra%%iJ)DbL0uh*#hRuZys&Za$m%9<@ zb3HjD;(3aqnNqvDBJJQ?aye6T@F#_{?Ho}>}eQjQkQXfO^B zU9_~cL^%dm9$}3(1c(~qi4gx(`1m4IH0E&(yft6JYmtV@A@Qma)8SV9dk>wPUbpM* z$FyjR9!=T!4Z&`a8cz)?^%_q~YH?BfBE5-Uqo%Y@J~vNFoVW#BRnVygPhRo`_+o9%G zb7qWkdLmw5rAv1#-pWz~3pT<5M{e!>z6B6U6 zH1x0FH;6A6gX_?#HFh+OAHJ*6i=e%@g2pWTZojfk=124Wxz6u?WuoO%zrQy#fBZW$ zKV})Dcb^-Tm)w%HivBru?q_hI6>+YeTXq`ushdRuvwTpUld}(;Q&BkQ+QF_pJ8r>~ zs}yG`e{6Wi?z^aF!auduOn{psYv&GqVXWE}?S1|CzH}X~)Z03InW0R5wE9{9{2yY^ z;~G6$DvjgR4X^aJt!_bzdi^#CxiK88rTu2~e>?*Gb%h9Dbg!&-B>Y;2O?eZZ`HtcD z>4QXD)!QdyxQ{Q0G>y~yJm6uRlX=_+Cg>!_V}M7(|8=83jQrwS_{Pe+h+Fu?iKbcv zkoWG&Hj06OR6gO3;Or^kJmlNS9L^nXTh+Vt6sVRuz4%-Tz{h7<*j|i$9zsR!Zs7nw ze+x-7if54Of4guhBL?71V=kYKWt@7fV+kIG_aB!3t8XmZmTy$dcT&lzd%!2Oj}x0u z|H>+RKd!t%)OWG$$28>ey{6&!cHD6Wmw&9k3;Y~8zWaH2^1Z9!$;Z)~!%1JlAGbcN zl)xR2?~yEtBUC|b*rR#eb#TW}b!b}Y<@*EUIr_|9j{}eRCi(H=xKe+(E~g-u?;lll zD{Xl5@#L`|gX%lsYB@JXvk^<8y(;d*h&A60%gB-vyv`s)SFb>04zI)ik_JQg8+euv LiQlyUcM zKmsEQre*3>i7y;<>eMN8S~{)mXl15#rt+88p`F@}Lv=b7s?*kLXWHMn*>uwW(VhLy zJ-_ce-+6rJeCOVmx-Z^$sxH|_M4@fNyYZka7^fV-j}Z+RL|YkrZz2|sjKp>QJ5C}@ zQ>ed}UI)KT`Az+u9lGcuy0{d$eJrZV?l`vg?Y^h?bUo?&%Ny@6&2hhY^};hMc3**b zydEN`rd34Ew!$oc0EQ|zF?<+q4Cu54ZT|Ex%91Leg5?-Z7;u7g^A?Epl8}Yx44&8V z{3o6pn5mlu=$%TYp(>{H7~iU9YOZ0L4lzB8@e;Mk+1*|{Kf?^+V z8~8&RoDIB@C`qH3a6({7X2YvUnc@=Q%PK7MxD@zZ;4h(9*UN#w0Dd=vD}dX;KbgT* zz;oaq&gicN4nmifi0-cgeoT@?nr{~->M^0e4%oMVVc$N+?1c&79E<>bTu?9otiRVV7)7DU{3|FVV9rZVfX|{9 z@ILZ`_uKOU`T=;NY|J}o5}ZLD;GOgoc%%=!o09LS484HCR0S%u57a^XK@GbCoHPL5 zMU9|tyO2F}CpHJ{_;RQk{1RG$)jawcXg>WKw175&7Sr!ROQ;*Pl*%AkK{vox(u1Hi z^hb@q*3OAgF_s;)9y11A0(BxK`eXW96%vQ%i%a#&G^l&r0I6}u21q?uH2}J|+5+{} zJO`Q=BF0QzHRzeT4WM7v4S+tRS7B&xcx;&VL?pG7#r8}v41&Nnr42O8=QU6c(%XddetwN<$U8@ z+fOf^^6mV2$<5X4PMlfykKo7eZNAxB`v>+dINmZ8cR$2Npu8nf-CpzF>o0qJGv7Zt z{rR#_-+KRxn*OJLJ8F66KKaV4P2-gZW{aI2Ie~d;>lN!Y>w@*8*}cw=<^MI8s;IvH zt4rSu=KHEQG&r|k?Rex$_TSeh+nk#}ymsTW)4QTWf1CZlnc!6yx?F!McNTe>*37O8 zbtZc!;|X)TWotNcz}FuMCnh&WM#2#@u!wKz?{xOvyDb(i=Ci-yvmf!<8$2gGSHW{l zJa;?Kb*x39ayfL?i>Fv?Hix?0RBYUqM+KtS*MV!YOvoqwJ_;IoXB=p_jkskSk&H$crj;&D-r;EuVq?fR$@Zvw%#QCw4rGTkPgO1%|!?{5-Mo`M?cL(dd+ zb(TqZLa&x*=t>9>$0TWk{WWQ4c31jr!7gJ z=PBW-wQ{5+=0I!WO$c~YJU&_@v!91T@W@ZOGVhF+>V(3^!vSg%^p|!)ODWGdx>h_I z?g1tlT?N$uCh%J`?+I5o%VQcm|vYLBF!r_?pH4BiQ&?c#A$k;c9d zcBgo!M|4RA}_uN*x*ll05ry zU6XytcL~lPr-|IFc4)d^JQZ|@pbsw0EEP|XHVgV=$XGO8t_-fI9Zcr}a+*#cJBUz_xh!Dgd7YnC$9Bh1xZpDV{t%SGS??S6x$w zc%}3LG^ldp-FUL;sw40~9dHSME-;kL@Jo70ZUn9rAEhn1! z#LIl*CduO|Ik{6#o|Y%>)eoSO9IuZmahbI?-PGaI?9=^0uk|KwDO*2AX*Fj0fSY=p zRFsrfyoMd9(B-&)I5O9Erdzdqk^N#?>B4z8xu}TN8kDUWEu>pDPspTSE#<0+kJ?li z$B{>O8TjC6(A8DC0~MO9Rhz4;e%+Q!jV_P^O$$qM(xH`yENa=^BAy~GdpixbONHn` zdazm+lR2hR)L}l-!N)Gi^erWbkgY!>FyyB~Ln)`-xVlm#vSbhy&DLjF3~JZF zqF*~(P#&;>n;Me>cOJ;4GGo3MmeFcI1&mI7C#y;Lgs*15*0Y}q|KnIoF4nf#Rp*CK z>&5y|QVo(i-=hXo&i`W&_KZdLdToP+MyH*HQfg5%y>|RT1u&Db@Pb&MNDAKLOW(TW mMcCOA$a2lUBz&27g}%iKXTMurn481rCNr;sa~7X_oc;}$N#7j+ delta 2063 zcmY*aYiv|i5T2Rdy}P9kwy*8>wQaXApjgYJh`d5+E7n3Ew1pZUu%$~`-R|OcK{gO} z*FLO89%j`LAB|!YBt~PEh`~fdM8!lRF%T2~2uA#a0ZB9@N}}Jndm;7SJ9ExAGiPSb zIdjfEwPm{FXl1mMh$=b<`q9vLpq&DIfM{t7Q8A<69S->dgTqSSsS)9$ir#MOLB|-o zzPGg*vS~vB-8z3zIa^TY_++{xz3s^IvcX4AZTo8d@k?JqOk47VQf)+VP4kGV32_Xk zsc3ajBPh-6DOzZ--&cgo!+kjoB-q=jYZh}%Mx)Y6tB~wmk(AVi#a4Y=?PIMN;q*hC46L^Z5 zj`C%peUPLXZqsQFBpFl-$y}q9vS}Rs9Agc0jcs$lD^WfL!3*d(cpef|Loh6cQ$rr>~=!jWCxcF&NPg1e((zb^nu$g{^A8upSWjEe8y9rg})^gm@7 zZuauv>xP}c*inR7Jsp@{zyxt zGW%7LmYMept~d5v&AdJT@cxxqg|9drO^K6wb9&n2tYsG0h4&tajV12r&G*d`Tr0ac zdUe^7N4tD$H*b6R_Tn>h&tLNX+<&8KdNOYR;p_+Forzu6FfaM|n)Q0IB`1|>P2zH8 z>$={6FC1wJ3}P~to{gQMVCF1IU2kh1Prc1kCwb}=PkqBvzwp!zp8B%}Rl-gCYI zaoSgj4JS+@IL3;})}bD&nP~E+k{sk z{Cdr1rF`5`h}jNL7~U?nbYzR#H5?=~6l&@)D4z(?r`bvmKT6s?*g4A(8Fe#_=;zj^E;uhj?@ck4{MJ z4SDW<8M!W_@9Cpg8Q<8GJodVb{m$c28NVsdkMTqUPsDlR4|!n;PrCU~vrP8!^F(ellY*6)&Hv?Gc}D| z8ueOKN*^Mnd{hW7JN4tJw@|&-Wv69APHNPtiXPB#L!!vCs9v#Jjmp$!XHb=5i*(Gv zEno|U@LQ0Gg-5!?z8VQ}?7ZnbIm>!0Rq0*X3b<%P2CdW@sueH_&FN5OdUv;MVwc#s I#C{_B4+bkmqyPW_ diff --git a/obj/StrategicView-Plus.csproj.nuget.g.props b/obj/StrategicView-Plus.csproj.nuget.g.props index 839c313..7c20b79 100644 --- a/obj/StrategicView-Plus.csproj.nuget.g.props +++ b/obj/StrategicView-Plus.csproj.nuget.g.props @@ -7,7 +7,7 @@ $(UserProfile)\.nuget\packages\ C:\Users\PC\.nuget\packages\;D:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages PackageReference - 6.10.0 + 6.9.2 diff --git a/obj/project.nuget.cache b/obj/project.nuget.cache index dbb4124..99ba8be 100644 --- a/obj/project.nuget.cache +++ b/obj/project.nuget.cache @@ -1,6 +1,6 @@ { "version": 2, - "dgSpecHash": "zU5GcbnMVE8=", + "dgSpecHash": "c2opvh31BiDg+DMTuh4qcKqCOMknou+psI/EB2sWw/WB0CwhntsEkJ0/nXAhoQMHMCuZl3iFWKs3U82rIyl/tQ==", "success": true, "projectFilePath": "D:\\Downloads\\Unity Modding\\StrategicMap-Plus\\StrategicView-Plus\\StrategicView-Plus.csproj", "expectedPackageFiles": [],