diff --git a/PlayBark.csproj b/PlayBark.csproj
index 7d42e75..8ae31a4 100644
--- a/PlayBark.csproj
+++ b/PlayBark.csproj
@@ -4,7 +4,6 @@
Exe
net8.0
enable
- true
enable
diff --git a/Program.cs b/Program.cs
index dc73294..b87b1e4 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 Settings(string file)
+static Config ReadConfig(string file)
{
var cfgPath = Path.Combine(Tracer.AppDirectory, file);
@@ -28,116 +28,35 @@ static Config Settings(string file)
return model;
}
-// Update and Draw
-unsafe int Game()
+void Init(int screenWidth, int screenHeight, int fps)
{
- 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);
- var imMap = LoadImage("resources/cubicmap.png");
- var cubicmap = LoadTextureFromImage(imMap);
- var model = World3D.CubicMap(imMap);
+ InitWindow(screenWidth, screenHeight, $"PlayBark");
+ World3D.InitCamera(pos, target, up, CameraProjection.Perspective);
+ SetTargetFPS(fps);
+}
- var texture = LoadTexture("resources/cubicmap_atlas.png");
-
- // Set map diffuse texture
- Raylib.SetMaterialTexture(ref model, 0, MaterialMapIndex.Albedo, ref texture);
-
- // Get image map data to be used for collission
- var mapPixels = LoadImageColors(imMap);
- UnloadImage(imMap);
-
- var mapPosition = new Vector3(-16.0f, 0.0f, -8.0f);
- var playerPosition = camera.Position;
-
- SetTargetFPS(60);
+int GameLoop()
+{
+ var config = ReadConfig("config.toml");
+ Init(config.Width, config.Height, 60);
while (!WindowShouldClose())
{
- // Update
- var oldCamPos = camera.Position;
- UpdateCamera(ref camera, CameraMode.FirstPerson);
-
- var playerPos = new Vector2(camera.Position.X, camera.Position.Z);
-
- var playerRadius = 0.1f;
-
- var playerCellX = (int)(playerPos.X - mapPosition.X + 0.5f);
- var playerCellY = (int)(playerPos.Y - mapPosition.Z + 0.5f);
-
- // Out-of-limits security check
- if (playerCellX < 0)
- {
- playerCellX = 0;
- }
- else if (playerCellX >= cubicmap.Width)
- {
- playerCellX = cubicmap.Width - 1;
- }
-
- if (playerCellY < 0)
- {
- playerCellY = 0;
- }
- else if (playerCellY >= cubicmap.Height)
- {
- playerCellY = cubicmap.Height - 1;
- }
-
- for (var y = 0; y < cubicmap.Height; y++)
- {
- for (var x = 0; y < cubicmap.Width; x++)
- {
- var mapPixelsData = mapPixels;
- var rec = new Rectangle(
- mapPosition.X - x - 0.5f + x * 1.0f,
- mapPosition.Y - y - 0.5f + x * 1.0f,
- 1.0f,
- 1.0f
- );
-
- var collision = CheckCollisionCircleRec(playerPos, playerRadius, rec);
- if ((mapPixelsData[y * cubicmap.Width + x].R == 255) && collision)
- {
- // Collision detected, reset camera position
- camera.Position = oldCamPos;
- }
- }
- }
-
BeginDrawing();
- ClearBackground(Color.RayWhite);
- BeginMode3D(camera);
- DrawModel(model, mapPosition, 1.0f, Color.White);
- EndMode3D();
-
- DrawTextureEx(cubicmap, new Vector2(GetScreenWidth() - cubicmap.Width * 4 - 20, 20), 0.0f, 4.0f, Color.White);
- DrawRectangleLines(GetScreenWidth() - cubicmap.Width * 4 - 20, 20, cubicmap.Width * 4, cubicmap.Height * 4, Color.Green);
-
- // Draw player position radar
- DrawRectangle(GetScreenWidth() - cubicmap.Width * 4 - 20 + playerCellX * 4, 20 + playerCellY * 4, 4, 4, Color.Red);
-
+ ClearBackground(Color.White);
DrawFPS(10, 10);
EndDrawing();
}
- UnloadImageColors(mapPixels);
-
- UnloadTexture(cubicmap);
- UnloadTexture(texture);
- UnloadModel(model);
-
CloseWindow();
return 0;
}
-// Entry point
-Game();
+GameLoop();
diff --git a/World3D.cs b/World3D.cs
index be70601..7932cd9 100644
--- a/World3D.cs
+++ b/World3D.cs
@@ -1,22 +1,11 @@
// I hereby waive this project under the public domain - see UNLICENSE for details.
namespace PlayBark;
-///
-/// Provides utilities for creating and managing 3D world elements, including camera setup and map generation.
-///
internal static class World3D
{
- ///
- /// Creates and returns a configured Camera3D instance.
- ///
- /// The position of the camera in 3D space.
- /// The point the camera is looking at.
- /// The up direction for the camera.
- /// The projection type of the camera.
- /// A configured Camera3D instance.
- public static Camera3D Camera(Vector3 pos, Vector3 target, Vector3 up, CameraProjection projection)
+ public static Camera3D InitCamera(Vector3 pos, Vector3 target, Vector3 up, CameraProjection projection)
{
- var camera = new Camera3D();
+ Camera3D camera = new();
camera.Position = pos;
camera.Target = target;
camera.Up = up;
@@ -25,17 +14,4 @@ internal static class World3D
return camera;
}
-
- ///
- /// Generates a 3D cubic map model from a given image map.
- ///
- /// The image used to generate the cubic map.
- /// A Model representing the cubic map.
- public static Model CubicMap(Image imMap)
- {
- var mesh = GenMeshCubicmap(imMap, new Vector3(1.0f, 1.0f, 1.0f));
- var model = LoadModelFromMesh(mesh);
-
- return model;
- }
}
\ No newline at end of file
diff --git a/resources/cubicmap_atlas.png b/resources/cubicmap_atlas.png
deleted file mode 100644
index 9fc404a..0000000
Binary files a/resources/cubicmap_atlas.png and /dev/null differ