From 02a2ccb6f90981c12664760bd0d8805c4e6654aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20L=C3=BCbe=C3=9F?= Date: Thu, 16 Nov 2023 18:32:13 +0100 Subject: [PATCH] Copy ScriptCore dependencies to output, EntityEditor: Start of lists --- GlitchyEditor/resources/scripts/ImGui.NET.dll | Bin 261632 -> 261632 bytes GlitchyEditor/resources/scripts/ImGui.NET.pdb | Bin 218128 -> 219024 bytes ScriptCore/Editor/EntityEditor.cs | 291 +++++++++++++----- ScriptCore/ScriptCore.csproj | 1 + 4 files changed, 220 insertions(+), 72 deletions(-) diff --git a/GlitchyEditor/resources/scripts/ImGui.NET.dll b/GlitchyEditor/resources/scripts/ImGui.NET.dll index 48f9be7f966c69b8864581d34a2c08b27b38967a..e686b7edc7b2ca1bd1f988a05d15d8ecb9cf5707 100644 GIT binary patch delta 1263 zcmYL}T}TvB6vxlKcl#pCP0J!moQ$H(b=Q#{OAF0D9Cgbu5Tl6Mb|vToe2WNbQ>ZAY zb*o8wXeWY_pdR{|3Zh-gw}_yxmkPHMq8^e+vl8l@xmOyv^Si(QoO5;tcIL=<{*m$g zGsk^HnYv5KQw!MTWPkh2*4aMT40x3IU|1xz!n`^k~zO5k}o z)z8{lPm1xvNwwQKFgr0SjP6$MwsKZtv(Lx6`k33*$9F7g`q3D`DSO~YV?DAP(nZ9R zAWTO&(Q_uRJ4kYkODB@s^D?}cBdarfKk*v+d|`G^1xVpsHci$Oz52ln4;18?&U7^w z>E$I^zDau#DfI)~g13?cycH6P$2beRs4o`>ko^*`oC z1z5j8)g!&U`Z3?I2=len_u6zk);485I!#&w<=NZHk>rUxH0N?l4oS~Rq};kI zok;H7mrnHh9!O6hJ%6YiNv=IYKa2xuLqYvhSwJLr-bg2U4ez9DNODU#kvxIC2vZ_C zl@lqif3M~u$(;{sE^<2s*&!JaJ^!K{Np5|WP9z^3kv=#onfpmUyf=~MDAEEJ3x z;az&%s0>>{y-M%2!bYewWUP!Dv1mN1>zzR(UTqm}`LOuyo3nF&+f87RR*o;!30!G> zb<_6h5ixhtGJL(4*&QRI)W5DawrbJWwd=3f>^|7=D)h-dH6jjGs&rr?#aR_qH&1Wt zDL2eq@m>1>4wyK4X^=_bP&z e#Gx814FJ32kJviRFF#sWs@z%Q;u}i_r~Cs|S6vJM delta 1163 zcmYL}T}TvB6vyw!T5b8U?uv?P&6FBO4rDuOOPlqBV{ z=_E=y5S2zkXbncuE^04Ej|Cfz{-p&4w?+6(G7#IuhLv949LcQJEt# zuUe6Ff#~`-ITzT5LHLIVkf#5X4n+6;5{^V)jR{|k3r7Fpjolu9LO2rZwBaR|3IEK= zEs-lbd&KKTXo=m8+SW(1E)V@qb>H5~ZTj%gHfUUW%tNa6ASFqsoGz!!xcG-}Sxys= zcl{lq9xsE9G6<^+wq#d~!zYqtkVptURG1dGrUSykR3;Q}2&s2|A#~*#J%qi36 zV!Zc+O#gnADGaZ%>aN9W(;F#KM`NiM2J9YJwDvg9rENxcoR3f~6z3&cYJyj!RP5cH zRA{XU{(#=sHWR#v_85mZc^cy`vQIm?&5vs{+q?-oo2@qSLFp|s(s%d<4Y>CI2PH9V A;{X5v diff --git a/GlitchyEditor/resources/scripts/ImGui.NET.pdb b/GlitchyEditor/resources/scripts/ImGui.NET.pdb index aa1ae2575f725fa8342c8cfc8b1970b3941f0d18..b1bda8e69bdd31aaa074c421fd1f7de13f6259e8 100644 GIT binary patch delta 19883 zcmYM*cVJUx+ko*Wv`A$yk!_%e$ZAUqEkg*j?7df!bV1px>~R8R&q6_lj4%~M*&88H zWQhzxKwgkwQ53371r+qV?+ZNN`^PU=o^zhNCuth#c+)=3leQ&KT10GOe}@U4U`*lw zhnZZ^nBev)L;DQuJUxj z!g|;UTVe<7j`285%x>o5B3zDZaT9JsYcDs4@woVg`35iH|L{lr6(8VJ{0Fnw(p|Z+ z5EjQWSOG(@2DU~w4zakIBnFvuT!yRhQ`~~P@k>00U*osjB#gc7w*LeI5 zTea1dLl!r=+v%O&xC`^Q*Om9gyrw3)uranm`PYCPjl~4)i$ib}S~wNw;6nTuH@BD9 ze|~dR?&LS8@H}3@AMhv4!pHa*Iy&gCAk2qFuoRZVN>~kRq6-^is}Az|&u=<%Cl(X1 zFAl*`Xo&?(8ZO3_xE?p-4%A0n!0e}w;7L4(m+=PP7Oev29(Nw$b2J@|DQI$FUVIBn zVlY<3FpR>c7>~I->4XSuh@G&%SjddWo}HyFldFp^mBdpxwX3eQ>82L!u3o`~vD$5W zsBe6zMqxb8!L4`^?_!u+&m0`5PQ#UW1g)#w+($>eo>UaS!7&NCG9McyYX6M|leAA@ zN-yn|*uJ;6Nmk3?0c_JpSB7BuzSw5bdTz z)qn7_VcJLW5{^vKmCD1_@9_a{AE7HlN2=9EsWGGE^48cM)P!_3 zeW7}Hky>Z5I(dnDY^nNUnOb?dnz};$Zl!u_mHLZUy}MeyvqlYCr@psd4d0;F`b4x$ zolo^n&5dfeP3q{+)N7m7@GsOUThwz~Ro8a4_D(fyw>oBzdSI{mWS{!(0d@RA_1u?g z(Zgz2pSs|PnsHRMN*vRh0bi+Oj;oVSs8dd=si)NSr`2O$s~66w-+!ZCKdW9lr@lC^ zmiSg3e^I@1NqzsaI_!#i`>J~Ln)=;!b%%9BZ)W_Ux^JqHes#$$_2G}|`Aqeb+vSJNO)P-PQF{7=rb&JtpBK+<^b! zTlaKVO>BcHI1AU{K0J?4?(zE1m8ILtVm<7H18_2ajN9=P`td2|{Y@uS!f5Pgu2)f`(rA8tXgI} zcTS-npJKj;y7@h4ft50d~NCI0>y~+-$=iG1p_=RvBZk z6PA0T>v!?fKeRvmQ_b~MEsGI2{F$zN@m#(6mm2v(o%vGz`X4n=ehg8_RJR;@GbfvR zGeFIsT}^&N-Je6<8>C))Q+=LOeVR)xmPd`stLDw8UdJ{0wc`t@6$+}q;G9C*A%)dT zIN~k&X-Xl}qKI1dZS^^JE2h1pxH_|h8dp+{Dy1$htv-22-RxAmmr+x24sO81coiSw z+hz64P;6S(q3{3k+!>1taX((fEX*FP+e%|J#^D%Tg1hk?{(^bS>8|&%1rEW*cubVn z{|)Xed{8y9oFAg=oA3}`#fP{rRFCGWruGO|w?wFUYp4Sv)rq(WH)7`~U4MbaYHC|m zxM_?3;<{RTAicIarjB~=1GPgvb(c%c+dz$vR@=s?Q4Q6Njnslo)L~84GtE?I3pE0p zU@Q){xS5PAa2uY+AMg>r(NafL#2EY)v$fLo5?CFt;bY9vnxhzk(byULwdVCdnL8_R z8z#5mgSA!bVmwa8^>`F7;}gu&PR}oc$1w|wwb%7qxUqwFpN^`t6R-b2I_aIGozA~y2u-wQS1=h!II1m@$ zXLuMd;sY%Fq3*4M_3=X-ic@hD9>c4cg>Uqfy_PAiH>NIj#=$rlSKu~0jX&U1%;na- z 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 RIbR>r5B_HRfE*5o`9GIXU`zl2 delta 18979 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 + { + //ImGui.Text($"{fieldName} List"); + + //object @class = (reference != null) ? field.GetValue(reference) : null; + + //if (@class != null) + // ShowListEditor(@class, fieldName); + if (reference != null) + ShowListEditor(reference, fieldName); + } + else if (fieldType.GetGenericTypeDefinition() == typeof(Dictionary<,>)) + { + ImGui.Text($"{fieldName} Dictionary"); + } + } + else if (fieldType.IsArray) + { + ImGui.Text($"{fieldName} Array"); + } + else if (fieldType.IsEnum) + { + ImGui.Text($"{fieldName} Enum"); + } + else if (fieldType.IsPrimitive) + { + ImGui.Text($"{fieldName} Primitive"); + + if (reference != null) + { + if (fieldType == typeof(float)) + { + float f = (float)reference; + if (ImGui.DragFloat(fieldName, ref f)) + { + return f; + } + } + else if (fieldType == typeof(int)) + { + int f = (int)reference; + if (ImGui.DragInt(fieldName, ref f)) + { + return f; + } + } + } + } + else if (fieldType.IsValueType) + { + // Struct + if (ImGui.TreeNode(fieldName)) + { + //object @struct = (reference != null) ? field.GetValue(reference) : null; + + ShowEditor(fieldType, reference); + + //if (@struct != null) + //{ + // field.SetValue(reference, @struct); + //} + + ImGui.TreePop(); + + return reference; + } + } + else if (fieldType.IsSubclassOf(typeof(Entity)) || fieldType == typeof(Entity)) + { + // TODO: Show entity drop target + ImGui.Text($"{fieldName} Entity ({fieldType.Name})"); + } + else if (fieldType.IsSubclassOf(typeof(Component))) + { + // TODO: Show component drop target + ImGui.Text($"{fieldName} Component ({fieldType.Name})"); + } + else + { + if (ImGui.TreeNode(fieldName)) + { + //object @class = (reference != null) ? field.GetValue(reference) : null; + + //if (@class == null) + if (reference == null) + { + ImGui.SameLine(ImGui.GetWindowContentRegionMax().X - ImGui.CalcTextSize("Create").X - 2 * ImGui.GetStyle().FramePadding.X); + + if (ImGui.BeginCombo("Create", "Create", ImGuiComboFlags.HeightSmall | ImGuiComboFlags.NoArrowButton)) + { + foreach (Type t in FindDerivedTypes(fieldType)) + { + if (ImGui.Selectable(t.Name)) + { + object instance = Activator.CreateInstance(t); + //return instance; + //field.SetValue(reference, instance); + } + } + + ImGui.EndCombo(); + } + } + else + { + ImGui.SameLine(ImGui.GetWindowContentRegionMax().X - ImGui.CalcTextSize("Remove").X - 2 * ImGui.GetStyle().FramePadding.X); + + if (ImGui.SmallButton("Remove")) + { + //return null; + //field.SetValue(reference, null); + } + } + + //if (@class == null) + if (reference == null) + ImGui.Text("(NULL)"); + else + ShowEditor(reference.GetType(), reference); + + ImGui.TreePop(); + } + } + + return DidNotChange; + } + public static void ShowEditor(Type type, object reference) { T GetValue(FieldInfo fieldInfo) @@ -45,86 +184,94 @@ internal class EntityEditor if (ShowFieldInEditor(field)) { - Type fieldType = field.FieldType; + Log.Info(field.Name); - if (fieldType.IsGenericType) - { - if (fieldType.GetGenericTypeDefinition() == typeof(List<>)) - { - ImGui.Text($"{field.Name} List"); - } - else if (fieldType.GetGenericTypeDefinition() == typeof(Dictionary<,>)) - { - ImGui.Text($"{field.Name} Dictionary"); - } - } - else if (fieldType.IsArray) - { - ImGui.Text($"{field.Name} Array"); - } - else if (fieldType.IsEnum) - { - ImGui.Text($"{field.Name} Enum"); - } - else if (fieldType.IsPrimitive) - { - ImGui.Text($"{field.Name} Primitive"); + object value = field.GetValue(reference); - if (reference != null) - { - if (fieldType == typeof(float)) - { - float f = (float)field.GetValue(reference); - if (ImGui.DragFloat(field.Name, ref f)) - { - field.SetValue(reference, f); - } - } - } - } - else if (fieldType.IsValueType) - { - // Struct - if (ImGui.TreeNode(field.Name)) - { - object @struct = (reference != null) ? field.GetValue(reference) : null; + object newValue = ShowFieldEditor(value, value?.GetType() ?? field.FieldType, field.Name); - ShowEditor(fieldType, @struct); - - if (@struct != null) - { - field.SetValue(reference, @struct); - } - - ImGui.TreePop(); - } - - } - else if (fieldType.IsSubclassOf(typeof(Entity)) || fieldType == typeof(Entity)) + if (newValue != DidNotChange) { - // TODO: Show entity drop target - ImGui.Text($"{field.Name} Entity ({fieldType.Name})"); - } - else if (fieldType.IsSubclassOf(typeof(Component))) - { - // TODO: Show component drop target - ImGui.Text($"{field.Name} Component ({fieldType.Name})"); - } - else - { - if (ImGui.TreeNode(field.Name)) - { - // TODO: Button to create / destroy instance - - object @class = (reference != null) ? field.GetValue(reference) : null; - - ShowEditor(fieldType, @class); - ImGui.TreePop(); - } + // Reference was changed inside Field Editor -> write back to field (only necessary for value types) + field.SetValue(reference, newValue); } } ImGui.PopID(); } } + + private static void ShowListEditor(object list, string fieldName) + { + IList myList = list as IList; + + if (myList == null) + { + Log.Error($"List \"{fieldName}\" is not an IList"); + return; + } + + Type elementType = list.GetType().GenericTypeArguments[0]; + + // The buttons should always be visible -> save whether the node is open + bool listOpen = ImGui.TreeNode(fieldName); + + var addButtonWidth = ImGui.CalcTextSize("+").X + 2 * ImGui.GetStyle().FramePadding.X; + var removeButtonWidth = ImGui.CalcTextSize("-").X + 2 * ImGui.GetStyle().FramePadding.X; + + ImGui.SameLine(ImGui.GetWindowContentRegionMax().X - addButtonWidth - ImGui.GetStyle().FramePadding.X - removeButtonWidth); + + if (ImGui.SmallButton("+")) + { + object newElement = Activator.CreateInstance(elementType); + myList.Add(newElement); + } + + ImGui.SetTooltip("Add a new Element at the end of the list."); + + ImGui.SameLine(ImGui.GetWindowContentRegionMax().X - removeButtonWidth); + + if (ImGui.SmallButton("-")) + { + myList.RemoveAt(myList.Count - 1); + } + + ImGui.SetTooltip("Remove the last Element from the list."); + + if (listOpen) + { + for (int i = 0; i < myList.Count; i++) + { + if (ImGui.TreeNodeEx($"Element {i}")) + { + object element = myList[i]; + + object newValue = ShowFieldEditor(element, element.GetType(), $"Element {i}"); + + if (newValue != DidNotChange) + { + myList[i] = newValue; + } + + ImGui.TreePop(); + } + } + + ImGui.TreePop(); + } + } + + /// + /// Enumerates all types that derive from the given type. + /// + /// + /// + public static IEnumerable FindDerivedTypes(Type baseType) + { + foreach (Assembly domainAssembly in AppDomain.CurrentDomain.GetAssemblies()) + foreach (Type type in domainAssembly.GetTypes()) + { + if (baseType.IsAssignableFrom(type) && !type.IsAbstract) yield return type; + } + } } diff --git a/ScriptCore/ScriptCore.csproj b/ScriptCore/ScriptCore.csproj index 9bdf54c..7176d8f 100644 --- a/ScriptCore/ScriptCore.csproj +++ b/ScriptCore/ScriptCore.csproj @@ -6,6 +6,7 @@ true GlitchyEngine + true