summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-08-16 11:15:29 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-08-16 11:15:29 (GMT)
commitf19c7f62c77f6a3e8f5728e015166b0c625f5f67 (patch)
treedc4c5067c6a4d6b7108e33da0cc3a18549eb2066
parentca30e9f091376e81b61a0f72bc444a4f59fc4ae7 (diff)
downloadpowder-f19c7f62c77f6a3e8f5728e015166b0c625f5f67.zip
powder-f19c7f62c77f6a3e8f5728e015166b0c625f5f67.tar.gz
Air invert and grid mode switching
-rw-r--r--src/game/GameController.cpp14
-rw-r--r--src/game/GameController.h2
-rw-r--r--src/game/GameView.cpp8
-rw-r--r--src/graphics/Renderer.cpp11
-rw-r--r--src/graphics/Renderer.h4
-rw-r--r--src/simulation/Air.cpp14
-rw-r--r--src/simulation/Air.h1
7 files changed, 49 insertions, 5 deletions
diff --git a/src/game/GameController.cpp b/src/game/GameController.cpp
index 9831c78..5237af7 100644
--- a/src/game/GameController.cpp
+++ b/src/game/GameController.cpp
@@ -231,6 +231,20 @@ void GameController::Install()
#endif
}
+void GameController::AdjustGridSize(int direction)
+{
+ if(direction > 0)
+ gameModel->GetRenderer()->SetGridSize((gameModel->GetRenderer()->GetGridSize()+1)%10);
+ else
+ gameModel->GetRenderer()->SetGridSize((gameModel->GetRenderer()->GetGridSize()+9)%10);
+}
+
+void GameController::InvertAirSim()
+{
+ gameModel->GetSimulation()->air->Invert();
+}
+
+
void GameController::AdjustBrushSize(int direction, bool logarithmic, bool xAxis, bool yAxis)
{
if(xAxis && yAxis)
diff --git a/src/game/GameController.h b/src/game/GameController.h
index 72ebd37..c6d41b5 100644
--- a/src/game/GameController.h
+++ b/src/game/GameController.h
@@ -69,6 +69,8 @@ public:
void Install();
+ void AdjustGridSize(int direction);
+ void InvertAirSim();
void LoadRenderPreset(RenderPreset preset);
void SetZoomEnabled(bool zoomEnable);
void SetZoomPosition(ui::Point position);
diff --git a/src/game/GameView.cpp b/src/game/GameView.cpp
index 45addeb..af13797 100644
--- a/src/game/GameView.cpp
+++ b/src/game/GameView.cpp
@@ -1243,6 +1243,12 @@ void GameView::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool
case 'f':
c->FrameStep();
break;
+ case 'g':
+ if(shift)
+ c->AdjustGridSize(-1);
+ else
+ c->AdjustGridSize(1);
+ break;
case 'd':
showDebug = !showDebug;
break;
@@ -1345,6 +1351,8 @@ void GameView::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool
case 'i':
if(ctrl)
c->Install();
+ else
+ c->InvertAirSim();
break;
}
diff --git a/src/graphics/Renderer.cpp b/src/graphics/Renderer.cpp
index 7467493..2924503 100644
--- a/src/graphics/Renderer.cpp
+++ b/src/graphics/Renderer.cpp
@@ -1086,17 +1086,17 @@ void Renderer::render_parts()
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, partsFbo);
glTranslated(0, MENUSIZE, 0);
#else
- /*if (GRID_MODE)//draws the grid
+ if (gridSize)//draws the grid
{
for (ny=0; ny<YRES; ny++)
for (nx=0; nx<XRES; nx++)
{
- if (ny%(4*GRID_MODE)==0)
+ if (ny%(4*gridSize)==0)
blendpixel(nx, ny, 100, 100, 100, 80);
- if (nx%(4*GRID_MODE)==0)
+ if (nx%(4*gridSize)==0)
blendpixel(nx, ny, 100, 100, 100, 80);
}
- }*/
+ }
#endif
for(i = 0; i<=sim->parts_lastActiveIndex; i++) {
if (sim->parts[i].type) {
@@ -2284,7 +2284,8 @@ Renderer::Renderer(Graphics * g, Simulation * sim):
mousePosY(-1),
display_mode(0),
render_mode(0),
- colour_mode(0)
+ colour_mode(0),
+ gridSize(0)
{
this->g = g;
this->sim = sim;
diff --git a/src/graphics/Renderer.h b/src/graphics/Renderer.h
index 2f9f404..dc5d633 100644
--- a/src/graphics/Renderer.h
+++ b/src/graphics/Renderer.h
@@ -131,12 +131,16 @@ public:
void SetColourMode(unsigned int mode);
unsigned int GetColourMode();
+ int GetGridSize() { return gridSize; }
+ void SetGridSize(int value) { gridSize = value; }
+
static VideoBuffer * WallIcon(int wallID, int width, int height);
Renderer(Graphics * g, Simulation * sim);
~Renderer();
private:
+ int gridSize;
#ifdef OGLR
GLuint zoomTex, airBuf, fireAlpha, glowAlpha, blurAlpha, partsFboTex, partsFbo, partsTFX, partsTFY, airPV, airVY, airVX;
GLuint fireProg, airProg_Pressure, airProg_Velocity, airProg_Cracker, lensProg;
diff --git a/src/simulation/Air.cpp b/src/simulation/Air.cpp
index 6d7b5dd..2dfcae0 100644
--- a/src/simulation/Air.cpp
+++ b/src/simulation/Air.cpp
@@ -1,4 +1,5 @@
#include <cmath>
+#include <algorithm>
#include "Config.h"
#include "Air.h"
//#include <powder.h>
@@ -295,6 +296,19 @@ void Air::update_air(void)
memcpy(pv, opv, sizeof(pv));
}
}
+
+void Air::Invert()
+{
+ int nx, ny;
+ for (nx = 0; nx<XRES/CELL; nx++)
+ for (ny = 0; ny<YRES/CELL; ny++)
+ {
+ pv[ny][nx] = -pv[ny][nx];
+ vx[ny][nx] = -vx[ny][nx];
+ vy[ny][nx] = -vy[ny][nx];
+ }
+}
+
Air::Air():
airMode(0)
{
diff --git a/src/simulation/Air.h b/src/simulation/Air.h
index 0232b86..8fa6f6e 100644
--- a/src/simulation/Air.h
+++ b/src/simulation/Air.h
@@ -29,6 +29,7 @@ public:
void update_airh(void);
void update_air(void);
void Clear();
+ void Invert();
Air();
};