summaryrefslogtreecommitdiff
path: root/src/graphics.c
diff options
context:
space:
mode:
authorjacksonmj <mj-pt@jacksonmj.co.uk>2011-03-15 15:28:32 (GMT)
committer jacksonmj <mj-pt@jacksonmj.co.uk>2011-03-15 15:47:09 (GMT)
commitdb91bd37f03a1a195a6bfc97235b7d08026d1193 (patch)
treef2405686284a6b3391ac2ba56c6dc1305d42ef01 /src/graphics.c
parent72a4490bb5c78c6a1c8cfd0f8aa2165b0315d24c (diff)
downloadpowder-db91bd37f03a1a195a6bfc97235b7d08026d1193.zip
powder-db91bd37f03a1a195a6bfc97235b7d08026d1193.tar.gz
Display photon wavelengths in HUD
Diffstat (limited to 'src/graphics.c')
-rw-r--r--src/graphics.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/graphics.c b/src/graphics.c
index 90e81b0..ddb8368 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -2925,6 +2925,36 @@ void draw_parts(pixel *vid)
}
+void draw_wavelengths(pixel *vid, int x, int y, int h, int wl)
+{
+ fillrect(vid,x-1,y-1,30+1,h+1,64,64,64,255); // coords -1 size +1 to work around bug in fillrect - TODO: fix fillrect
+ int i,cr,cg,cb,j;
+ int tmp;
+ for (i=0;i<30;i++)
+ {
+ if ((wl>>i)&1)
+ {
+ // Need a spread of wavelengths to get a smooth spectrum, 5 bits seems to work reasonably well
+ if (i>2) tmp = 0x1F << (i-2);
+ else tmp = 0x1F >> (2-i);
+ cg = 0;
+ cb = 0;
+ cr = 0;
+ for (j=0; j<12; j++) {
+ cr += (tmp >> (j+18)) & 1;
+ cb += (tmp >> j) & 1;
+ }
+ for (j=0; j<14; j++)
+ cg += (tmp >> (j+9)) & 1;
+ tmp = 624/(cr+cg+cb+1);
+ cr *= tmp;
+ cg *= tmp;
+ cb *= tmp;
+ for (j=0;j<h;j++) blendpixel(vid,x+29-i,y+j,cr>255?255:cr,cg>255?255:cg,cb>255?255:cb,255);
+ }
+ }
+}
+
void render_signs(pixel *vid_buf)
{
int i, j, x, y, w, h, dx, dy,mx,my,b=1,bq;