You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.7 KiB
91 lines
2.7 KiB
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<Game>(); |
|
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<Windowing>(); |
|
|
|
game.Set(new Canvas(window.CreateOpenGL())); |
|
game.Set(new GameWindow(window)); |
|
|
|
TextureManager.Initialize(universe); |
|
|
|
universe.RegisterComponent<Mesh>(); |
|
universe.RegisterComponent<gaemstone.Client.Texture>(); |
|
universe.RegisterComponent<TextureCoords4>(); |
|
|
|
universe.RegisterModule<Input>(); |
|
universe.RegisterModule<CameraModule>(); |
|
universe.RegisterModule<Renderer>(); |
|
|
|
game.Set(new RawInput()); |
|
|
|
// TODO: Find a way to automatically register this chunk storage. |
|
universe.RegisterComponent<ChunkPaletteStorage<ecs_entity_t>>(); |
|
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<ecs_entity_t>(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();
|
|
|