diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/common.hpp | 9 | ||||
| -rw-r--r-- | src/game/interface.cpp | 24 | ||||
| -rw-r--r-- | src/render.cpp | 10 | ||||
| -rw-r--r-- | src/text.cpp | 2 | 
4 files changed, 43 insertions, 2 deletions
diff --git a/src/common.hpp b/src/common.hpp index b88434e..7b784bf 100644 --- a/src/common.hpp +++ b/src/common.hpp @@ -10,6 +10,8 @@  #include <SFML/Graphics.hpp>  #include "math.hpp" +#define count(A) (sizeof(A) / sizeof((A)[0])) +  extern bool debug_draw_cmodels;  extern bool debug_draw_paths;  extern bool debug_draw_tile_coords; @@ -252,6 +254,9 @@ namespace interface {  		std::list<log_entry_t> log; +		double perf_hist[10] = {0}; +		size_t perf_hist_index = 0; +  	public:  		state_t(sf::RenderWindow *window_, game::state_t *game);  		void tick(double dt); @@ -313,6 +318,10 @@ namespace render {  	public:  		double now, dt; +		struct { +			size_t sectors, tiles, entities; +		} stats; +  		state_t(sf::RenderWindow *window_);  		void begin_frame(double time_, double dt_);  		void end_frame(void); diff --git a/src/game/interface.cpp b/src/game/interface.cpp index 2a52220..148f790 100644 --- a/src/game/interface.cpp +++ b/src/game/interface.cpp @@ -1,4 +1,5 @@  #include "game.hpp" +#include <iomanip>  namespace interface { @@ -141,6 +142,8 @@ void state_t::render_to(render::state_t *render)  {  	size_t w = window->getSize().x, h = window->getSize().y;  	v2f_t x; +	std::stringstream ss; +	double fps;  	if (select.selecting)  		render->render_hlrect(select.rect, sf::Color(200, 100, 50)); @@ -160,6 +163,27 @@ void state_t::render_to(render::state_t *render)  		render->render_text(x, em, entry.text, render::ALIGN_LEFT_TOP, sf::Color::White);  		x[1] += em;  	} + +	x = v2f_t(0.0f, h - em * 1.5); +	ss << "S/T/E: "; +	ss << render->stats.sectors << "/"; +	ss << render->stats.tiles << "/"; +	ss << render->stats.entities; +	render->render_text(x, em, ss.str(), render::ALIGN_LEFT_TOP, sf::Color::White); + +	perf_hist_index = (perf_hist_index + 1) % count(perf_hist); +	perf_hist[perf_hist_index] = 1.0 / render->dt; + +	fps = 0.0; +	for (size_t i = 0; i < count(perf_hist); i++) +		fps += perf_hist[i]; +	fps /= count(perf_hist); + +	x[1] -= em; +	ss.str(std::string()); +	ss << std::fixed << std::setprecision(1); +	ss << "FPS: " << fps; +	render->render_text(x, em, ss.str(), render::ALIGN_LEFT_TOP, sf::Color::White);  }  } // namespace interface diff --git a/src/render.cpp b/src/render.cpp index 792d70d..f773f92 100644 --- a/src/render.cpp +++ b/src/render.cpp @@ -27,6 +27,10 @@ void state_t::begin_frame(double now_, double dt_)  	now = now_;  	dt = dt_;  	window->clear(); + +	stats.sectors = 0; +	stats.tiles = 0; +	stats.entities = 0;  }  void state_t::end_frame(void) @@ -101,7 +105,11 @@ void state_t::render_sector(world::sector_t *sector)  			text.setScale(0.005, 0.005);  			window->draw(text);  		} + +		stats.tiles++;  	} + +	stats.sectors++;  }  void state_t::render(game::state_t *game) @@ -141,6 +149,8 @@ void state_t::render(game::state_t *game)  		if (debug_draw_cmodels)  			drender_entity(ent); + +		stats.entities++;  	}  } diff --git a/src/text.cpp b/src/text.cpp index 898466f..0959277 100644 --- a/src/text.cpp +++ b/src/text.cpp @@ -8,8 +8,6 @@ static const char *human_names[] = {  	"Kowalski", "Jackson", "Carter", "O'Neill", "Hammond", "Mitchell"  }; -#define count(A) (sizeof(A) / sizeof((A)[0])) -  static std::string get_english(index_t index)  {  	switch (index) {  | 
