summaryrefslogtreecommitdiff
path: root/src/graphics.c
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2011-07-18 22:58:08 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2011-07-18 22:58:08 (GMT)
commit68404608f69a03546b91b4e1fe800abf48a88e74 (patch)
treeaf8db7f2b4cdf591e231a55a41f1c4c18cb528b4 /src/graphics.c
parent0fbe6e2d3fbe045e0db233c27bacc3b370b08753 (diff)
downloadpowder-68404608f69a03546b91b4e1fe800abf48a88e74.zip
powder-68404608f69a03546b91b4e1fe800abf48a88e74.tar.gz
Lensing effect for gravity, adds 3 new gravity maps (full resolution, linear interpolation for faux accuracy), old ones should be removed in time.
Diffstat (limited to 'src/graphics.c')
-rw-r--r--src/graphics.c38
1 files changed, 34 insertions, 4 deletions
diff --git a/src/graphics.c b/src/graphics.c
index 3f36097..1d9438e 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -3355,7 +3355,6 @@ void draw_parts(pixel *vid)
#ifdef OpenGL
glFlush ();
#endif
-
}
void draw_walls(pixel *vid)
{
@@ -3747,9 +3746,40 @@ void render_signs(pixel *vid_buf)
}
}
-void render_fire(pixel *dst)
+void render_gravlensing(pixel *src, pixel * dst)
+{
+ int nx, ny, rx, ry, gx, gy, bx, by;
+ for(nx = 0; nx < XRES; nx++)
+ {
+ for(ny = 0; ny < YRES; ny++)
+ {
+ rx = nx-(gravxf[(ny*XRES)+nx]*0.5f);
+ ry = ny-(gravyf[(ny*XRES)+nx]*0.5f);
+ gx = nx-(gravxf[(ny*XRES)+nx]*0.75f);
+ gy = ny-(gravyf[(ny*XRES)+nx]*0.75f);
+ bx = nx-(gravxf[(ny*XRES)+nx]);
+ by = ny-(gravyf[(ny*XRES)+nx]);
+ if(rx > 0 && rx < XRES && ry > 0 && ry < YRES && gx > 0 && gx < XRES && gy > 0 && gy < YRES && bx > 0 && bx < XRES && by > 0 && by < YRES)
+ addpixel(dst, nx, ny, PIXR(src[ry*(XRES+BARSIZE)+rx]), PIXG(src[gy*(XRES+BARSIZE)+gx]), PIXB(src[by*(XRES+BARSIZE)+bx]), 255);
+ /*rx = nx+(gravxf[(ny*XRES)+nx]*0.5f);
+ ry = ny+(gravyf[(ny*XRES)+nx]*0.5f);
+ gx = nx+(gravxf[(ny*XRES)+nx]*0.75f);
+ gy = ny+(gravyf[(ny*XRES)+nx]*0.75f);
+ bx = nx+(gravxf[(ny*XRES)+nx]);
+ by = ny+(gravyf[(ny*XRES)+nx]);
+ if(rx > 0 && rx < XRES && ry > 0 && ry < YRES && gravp[ny/CELL][nx/CELL]*0.5f > -8.0f)
+ addpixel(dst, rx, ry, PIXR(src[ry*(XRES+BARSIZE)+rx]), 0, 0, 255);
+ if(gx > 0 && gx < XRES && gy > 0 && gy < YRES && gravp[ny/CELL][nx/CELL]*0.75f > -8.0f)
+ addpixel(dst, gx, gy, 0, PIXG(src[ry*(XRES+BARSIZE)+rx]), 0, 255);
+ if(bx > 0 && bx < XRES && by > 0 && by < YRES && gravp[ny/CELL][nx/CELL] > -8.0f)
+ addpixel(dst, bx, by, 0, 0, PIXB(src[ry*(XRES+BARSIZE)+rx]), 255);*/
+ }
+ }
+}
+
+void render_fire(pixel *vid)
{
- int i,j,x,y,r,g,b;
+ int i,j,x,y,r,g,b,nx,ny;
for (j=0; j<YRES/CELL; j++)
for (i=0; i<XRES/CELL; i++)
{
@@ -3759,7 +3789,7 @@ void render_fire(pixel *dst)
if (r || g || b)
for (y=-CELL+1; y<2*CELL; y++)
for (x=-CELL+1; x<2*CELL; x++)
- addpixel(dst, i*CELL+x, j*CELL+y, r, g, b, fire_alpha[y+CELL][x+CELL]);
+ addpixel(vid, i*CELL+x, j*CELL+y, r, g, b, fire_alpha[y+CELL][x+CELL]);
for (y=-1; y<2; y++)
for (x=-1; x<2; x++)
if (i+x>=0 && j+y>=0 && i+x<XRES/CELL && j+y<YRES/CELL && (x || y))