GameApi 28
Library used by GameApi Builder tool
Loading...
Searching...
No Matches
Web.hh
Go to the documentation of this file.
1
2#include "Effect.hh"
3#include "GraphI.hh"
4#include <sstream>
5#include <string>
6#include <fstream>
7
9{
10public:
11 virtual std::string DirectoryName() const=0;
12 virtual int NumFiles() const=0;
13 virtual std::string FileName(int val) const=0;
14 virtual std::string FileContents(int val) const=0;
15 virtual int NumDirs() const=0;
16 virtual Directory* Dir(int val) const=0;
17};
18
20void CreateFiles(Directory &d, std::string path);
21
22class File
23{
24public:
25 virtual std::string FileName() const=0;
26 virtual std::string Contents() const=0;
27};
28
29class EmptyDir : public Directory
30{
31public:
32 EmptyDir(std::string dirname)
33 : dirname(dirname) { }
34 std::string DirectoryName() const { return dirname; }
35 int NumFiles() const { return 0; }
36 std::string FileName(int val) const { return ""; }
37 std::string FileContents(int val) const { return ""; }
38 int NumDirs() const { return 0; }
39 Directory* Dir(int val) const { return 0; }
40private:
41 std::string dirname;
42};
43
44class FileInDir : public Directory
45{
46public:
47 FileInDir(Directory &d, File &f) : d(d), f(f) { }
48 std::string DirectoryName() const { return d.DirectoryName(); }
49 int NumFiles() const { return d.NumFiles()+1; }
50 std::string FileName(int val) const { if (val==0) return f.FileName(); else return d.FileName(val-1); }
51 std::string FileContents(int val) const
52 {
53 if (val==0) return f.Contents(); else return d.FileContents(val-1);
54 }
55 int NumDirs() const { return d.NumDirs(); }
56 Directory* Dir(int val) const { return d.Dir(val); }
57
58private:
59 Directory &d;
60 File &f;
61};
62
63class DirInDir : public Directory
64{
65public:
66 DirInDir(Directory &d, Directory &d_inside) : d(d), d_inside(d_inside) { }
67 std::string DirectoryName() const { return d.DirectoryName(); }
68 int NumFiles() const { return d.NumFiles(); }
69 std::string FileName(int val) const { return d.FileName(val); }
70 std::string FileContents(int val) const { return d.FileContents(val); }
71 int NumDirs() const { return d.NumDirs()+1; }
72 Directory* Dir(int val) const
73 {
74 if (val==0) return &d_inside;
75 else return d.Dir(val-1);
76 }
77
78private:
79 Directory &d;
80 Directory &d_inside;
81};
82
83
85{
86public:
87 virtual std::string Part() const=0;
88 virtual ~HtmlPart() { }
89};
90
91class CharacterPart : public HtmlPart
92{
93public:
94 CharacterPart(char c) : c(c) { }
95 std::string Part() const { return std::string(&c,&c+1); }
96private:
97 char c;
98};
99
100class ArrayPart : public HtmlPart
101{
102public:
103 template<class T>
104 ArrayPart(T beg, T end) : vec(beg, end) { }
105 std::string Part() const
106 {
107 int size = vec.size();
108 std::string res;
109 for(int i=0;i<size;i++)
110 {
111 HtmlPart *p = vec[i];
112 res += p->Part();
113 }
114 return res;
115 }
116private:
117 std::vector<HtmlPart*> vec;
118};
119
120class LinkPart : public HtmlPart
121{
122public:
123 LinkPart(std::string url, HtmlPart &text) : url(url), text(text) { }
124 std::string Part() const
125 {
126 std::string res;
127 res += "<a href=\"";
128 res += url;
129 res += "\">";
130 res += text.Part();
131 res += "</a>";
132 return res;
133 }
134private:
135 std::string url;
136 HtmlPart &text;
137};
138
139class TextPart : public HtmlPart
140{
141public:
142 TextPart(std::string contents) : contents(contents) { }
143 std::string Part() const { return contents; }
144private:
145 std::string contents;
146};
147
148class ImagePart : public HtmlPart
149{
150public:
151 ImagePart(std::string filename, int width, int height) : filename(filename), width(width), height(height) { }
152
153 std::string Part() const
154 {
155 std::string res;
156 res += "<img border=\"0\" src=\"";
157 res += filename;
158 res += "\" width=\"";
159 std::stringstream s;
160 s << width;
161 res += s.str();
162 std::stringstream s2;
163 s2 << height;
164 res += "\" height=\"";
165 res += s2.str();
166 res += "\">";
167 return res;
168 }
169private:
170 std::string filename;
171 int width, height;
172};
173
174class ColorChooseFunction : public Function<bool, Color>
175{
176public:
177 ColorChooseFunction(Color true_color, Color false_color) : t(true_color), f(false_color) { }
178 Color Index(bool b) const {
179 if (b) return t;
180 else return f;
181 }
182private:
183 Color t,f;
184};
185
186
187class TableFunction : public Function<Pos, HtmlPart*>
188{
189public:
190 TableFunction() : text(0) { }
192 {
193 std::stringstream s;
194 s << "(" << p.x << "," << p.y << ")";
195 delete text;
196 text = new TextPart(s.str());
197 return text;
198 }
199private:
200 mutable TextPart *text;
201};
202
203class HtmlTable : public HtmlPart
204{
205public:
206 HtmlTable(Bitmap<HtmlPart*> &bm) : bm(bm) { }
207 std::string Part() const
208 {
209 std::string s;
210 s+="<table border=\"0\" cellspacing=\"0\">";
211 for(int y=0;y<bm.SizeY();y++)
212 {
213 s+="<tr>";
214 for(int x=0;x<bm.SizeX();x++)
215 {
216 s+="<td>";
217 s+=bm.Map(x,y)->Part();
218 s+="</td>";
219 }
220 s+="</tr>";
221 }
222 s+="</table>";
223 return s;
224 }
225private:
227};
228
229class DocBody : public HtmlPart
230{
231public:
232 DocBody(std::string title, HtmlPart &body) : title(title), body(body) { }
233 std::string Part() const
234 {
235 std::string res;
236 res += "<html><head><title>";
237 res += title;
238 res += "</title></head>";
239 res += "<body TEXT=\"#000000\" BGCOLOR=\"#FFFFFF\" ACOLOR=\"#000000\">";
240 res += body.Part();
241 res += "</body></html>";
242 return res;
243 }
244private:
245 std::string title;
246 HtmlPart &body;
247};
248
249
250
251class HtmlFile : public File
252{
253public:
254 HtmlFile(std::string filename, HtmlPart &contents) : filename(filename), contents(contents) { }
255 virtual std::string FileName() const { return filename; }
256 virtual std::string Contents() const { return contents.Part(); }
257private:
258 std::string filename;
259 HtmlPart &contents;
260};
261
262class PpmFileReader : public Bitmap<Color>
263{
264public:
265 PpmFileReader(std::string filename) : filename(filename) { }
267 vis.register_obj(this);
268 }
270 {
271 flag = Read();
272 }
273 void Prepare() { flag = Read(); }
274
275 bool status() { return flag; }
276 virtual int SizeX() const { return sx; }
277 virtual int SizeY() const { return sy; }
278 virtual Color Map(int x, int y) const
279 {
280 if (x>=0 && x<sx && y>=0 && y<sy)
281 return Color(ref.buffer[x+y*ref.ydelta]);
282 return Color(0xff000000);
283 }
284
285 bool Read()
286 {
287 std::ifstream str(filename.c_str());
288 int ch = str.get();
289 if (ch!='P') return false;
290 int ch2 = str.get();
291 if (ch2!='3' && ch2!='A') return false;
292 str >> sx;
293 str >> sy;
294 str >> depth;
295 ref = BufferRef::NewBuffer(sx,sy);
296 for(int y=0;y<sy;y++)
297 for(int x=0;x<sx;x++)
298 {
299 int r,g,b;
300 int a = 255;
301 str>> r >> g >> b;
302 if (ch2=='A') str>>a;
303 unsigned int c = Color(r,g,b,a).Pixel();
304 ref.buffer[x+y*ref.ydelta] = c;
305 }
306 return true;
307 }
308
309private:
310 bool flag;
311 std::string filename;
312 int sx,sy,depth;
313 BufferRef ref;
314};
315
316class PpmFile : public File
317{
318public:
319 PpmFile(std::string filename, Bitmap<Color> &contents, bool alpha) : filename(filename), contents(contents), alpha(alpha) { std::cout << "Alpha: " << alpha << std::endl; contents.Prepare(); }
320 virtual std::string FileName() const { return filename; }
321 virtual std::string Contents() const
322 {
323 std::cout << "Alpha2: " << alpha << std::endl;
324 std::string res;
325 if (alpha)
326 res += "PA\n";
327 else
328 res += "P3\n";
329 res += Num(contents.SizeX());
330 res += " ";
331 res += Num(contents.SizeY());
332 res += " ";
333 res += "255\n";
334 for(int y=0;y<contents.SizeY();y++)
335 {
336 for(int x=0;x<contents.SizeX();x++)
337 {
338 Color c = contents.Map(x,y);
339 res += std::string(" ") + Num(c.r) + " " + Num(c.g) + " " + Num(c.b) + " ";
340 if (alpha) { res+= Num(c.alpha) + " "; }
341 }
342 res += "\n";
343 }
344 return res;
345 }
346
347 std::string Num(int i) const { std::stringstream s; s << i; return s.str(); }
348
349private:
350 std::string filename;
351 Bitmap<Color> &contents;
352 bool alpha;
353};
354
355class PgmFile : public File
356{
357public:
358 PgmFile(std::string filename, Bitmap<Color> &contents) : filename(filename), contents(contents) { contents.Prepare(); }
359 virtual std::string FileName() const { return filename; }
360 virtual std::string Contents() const
361 {
362 std::string res;
363 res += "P5\n";
364 res += Num(contents.SizeX());
365 res += " ";
366 res += Num(contents.SizeY());
367 res += " ";
368 res += "255\n";
369 for(int y=0;y<contents.SizeY();y++)
370 {
371 for(int x=0;x<contents.SizeX();x++)
372 {
373 Color c = contents.Map(x,y);
374 res += std::string(" ") + Num(c.alpha) + " ";
375 }
376 res += "\n";
377 }
378 return res;
379 }
380
381 std::string Num(int i) const { std::stringstream s; s << i; return s.str(); }
382
383private:
384 std::string filename;
385 Bitmap<Color> &contents;
386};
387
388
389class PngFile : public File
390{
391public:
392 PngFile(std::string filename,
393 Bitmap<Color> &contents,
394 std::string tempfilename = "./output/tmp.tmp",
395 std::string tempfilename2 = "./output/tmp2.tmp")
396 : filename(filename),
397 contents(contents),
398 tmpfilename(tempfilename),
399 tmpfilename2(tempfilename2)
400 { contents.Prepare(); }
401
402 virtual std::string FileName() const { return filename; }
403 virtual std::string Contents() const
404 {
405#if 0
406 std::ofstream f(tmpfilename.c_str());
407 PpmFile p(tmpfilename, contents);
408 f << p.Contents();
409 f.close();
410
411 std::ofstream f2(tmpfilename2.c_str());
412 PgmFile p2(tmpfilename2, contents);
413 f2 << p2.Contents();
414 f2.close();
415
416 FILE *ff = popen((std::string("pnmtopng ")+"-alpha " + tmpfilename2 + " " +tmpfilename).c_str(), "r");
417 std::string s;
418 while(!feof(ff))
419 {
420 char c;
421 size_t t = fread(&c, 1, 1, ff);
422 (void)t;
423 s+=c;
424 }
425 fclose(ff);
426 return s;
427#endif
428 return "";
429 }
430
431private:
432 std::string filename;
433 Bitmap<Color> &contents;
434 std::string tmpfilename;
435 std::string tmpfilename2;
436};
437
438class HtmlImage : public HtmlPart, public File
439{
440public:
441 HtmlImage(std::string png_filename, Bitmap<Color> &c, int width, int height) : png(png_filename, c), img(png_filename, width, height) { c.Prepare(); }
442 std::string Part() const { return img.Part(); }
443 std::string FileName() const { return png.FileName(); }
444 std::string Contents() const { return png.Contents(); }
445private:
446 PngFile png;
447 ImagePart img;
448};
449
450class PngBitmapFunction : public Function<Pos, HtmlImage*>
451{
452public:
453 PngBitmapFunction(std::string file_basename, Bitmap<Color> &bm, int sx, int sy) : filename(file_basename), bm(bm),sx(sx), sy(sy), img(0), constant(0) { bm.Prepare(); }
454 HtmlImage *Index(Pos c) const;
455 std::string Num(int i) const { std::stringstream s; s << i; return s.str(); }
456private:
457 std::string filename;
458 Bitmap<Color> &bm;
459 int sx,sy;
460 mutable HtmlImage *img;
461 mutable Bitmap<Color> *constant;
462};
463
464
466{
467public:
468 BitmapDirectory(Directory &d, Bitmap<File*> &bm) : d(d), bm(bm) { bm.Prepare(); }
469
470 virtual std::string DirectoryName() const { return d.DirectoryName(); }
471 virtual int NumFiles() const { return d.NumFiles()+bm.SizeX()*bm.SizeY(); }
472 virtual std::string FileName(int val) const
473 {
474 if (val < d.NumFiles())
475 {
476 return d.FileName(val);
477 }
478 else
479 {
480 int val_a = val-d.NumFiles();
481 int val_y = val_a / bm.SizeX();
482 int val_x = val_a - bm.SizeX()*val_y;
483
484 File *f = bm.Map(val_x,val_y);
485 return f->FileName();
486 }
487 }
488 virtual std::string FileContents(int val) const
489 {
490 if (val < d.NumFiles())
491 {
492 return d.FileContents(val);
493 }
494 else
495 {
496 int val_a = val-d.NumFiles();
497 int val_y = val_a / bm.SizeX();
498 int val_x = val_a - bm.SizeX()*val_y;
499
500 File *f = bm.Map(val_x,val_y);
501 return f->Contents();
502 }
503 }
504 virtual int NumDirs() const { return d.NumDirs(); }
505 virtual Directory* Dir(int val) const { return d.Dir(val); }
506private:
507 Directory &d;
508 Bitmap<File*> &bm;
509};
510
511void SaveFrameAnim(FrameAnim &f, Low_SDL_Surface *screen, std::string &output, float delta_time_between_frames, float total_time);
512void SaveFrameAnimToFile(FrameAnim &f, Low_SDL_Surface *screen, std::string filename, float delta_time_between_frames, float total_time);
513
514void CreateHtml();
515
516
517//
518// Javascript
519//
520
void SaveFrameAnim(FrameAnim &f, Low_SDL_Surface *screen, std::string &output, float delta_time_between_frames, float total_time)
Definition Web.cc:13
void CreateFiles(Directory &d)
Definition Web.cc:43
void SaveFrameAnimToFile(FrameAnim &f, Low_SDL_Surface *screen, std::string filename, float delta_time_between_frames, float total_time)
Definition Web.cc:31
void CreateHtml()
Definition Web.cc:74
ArrayPart(T beg, T end)
Definition Web.hh:104
std::string Part() const
Definition Web.hh:105
virtual Directory * Dir(int val) const
Definition Web.hh:505
virtual int NumDirs() const
Definition Web.hh:504
virtual std::string DirectoryName() const
Definition Web.hh:470
virtual int NumFiles() const
Definition Web.hh:471
BitmapDirectory(Directory &d, Bitmap< File * > &bm)
Definition Web.hh:468
virtual std::string FileContents(int val) const
Definition Web.hh:488
virtual std::string FileName(int val) const
Definition Web.hh:472
Definition GraphI.hh:826
virtual void Prepare()=0
std::string Part() const
Definition Web.hh:95
CharacterPart(char c)
Definition Web.hh:94
Definition GraphI.hh:622
virtual void register_obj(CollectInterface *i)=0
ColorChooseFunction(Color true_color, Color false_color)
Definition Web.hh:177
Color Index(bool b) const
Definition Web.hh:178
Definition VectorTools.hh:380
unsigned int Pixel()
Definition VectorTools.hh:426
int r
Definition VectorTools.hh:744
int alpha
Definition VectorTools.hh:745
int g
Definition VectorTools.hh:744
int b
Definition VectorTools.hh:744
Directory * Dir(int val) const
Definition Web.hh:72
std::string FileContents(int val) const
Definition Web.hh:70
std::string FileName(int val) const
Definition Web.hh:69
std::string DirectoryName() const
Definition Web.hh:67
int NumFiles() const
Definition Web.hh:68
DirInDir(Directory &d, Directory &d_inside)
Definition Web.hh:66
int NumDirs() const
Definition Web.hh:71
Definition Web.hh:9
virtual std::string FileName(int val) const =0
virtual int NumDirs() const =0
virtual std::string DirectoryName() const =0
virtual std::string FileContents(int val) const =0
virtual int NumFiles() const =0
virtual Directory * Dir(int val) const =0
DocBody(std::string title, HtmlPart &body)
Definition Web.hh:232
std::string Part() const
Definition Web.hh:233
std::string FileName(int val) const
Definition Web.hh:36
Directory * Dir(int val) const
Definition Web.hh:39
int NumDirs() const
Definition Web.hh:38
int NumFiles() const
Definition Web.hh:35
std::string FileContents(int val) const
Definition Web.hh:37
EmptyDir(std::string dirname)
Definition Web.hh:32
std::string DirectoryName() const
Definition Web.hh:34
std::string FileName(int val) const
Definition Web.hh:50
std::string DirectoryName() const
Definition Web.hh:48
Directory * Dir(int val) const
Definition Web.hh:56
int NumDirs() const
Definition Web.hh:55
FileInDir(Directory &d, File &f)
Definition Web.hh:47
std::string FileContents(int val) const
Definition Web.hh:51
int NumFiles() const
Definition Web.hh:49
Definition Web.hh:23
virtual std::string Contents() const =0
virtual std::string FileName() const =0
Definition Effect.hh:108
Definition EffectI.hh:11
HtmlFile(std::string filename, HtmlPart &contents)
Definition Web.hh:254
virtual std::string Contents() const
Definition Web.hh:256
virtual std::string FileName() const
Definition Web.hh:255
Definition Web.hh:439
HtmlImage(std::string png_filename, Bitmap< Color > &c, int width, int height)
Definition Web.hh:441
std::string Contents() const
Definition Web.hh:444
std::string Part() const
Definition Web.hh:442
std::string FileName() const
Definition Web.hh:443
Definition Web.hh:85
virtual std::string Part() const =0
virtual ~HtmlPart()
Definition Web.hh:88
HtmlTable(Bitmap< HtmlPart * > &bm)
Definition Web.hh:206
std::string Part() const
Definition Web.hh:207
Definition Web.hh:149
std::string Part() const
Definition Web.hh:153
ImagePart(std::string filename, int width, int height)
Definition Web.hh:151
std::string Part() const
Definition Web.hh:124
LinkPart(std::string url, HtmlPart &text)
Definition Web.hh:123
Definition Web.hh:356
virtual std::string FileName() const
Definition Web.hh:359
PgmFile(std::string filename, Bitmap< Color > &contents)
Definition Web.hh:358
virtual std::string Contents() const
Definition Web.hh:360
std::string Num(int i) const
Definition Web.hh:381
std::string Num(int i) const
Definition Web.hh:455
PngBitmapFunction(std::string file_basename, Bitmap< Color > &bm, int sx, int sy)
Definition Web.hh:453
HtmlImage * Index(Pos c) const
Definition Web.cc:141
Definition Web.hh:390
virtual std::string FileName() const
Definition Web.hh:402
virtual std::string Contents() const
Definition Web.hh:403
PngFile(std::string filename, Bitmap< Color > &contents, std::string tempfilename="./output/tmp.tmp", std::string tempfilename2="./output/tmp2.tmp")
Definition Web.hh:392
PpmFileReader(std::string filename)
Definition Web.hh:265
void Prepare()
Definition Web.hh:273
bool status()
Definition Web.hh:275
virtual int SizeY() const
Definition Web.hh:277
void HeavyPrepare()
Definition Web.hh:269
bool Read()
Definition Web.hh:285
virtual Color Map(int x, int y) const
Definition Web.hh:278
void Collect(CollectVisitor &vis)
Definition Web.hh:266
virtual int SizeX() const
Definition Web.hh:276
Definition Web.hh:317
PpmFile(std::string filename, Bitmap< Color > &contents, bool alpha)
Definition Web.hh:319
virtual std::string Contents() const
Definition Web.hh:321
std::string Num(int i) const
Definition Web.hh:347
virtual std::string FileName() const
Definition Web.hh:320
HtmlPart * Index(Pos p) const
Definition Web.hh:191
TableFunction()
Definition Web.hh:190
Definition Web.hh:140
TextPart(std::string contents)
Definition Web.hh:142
std::string Part() const
Definition Web.hh:143
d
Definition meshpage.php:3895
str
Definition meshpage.php:1778
line height
Definition meshpage.php:3536
n< br > font size
Definition meshpage.php:3536
url
Definition meshpage.php:1781
double f(const std::string &, double, bool) noexcept
Definition profile_cpp_calls_2.cpp:4
int f2(char c)
Definition test.cpp:51
Definition Buffer.hh:32
static BufferRef NewBuffer(int width, int height)
Definition Buffer.cc:36
Definition GameApi_low.hh:679
Definition test.cpp:10
int x
Definition test.cpp:10
int y
Definition test.cpp:10
Definition GameApi.h:42