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