using System; using Engine.Core; using Engine.Core.Debug; using Engine.Core.Serialization; using Engine.Integration.SDL3; using Engine.Serializers.Yaml; using Engine.Systems.Network; using Engine.Systems.Time; Universe universe = new(); ISerializer serializer = new YamlSerializer(); ILogger logger = new RotatingFileLogger("Logs", "MyUniverse"); #if DEBUG logger = new LoggerWrapper(logger, new ConsoleLogger()); #endif universe.InstantiateUniverseObject().SetUniverseObject("Logger") .BehaviourController.AddBehaviour().Logger = ILogger.Shared = logger; IUniverseObject desktopParent = universe.InstantiateUniverseObject().SetUniverseObject("Desktop"); // universe.InstantiateUniverseObject().SetUniverseObject("Desktop Inputs", desktopParent) // .BehaviourController.AddBehaviour(); universe.InstantiateUniverseObject().SetUniverseObject("Visual Managers", desktopParent) .BehaviourController.AddBehaviour(); /* For Networking LiteNetLibClient client = universe.InstantiateUniverseObject().SetUniverseObject("Client").BehaviourController.AddBehaviour(); client.BehaviourController.AddBehaviour(); universe.OnPreUpdate.AddOneTimeListener((_, _) => client.Connect("localhost", 8888)); */ MyUniverse.Shared.UniverseSource.ApplyCore(universe); MyUniverse.Shared.UniverseSource.ApplyUniverse(universe); desktopParent.AddChild(universe.InstantiateUniverseObject().SetUniverseObject("Triangle Batcher").BehaviourController.AddBehaviour().UniverseObject); Sdl3Window window = Engine.Core.Factory.BehaviourFactory.Instantiate(); window.Title = "MyUniverse"; window.Size = new(800, 600); window.Mode = WindowMode.BorderlessWindowed; IUniverseObject windowUO = universe.InstantiateUniverseObject().SetUniverseObject("SDL3 Window", desktopParent); windowUO.BehaviourController.AddBehaviour(window); // Testing Start TickerStopwatch tickerStopwatch = windowUO.BehaviourController.AddBehaviour(); tickerStopwatch.Period = 5f; tickerStopwatch.OnTick.AddListener(sender => { if (window.IsInitialized) windowUO.BehaviourController.RemoveBehaviour(window); else windowUO.BehaviourController.AddBehaviour(window); }); tickerStopwatch.Start(); // Testing End universe.Initialize(); // window.OnRender.AddListener((sender, args) => universe.Draw()); // window.OnUpdate.AddListener((sender, args) => // { // timeSinceStart += args.TimeSpan; // universe.Update(new(timeSinceStart, args.TimeSpan)); // }); // window.Run(); DateTime lastRun = DateTime.UtcNow; TimeSpan timeSinceStart = new(0); while (true) { DateTime now = DateTime.UtcNow; TimeSpan updateTimeSpan = now - lastRun; timeSinceStart += updateTimeSpan; universe.Update(new(timeSinceStart, updateTimeSpan)); lastRun = now; System.Threading.Thread.Sleep(1); } // DateTime lastRun = DateTime.UtcNow; // TimeSpan interval = new(0, 0, 0, 0, 16); // TimeSpan timeSinceStart = new(0); // universe.Initialize(); // while (true) // { // if (lastRun + interval <= DateTime.UtcNow) // { // lastRun += interval; // timeSinceStart += interval; // universe.Update(new(timeSinceStart, interval)); // } // Thread.Sleep(1); // }