Files
Engine-Template/Platforms/Desktop/Program.cs

107 lines
3.3 KiB
C#

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<LoggerContainer>().Logger = ILogger.Shared = logger;
IUniverseObject desktopParent = universe.InstantiateUniverseObject().SetUniverseObject("Desktop");
// universe.InstantiateUniverseObject().SetUniverseObject("Desktop Inputs", desktopParent)
// .BehaviourController.AddBehaviour<DesktopInputs>();
universe.InstantiateUniverseObject().SetUniverseObject("Visual Managers", desktopParent)
.BehaviourController.AddBehaviour<DrawManager>();
/* For Networking
LiteNetLibClient client = universe.InstantiateUniverseObject().SetUniverseObject("Client").BehaviourController.AddBehaviour<LiteNetLibClient>();
client.BehaviourController.AddBehaviour<NetworkManager>();
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<Engine.Systems.Graphics.TriangleBatcher>().UniverseObject);
Sdl3Window window = Engine.Core.Factory.BehaviourFactory.Instantiate<Sdl3Window>();
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>();
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);
// }