diff options
Diffstat (limited to 'src/world.c')
-rw-r--r-- | src/world.c | 42 |
1 files changed, 28 insertions, 14 deletions
diff --git a/src/world.c b/src/world.c index 6b8d60b..c2159d8 100644 --- a/src/world.c +++ b/src/world.c @@ -379,33 +379,46 @@ Seed generateWorldItems(World* world, Seed seed) return seed; } +Seed generatePond(World* world, Seed seed) +{ + Vector3 position; + return seed; +} + World createWorld(Seed seed) { World world; world.size = WORLD_SIZE; - // Heightmap image. + // Heightmap. int offsetX = FT_RANDOM16(seed); int offsetY = FT_RANDOM16(seed); Image image = GenImagePerlinNoise(WORLD_IMAGE_WIDTH, WORLD_IMAGE_HEIGHT, offsetX, offsetY, WORLD_IMAGE_SCALE); - // Heightmap. Mesh mesh = GenMeshHeightmap(image, world.size); world.heightmap = LoadModelFromMesh(mesh); + world.heightmapTexture = LoadTextureFromImage(image); + UnloadImage(image); - // Texture. - ImageColorTint(&image, WORLD_GROUND_COLOR); + // Model texture. + image = GenImageWhiteNoise(WORLD_IMAGE_WIDTH, WORLD_IMAGE_HEIGHT, + WORLD_GROUND_IMAGE_NOISE); ImageBlurGaussian(&image, WORLD_GROUND_BLUR); - world.texture = LoadTextureFromImage(image); + ImageColorContrast(&image, WORLD_GROUND_CONTRAST); + ImageColorTint(&image, WORLD_GROUND_COLOR); + world.heightmap.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = - world.texture; - + LoadTextureFromImage(image); UnloadImage(image); + // Places. + generatePond(&world, seed); + seed = generateWorldPlants(&world, seed); seed = generateWorldItems(&world, seed); + // Generate BVH. double currentTime = GetTime(); buildWorldBVH(&world); @@ -459,7 +472,6 @@ void updateWorld(World* world, Game* game) void freeWorldBVH(BVHNode bvh) { - // Play it safe to prevent memory leaks. for (int index = 0; index < BVH_MAX_BRANCH_COUNT; ++index) { if (bvh.branches[index] != NULL) @@ -472,15 +484,17 @@ void freeWorldBVH(BVHNode bvh) void freeWorld(World world) { - UnloadTexture(world.texture); + UnloadTexture(world.heightmapTexture); + UnloadTexture( + world.heightmap.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture); UnloadModel(world.heightmap); freeWorldBVH(world.bvh); } float getWorldHeightAtLocation(const World* world, float x, float y) { - float mapX = (float)world->texture.width / world->size.x * x; - float mapY = (float)world->texture.height / world->size.z * y; + float mapX = (float)WORLD_IMAGE_WIDTH / world->size.x * x; + float mapY = (float)WORLD_IMAGE_HEIGHT / world->size.z * y; for (int yOffset = -1; yOffset < 2; ++yOffset) { @@ -489,13 +503,13 @@ float getWorldHeightAtLocation(const World* world, float x, float y) int pixelX = mapX + xOffset; int pixelY = mapY + yOffset; - if (pixelX < 0 || pixelX >= world->texture.width || - pixelY < 0 || pixelY >= world->texture.height) + if (pixelX < 0 || pixelX >= WORLD_IMAGE_WIDTH || + pixelY < 0 || pixelY >= WORLD_IMAGE_HEIGHT) { continue; } - int verticeStart = (pixelY * (world->texture.width - 1) + pixelX) * 18; + int verticeStart = (pixelY * (WORLD_IMAGE_WIDTH - 1) + pixelX) * 18; float* vertices = &world->heightmap.meshes[0].vertices[verticeStart]; // Cast to triangles at pixel. Really hacky indeed. |