Show enum fields in Edit mode

This commit is contained in:
Simon Lübeß
2023-07-28 00:07:10 +02:00
parent 1254d01545
commit f39acdadb3
5 changed files with 143 additions and 36 deletions
@@ -11,9 +11,9 @@ namespace Sandbox
public enum MyEnum
{
Yes,
Yes = 1,
No,
Maybe
Maybe = 1337
}
public struct MyStruct
@@ -53,7 +53,9 @@ namespace Sandbox
[ShowInEditor] private int MyNumber = 1337;
//[ShowInEditor] public double MyDouble = 1000.0f;
//public MyStruct AStruct;
public MyStruct AStruct;
public MyEnum AEnum = MyEnum.Maybe;
public Camera Camera;
@@ -693,8 +693,7 @@ namespace GlitchyEditor.EditWindows
field.SetData(value);
case .Enum:
// TODO!
ShowEnumSelector(field, fieldName, scriptClass);
//case .String:
// TODO!
@@ -716,6 +715,33 @@ namespace GlitchyEditor.EditWindows
}
}
private static void ShowEnumSelector(ScriptFieldInstance* field, StringView fieldName, ScriptClass scriptClass)
{
ScriptField scriptField = scriptClass.Fields[fieldName];
SharpEnum enumType = scriptField.SharpType as SharpEnum;
Log.EngineLogger.Assert(enumType != null, "Enum must have a SharpEnum!");
// Simply get Enum as a uint64
var fieldValue = field.GetData<uint64>();
StringView valueName = "<Invalid Value>";
if (enumType.Values.TryGetValue(fieldValue, let enumValue))
valueName = enumValue.Name;
if (ImGui.BeginCombo(fieldName.Ptr, valueName.Ptr))
{
for (let (entryValue, enumEntry) in enumType.Values)
{
if (ImGui.Selectable(enumEntry.Name.Ptr, fieldValue == entryValue))
field.SetData(entryValue);
}
ImGui.EndCombo();
}
}
private static Entity? ShowEntitySelector()
{
static char8[128] entitySearch = .();