2 // linux/gcc: cc transtest.c ../rfxswf.c -funsigned-char -o transtest -lm -ljpeg; cp transtest /home/www/cgi-bin/transtest
11 #define BANNER_TEXT "reflex"
14 #define ID_BANNER 2001
15 #define ID_HIGHLIGHT 2002
16 #define ID_BUTTON 2003
17 #define ID_BITMAP 2004
21 int sX[] = { a,-a, a,-a, a,-a, a,-a};
22 int sY[] = { a, a,-a,-a, a, a,-a,-a};
23 int sZ[] = { a, a, a, a,-a,-a,-a,-a};
29 int sin_[512],cos_[512];
35 { d = ((double)i)/128*3.14159;
36 sin_[i] = (int)(sin(d)*256);
37 cos_[i] = (int)(cos(d)*256);
41 void ShapeSquare(LPTAG t,LPSHAPE s,int p1,int p2,int p3,int p4,int dx,int dy)
44 if (((dX[p2]-dX[p1])*(dY[p3]-dY[p1])-(dX[p3]-dX[p1])*(dY[p2]-dY[p1]))<0) return;
46 ShapeSetMove(t,s,dX[p1]+dx,dY[p1]+dy);
47 ShapeSetLine(t,s,dX[p2]-dX[p1],dY[p2]-dY[p1]);
48 ShapeSetLine(t,s,dX[p3]-dX[p2],dY[p3]-dY[p2]);
49 ShapeSetLine(t,s,dX[p4]-dX[p3],dY[p4]-dY[p3]);
50 ShapeSetLine(t,s,dX[p1]-dX[p4],dY[p1]-dY[p4]);
54 void mapBox(int xw,int yw,int zw)
56 int x1,y1,z1,x2,y2,z2,x3,y3,z3;
68 y1 = ( y*cos_[xw]- z*sin_[xw])>>8;
69 z1 = ( y*sin_[xw]+ z*cos_[xw])>>8;
72 x2 = (x1*cos_[yw]+z1*sin_[yw])>>8;
75 x3 = (x2*cos_[zw]-y2*sin_[zw])>>8;
76 y3 = (x2*sin_[zw]+y2*cos_[zw])>>8;
77 z3 = (z1*cos_[yw]-x1*sin_[yw])>>8;
79 dX[i] = x3*4000/(z3+950);
80 dY[i] = y3*4000/(z3+950);
87 SFIXED SP(SFIXED a1,SFIXED a2,SFIXED b1,SFIXED b2)
89 a = (S64)a1*(S64)b1+(S64)a2*(S64)b2;
90 return (SFIXED)(a>>16);
92 SFIXED QFIX(int zaehler,int nenner) // bildet Quotient von zwei INTs in SFIXED
93 { S64 z = zaehler<<16;
94 S64 a = z/(S64)nenner;
99 LPMATRIX MatrixJoin(LPMATRIX d,LPMATRIX s1,LPMATRIX s2)
102 if (!s1) return (s2)?(LPMATRIX)memcpy(d,s2,sizeof(MATRIX)):NULL;
103 if (!s2) return (LPMATRIX)memcpy(d,s1,sizeof(MATRIX));
105 d->tx = s1->tx + s2->tx;
106 d->ty = s1->ty + s2->ty;
108 d->sx = SP(s1->sx,s1->r1,s2->sx,s2->r0);
109 d->sy = SP(s1->r0,s1->sy,s2->r1,s2->sy);
110 d->r0 = SP(s1->r0,s1->sy,s2->sx,s2->r0);
111 d->r1 = SP(s1->sx,s1->r1,s2->r1,s2->sy);
113 //DumpMatrix(NULL,d);
118 LPMATRIX MatrixMapTriangle(LPMATRIX m,int dx,int dy,int x0,int y0,
119 int x1,int y1,int x2,int y2)
126 if ((!dx)||(!dy)) return NULL; // check DIV by zero
130 m->sx = QFIX(dx1,dx);
131 m->sy = QFIX(dy2,dy);
132 m->r0 = QFIX(dy1,dx);
133 m->r1 = QFIX(dx2,dy);
138 int main (int argc,char ** argv)
144 S32 width = 800,height = 800;
146 int fs,ls; // line & fillstyle
154 f = open("Arial.efont",O_RDONLY);
156 { if (FAILED(FontImport(f,&font)))
157 { fprintf(stderr,"Font import failed\n");
163 { fprintf(stderr,"Font not found\n");
168 FontSetID(font,ID_FONT);
170 FontUse(&use,BANNER_TEXT);
171 FontReduce(font,&use);
175 memset(&swf,0x00,sizeof(SWF));
178 swf.FrameRate = 0x4000;
179 swf.MovieSize.xmax = 4*width;
180 swf.MovieSize.ymax = 4*height;
182 swf.FirstTag = InsertTag(NULL,ST_SETBACKGROUNDCOLOR);
190 t = InsertTag(t,ST_DEFINEFONT);
192 FontSetDefine(t,font);
194 t = InsertTag(t,ST_DEFINEFONTINFO);
198 t = InsertTag(t,ST_DEFINETEXT);
200 SetU16(t,ID_BANNER); // ID
210 TextCountBits(font,BANNER_TEXT,80,&gbits,&abits);
219 TextSetInfoRecord(t,font,height/4,&rgb,0,200);
220 TextSetCharRecord(t,font,BANNER_TEXT,80,gbits,abits);
224 t = InsertTag(t,ST_DEFINETEXT);
226 SetU16(t,ID_HIGHLIGHT); // ID
236 TextCountBits(font,BANNER_TEXT,80,&gbits,&abits);
245 TextSetInfoRecord(t,font,height/4,&rgb,0,200);
246 TextSetCharRecord(t,font,BANNER_TEXT,80,gbits,abits);
250 t = InsertTag(t,ST_DEFINEBUTTON);
257 SetU16(t,ID_BUTTON); // ID
258 ButtonSetRecord(t,BS_UP,ID_BANNER,1,&m,NULL);
259 ButtonSetRecord(t,BS_DOWN|BS_HIT|BS_OVER,ID_HIGHLIGHT,1,&m,NULL);
260 SetU8(t,0); // End of Button Records
261 SetU8(t,0); // End of Action Records
264 t = InsertTag(t,ST_PLACEOBJECT2);
266 ObjectPlace(t,ID_BUTTON,1,NULL,NULL,NULL);
268 t = InsertTag(t,ST_DEFINEBITSJPEG2);
271 SetJPEGBits(t,"eye.jpg",QUALITY);
273 t = InsertTag(t,ST_DEFINESHAPE);
276 rgb.b = rgb.g = rgb.r = 0x00;
277 // ls = ShapeAddLineStyle(s,40,&rgb);
281 fs = ShapeAddBitmapFillStyle(s,&m,ID_BITMAP,0);
283 SetU16(t,ID_SHAPE); // ID
294 ShapeSetAll(t,s,0,0,ls,fs,0);
295 ShapeSetLine(t,s,width,0);
296 ShapeSetLine(t,s,-width,height);
297 ShapeSetLine(t,s,0,-height);
303 for (frame=0;frame<64;frame++)
306 m1.sy = m1.sx = (int)(cos(((float)(frame))/32*3.141)*0x10000);
307 m1.r0 = (int)(sin(((float)(frame))/32*3.141)*0x10000);
309 m1.tx = width+frame*4; m1.ty = height;
311 m2.sy = m2.sx = (int)(cos(((float)(64-frame))/32*3.141)*0x10000);
312 m2.r0 = (int)(sin(((float)(64-frame))/32*3.141)*0x10000);
314 m2.tx = width; m2.ty = height;
316 MatrixJoin(&m,&m1,&m2); */
318 int dx0 = width; // Konstanten der Shapes
321 int px0 = 2*width; // Zielpunkte des Mappings
325 int py1 = 2*width-frame*4;
327 int px2 = 2*width-frame*8;
330 MatrixMapTriangle(&m,dx0,dy0,px0,py0,px1,py1,px2,py2);
332 t = InsertTag(t,ST_PLACEOBJECT2);
335 ObjectPlace(t,ID_SHAPE,1,&m,NULL,NULL);
337 ObjectMove(t,1,&m,NULL);
339 t = InsertTag(t,ST_SHOWFRAME);
343 t = InsertTag(t,ST_END);