[Add] Fractal noise and random seed to world gen.
This commit is contained in:
parent
5d045e2fa7
commit
5678b0f0c3
@ -1,21 +1,29 @@
|
|||||||
|
#include <chrono>
|
||||||
|
|
||||||
#include "world.h"
|
#include "world.h"
|
||||||
#include "bettola/game/chunk.h"
|
#include "bettola/game/chunk.h"
|
||||||
#include "bettola/noise/fast_noise_lite.h"
|
#include "bettola/noise/fast_noise_lite.h"
|
||||||
|
|
||||||
World::World(void) {
|
World::World(void) {
|
||||||
m_noise.SetNoiseType(FastNoiseLite::NoiseType_Perlin);
|
_noise.SetSeed(std::chrono::high_resolution_clock::now().time_since_epoch().count());
|
||||||
m_noise.SetFrequency(0.02f);
|
_noise.SetNoiseType(FastNoiseLite::NoiseType_Perlin);
|
||||||
|
_noise.SetFrequency(0.02f);
|
||||||
|
|
||||||
|
_noise.SetFractalType(FastNoiseLite::FractalType_FBm);
|
||||||
|
_noise.SetFractalOctaves(5);
|
||||||
|
_noise.SetFractalLacunarity(2.0f);
|
||||||
|
_noise.SetFractalGain(0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
BettolaLib::Game::Chunk& World::get_chunk(int x, int z) {
|
BettolaLib::Game::Chunk& World::get_chunk(int x, int z) {
|
||||||
ChunkPos pos = {x, z};
|
ChunkPos pos = {x, z};
|
||||||
auto it = m_chunks.find(pos);
|
auto it = _chunks.find(pos);
|
||||||
if(it != m_chunks.end()) {
|
if(it != _chunks.end()) {
|
||||||
return it->second;
|
return it->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If chunk doesn't exist, generate it. */
|
/* If chunk doesn't exist, generate it. */
|
||||||
BettolaLib::Game::Chunk& new_chunk = m_chunks[pos];
|
BettolaLib::Game::Chunk& new_chunk = _chunks[pos];
|
||||||
_generate_chunk(new_chunk, x, z);
|
_generate_chunk(new_chunk, x, z);
|
||||||
return new_chunk;
|
return new_chunk;
|
||||||
}
|
}
|
||||||
@ -27,10 +35,10 @@ void World::_generate_chunk(BettolaLib::Game::Chunk& chunk, int chunk_x, int chu
|
|||||||
float world_x = (float)(chunk_x * (BettolaLib::Game::CHUNK_WIDTH - 1)
|
float world_x = (float)(chunk_x * (BettolaLib::Game::CHUNK_WIDTH - 1)
|
||||||
+ (x - BettolaLib::Game::CHUNK_BORDER_SIZE));
|
+ (x - BettolaLib::Game::CHUNK_BORDER_SIZE));
|
||||||
float world_z = (float)(chunk_z * (BettolaLib::Game::CHUNK_HEIGHT - 1)
|
float world_z = (float)(chunk_z * (BettolaLib::Game::CHUNK_HEIGHT - 1)
|
||||||
+ (z + BettolaLib::Game::CHUNK_BORDER_SIZE));
|
+ (z - BettolaLib::Game::CHUNK_BORDER_SIZE));
|
||||||
|
|
||||||
/* generate noise value. */
|
/* generate noise value. */
|
||||||
chunk.heightmap[z * BettolaLib::Game::CHUNK_DATA_WIDTH + x] = m_noise.GetNoise(world_x, world_z);
|
chunk.heightmap[z * BettolaLib::Game::CHUNK_DATA_WIDTH + x] = _noise.GetNoise(world_x, world_z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,7 +23,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
void _generate_chunk(BettolaLib::Game::Chunk& chunk, int chunk_x, int chunk_z);
|
void _generate_chunk(BettolaLib::Game::Chunk& chunk, int chunk_x, int chunk_z);
|
||||||
|
|
||||||
FastNoiseLite m_noise;
|
FastNoiseLite _noise;
|
||||||
std::map<ChunkPos, BettolaLib::Game::Chunk> m_chunks;
|
std::map<ChunkPos, BettolaLib::Game::Chunk> _chunks;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user