using System; using gaemstone; using gaemstone.Bloxel; using gaemstone.Client; using gaemstone.ECS; using gaemstone.Utility; using Silk.NET.Maths; using Silk.NET.OpenGL; using Silk.NET.Windowing; using static flecs_hub.flecs; using static gaemstone.Client.CameraModule; using static gaemstone.Client.Input; using static gaemstone.Client.Windowing; var universe = new Universe(); var game = universe.Lookup(); Resources.ResourceAssembly = typeof(Program).Assembly; var window = Window.Create(WindowOptions.Default with { Title = "gæmstone", Size = new(1280, 720), FramesPerSecond = 60.0, PreferredDepthBufferBits = 24, }); window.Initialize(); window.Center(); universe.RegisterModule(); game.Set(new Canvas(window.CreateOpenGL())); game.Set(new GameWindow(window)); TextureManager.Initialize(universe); universe.RegisterComponent(); universe.RegisterComponent(); universe.RegisterComponent(); universe.RegisterModule(); universe.RegisterModule(); universe.RegisterModule(); game.Set(new RawInput()); // TODO: Find a way to automatically register this chunk storage. universe.RegisterComponent>(); universe.RegisterAll(typeof(Chunk).Assembly); universe.Create("MainCamera") .Set(Camera.Default3D) .Set((GlobalTransform)Matrix4X4.CreateTranslation(0.0F, 2.0F, 0.0F)) .Set(new CameraController { MouseSensitivity = 12.0F }); var heartMesh = MeshManager.Load(universe, "heart.glb"); var swordMesh = MeshManager.Load(universe, "sword.glb"); var rnd = new Random(); for (var x = -12; x <= 12; x++) for (var z = -12; z <= 12; z++) { var position = Matrix4X4.CreateTranslation(x * 2, 0.0F, z * 2); var rotation = Matrix4X4.CreateRotationY(rnd.NextFloat(MathF.PI * 2)); universe.Create() .Set((GlobalTransform)(rotation * position)) .Set(rnd.Pick(heartMesh, swordMesh)); } var texture = TextureManager.Load(universe, "terrain.png"); var stone = universe.Create("Stone").Set(TextureCoords4.FromGrid(4, 4, 1, 0)); var dirt = universe.Create("Dirt" ).Set(TextureCoords4.FromGrid(4, 4, 2, 0)); var grass = universe.Create("Grass").Set(TextureCoords4.FromGrid(4, 4, 3, 0)); var sizeH = 4; var sizeY = 2; for (var cx = -sizeH; cx < sizeH; cx++) for (var cy = -sizeY; cy < sizeY; cy++) for (var cz = -sizeH; cz < sizeH; cz++) { var pos = new ChunkPos(cx, cy - 2, cz); var storage = new ChunkPaletteStorage(default); universe.Create() .Set((GlobalTransform)Matrix4X4.CreateTranslation(pos.GetOrigin())) .Set(new Chunk(pos)) .Set(storage) .Set(texture); } window.Render += (delta) => { if (!universe.Progress(TimeSpan.FromSeconds(delta))) window.Close(); }; window.Run();