diff options
Diffstat (limited to 'src/world.c')
-rw-r--r-- | src/world.c | 60 |
1 files changed, 44 insertions, 16 deletions
diff --git a/src/world.c b/src/world.c index fd6fc19..5db0130 100644 --- a/src/world.c +++ b/src/world.c @@ -379,49 +379,77 @@ Seed generateWorldItems(World* world, Seed seed, int start, int end) return seed; } -Seed generatePond(World* world, Seed seed) +Seed generatePond(World* world, Color* heightmap, WorldUID id, Seed seed) { // Get position. int distanceRange = PLACE_POND_MAX_DISTANCE * 2; Vector3 position = Vector3Scale(world->size, 0.5); - position.x += FT_RANDOM16(seed) % distanceRange - PLACE_POND_MAX_DISTANCE; - position.z += FT_RANDOM16(seed) % distanceRange - PLACE_POND_MAX_DISTANCE; + position.x += FT_RANDOM16(seed) % distanceRange - PLACE_POND_MAX_DISTANCE; + position.z += FT_RANDOM16(seed) % distanceRange - PLACE_POND_MAX_DISTANCE; + + Entity pond = createEntity(POND, position); + placeEntityOnGround(&pond, world); + world->entities[id] = pond; return seed; } +Texture generateGroundTexture() +{ + Image image = GenImageWhiteNoise(WORLD_IMAGE_WIDTH, WORLD_IMAGE_HEIGHT, + WORLD_GROUND_IMAGE_NOISE); + ImageBlurGaussian(&image, WORLD_GROUND_BLUR); + ImageColorContrast(&image, WORLD_GROUND_CONTRAST); + ImageColorTint(&image, WORLD_GROUND_COLOR); + + Texture texture = LoadTextureFromImage(image); + UnloadImage(image); + + return texture; +} + World createWorld(Seed seed) { World world; world.size = WORLD_SIZE; - // Heightmap. + // Heightmap image. int offsetX = FT_RANDOM16(seed); int offsetY = FT_RANDOM16(seed); Image image = GenImagePerlinNoise(WORLD_IMAGE_WIDTH, WORLD_IMAGE_HEIGHT, offsetX, offsetY, WORLD_IMAGE_SCALE); + Color* colors = LoadImageColors(image); + UnloadImage(image); + // Places. + WorldUID placeId = 0; + seed = generatePond(&world, colors, placeId, seed); + + // Heightmap model. + image = (Image){ + .data = colors, + .width = WORLD_IMAGE_WIDTH, + .height = WORLD_IMAGE_WIDTH, + .format = PIXELFORMAT_UNCOMPRESSED_R8G8B8A8, + .mipmaps = 1 + }; + Mesh mesh = GenMeshHeightmap(image, world.size); world.heightmap = LoadModelFromMesh(mesh); world.heightmapTexture = LoadTextureFromImage(image); UnloadImage(image); // Model texture. - image = GenImageWhiteNoise(WORLD_IMAGE_WIDTH, WORLD_IMAGE_HEIGHT, - WORLD_GROUND_IMAGE_NOISE); - ImageBlurGaussian(&image, WORLD_GROUND_BLUR); - ImageColorContrast(&image, WORLD_GROUND_CONTRAST); - ImageColorTint(&image, WORLD_GROUND_COLOR); - world.heightmap.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = - LoadTextureFromImage(image); - UnloadImage(image); + generateGroundTexture(); - // Places. - generatePond(&world, seed); + int start = placeId + 1; + int end = WORLD_PLANT_COUNT + start; + seed = generateWorldPlants(&world, seed, start, end); - seed = generateWorldPlants(&world, seed, 0, WORLD_PLANT_COUNT); - seed = generateWorldItems(&world, seed, WORLD_PLANT_COUNT, WORLD_ENTITY_MAX); + start = end; + end = WORLD_ENTITY_MAX; + seed = generateWorldItems(&world, seed, start, end); // Generate BVH. double currentTime = GetTime(); |