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; using MyUniverse.Shared.Behaviours; 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.Windowed; Sdl3Window window2 = Engine.Core.Factory.BehaviourFactory.Instantiate(); window2.Title = "MyUniverse 2"; window2.Size = new(400, 300); window2.Mode = WindowMode.Windowed; universe.InstantiateUniverseObject().SetUniverseObject("SDL3 Manager", desktopParent) .BehaviourController.AddBehaviour() .BehaviourController.AddBehaviour() .BehaviourController.AddBehaviour(); IUniverseObject windowUO = universe.InstantiateUniverseObject().SetUniverseObject("SDL3 Window", desktopParent); windowUO.BehaviourController.AddBehaviour(); windowUO.BehaviourController.AddBehaviour(Shape2D.Square, new ColorRGB(0, 0, 128)); windowUO.BehaviourController.AddBehaviour(window); windowUO.BehaviourController.AddBehaviour().Zoom = 20f; windowUO.BehaviourController.AddBehaviour(); windowUO.BehaviourController.AddBehaviour(); IUniverseObject windowUO2 = universe.InstantiateUniverseObject().SetUniverseObject("SDL3 Window 2", desktopParent); windowUO2.BehaviourController.AddBehaviour().Rotation = 45f; windowUO2.BehaviourController.AddBehaviour(Shape2D.Square, new ColorRGB(128, 0, 0)); windowUO2.BehaviourController.AddBehaviour(window2); windowUO2.BehaviourController.AddBehaviour().Zoom = 20f; windowUO2.BehaviourController.AddBehaviour(); windowUO2.BehaviourController.AddBehaviour(); // 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(); // universe.InstantiateUniverseObject() // .SetUniverseObject("Square") // .BehaviourController.AddBehaviour() // .BehaviourController.AddBehaviour(Shape2D.Square, new ColorRGB(255, 255, 0)); // 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)); universe.Draw(); 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); // }