Mercurial > hg > forks > pwpunix
view peluce/elevdemo.c @ 89:ea44e1d9eb7c default tip
Cleanups.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sun, 25 May 2014 05:03:14 +0300 |
parents | acb5694e93d9 |
children |
line wrap: on
line source
/* generic rotozoomer for sprites struct { char*colors; char*mask; int width,height; }sprite; rotozoom(char* int du,int dv,int dui) texttri dim/4 padding to every end 22x22 pelulamu => padding 6 struct { char*buf; int w,h; }demobuf; void rotozoom(int x0,int y0, char*map,int dim,int angle,int zoom) { int du,dv,u,v,x,y; char*d=demobuf.buf; /* coordinate clipping */ {int xp0,yp0; dim=(dim*zoom)>>8; if(x0+dim>bufw)xdim=demobuf.w-x0;else xdim=dim; if(y0+dim>bufh)ydim=demobuf.h-y0;else ydim=dim; if(x0<0){xdim+=x0;xp0=-dim-x0; x0=0;}else xp0=-dim; if(y0<0){ydim+=y0;yp0=-dim-y0; y0=0;}else yp0=-dim; if(xdim<=0 || ydim<=0)return; /* init rotations */ /* ...test here: if angle==0 => if zoom==256 etc */ du=sin(angle/256.0)*zoom; dv=cos(angle/256.0)*zoom; u=-du*xp0-dv*yp0; v=-dv*xp0+du*yp0; } /** innerl00p ***/ {int duo=-dv-du*xdim, dvo= du-dv*xdim, mod=demobuf.w-xdim; d+=ydim*demobuf.w+xdim; for(y=ydim;y;y--) { for(x=xdim;x;x--) { int ptr=(u&0xff00)+(v>>8); *d=(*d&map[ptr])|map[ptr+128]; d++; u+=du; v+=dv; } u+=duo; v+=dvo; d+=mod; } } } void pelulamu_animate() { /* - draw torso: thick lines & rectangles - draw head */ } Cvoid drawtext() { } /* buf,bufw,bufh x0,y0,dim,angle,zoom bufw,bufh put a 50% safebox around the stuff 128: 64 256x256 for 8x8 texture (font!): 16x16 space font: 5x5 textures 7x5 => 14x10 space 280 bytes/char => abt 10k of font data aspectratio adjustment ***** ** ** ******* ** ** ** ** ****** ** ** ****** ** ** ****** ***** ** ** ** ** ** ***** ****** ** ** ** ** ** ** ****** ******* ** **** ** ******* ******* ** **** ** ** for 16x16 texture: 32x32 space for 32x32 texture: 64x64 space for 64x64 texture: 128x128 space - no bigger possible here ------------- ------------- --.........-- --.........-- --.........-- --.........-- --....o....-- --.........-- --.........-- --.........-- --.........-- ------------- ------------- sqrt(2)*width,sqrt(2)*height 1.5*width,1.5*height delta always constant innerloop has constant du,dv outerloop: dv,-du + -------.-------- ------....------ -----.......---- ----..........-- ---............- ________ --.............. -..............- ..............-- ________ -............--- ---.........---- -----......----- -------...------ --------.-------- ____________ . ... ..... ....... ......... ........... ______ -........... ........... ____ ......... ....... ..... ... . _________ __-- sqrt ( (a/2)**2 + (a/sqrt(2))**2) ------.-----/ == sqrt(aa/4 + aa/2) == sqrt(3aa/4) == sqrt(3)/4 * a ==~ 0.433a -----...---/- ----.....-/-- ---.......--- a/sqrt(2) --.........-- -...........- ......o...... -...........- --.........-- ---.......--- ----.....---- -----...----- ------.------ square sprites |\ (a*sqrt(2))/2 a/2 | \ |__\ a/2 */ /* <#linux.fi:Goblet> mä tiedän tuon xazturin, se on sellanen about 140cm saatananpalvojapelle millä on pitkä musta takki ja tukka ja siitä tulee mulle aina mieleen addams family :D */