aboutsummaryrefslogtreecommitdiffstats
path: root/src/world.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/world.c')
-rw-r--r--src/world.c60
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();