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 < 256; 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(); } }