using ImGuiNET; using MoonTools.ECS; using Nerfed.Editor.Components; #if DEBUG namespace Nerfed.Editor.Systems { // Window that draws entities. internal class EditorInspectorWindow : MoonTools.ECS.DebugSystem { private readonly Filter selectedEntityFilter; public EditorInspectorWindow(World world) : base(world) { selectedEntityFilter = FilterBuilder.Include().Build(); } public override void Update(TimeSpan delta) { ImGui.Begin("Inspector"); foreach (Entity entity in selectedEntityFilter.Entities) { DrawEntityComponents(entity); } ImGui.End(); } private void DrawEntityComponents(Entity entity) { World.ComponentTypeEnumerator components = World.Debug_GetAllComponentTypes(entity); foreach (Type type in components) { ImGui.Text(type.Name); } ImGui.Separator(); // TODO: explore something without reflection. // Maybe generate some look up dictionary> for 'custom editors'. // Look into serializing of entities and components. foreach (Type component in components) { System.Reflection.MethodInfo getMethodInfo = typeof(World).GetMethod("Get"); System.Reflection.MethodInfo getComponentMethod = getMethodInfo.MakeGenericMethod(component); object result = getComponentMethod.Invoke(World, [entity]); // process here ImGui.Text(result.ToString()); } } } } #endif