2 // linux/gcc: cc texbox_ac.c ../rfxswf.c -funsigned-char -o texbox -lmingac -lm -ljpeg; cp texbox /home/www/cgi-bin/texbox
\r
7 #include "../rfxswf.h"
\r
8 #include "../mingac.h" // Action Compiler of MING library
\r
12 #define BANNER_TEXT "reflex"
\r
14 #define ID_FONT 2000
\r
15 #define ID_BANNER 2001
\r
16 #define ID_HIGHLIGHT 2002
\r
17 #define ID_BUTTON 2003
\r
18 #define ID_BITMAP 2004
\r
19 #define ID_SHAPE 2005
\r
20 #define ID_SHAPE2 2006
\r
23 int sX[] = { a,-a, a,-a, a,-a, a,-a};
\r
24 int sY[] = { a, a,-a,-a, a, a,-a,-a};
\r
25 int sZ[] = { a, a, a, a,-a,-a,-a,-a};
\r
28 #define PRECISION 16
\r
34 int square_visible[6] = {0,0,0,0,0,0};
\r
35 int square_depth[6][2] = {{2,3},{4,5},{6,7},{8,9},{10,11},{12,13}};
\r
36 int square_light[6] = {0,0,64,64,-64,-64};
\r
38 int sin_[512],cos_[512];
\r
44 { d = ((double)i)/128*3.14159;
\r
45 sin_[i] = (int)(sin(d)*(1<<PRECISION));
\r
46 cos_[i] = (int)(cos(d)*(1<<PRECISION));
\r
50 LPTAG MapSquare(LPTAG t,int dx0,int dy0,int p1,int p2,int p3,int p4,int dx,int dy,int square)
\r
55 { GetCXForm(NULL,&cx,1);
\r
56 cx.r1 = cx.b1 = cx.g1 = square_light[square];
\r
59 if (((dX[p2]-dX[p1])*(dY[p3]-dY[p1])-(dX[p3]-dX[p1])*(dY[p2]-dY[p1]))<0)
\r
60 { if (square_visible[square])
\r
61 { t = InsertTag(t,ST_REMOVEOBJECT2); SetU16(t,square_depth[square][0]);
\r
62 t = InsertTag(t,ST_REMOVEOBJECT2); SetU16(t,square_depth[square][1]);
\r
64 square_visible[square] = 0;
\r
68 t = InsertTag(t,ST_PLACEOBJECT2);
\r
70 MatrixMapTriangle(&m,dx0,dy0,dX[p1]+dx,dY[p1]+dy,
\r
71 dX[p2]+dx,dY[p2]+dy,
\r
72 dX[p4]+dx,dY[p4]+dy);
\r
74 if (!square_visible[square])
\r
75 ObjectPlace(t,ID_SHAPE,square_depth[square][0],&m,SHADE?&cx:NULL,NULL);
\r
77 ObjectMove(t,square_depth[square][0],&m,SHADE?&cx:NULL);
\r
79 t = InsertTag(t,ST_PLACEOBJECT2);
\r
81 MatrixMapTriangle(&m,dx0,dy0,dX[p3]+dx,dY[p3]+dy,
\r
82 dX[p4]+dx,dY[p4]+dy,
\r
83 dX[p2]+dx,dY[p2]+dy);
\r
85 if (!square_visible[square])
\r
86 ObjectPlace(t,ID_SHAPE2,square_depth[square][1],&m,SHADE?&cx:NULL,NULL);
\r
88 ObjectMove(t,square_depth[square][1],&m,SHADE?&cx:NULL);
\r
90 square_visible[square] = 1;
\r
95 void mapBox(int xw,int yw,int zw)
\r
97 int x1,y1,z1,x2,y2,z2,x3,y3,z3;
\r
109 y1 = ( y*cos_[xw]- z*sin_[xw])>>PRECISION;
\r
110 z1 = ( y*sin_[xw]+ z*cos_[xw])>>PRECISION;
\r
113 x2 = (x1*cos_[yw]+z1*sin_[yw])>>PRECISION;
\r
116 x3 = (x2*cos_[zw]-y2*sin_[zw])>>PRECISION;
\r
117 y3 = (x2*sin_[zw]+y2*cos_[zw])>>PRECISION;
\r
118 z3 = (z1*cos_[yw]-x1*sin_[yw])>>PRECISION;
\r
120 dX[i] = x3*4000/(z3+950);
\r
121 dY[i] = y3*4000/(z3+950);
\r
126 void mapLights(int xw,int yw,int zw)
\r
128 int x1,y1,z1,x2,y2,z2,x3,y3,z3;
\r
130 int y[] = {0,0,0,0,256,-256};
\r
131 int x[] = {0,0,256,-256,0,0};
\r
132 int z[] = {256,-256,0,0,0,0};
\r
134 int lz = 256; // lightvector
\r
135 int lx = 200, ly = 200;
\r
138 { y1 = (y[i]*cos_[xw]-z[i]*sin_[xw])>>PRECISION;
\r
139 z1 = (y[i]*sin_[xw]+z[i]*cos_[xw])>>PRECISION;
\r
142 x2 = (x1*cos_[yw]+z1*sin_[yw])>>PRECISION;
\r
144 z2 = (z1*cos_[yw]-x1*sin_[yw])>>PRECISION;
\r
146 x3 = (x2*cos_[zw]-y2*sin_[zw])>>PRECISION;
\r
147 y3 = (x2*sin_[zw]+y2*cos_[zw])>>PRECISION;
\r
150 square_light[i] = -128-((x3*lx + y3*ly + z3*lz)>>9);
\r
155 int main (int argc,char ** argv)
\r
161 S32 width = 800,height = 800;
\r
163 int fs,ls; // line & fillstyle
\r
171 InitCompiler(AC_DEFAULT);
\r
173 f = open("Arial.efont",O_RDONLY);
\r
175 { if (FAILED(FontImport(f,&font)))
\r
176 { fprintf(stderr,"Font import failed\n");
\r
182 { fprintf(stderr,"Font not found\n");
\r
187 FontSetID(font,ID_FONT);
\r
188 FontInitUsage(&use);
\r
189 FontUse(&use,BANNER_TEXT);
\r
190 FontReduce(font,&use);
\r
194 memset(&swf,0x00,sizeof(SWF));
\r
196 swf.FileVersion = 4;
\r
197 swf.FrameRate = 0x4000;
\r
198 swf.MovieSize.xmax = 4*width;
\r
199 swf.MovieSize.ymax = 4*height;
\r
201 swf.FirstTag = InsertTag(NULL,ST_SETBACKGROUNDCOLOR);
\r
209 t = InsertTag(t,ST_DEFINEFONT);
\r
211 FontSetDefine(t,font);
\r
213 t = InsertTag(t,ST_DEFINEFONTINFO);
\r
215 FontSetInfo(t,font);
\r
217 t = InsertTag(t,ST_DEFINETEXT);
\r
219 SetU16(t,ID_BANNER); // ID
\r
229 TextCountBits(font,BANNER_TEXT,80,&gbits,&abits);
\r
238 TextSetInfoRecord(t,font,height/4,&rgb,0,200);
\r
239 TextSetCharRecord(t,font,BANNER_TEXT,80,gbits,abits);
\r
243 t = InsertTag(t,ST_DEFINETEXT);
\r
245 SetU16(t,ID_HIGHLIGHT); // ID
\r
247 r.xmin = 0; r.ymin = 0; r.xmax = 800; r.ymax = 400;
\r
251 TextCountBits(font,BANNER_TEXT,80,&gbits,&abits);
\r
260 TextSetInfoRecord(t,font,height/4,&rgb,0,200);
\r
261 TextSetCharRecord(t,font,BANNER_TEXT,80,gbits,abits);
\r
265 t = InsertTag(t,ST_DEFINEBUTTON);
\r
267 GetMatrix(NULL,&m);
\r
272 SetU16(t,ID_BUTTON); // ID
\r
273 ButtonSetRecord(t,BS_UP,ID_BANNER,1,&m,NULL);
\r
274 ButtonSetRecord(t,BS_DOWN|BS_HIT|BS_OVER,ID_HIGHLIGHT,1,&m,NULL);
\r
275 SetU8(t,0); // End of Button Records
\r
277 ActionCompile(t,"if (status==1) { status = 0; stop();} else { status=1; play();}");
\r
280 t = InsertTag(t,ST_PLACEOBJECT2);
\r
282 ObjectPlace(t,ID_BUTTON,1,NULL,NULL,NULL);
\r
284 t = InsertTag(t,ST_DEFINEBITSJPEG2);
\r
286 SetU16(t,ID_BITMAP);
\r
287 SetJPEGBits(t,"eye.jpg",QUALITY);
\r
289 t = InsertTag(t,ST_DEFINESHAPE);
\r
292 rgb.b = rgb.g = rgb.r = 0x00;
\r
293 ls = ShapeAddLineStyle(s,10,&rgb);
\r
298 m.sx = m.sy = width<<8;
\r
300 fs = ShapeAddBitmapFillStyle(s,&m,ID_BITMAP,0);
\r
302 SetU16(t,ID_SHAPE); // ID
\r
304 r.xmin = 0; r.ymin = 0;
\r
305 r.xmax = 2*width; r.ymax = 2*height;
\r
308 SetShapeHeader(t,s);
\r
309 ShapeSetAll(t,s,width,0,0,fs,0);
\r
310 ShapeSetLine(t,s,-width,height);
\r
311 ShapeSetStyle(t,s,ls,fs,0);
\r
312 ShapeSetLine(t,s,0,-height);
\r
313 ShapeSetLine(t,s,width,0);
\r
318 t = InsertTag(t,ST_DEFINESHAPE);
\r
321 rgb.b = rgb.g = rgb.r = 0x00;
\r
322 ls = ShapeAddLineStyle(s,10,&rgb);
\r
327 m.sx = m.sy = -(width<<8);
\r
329 fs = ShapeAddBitmapFillStyle(s,&m,ID_BITMAP,0);
\r
331 SetU16(t,ID_SHAPE2); // ID
\r
333 r.xmin = 0; r.ymin = 0;
\r
334 r.xmax = 2*width; r.ymax = 2*height;
\r
337 SetShapeHeader(t,s);
\r
338 ShapeSetAll(t,s,width,0,0,fs,0);
\r
339 ShapeSetLine(t,s,-width,height);
\r
340 ShapeSetStyle(t,s,ls,fs,0);
\r
341 ShapeSetLine(t,s,0,-height);
\r
342 ShapeSetLine(t,s,width,0);
\r
347 for (frame=0;frame<256;frame++)
\r
348 { int dc = 3; // whitespace correction
\r
350 mapBox(frame<<1,frame<<1,frame);
\r
351 if (SHADE) mapLights(frame<<1,frame<<1,frame);
\r
353 t = MapSquare(t,width-dc,height-dc,0,2,3,1,2*width,2*height,0);
\r
354 t = MapSquare(t,width-dc,height-dc,4,5,7,6,2*width,2*height,1);
\r
355 t = MapSquare(t,width-dc,height-dc,0,4,6,2,2*width,2*height,2);
\r
356 t = MapSquare(t,width-dc,height-dc,1,3,7,5,2*width,2*height,3);
\r
357 t = MapSquare(t,width-dc,height-dc,0,1,5,4,2*width,2*height,4);
\r
358 t = MapSquare(t,width-dc,height-dc,2,6,7,3,2*width,2*height,5);
\r
360 t = InsertTag(t,ST_SHOWFRAME);
\r
363 t = InsertTag(t,ST_DOACTION);
\r
365 ActionCompile(t,"stop();");
\r
367 t = InsertTag(t,ST_END);
\r