Air invert and grid mode switching

This commit is contained in:
Simon Robertshaw 2012-08-16 12:15:29 +01:00
parent ca30e9f091
commit f19c7f62c7
7 changed files with 49 additions and 5 deletions

View File

@ -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)

View File

@ -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);

View File

@ -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;
}

View File

@ -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;

View File

@ -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;

View File

@ -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)
{

View File

@ -29,6 +29,7 @@ public:
void update_airh(void);
void update_air(void);
void Clear();
void Invert();
Air();
};