summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJacob1 <jfu614@gmail.com>2012-03-14 22:56:17 (GMT)
committer Jacob1 <jfu614@gmail.com>2012-03-14 22:56:17 (GMT)
commit5a98d30a8f576f630e912fd3480ff14989e16038 (patch)
tree64898cc65bcdee0e280056b89a463427c034906e /src
parent75efca472c7ab5158356a5be053291f7edabbd1d (diff)
downloadpowder-5a98d30a8f576f630e912fd3480ff14989e16038.zip
powder-5a98d30a8f576f630e912fd3480ff14989e16038.tar.gz
Make create_parts smaller/make cirlce code not repeat 3 times
Diffstat (limited to 'src')
-rw-r--r--src/powder.c204
1 files changed, 62 insertions, 142 deletions
diff --git a/src/powder.c b/src/powder.c
index 20992f3..8c000e5 100644
--- a/src/powder.c
+++ b/src/powder.c
@@ -2974,7 +2974,7 @@ int create_part_add_props(int p, int x, int y, int tv, int rx, int ry)
//this creates particles from a brush, don't use if you want to create one particle
int create_parts(int x, int y, int rx, int ry, int c, int flags, int fill)
{
- int i, j, r, f = 0, u, v, oy, ox, b = 0, dw = 0, stemp = 0, p;//n;
+ int i, j, r, f = 0, u, v, oy, ox, b = 0, dw = 0, stemp = 0, p, fn;
int wall = c - 100;
if (c==SPC_WIND || c==PT_FIGH)
@@ -3077,139 +3077,18 @@ int create_parts(int x, int y, int rx, int ry, int c, int flags, int fill)
return 1;
}
- //eraser
- if (c == 0 && !(flags&BRUSH_REPLACEMODE))
- {
- if (rx==0&&ry==0)
- {
- delete_part(x, y, 0);
- }
- else
- {
- int tempy = y, i, j, jmax, oldy;
- if (CURRENT_BRUSH == TRI_BRUSH)
- tempy = y + ry;
- for (i = x - rx; i <= x; i++) {
- oldy = tempy;
- while (InCurrentBrush(i-x,tempy-y,rx,ry))
- tempy = tempy - 1;
- tempy = tempy + 1;
- jmax = 2*y - tempy;
- if (CURRENT_BRUSH == TRI_BRUSH)
- jmax = y + ry;
- if (fill)
- {
- for (j = tempy; j <= jmax; j++) {
- delete_part(i, j, 0);
- delete_part(2*x-i, j, 0);
- }
- }
- else
- {
- if ((oldy != tempy && CURRENT_BRUSH != SQUARE_BRUSH) || i == x-rx)
- oldy--;
- if (CURRENT_BRUSH == TRI_BRUSH)
- oldy = tempy;
- for (j = tempy; j <= oldy+1; j++) {
- int i2 = 2*x-i, j2 = 2*y-j;
- if (CURRENT_BRUSH == TRI_BRUSH)
- j2 = y+ry;
- delete_part(i, j, flags);
- delete_part(i2, j, flags);
- delete_part(i, j2, flags);
- delete_part(i2, j2, flags);
- }
- }
- }
- }
- return 1;
- }
+ if (c == 0 && !(flags&BRUSH_REPLACEMODE)) // delete
+ fn = 0;
+ else if ((flags&BRUSH_SPECIFIC_DELETE) && !(flags&BRUSH_REPLACEMODE)) // specific delete
+ fn = 1;
+ else if (flags&BRUSH_REPLACEMODE) // replace
+ fn = 2;
+ else // normal draw
+ fn = 3;
- //specific deletion
- if ((flags&BRUSH_SPECIFIC_DELETE)&& !(flags&BRUSH_REPLACEMODE))
+ if (rx==0&&ry==0)
{
- if (rx==0&&ry==0)
- {
- delete_part(x, y, flags);
- }
- else
- {
- int tempy = y, i, j, jmax, oldy;
- if (CURRENT_BRUSH == TRI_BRUSH)
- tempy = y + ry;
- for (i = x - rx; i <= x; i++) {
- oldy = tempy;
- while (InCurrentBrush(i-x,tempy-y,rx,ry))
- tempy = tempy - 1;
- tempy = tempy + 1;
- jmax = 2*y - tempy;
- if (CURRENT_BRUSH == TRI_BRUSH)
- jmax = y + ry;
- if (fill)
- {
- for (j = tempy; j <= jmax; j++) {
- delete_part(i, j, flags);
- delete_part(2*x-i, j, flags);
- }
- }
- else
- {
- if ((oldy != tempy && CURRENT_BRUSH != SQUARE_BRUSH) || i == x-rx)
- oldy--;
- if (CURRENT_BRUSH == TRI_BRUSH)
- oldy = tempy;
- for (j = tempy; j <= oldy+1; j++) {
- int i2 = 2*x-i, j2 = 2*y-j;
- if (CURRENT_BRUSH == TRI_BRUSH)
- j2 = y+ry;
- delete_part(i, j, flags);
- delete_part(i2, j, flags);
- delete_part(i, j2, flags);
- delete_part(i2, j2, flags);
- }
- }
- }
- }
- return 1;
- }
-
- if (flags&BRUSH_REPLACEMODE)
- {
- if (rx==0&&ry==0)
- {
- if ((pmap[y][x]&0xFF)==SLALT || SLALT==0)
- {
- if ((pmap[y][x]))
- {
- delete_part(x, y, 0);
- if (c!=0)
- create_part_add_props(-2, x, y, c, rx, ry);
- }
- }
- }
- else
- for (j=-ry; j<=ry; j++)
- for (i=-rx; i<=rx; i++)
- if (InCurrentBrush(i ,j ,rx ,ry))
- {
- if ( x+i<0 || y+j<0 || x+i>=XRES || y+j>=YRES)
- continue;
- if ((pmap[y+j][x+i]&0xFF)!=SLALT&&SLALT!=0)
- continue;
- if ((pmap[y+j][x+i]))
- {
- delete_part(x+i, y+j, 0);
- if (c!=0)
- create_part_add_props(-2, x+i, y+j, c, rx, ry);
- }
- }
- return 1;
-
- }
- //else, no special modes, draw element like normal.
- if (rx==0&&ry==0)//workaround for 1pixel brush/floodfill crashing. todo: find a better fix later.
- {
- if (create_part_add_props(-2, x, y, c, rx, ry)==-1)
+ if (create_parts2(fn,i,j,c,rx,ry,flags))
f = 1;
}
else
@@ -3217,23 +3096,23 @@ int create_parts(int x, int y, int rx, int ry, int c, int flags, int fill)
int tempy = y, i, j, jmax, oldy;
if (CURRENT_BRUSH == TRI_BRUSH)
tempy = y + ry;
- for (i = x - rx; i <= x; i++) {
+ for (i = x - rx; i <= x; i++) {
oldy = tempy;
while (InCurrentBrush(i-x,tempy-y,rx,ry))
tempy = tempy - 1;
- tempy = tempy + 1;
+ tempy = tempy + 1;
jmax = 2*y - tempy;
if (CURRENT_BRUSH == TRI_BRUSH)
jmax = y + ry;
if (fill)
{
for (j = tempy; j <= jmax; j++) {
- if (create_part_add_props(-2, i, j, c, rx, ry)==-1)
+ if (create_parts2(fn,i,j,c,rx,ry,flags))
f = 1;
- if (create_part_add_props(-2, 2*x-i, j, c, rx, ry)==-1)
+ if (create_parts2(fn,2*x-i,j,c,rx,ry,flags))
f = 1;
}
- }
+ }
else
{
if ((oldy != tempy && CURRENT_BRUSH != SQUARE_BRUSH) || i == x-rx)
@@ -3244,21 +3123,62 @@ int create_parts(int x, int y, int rx, int ry, int c, int flags, int fill)
int i2 = 2*x-i, j2 = 2*y-j;
if (CURRENT_BRUSH == TRI_BRUSH)
j2 = y+ry;
- if (create_part_add_props(-2, i, j, c, rx, ry)==-1)
+ if (create_parts2(fn,i,j,c,rx,ry,flags))
f = 1;
- if (create_part_add_props(-2, i2, j, c, rx, ry)==-1)
+ if (create_parts2(fn,i2,j,c,rx,ry,flags))
f = 1;
- if (create_part_add_props(-2, i, j2, c, rx, ry)==-1)
+ if (create_parts2(fn,i,j2,c,rx,ry,flags))
f = 1;
- if (create_part_add_props(-2, i2, j2, c, rx, ry)==-1)
+ if (create_parts2(fn,i2,j2,c,rx,ry,flags))
f = 1;
}
}
- }
+ }
}
return !f;
}
+int create_parts2(int f, int x, int y, int c, int rx, int ry, int flags)
+{
+ if (f == 0) //delete
+ delete_part(x, y, 0);
+ else if (f == 1) //specific delete
+ delete_part(x, y, flags);
+ else if (f == 2) //replace mode
+ {
+ if (x<0 || y<0 || x>=XRES || y>=YRES)
+ return 0;
+ if ((pmap[y][x]&0xFF)!=SLALT&&SLALT!=0)
+ return 0;
+ if ((pmap[y][x]))
+ {
+ delete_part(x, y, 0);
+ if (c!=0)
+ create_part_add_props(-2, x, y, c, rx, ry);
+ }
+ }
+ else if (f == 3) //normal draw
+ if (create_part_add_props(-2, x, y, c, rx, ry)==-1)
+ return 1;
+ return 0;
+}
+
+void create_moving_solid(int x, int y, int rx, int ry)
+{
+ int j, i;
+ creatingsolid = 0;
+ if (rx < 3 || ry < 3 || numballs >= 255)
+ return;
+ create_part(-2, x, y, PT_MOVS);
+ if (!creatingsolid)
+ return;
+ for (j=-ry; j<=ry; j++)
+ for (i=-rx; i<=rx; i++)
+ if (InCurrentBrush(i ,j ,rx ,ry) && !InCurrentBrush(i ,j ,rx-1 ,ry-1))
+ create_part(-2, x+i, y+j, PT_MOVS);
+ creatingsolid = 0;
+}
+
int InCurrentBrush(int i, int j, int rx, int ry)
{
switch(CURRENT_BRUSH)