]> git.jsancho.org Git - dungeon-master.git/blob - src/main.cpp
Register procedures
[dungeon-master.git] / src / main.cpp
1 #include <irrlicht/irrlicht.h>
2 #include <libguile.h>
3
4 using namespace irr;
5 using namespace core;
6 using namespace video;
7
8 SCM register_generator(SCM name, SCM proc) {
9   printf ("Register: %s\n", scm_to_locale_string(name));
10   scm_call_0(proc);
11   return SCM_UNSPECIFIED;
12 }
13
14 int main()
15 {
16   scm_init_guile();
17   scm_c_define_gsubr("register-generator", 2, 0, 0, (scm_t_subr)register_generator);
18   scm_primitive_load(scm_from_locale_string("plugins/default/main.scm"));
19
20   IrrlichtDevice* device =
21     createDevice(EDT_OPENGL,
22                  dimension2d<u32>(640, 480), 16,
23                  false, false, false, 0);
24   if (!device)
25     return 1;
26
27   IVideoDriver* driver = device->getVideoDriver();
28
29   f32 bg_r = 255.0f;
30   f32 bg_g = 255.0f;
31   f32 bg_b = 255.0f;
32
33   bool fadeOut = -1;
34
35   u32 then = device->getTimer()->getTime();
36
37   const f32 fadeRate = 0.1f;
38
39   while (device->run())
40     {
41       const u32 now = device->getTimer()->getTime();
42       const f32 frameDeltaTime = (f32)(now - then);
43       then  = now;
44
45       if (bg_r <= 0.0f) fadeOut = false;
46       else if (bg_r >= 255.0f) fadeOut = true;
47
48       if (fadeOut)
49         {
50           bg_r -= fadeRate * frameDeltaTime;
51           bg_g -= fadeRate * frameDeltaTime;
52           bg_b -= fadeRate * frameDeltaTime;
53         }
54       else
55         {
56           bg_r += fadeRate * frameDeltaTime;
57           bg_g += fadeRate * frameDeltaTime;
58           bg_b += fadeRate * frameDeltaTime;
59         }
60           
61       if (bg_r <= 0.0f)
62         bg_r = bg_b = bg_g = 0.0f;
63       else if (bg_r >= 255.0f)
64         bg_r = bg_b = bg_g = 255.0f;
65       
66       driver->beginScene(true, true, SColor(255, (u32)bg_r,
67                                             (u32)bg_g, (u32)bg_b));
68       driver->endScene();
69     }
70
71   device->drop();
72
73   return 0;
74 }