diff --git a/main.c b/main.c index 412e969..1f265e7 100644 --- a/main.c +++ b/main.c @@ -17,8 +17,13 @@ */ #include "raylib.h" +#include #include +#define MIN(a,b) (((a)<(b))?(a):(b)) +#define MAX(a,b) (((a)>(b))?(a):(b)) +#define CLAMP(val, min, max) MIN(max, MAX(min, val)) + int main(void) { const int screenWidth = 800; const int screenHeight = 450; @@ -363,8 +368,22 @@ int main(void) { LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_thin_fall.obj"), LoadModel("assets/kenney_nature-kit/Models/OBJ format/tree_thin.obj"), }; - + +#define MAP_SIZE 64 Vector3 position = {0}; + Image map = GenImagePerlinNoise(MAP_SIZE, MAP_SIZE, 0, 0, 1.f); + Texture2D map_texture = LoadTextureFromImage(map); + + for (size_t i = 0; i < MAP_SIZE * MAP_SIZE; i++) { + Color c = GetImageColor(map, i % MAP_SIZE, i / MAP_SIZE); + ImageDrawPixel(&map, i % MAP_SIZE, i / MAP_SIZE, (Color) { + .r = MAX(0, c.r - 64) / 32, + .g = MAX(0, c.r - 64) / 32, + .b = MAX(0, c.r - 64) / 32, + .a = 255 + }); + } + Color *map_data = LoadImageColors(map); // SetTargetFPS(60); while (!WindowShouldClose()) { @@ -373,12 +392,33 @@ int main(void) { BeginDrawing(); ClearBackground(RAYWHITE); BeginMode3D(camera); - for (size_t i = 0; i < sizeof(models) / sizeof(models[0]); ++i) { - DrawModel(models[i], (Vector3){2.f * (i / 19) - 19.f , 0.f, 2.f * (i % 19) - 19.f }, 1.0f, WHITE); + for (int i = 0; i < MAP_SIZE * MAP_SIZE; i++) { + int x = i % MAP_SIZE, y = i / MAP_SIZE; + DrawModel(models[128], + (Vector3){ + .x = MAP_SIZE * (x / (float) MAP_SIZE - 0.5f), + .y = map_data[i].r - 8, //- (map_gradient_magnitude_data[i].g < 2), + .z = MAP_SIZE * (y / (float) MAP_SIZE - 0.5f) + } , 1.f, WHITE); + int gradients[4][2] = {{0,-1},{-1,0},{0,1},{1,0}}; + for (int gradient_i = 0; gradient_i < 4; gradient_i++) { + int dx = CLAMP(x + gradients[gradient_i][0], 0, MAP_SIZE - 1); + int dy = CLAMP(y + gradients[gradient_i][1], 0, MAP_SIZE - 1); + for (int height = map_data[i].r; height < map_data[dy * MAP_SIZE + dx].r; height++) { + DrawModelEx(models[76], + (Vector3){ + .x = MAP_SIZE * (x / (float) MAP_SIZE - 0.5f), + .y = height - 8, + .z = MAP_SIZE * (y / (float) MAP_SIZE - 0.5f) + }, + (Vector3) {0, 1, 0}, gradient_i * 90.f, (Vector3) {1,1,1}, WHITE); + } + } } DrawGrid(20, 10.0f); EndMode3D(); DrawText("Congrats! You created your first window!", 190, 200, 20, LIGHTGRAY); + DrawTexture(map_texture, 0, 0, WHITE); EndDrawing(); }