diff options
| author | jacksonmj <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) |
| commit | db91bd37f03a1a195a6bfc97235b7d08026d1193 (patch) | |
| tree | f2405686284a6b3391ac2ba56c6dc1305d42ef01 /src/graphics.c | |
| parent | 72a4490bb5c78c6a1c8cfd0f8aa2165b0315d24c (diff) | |
| download | powder-db91bd37f03a1a195a6bfc97235b7d08026d1193.zip powder-db91bd37f03a1a195a6bfc97235b7d08026d1193.tar.gz | |
Display photon wavelengths in HUD
Diffstat (limited to 'src/graphics.c')
| -rw-r--r-- | src/graphics.c | 30 |
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; |
