GameApi 28
Library used by GameApi Builder tool
Loading...
Searching...
No Matches
GameRunner.hh
Go to the documentation of this file.
1
2#include "Serialize.hh"
3#include "Graph.hh"
4#include "GameApi.hh"
5#include "State.hh"
6
8
9struct SpritePriv;
10
11Sprite *sprite_from_handle(GameApi::Env &e, SpritePriv &env, BitmapHandle *handle, int bbm_choose=-1);
12
14{
15 std::map<int, ArrayRender*> rend;
16 std::map<int, StateBitmaps*> states;
17 ~PolyPriv();
18};
19
20
22{
23 //ArrayRender rend;
24 //MOVED To env: std::map<int, ArrayRender*> renders;
25 std::map<int, Sprite*> sprites;
26 std::map<int, Sprite*> sprites2;
27 std::vector<Sprite**> arrays;
29};
30
31
32#if 0
33class Sequencer2
34{
35 // ranges [0..x] are described by two events, 0, and x.
36public:
37 // time
38 virtual int NumEvents() const=0;
39 virtual EventInfo Event(int i) const=0;
40
41 virtual int NumLinks() const=0;
42 virtual LinkageInfo Linkage(int i) const=0;
43 virtual LinkInfo Links(int i) const=0;
44 // positions
45 virtual int NumPositions() const=0;
46 virtual PosInfo Positions(int i) const=0;
47 // states
48 virtual int NumStates() const=0;
49 virtual StateInfo2 States(int i) const=0;
50};
51#endif
52
54
55
57{
58public:
59 GameRunner(GameApi::Env &e, Sequencer2 &seq, int start_state) : seq(seq), start_state(start_state), current_time(0.0),e(e) { }
60 void run();
61private:
62 int MoveToNextState(int state, float time)
63 {
64 return state;
65 }
66 void Alloc()
67 {
68 int s = seq.NumStates();
69 for(int st=0;st<s;st++)
70 {
71 StateInfo2 si = seq.States(st);
72 std::vector<ArrayRender*> *vec = new std::vector<ArrayRender*>;
73 state_rends.push_back(vec);
74 if (si.enable_obj_array)
75 {
76 int c = si.enable_obj_array->Size();
77 for(int i=0;i<c;i++)
78 {
79 vec->push_back(new ArrayRender(g_low));
80 }
81 }
82 PrepareState(st);
83 }
84 }
85 void PrepareState(int state)
86 {
87 StateInfo2 st = seq.States(current_state);
88 if (st.enable_obj_array)
89 for(int i=0;i<st.enable_obj_array->Size();i++)
90 {
91 if (st.enable_obj_array->Index(i))
92 { // object number i is enabled in this state
93 PosInfo p = seq.Positions(i);
94 Point pos(0.0,0.0,0.0);
95 int link_id = p.link_id;
96 LinkInfo linkinfo = seq.Links(link_id);
97 FaceCollPolyHandle *polygon_start = linkinfo.polygon_start;
98 //FaceCollPolyHandle *polygon_end = linkinfo.polygon_end;
99 BitmapHandle *bitmap_start = linkinfo.bitmap_start;
100 //BitmapHandle *bitmap_end = linkinfo.bitmap_end;
101 if (polygon_start)
102 {
103 StateBitmaps *state_bm = PrepareFaceCollPolyHandle(polygon_start, 0); // TODO bbm_choose
104 polys.states[i] = state_bm;
105 }
106 else if (bitmap_start)
107 {
108 ::Sprite *sprite = sprite_from_handle(e, sprites, bitmap_start, -1);
109 if (!sprite) { std::cout << "preparesprite in running the game\n" << std::endl; return; }
110 PrepareSprite(*sprite, *FindRender(e,i));
111 }
112 }
113
114 }
115 }
116 bool BetweenEvents(const LinkageInfo &li)
117 {
118 int start_event = li.start_event;
119 int end_event = li.end_event;
120 EventInfo e = seq.Event(start_event);
121 EventInfo e2 = seq.Event(end_event);
122 if (e.time < current_time && current_time < e2.time)
123 return true;
124 return false;
125 }
126
127 void UpdateActivatedEvents(float time_delta, std::vector<int> key_pressed, std::vector<int> key_released)
128 {
129 //float newtime = time + time_delta;
130 int s = seq.NumEvents();
131 for(int i=0;i<s;i++)
132 {
133 //EventInfo ei = seq.Event(i);
134
135 }
136 }
137 float EventInterpolatePos(LinkageInfo li)
138 {
139 int start_event = li.start_event;
140 int end_event = li.end_event;
141 EventInfo e = seq.Event(start_event);
142 EventInfo e2 = seq.Event(end_event);
143 float time = current_time - e.time;
144 float pos = time / (e2.time - e.time); // 0.0 .. 1.0
145 return pos;
146
147 }
148
149 void RenderState(int state)
150 {
151 StateInfo2 st = seq.States(current_state);
152 if (st.enable_obj_array)
153 for(int i=0;i<st.enable_obj_array->Size();i++)
154 {
155 if (st.enable_obj_array->Index(i))
156 { // object number i is enabled in this state
157 PosInfo p = seq.Positions(i);
158 Point pos(0.0,0.0,0.0);
159 int link_id = p.link_id;
160 LinkageInfo linkage = seq.Linkage(link_id);
161 if (BetweenEvents(linkage))
162 {
163 float val = EventInterpolatePos(linkage);
164 if (p.curve)
165 {
166 std::vector<float> c = p.curve->Count();
167 switch(c.size())
168 {
169 case 0: // Point
170 {
171 pos = p.curve->Map(NULL, 0);
172 break;
173 }
174 case 1: // Curve : float->Point
175 {
176 pos = p.curve->Map(&val, 1);
177 break;
178 }
179 default:
180 {
181 std::cout << "ERROR: bad curve dimension\n" << std::endl;
182 break;
183 }
184 };
185
186 }
187 LinkInfo linkinfo = seq.Links(link_id);
188 FaceCollPolyHandle *polygon_start = linkinfo.polygon_start;
189 //FaceCollPolyHandle *polygon_end = linkinfo.polygon_end;
190 BitmapHandle *bitmap_start = linkinfo.bitmap_start;
191 //BitmapHandle *bitmap_end = linkinfo.bitmap_end;
192 if (polygon_start)
193 {
194 StateBitmaps *state_bm = polys.states[i];
195 state_bm->Render(0); // TODO 0..
196 }
197 else if (bitmap_start)
198 {
199 ::Sprite *sprite = sprites.sprites[i];
200 Point2d p = { pos.x, pos.y };
201 float z = 0.0;
202 Program *prog = 0;
203 RenderSprite(*sprite, 0, p, z, *FindRender(e,i), prog);
204 }
205 }
206 }
207 }
208 }
209
210private:
211 Sequencer2 &seq;
212 int start_state;
213
214 std::map<int, EventInfo> activated_events;
215 //float time;
216
217 float current_time;
218 int current_state;
219 std::vector< std::vector<ArrayRender*>* > state_rends;
220 SpritePriv sprites;
221 PolyPriv polys;
222 GameApi::Env &e;
223};
struct Envi env
Env e
Definition Common.cc:2
LowApi * g_low
Definition GameApi_low.cc:1684
StateBitmaps * PrepareFaceCollPolyHandle(FaceCollPolyHandle *handle, int bbm_choose)
Definition GameApi_pl.cc:5665
ArrayRender * FindRender(GameApi::Env &e, int bm_id)
Definition GameApi.cc:454
Sprite * sprite_from_handle(GameApi::Env &e, SpritePriv &env, BitmapHandle *handle, int bbm_choose=-1)
Definition GameApi_sp.cc:119
void PrepareSprite(const Sprite &s, ArrayRender &rend)
Definition Graph.cc:1225
void RenderSprite(const Sprite &s, int frame, Point2d pos, float z, ArrayRender &rend, Program *prog)
Definition Graph.cc:1270
Definition Effect.hh:11461
virtual I Size() const =0
virtual B Index(A a) const =0
Definition GameApi.hh:362
void run()
Definition GameRunner.cc:30
GameRunner(GameApi::Env &e, Sequencer2 &seq, int start_state)
Definition GameRunner.hh:59
virtual B Map(I *array, int size) const =0
virtual std::vector< I > Count() const =0
Definition Serialize.hh:255
virtual int NumStates() const =0
virtual LinkInfo Links(int i) const =0
virtual StateInfo2 States(int i) const =0
virtual PosInfo Positions(int i) const =0
virtual EventInfo Event(int i) const =0
virtual LinkageInfo Linkage(int i) const =0
virtual int NumEvents() const =0
virtual int NumPositions() const =0
virtual int NumLinks() const =0
Definition GraphI.hh:1223
Definition Parser.hh:8
Definition Serialize.hh:11
float time
Definition Serialize.hh:13
Definition Parser.hh:55
Definition Serialize.hh:127
BitmapHandle * bitmap_start
Definition Serialize.hh:139
FaceCollPolyHandle * polygon_start
Definition Serialize.hh:136
Definition Serialize.hh:44
int end_event
Definition Serialize.hh:46
int start_event
Definition Serialize.hh:45
Definition GameRunner.hh:14
~PolyPriv()
Definition GameApi_sp.cc:29
std::map< int, StateBitmaps * > states
Definition GameRunner.hh:16
std::map< int, ArrayRender * > rend
Definition GameRunner.hh:15
Definition Serialize.hh:238
NDim< float, Point > * curve
Definition Serialize.hh:241
int link_id
Definition Serialize.hh:239
Definition GameRunner.hh:22
std::vector< Sprite ** > arrays
Definition GameRunner.hh:27
std::map< int, Sprite * > sprites2
Definition GameRunner.hh:26
std::map< int, Sprite * > sprites
Definition GameRunner.hh:25
~SpritePriv()
Definition GameApi_sp.cc:5
Definition State.hh:932
void Render(int framenum)
Definition State.cc:11
Definition Common2.hh:95
Array< int, bool > * enable_obj_array
Definition Common2.hh:96