Mercurial > hg > Members > e085722 > Cerium
comparison Renderer/Test/viewer.cc @ 0:04e28d8d3c6f
first commit
author | Daiki KINJYO <e085722@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 08 Nov 2010 01:23:25 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:04e28d8d3c6f |
---|---|
1 #include <math.h> | |
2 #include <stdlib.h> | |
3 #include "SceneGraphRoot.h" | |
4 #include "MainLoop.h" | |
5 #include "viewer.h" | |
6 | |
7 | |
8 // prototype | |
9 static void object_move_rotation(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h); | |
10 static void object_collision(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h, SceneGraphPtr tree); | |
11 static void object_move_translation(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h); | |
12 | |
13 int light_sysswitch = 1; | |
14 int light_num = 4; | |
15 | |
16 void LightSysSwitch(Viewer *sgroot) { | |
17 if (light_sysswitch == 1) { | |
18 sgroot->OnLightSysSwitch(); | |
19 } else if (light_sysswitch == 0) { | |
20 sgroot->OffLightSysSwitch(); | |
21 } | |
22 } | |
23 | |
24 | |
25 | |
26 | |
27 static void | |
28 object_move_rotation(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h) | |
29 { | |
30 SceneGraphRoot *sgroot = (SceneGraphRoot *)sgroot_; | |
31 Pad *pad = sgroot->getController(); | |
32 if (pad->circle.isPush()) { | |
33 node->set_move_collision(object_move_translation, object_collision); | |
34 } | |
35 if (pad->left.isHold()) { | |
36 node->angle[1] += 10; | |
37 } else if (pad->right.isHold()) { | |
38 node->angle[1] -= 10; | |
39 } | |
40 if (pad->up.isHold()) { | |
41 node->angle[0] += 10; | |
42 } else if (pad->down.isHold()) { | |
43 node->angle[0] -= 10; | |
44 } | |
45 | |
46 | |
47 } | |
48 | |
49 static void | |
50 object_move_translation(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h) | |
51 { | |
52 SceneGraphRoot *sgroot = (SceneGraphRoot *)sgroot_; | |
53 Pad *pad = sgroot->getController(); | |
54 | |
55 if (pad->circle.isPush()) { | |
56 node->set_move_collision(object_move_rotation, object_collision); | |
57 } | |
58 | |
59 if (pad->left.isHold()) { | |
60 node->xyz[0] -= 10; | |
61 } else if (pad->right.isHold()) { | |
62 node->xyz[0] += 10; | |
63 } | |
64 if (pad->up.isHold()) { | |
65 node->xyz[1] -= 10; | |
66 } else if (pad->down.isHold()) { | |
67 node->xyz[1] += 10; | |
68 } | |
69 | |
70 | |
71 } | |
72 | |
73 | |
74 static void | |
75 object_collision(SceneGraphPtr node, void *sgroot_, int screen_w, | |
76 int screen_h, SceneGraphPtr tree) | |
77 { | |
78 // if (node->xyz[1] > screen_h - object_radius) { | |
79 // node->xyz[1] = screen_h - object_radius; | |
80 | |
81 // vy *= e; | |
82 // if (vy > -g && vy < 0) { | |
83 // vy = 0.0; | |
84 // node->set_move_collision(object_move_idle, object_collision_idle); | |
85 // } | |
86 // } | |
87 } | |
88 | |
89 char *xmlfile; | |
90 #define MAX_ROOT 100 | |
91 char *parts[MAX_ROOT ]; | |
92 int parts_cnt; | |
93 | |
94 MainLoopPtr | |
95 viewer::init(Viewer *sgroot, int screen_w, int screen_h) | |
96 { | |
97 | |
98 LightSysSwitch(sgroot); | |
99 | |
100 SceneGraphPtr object; | |
101 | |
102 for (int i = 0; i < light_num; i++) { | |
103 SceneGraphPtr light = sgroot->getLight(i); | |
104 sgroot->OnLightSwitch(i); | |
105 light->xyz[0] = screen_w / 2; | |
106 light->xyz[1] = screen_h / 2; | |
107 light->xyz[2] = -100; | |
108 } | |
109 | |
110 | |
111 // 固定した値で srandom すると、毎回同じ、random() 列が生成される | |
112 // random な値が欲しいなら、man random に方法が書いてあります。 | |
113 srandom(100); | |
114 | |
115 sgroot->createFromXMLfile(xmlfile); | |
116 | |
117 object = sgroot->createSceneGraph(); | |
118 object->set_move_collision(object_move_rotation, object_collision); | |
119 | |
120 object->xyz[0] = screen_w/2; | |
121 object->xyz[1] = screen_h/2;; | |
122 object->xyz[2] = 30.0f; | |
123 | |
124 for(int i=0;i<parts_cnt; i++) { | |
125 object->addChild(sgroot->createSceneGraph(parts[i])); | |
126 } | |
127 sgroot->setSceneData(object); | |
128 | |
129 return sgroot; | |
130 } | |
131 | |
132 extern Application * | |
133 application() { | |
134 return new viewer(); | |
135 } | |
136 | |
137 const char *usr_help_str = "Usage: ./test_nogl [OPTION]\n"; | |
138 | |
139 extern int init(TaskManager *manager, int argc, char *argv[]); | |
140 extern void task_initialize(); | |
141 static void TMend(TaskManager *manager); | |
142 | |
143 int | |
144 TMmain(TaskManager *manager, int argc, char *argv[]) | |
145 { | |
146 task_initialize(); | |
147 manager->set_TMend(TMend); | |
148 | |
149 | |
150 for(int i=0;i<argc;i++) { | |
151 if (strcmp(argv[i],"-sg") == 0 && i+1<=argc) { | |
152 xmlfile = argv[i+1]; | |
153 } else if (strcmp(argv[i],"-name") == 0 && i+1<=argc) { | |
154 parts[parts_cnt++] = argv[i+1]; | |
155 } else if (strcmp(argv[i],"-lightsys") == 0 && i+1<=argc) { | |
156 if (strcmp(argv[i],"on") == 0) { | |
157 light_sysswitch = 1; | |
158 } else if (strcmp(argv[i],"off") == 0) { | |
159 light_sysswitch = 0; | |
160 } | |
161 } else if (strcmp(argv[i],"-lightnum") == 0 && i+1<=argc) { | |
162 light_num = atoi(argv[i+1]); | |
163 } | |
164 } | |
165 return init(manager, argc, argv); | |
166 | |
167 } | |
168 | |
169 void | |
170 TMend(TaskManager *manager) | |
171 { | |
172 printf("test_nogl end\n"); | |
173 } | |
174 | |
175 /* end */ | |
176 |