diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-07-24 12:03:28 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-07-24 12:03:28 (GMT) |
| commit | e65e222f2ccbf60a4c224bbe29884ebb1001cfd7 (patch) | |
| tree | f987b4cf48934bb8c4c2049324df34ba5d934c06 /src/simulation/Simulation.cpp | |
| parent | 64ebd1117b2adfb117c3974ee73ddbe3df0b6c02 (diff) | |
| download | powder-e65e222f2ccbf60a4c224bbe29884ebb1001cfd7.zip powder-e65e222f2ccbf60a4c224bbe29884ebb1001cfd7.tar.gz | |
Integer values for prefs, Default decoration colour, clear decoration
Diffstat (limited to 'src/simulation/Simulation.cpp')
| -rw-r--r-- | src/simulation/Simulation.cpp | 58 |
1 files changed, 37 insertions, 21 deletions
diff --git a/src/simulation/Simulation.cpp b/src/simulation/Simulation.cpp index 7c82419..4a7bede 100644 --- a/src/simulation/Simulation.cpp +++ b/src/simulation/Simulation.cpp @@ -700,6 +700,10 @@ void Simulation::ApplyDecoration(int x, int y, int colR_, int colG_, int colB_, tg = colG; tb = colB; } + else if (mode == DECO_CLEAR) + { + ta = tr = tg = tb = 0.0f; + } else if (mode == DECO_ADD) { ta += (colA*0.1f)*colA; @@ -773,27 +777,32 @@ void Simulation::ApplyDecoration(int x, int y, int colR_, int colG_, int colB_, parts[rp>>8].dcolour = ((colA_<<24)|(colR_<<16)|(colG_<<8)|colB_); } -void Simulation::ApplyDecorationPoint(int x, int y, int rx, int ry, int colR, int colG, int colB, int colA, int mode, Brush * cBrush) +void Simulation::ApplyDecorationPoint(int positionX, int positionY, int colR, int colG, int colB, int colA, int mode, Brush * cBrush) { int i, j; if(cBrush) { - rx = cBrush->GetRadius().X; - ry = cBrush->GetRadius().Y; - } + int radiusX, radiusY, sizeX, sizeY; + + radiusX = cBrush->GetRadius().X; + radiusY = cBrush->GetRadius().Y; + + sizeX = cBrush->GetSize().X; + sizeY = cBrush->GetSize().Y; - if (rx == 0 && ry == 0) - { - ApplyDecoration(x, y, colR, colG, colB, colA, mode); - return; + unsigned char *bitmap = cBrush->GetBitmap(); + for(int y = 0; y < sizeY; y++) + { + for(int x = 0; x < sizeX; x++) + { + if(bitmap[(y*sizeX)+x] && (positionX+(x-radiusX) >= 0 && positionY+(y-radiusY) >= 0 && positionX+(x-radiusX) < XRES && positionY+(y-radiusY) < YRES)) + { + ApplyDecoration(positionX+(x-radiusX), positionY+(y-radiusY), colR, colG, colB, colA, mode); + } + } + } } - - unsigned char *bitmap = cBrush->GetBitmap(); - for (j=-ry; j<=ry; j++) - for (i=-rx; i<=rx; i++) - if(bitmap[(j+ry)*(rx*2)+(i+rx)]) - ApplyDecoration(x+i, y+j, colR, colG, colB, colA, mode); } void Simulation::ApplyDecorationBox(int x1, int y1, int x2, int y2, int colR, int colG, int colB, int colA, int mode) @@ -814,13 +823,20 @@ void Simulation::ApplyDecorationBox(int x1, int y1, int x2, int y2, int colR, in } for (j=y1; j<=y2; j++) for (i=x1; i<=x2; i++) - ApplyDecorationPoint(i, j, 0, 0, colR, colG, colB, colA, mode); + ApplyDecoration(i, j, colR, colG, colB, colA, mode); } -void Simulation::ApplyDecorationLine(int x1, int y1, int x2, int y2, int rx, int ry, int colR, int colG, int colB, int colA, int mode, Brush * cBrush) +void Simulation::ApplyDecorationLine(int x1, int y1, int x2, int y2, int colR, int colG, int colB, int colA, int mode, Brush * cBrush) { - int cp=abs(y2-y1)>abs(x2-x1), x, y, dx, dy, sy; + int cp=abs(y2-y1)>abs(x2-x1), x, y, dx, dy, sy, rx, ry; float e, de; + + if(cBrush) + { + rx = cBrush->GetRadius().X; + ry = cBrush->GetRadius().Y; + } + if (cp) { y = x1; @@ -851,9 +867,9 @@ void Simulation::ApplyDecorationLine(int x1, int y1, int x2, int y2, int rx, int for (x=x1; x<=x2; x++) { if (cp) - ApplyDecorationPoint(y, x, rx, ry, colR, colG, colB, colA, mode, cBrush); + ApplyDecorationPoint(y, x, colR, colG, colB, colA, mode, cBrush); else - ApplyDecorationPoint(x, y, rx, ry, colR, colG, colB, colA, mode, cBrush); + ApplyDecorationPoint(x, y, colR, colG, colB, colA, mode, cBrush); e += de; if (e >= 0.5f) { @@ -861,9 +877,9 @@ void Simulation::ApplyDecorationLine(int x1, int y1, int x2, int y2, int rx, int if (!(rx+ry)) { if (cp) - ApplyDecorationPoint(y, x, rx, ry, colR, colG, colB, colA, mode, cBrush); + ApplyDecorationPoint(y, x, colR, colG, colB, colA, mode, cBrush); else - ApplyDecorationPoint(x, y, rx, ry, colR, colG, colB, colA, mode, cBrush); + ApplyDecorationPoint(x, y, colR, colG, colB, colA, mode, cBrush); } e -= 1.0f; } |
