When creating a line, only fill in the first circle, and draw outlines the rest of the line

This commit is contained in:
Jacob1 2011-11-26 22:28:43 -05:00
parent 7742586639
commit 75efca472c

View File

@ -2972,7 +2972,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 //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 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;//n;
@ -2984,6 +2984,8 @@ int create_parts(int x, int y, int rx, int ry, int c, int flags)
prop_edit_ui(vid_buf, x, y); prop_edit_ui(vid_buf, x, y);
return 0; return 0;
} }
if (c == SPC_AIR || c == SPC_HEAT || c == SPC_COOL || c == SPC_VACUUM || c == SPC_PGRV || c == SPC_NGRV)
fill = 1;
for (r=UI_ACTUALSTART; r<=UI_ACTUALSTART+UI_WALLCOUNT; r++) for (r=UI_ACTUALSTART; r<=UI_ACTUALSTART+UI_WALLCOUNT; r++)
{ {
if (wall==r) if (wall==r)
@ -3084,19 +3086,39 @@ int create_parts(int x, int y, int rx, int ry, int c, int flags)
} }
else else
{ {
int tempy = y, i, j, jmax; int tempy = y, i, j, jmax, oldy;
if (CURRENT_BRUSH == TRI_BRUSH) if (CURRENT_BRUSH == TRI_BRUSH)
tempy = y + ry; 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)) while (InCurrentBrush(i-x,tempy-y,rx,ry))
tempy = tempy - 1; tempy = tempy - 1;
tempy = tempy + 1; tempy = tempy + 1;
jmax = 2*y - tempy; jmax = 2*y - tempy;
if (CURRENT_BRUSH == TRI_BRUSH) if (CURRENT_BRUSH == TRI_BRUSH)
jmax = y + ry; jmax = y + ry;
for (j = tempy; j <= jmax; j++) { if (fill)
delete_part(i, j, 0); {
delete_part(2*x-i, j, 0); 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);
}
} }
} }
} }
@ -3112,19 +3134,39 @@ int create_parts(int x, int y, int rx, int ry, int c, int flags)
} }
else else
{ {
int tempy = y, i, j, jmax; int tempy = y, i, j, jmax, oldy;
if (CURRENT_BRUSH == TRI_BRUSH) if (CURRENT_BRUSH == TRI_BRUSH)
tempy = y + ry; 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)) while (InCurrentBrush(i-x,tempy-y,rx,ry))
tempy = tempy - 1; tempy = tempy - 1;
tempy = tempy + 1; tempy = tempy + 1;
jmax = 2*y - tempy; jmax = 2*y - tempy;
if (CURRENT_BRUSH == TRI_BRUSH) if (CURRENT_BRUSH == TRI_BRUSH)
jmax = y + ry; jmax = y + ry;
for (j = tempy; j <= jmax; j++) { if (fill)
delete_part(i, j, flags); {
delete_part(2*x-i, j, flags); 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);
}
} }
} }
} }
@ -3172,22 +3214,46 @@ int create_parts(int x, int y, int rx, int ry, int c, int flags)
} }
else else
{ {
int tempy = y, i, j, jmax; int tempy = y, i, j, jmax, oldy;
if (CURRENT_BRUSH == TRI_BRUSH) if (CURRENT_BRUSH == TRI_BRUSH)
tempy = y + ry; 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)) while (InCurrentBrush(i-x,tempy-y,rx,ry))
tempy = tempy - 1; tempy = tempy - 1;
tempy = tempy + 1; tempy = tempy + 1;
jmax = 2*y - tempy; jmax = 2*y - tempy;
if (CURRENT_BRUSH == TRI_BRUSH) if (CURRENT_BRUSH == TRI_BRUSH)
jmax = y + ry; jmax = y + ry;
for (j = tempy; j <= jmax; j++) { if (fill)
if (create_part_add_props(-2, i, j, c, rx, ry)==-1) {
f = 1; for (j = tempy; j <= jmax; j++) {
if (create_part_add_props(-2, 2*x-i, j, c, rx, ry)==-1) if (create_part_add_props(-2, i, j, c, rx, ry)==-1)
f = 1; f = 1;
if (create_part_add_props(-2, 2*x-i, j, c, rx, ry)==-1)
f = 1;
}
} }
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;
if (create_part_add_props(-2, i, j, c, rx, ry)==-1)
f = 1;
if (create_part_add_props(-2, i2, j, c, rx, ry)==-1)
f = 1;
if (create_part_add_props(-2, i, j2, c, rx, ry)==-1)
f = 1;
if (create_part_add_props(-2, i2, j2, c, rx, ry)==-1)
f = 1;
}
}
} }
} }
return !f; return !f;
@ -3224,7 +3290,7 @@ int get_brush_flags()
} }
void create_line(int x1, int y1, int x2, int y2, int rx, int ry, int c, int flags) void create_line(int x1, int y1, int x2, int y2, int rx, int ry, int c, int flags)
{ {
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, fill = 1;
float e, de; float e, de;
if (c==SPC_PROP) if (c==SPC_PROP)
return; return;
@ -3258,9 +3324,10 @@ void create_line(int x1, int y1, int x2, int y2, int rx, int ry, int c, int flag
for (x=x1; x<=x2; x++) for (x=x1; x<=x2; x++)
{ {
if (cp) if (cp)
create_parts(y, x, rx, ry, c, flags); create_parts(y, x, rx, ry, c, flags, fill);
else else
create_parts(x, y, rx, ry, c, flags); create_parts(x, y, rx, ry, c, flags, fill);
fill = 0;
e += de; e += de;
if (e >= 0.5f) if (e >= 0.5f)
{ {
@ -3269,9 +3336,9 @@ void create_line(int x1, int y1, int x2, int y2, int rx, int ry, int c, int flag
&& ((y1<y2) ? (y<=y2) : (y>=y2))) && ((y1<y2) ? (y<=y2) : (y>=y2)))
{ {
if (cp) if (cp)
create_parts(y, x, rx, ry, c, flags); create_parts(y, x, rx, ry, c, flags, fill);
else else
create_parts(x, y, rx, ry, c, flags); create_parts(x, y, rx, ry, c, flags, fill);
} }
e -= 1.0f; e -= 1.0f;
} }