From 201d3140967c291e8c331a3eda8215cdf7347c47 Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Sat, 15 Dec 2012 15:57:57 +0000 Subject: [PATCH] Element population histogram debug info display - has to be enabled by adding debugInfo.push_back(new ElementPopulationDebug(gameModel->GetSimulation())); somewhere in GameController --- src/debug/DebugInfo.h | 9 ++++ src/debug/ElementPopulation.cpp | 84 +++++++++++++++++++++++++++++++++ src/debug/ElementPopulation.h | 14 ++++++ src/game/GameController.cpp | 8 ++++ src/game/GameController.h | 2 + 5 files changed, 117 insertions(+) create mode 100644 src/debug/DebugInfo.h create mode 100644 src/debug/ElementPopulation.cpp create mode 100644 src/debug/ElementPopulation.h diff --git a/src/debug/DebugInfo.h b/src/debug/DebugInfo.h new file mode 100644 index 000000000..3ddd4b306 --- /dev/null +++ b/src/debug/DebugInfo.h @@ -0,0 +1,9 @@ +#pragma once + +#include "interface/Point.h" + +class DebugInfo +{ +public: + virtual void Draw(ui::Point position) {} +}; \ No newline at end of file diff --git a/src/debug/ElementPopulation.cpp b/src/debug/ElementPopulation.cpp new file mode 100644 index 000000000..225cf026e --- /dev/null +++ b/src/debug/ElementPopulation.cpp @@ -0,0 +1,84 @@ +#pragma once + +#include "ElementPopulation.h" +#include "interface/Engine.h" +#include "simulation/Simulation.h" +#include "Format.h" + +ElementPopulationDebug::ElementPopulationDebug(Simulation * sim): + sim(sim), + maxAverage(255.0f) +{ + +} + +void ElementPopulationDebug::Draw(ui::Point position) +{ + Graphics * g = ui::Engine::Ref().g; + //g->drawtext(10, 10, "Arse", 255, 255, 255, 255); + + int yBottom = YRES-10; + int xStart = 10; + + std::string maxValString; + std::string halfValString; + + + float maxVal = 255; + float scale = 1.0f; + int bars = 0; + for(int i = 0; i < PT_NUM; i++) + { + if(sim->elements[i].Enabled) + { + if(maxVal < sim->elementCount[i]) + maxVal = sim->elementCount[i]; + bars++; + } + } + maxAverage = (maxAverage*(1.0f-0.015f)) + (0.015f*maxVal); + scale = 255.0f/maxAverage; + + maxValString = format::NumberToString(maxAverage); + halfValString = format::NumberToString(maxAverage/2); + + + g->fillrect(xStart-5, yBottom - 263, bars+10+Graphics::textwidth(maxValString.c_str())+10, 255 + 13, 0, 0, 0, 180); + + bars = 0; + for(int i = 0; i < PT_NUM; i++) + { + if(sim->elements[i].Enabled) + { + float count = sim->elementCount[i]; + int barSize = (count * scale - 0.5f); + int barX = bars;//*2; + + g->draw_line(xStart+barX, yBottom+3, xStart+barX, yBottom+2, PIXR(sim->elements[i].Colour), PIXG(sim->elements[i].Colour), PIXB(sim->elements[i].Colour), 255); + if(sim->elementCount[i]) + { + if(barSize > 256) + { + barSize = 256; + g->blendpixel(xStart+barX, yBottom-barSize-3, PIXR(sim->elements[i].Colour), PIXG(sim->elements[i].Colour), PIXB(sim->elements[i].Colour), 255); + g->blendpixel(xStart+barX, yBottom-barSize-5, PIXR(sim->elements[i].Colour), PIXG(sim->elements[i].Colour), PIXB(sim->elements[i].Colour), 255); + g->blendpixel(xStart+barX, yBottom-barSize-7, PIXR(sim->elements[i].Colour), PIXG(sim->elements[i].Colour), PIXB(sim->elements[i].Colour), 255); + } else { + + g->draw_line(xStart+barX, yBottom-barSize-3, xStart+barX, yBottom-barSize-2, 255, 255, 255, 180); + } + g->draw_line(xStart+barX, yBottom-barSize, xStart+barX, yBottom, PIXR(sim->elements[i].Colour), PIXG(sim->elements[i].Colour), PIXB(sim->elements[i].Colour), 255); + } + bars++; + } + } + + g->drawtext(xStart + bars + 5, yBottom-5, "0", 255, 255, 255, 255); + g->drawtext(xStart + bars + 5, yBottom-132, halfValString, 255, 255, 255, 255); + g->drawtext(xStart + bars + 5, yBottom-260, maxValString, 255, 255, 255, 255); +} + +ElementPopulationDebug::~ElementPopulationDebug() +{ + +} \ No newline at end of file diff --git a/src/debug/ElementPopulation.h b/src/debug/ElementPopulation.h new file mode 100644 index 000000000..845b91e6c --- /dev/null +++ b/src/debug/ElementPopulation.h @@ -0,0 +1,14 @@ +#pragma once + +#include "DebugInfo.h" + +class Simulation; +class ElementPopulationDebug : public DebugInfo +{ + Simulation * sim; + float maxAverage; +public: + ElementPopulationDebug(Simulation * sim); + virtual void Draw(ui::Point position); + virtual ~ElementPopulationDebug(); +}; \ No newline at end of file diff --git a/src/game/GameController.cpp b/src/game/GameController.cpp index efaf1125c..f7e1dd998 100644 --- a/src/game/GameController.cpp +++ b/src/game/GameController.cpp @@ -25,6 +25,8 @@ #include "save/ServerSaveActivity.h" #include "interface/Keys.h" #include "simulation/Snapshot.h" +#include "debug/DebugInfo.h" +//#include "debug/ElementPopulation.h" using namespace std; @@ -145,6 +147,8 @@ GameController::GameController(): //sim = new Simulation(); Client::Ref().AddListener(this); + + //debugInfo.push_back(new ElementPopulationDebug(gameModel->GetSimulation())); } GameController::~GameController() @@ -677,6 +681,10 @@ void GameController::Tick() ((LuaScriptInterface*)commandInterface)->Init(); firstTick = false; } + for(std::vector::iterator iter = debugInfo.begin(), end = debugInfo.end(); iter != end; iter++) + { + (*iter)->Draw(ui::Point(10, 10)); + } commandInterface->OnTick(); } diff --git a/src/game/GameController.h b/src/game/GameController.h index d44a2952d..2e02b2575 100644 --- a/src/game/GameController.h +++ b/src/game/GameController.h @@ -22,6 +22,7 @@ using namespace std; +class DebugInfo; class Notification; class GameModel; class GameView; @@ -44,6 +45,7 @@ private: LocalBrowserController * localBrowser; OptionsController * options; CommandInterface * commandInterface; + vector debugInfo; public: bool HasDone; class SearchCallback;