diff --git a/PlayBark.csproj b/PlayBark.csproj index 8ae31a4..7d42e75 100644 --- a/PlayBark.csproj +++ b/PlayBark.csproj @@ -4,6 +4,7 @@ Exe net8.0 enable + true enable diff --git a/Program.cs b/Program.cs index b87b1e4..0587c20 100644 --- a/Program.cs +++ b/Program.cs @@ -5,7 +5,7 @@ /// /// The name of the configuration file (defaults to "config.toml"). /// A Config object populated with values from the file, or a default Config instance if the file is not found. -static Config ReadConfig(string file) +static Config Settings(string file) { var cfgPath = Path.Combine(Tracer.AppDirectory, file); @@ -28,35 +28,55 @@ static Config ReadConfig(string file) return model; } -void Init(int screenWidth, int screenHeight, int fps) +// Update and Draw +unsafe int Game() { + var config = Settings("config.toml"); + InitWindow(config.Width, config.Height, $"PlayBark"); + var pos = new Vector3(0.2f, 0.4f, 0.2f); var target = new Vector3(0.0f, 0.0f, 0.0f); var up = new Vector3(0.0f, 1.0f, 0.0f); + var camera = World3D.Camera(pos, target, up, CameraProjection.Perspective); - InitWindow(screenWidth, screenHeight, $"PlayBark"); - World3D.InitCamera(pos, target, up, CameraProjection.Perspective); - SetTargetFPS(fps); -} + var imMap = LoadImage("resources/cubicmap.png"); + var cubicMap = LoadTextureFromImage(imMap); + var mesh = GenMeshCubicmap(imMap, new Vector3(1.0f, 1.0f, 1.0f)); + var model = LoadModelFromMesh(mesh); -int GameLoop() -{ - var config = ReadConfig("config.toml"); - Init(config.Width, config.Height, 60); + var texture = LoadTexture("resources/cubicmap_atlas.png"); + // Set map diffuse texture + SetMaterialTexture(ref model, 0, MaterialMapIndex.Albedo, ref texture); + + // Get image map data to be used for collission + var mapPixels = LoadImageColors(imMap); + UnloadImage(imMap); + + SetTargetFPS(60); while (!WindowShouldClose()) { BeginDrawing(); ClearBackground(Color.White); + var oldCamPos = camera.Position; + UpdateCamera(ref camera, CameraMode.FirstPerson); + DrawFPS(10, 10); EndDrawing(); } + UnloadImageColors(mapPixels); + + UnloadTexture(cubicMap); + UnloadTexture(texture); + UnloadModel(model); + CloseWindow(); return 0; } -GameLoop(); +// Entry point +Game(); diff --git a/World3D.cs b/World3D.cs index 7932cd9..abf4a9a 100644 --- a/World3D.cs +++ b/World3D.cs @@ -3,9 +3,9 @@ namespace PlayBark; internal static class World3D { - public static Camera3D InitCamera(Vector3 pos, Vector3 target, Vector3 up, CameraProjection projection) + public static Camera3D Camera(Vector3 pos, Vector3 target, Vector3 up, CameraProjection projection) { - Camera3D camera = new(); + var camera = new Camera3D(); camera.Position = pos; camera.Target = target; camera.Up = up; diff --git a/resources/cubicmap_atlas.png b/resources/cubicmap_atlas.png new file mode 100644 index 0000000..9fc404a Binary files /dev/null and b/resources/cubicmap_atlas.png differ