summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-12-15 15:57:57 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-12-15 15:57:57 (GMT)
commit201d3140967c291e8c331a3eda8215cdf7347c47 (patch)
tree0a867ba0dbd55c072a677a28aae22f11f2ea57ce /src
parent558888ac25cf503bcbf996d839a0d5f028b15f7c (diff)
downloadpowder-201d3140967c291e8c331a3eda8215cdf7347c47.zip
powder-201d3140967c291e8c331a3eda8215cdf7347c47.tar.gz
Element population histogram debug info display - has to be enabled by adding debugInfo.push_back(new ElementPopulationDebug(gameModel->GetSimulation())); somewhere in GameController
Diffstat (limited to 'src')
-rw-r--r--src/debug/DebugInfo.h9
-rw-r--r--src/debug/ElementPopulation.cpp84
-rw-r--r--src/debug/ElementPopulation.h14
-rw-r--r--src/game/GameController.cpp8
-rw-r--r--src/game/GameController.h2
5 files changed, 117 insertions, 0 deletions
diff --git a/src/debug/DebugInfo.h b/src/debug/DebugInfo.h
new file mode 100644
index 0000000..3ddd4b3
--- /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 0000000..225cf02
--- /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<int>(maxAverage);
+ halfValString = format::NumberToString<int>(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 0000000..845b91e
--- /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 efaf112..f7e1dd9 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<DebugInfo*>::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 d44a295..2e02b25 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*> debugInfo;
public:
bool HasDone;
class SearchCallback;