using MoonTools.ECS; using Nerfed.Editor.Systems; using Nerfed.Runtime; using Nerfed.Runtime.Components; using Nerfed.Runtime.Systems; using Nerfed.Runtime.Util; using System.Numerics; namespace Nerfed.Editor; internal class Program { private static readonly World world = new World(); private static List systems = new List(); public static List editorSystems = new List(); private static void Main(string[] args) { Engine.OnInitialize += HandleOnInitialize; Engine.OnUpdate += HandleOnUpdate; Engine.OnRender += HandleOnRender; Engine.OnQuit += HandleOnQuit; Engine.Run(args); } private static void HandleOnInitialize() { //systems.Add(new ParentSystem(world)); systems.Add(new LocalToWorldSystem(world)); editorSystems.Add(new EditorProfilerWindow(world)); // editorSystems.Add(new EditorHierarchyWindow(world)); #if DEBUG editorSystems.Add(new EditorInspectorWindow(world)); #endif // Entity ent1 = world.CreateEntity("parent"); // world.Set(ent1, new Root()); // world.Set(ent1, new LocalTransform(new Vector3(1, 0, 0), Quaternion.Identity, Vector3.One)); // // Entity ent2 = world.CreateEntity("child"); // world.Set(ent2, new LocalTransform(new Vector3(0, 1, 0), Quaternion.Identity, Vector3.One)); // Transform.SetParent(world, ent2, ent1); // // Entity ent3 = world.CreateEntity("entity3"); // world.Set(ent3, new Root()); // Transform.SetParent(world, ent3, ent2); // // Entity ent4 = world.CreateEntity("entity4"); // world.Set(ent4, new Root()); // // Entity ent5 = world.CreateBaseEntity("entity5"); for (int i = 0; i < 1000000; i++) { Entity newEnt = world.CreateBaseEntity(); world.Set(newEnt, new LocalTransform(new Vector3(i, i, i), Quaternion.Identity, Vector3.One)); // Entity parent = newEnt; // for (int j = 0; j < 2; j++) { // Entity newChildEnt = world.CreateEntity(); // world.Set(newChildEnt, new LocalTransform(new Vector3(i + j * i, i - j * i, j - i * i), Quaternion.Identity, Vector3.One)); // Transform.SetParent(world, newChildEnt, parent); // parent = newChildEnt; // } } // Open project. // Setip EditorGui. EditorGui.Initialize(); } private static void HandleOnUpdate() { foreach (MoonTools.ECS.System system in systems) { using ProfilerScope scope = new(system.GetType().Name); system.Update(Engine.Timestep); } using (new ProfilerScope("EditorGui.Update")) { // Editor Update. EditorGui.Update(); } // Try Catch UserCode Update. using (new ProfilerScope("world.FinishUpdate")) { world.FinishUpdate(); } } private static void HandleOnRender() { using (new ProfilerScope("EditorGui.Render")) { EditorGui.Render(); } } private static void HandleOnQuit() { EditorGui.Quit(); } }