diff options
Diffstat (limited to 'src/game')
| -rw-r--r-- | src/game/assets.cpp | 10 | ||||
| -rw-r--r-- | src/game/game.cpp | 8 | ||||
| -rw-r--r-- | src/game/game.hpp | 29 | ||||
| -rw-r--r-- | src/game/worldgen.cpp | 29 | 
4 files changed, 63 insertions, 13 deletions
diff --git a/src/game/assets.cpp b/src/game/assets.cpp index 32eff81..c20d77b 100644 --- a/src/game/assets.cpp +++ b/src/game/assets.cpp @@ -1,6 +1,6 @@  #include "game.hpp" -namespace assets { +namespace game::assets {  human_assets_t human;  sf::Texture tile_dirt; @@ -13,8 +13,10 @@ void load(void)  	human.legs_idle.load("assets/units/human/legs_idle", 2, 2);  	human.legs_walking.load("assets/units/human/legs_walking", 2, 2); -	tile_dirt.loadFromFile("assets/tiles/dirt.png"); -	tile_wall.loadFromFile("assets/tiles/wall.png"); +	world::register_tile(TILE_DIRT, 0); +	world::register_tile(TILE_WALL, 1); +	render::register_tile(TILE_DIRT, "assets/tiles/dirt.png"); +	render::register_tile(TILE_WALL, "assets/tiles/wall.png");  } -} // namespace assets +} // namespace game::assets diff --git a/src/game/game.cpp b/src/game/game.cpp index eb3966d..385a940 100644 --- a/src/game/game.cpp +++ b/src/game/game.cpp @@ -216,6 +216,8 @@ void state_t::start(void)  {  	human_t *human; +	world.generator = worldgen; +  	human = new human_t;  	human->place(&world, v2f_t(0.5, 0.5));  	units.insert(human); @@ -267,4 +269,10 @@ void state_t::tick(double now_, double dt_)  		unit->keep_moving(now, dt);  } +bool load_assets(void) +{ +	assets::load(); +	return true; +} +  } //namespace game diff --git a/src/game/game.hpp b/src/game/game.hpp index 3e10bbb..5da6370 100644 --- a/src/game/game.hpp +++ b/src/game/game.hpp @@ -1,14 +1,25 @@  #include "../common.hpp" -namespace assets { -	typedef struct { -		render::oriented_sprite_4M_t head_idle, body_idle; -		render::oriented_sprite_4M2_t legs_idle, legs_walking; -	} human_assets_t; +namespace game { +	enum { +		TILE_NONE, +		TILE_DIRT, +		TILE_WALL +	}; -	extern human_assets_t human; -	extern sf::Texture tile_dirt; -	extern sf::Texture tile_wall; +	void worldgen(world::tile_t *tile, world::tile_index_t x, +	              procgen::perlin_noise_t *perlin); -	void load(void); +	namespace assets { +		typedef struct { +			render::oriented_sprite_4M_t head_idle, body_idle; +			render::oriented_sprite_4M2_t legs_idle, legs_walking; +		} human_assets_t; + +		extern human_assets_t human; +		extern sf::Texture tile_dirt; +		extern sf::Texture tile_wall; + +		void load(void); +	}  }; diff --git a/src/game/worldgen.cpp b/src/game/worldgen.cpp new file mode 100644 index 0000000..573d03b --- /dev/null +++ b/src/game/worldgen.cpp @@ -0,0 +1,29 @@ +#include "game.hpp" + +namespace game { + +void worldgen(world::tile_t *tile, world::tile_index_t x, +              procgen::perlin_noise_t *perlin) +{ +	float waterlevel, height; + +	waterlevel = perlin->get(x, 1000.0f) * 0.3f + +	             perlin->get(x, 500.0f) * 0.1f; + +	height = perlin->get(x, 40.0f) * 0.6f + +	         perlin->get(x, 20.0f) * 0.25f + +	         perlin->get(x, 10.0f) * 0.2f + +	         perlin->get(x, 4.0f) * 0.1f + +	         perlin->get(x, 1.0f) * 0.05f; + +	if (height < waterlevel) +		tile->type = TILE_WALL; +	else if (height < waterlevel + 0.1) +		tile->type = TILE_DIRT; +	else if (perlin->get(x, 3.0f) > 0.0f) +		tile->type = TILE_WALL; +	else +		tile->type = TILE_DIRT; +} + +}  | 
