GameApi 28
Library used by GameApi Builder tool
Loading...
Searching...
No Matches
StateChange.hh
Go to the documentation of this file.
1
2#include <vector>
3#include "Effect.hh"
4#include "VertexArray.hh"
5
6template<class T>
8{
9public:
10 virtual T start() const=0;
11 virtual T end() const=0;
12 virtual float duration() const=0;
13};
14
15
16template<class T>
17class DefaultTimeRange : public TimeRange<T>
18{
19public:
20 DefaultTimeRange(T t1, T t2, float dur) : t1(t1), t2(t2), dur(dur) { }
21 virtual T start() const { return t1; }
22 virtual T end() const { return t2; }
23 virtual float duration() const { return dur; }
24private:
25 T t1, t2;
26 float dur;
27};
28
29template<class T>
31{
32public:
33 void push_back(TimeRange<T>* elem) { array.push_back(elem); }
34private:
35 std::vector<TimeRange<T> *> array;
36};
37
39{
40 float cx,cy,cz;
41 float radius;
42};
43
45{
46
47};
48
50{
51public:
52 virtual FaceCollection *Elem(int range_id, bool start) const=0;
53};
54
55
56template<class T>
57class Renderer : public Function<T, FaceCollection*>
58{
59};
60
62{
63public:
64 virtual FaceCollection *start() const=0;
65 virtual FaceCollection *end() const=0;
66 virtual float duration() const=0;
67};
68
69template<class T>
70class TRO : public TimeRangeObjects
71{
72public:
73 TRO(TimeRange<T> *tr, Renderer<T> *rend) : tr(tr), rend(rend), start_coll(0), end_coll(0) { }
74 virtual FaceCollection *start() const
75 {
76 start_coll = rend->Index(tr->start());
77 return start_coll;
78 }
79 virtual FaceCollection *end() const
80 {
81 end_coll = rend->Index(tr->end());
82 return end_coll;
83 }
84 virtual float duration() const { return tr->duration(); }
85
86private:
87 TimeRange<T> *tr;
88 Renderer<T> *rend;
89 mutable FaceCollection *start_coll;
90 mutable FaceCollection *end_coll;
91};
92
94{ // this is 2d data structure
95public:
96 TROArray(int paths) {
97 vec.resize(paths);
98 for(int i=0;i<paths;i++) vec[i] = NULL;
99 }
100 TROArray(const TROArray &arr) : vec(arr.vec)
101 {
102 }
103 template<class T>
104 void push_back(int path, TimeRange<T> *tr, Renderer<T> *rend)
105 {
106 if (!vec[path]) { vec[path] = new std::vector<TimeRangeObjects*>; }
107 // if we get error in this line, then check change_api.init(x)'s number x.
108 vec[path]->push_back(new TRO<T>(tr,rend));
109 }
111 {
112 return new TROArray(*this);
113 }
114public:
115 std::vector<std::vector<TimeRangeObjects*> *> vec;
116};
117float EmptyOpenglFunc(int path, std::string name);
118
120{
121public:
122 VArray(TROArray &arr) : arr(arr) { }
123 void copy2()
124 {
125 int s = arr.vec.size();
126 for(int i=0;i<s;i++)
127 {
128 std::cout << "i:" << i << std::endl;
129 vec.push_back(new std::vector<Pair>());
130 int s2 = arr.vec[i]->size();
131 float time = 0.0;
132 for(int j=0;j<s2;j++)
133 {
134 //std::cout << "j:" << j << " " << time << std::endl;
135 FaceCollection *coll = (*(arr.vec[i]))[j]->start();
136 FaceCollection *coll2 = (*(arr.vec[i]))[j]->end();
137 float d = (*(arr.vec[i]))[j]->duration();
138 Pair p;
139 p.s1 = new VertexArraySet;
140 p.s2 = new VertexArraySet;
141 p.start_time = time;
142 p.duration = d;
143 time += d;
144 vec[i]->push_back(p);
145 FaceCollectionVertexArray2 arr3(*coll, *p.s1);
146 FaceCollectionVertexArray2 arr2(*coll2, *p.s2);
147 arr3.copy(0,coll->NumFaces());
148 arr2.copy(0,coll2->NumFaces());
149 }
150 current_pair.push_back(0);
151 }
152 }
153
154 void render(float time, Program *prog)
155 {
156 render(time, prog, &EmptyOpenglFunc);
157 }
158 void render(float time, Program *prog, float (*fptr)(int path, std::string name))
159 {
160 Attrib id1a = prog->find_attr("vertex1",0);
161 Attrib id2a = prog->find_attr("normal1",0);
162 Attrib id3a = prog->find_attr("color1",0);
163 Attrib id4a = prog->find_attr("texcoord1",0);
164
165 Attrib id1b = prog->find_attr("vertex2",0);
166 Attrib id2b = prog->find_attr("normal2",0);
167 Attrib id3b = prog->find_attr("color2",0);
168 Attrib id4b = prog->find_attr("texcoord2",0);
169 int s = vec.size();
170 for(int i=0;i<s;i++)
171 {
172 current_pair[i]=0; // TODO, perf problem
173 //int s2 = vec[i].size();
174 do {
175 int pos = current_pair[i];
176 Pair *p = &(vec[i]->at(pos));
177 //std::cout << i << " " << pos << ":" << time << " " << p->start_time << " " << p->duration << std::endl;
178 if (time < p->start_time || time > p->start_time + p->duration)
179 {
180 current_pair[i]++;
181 //if (current_pair[i]>=vec[i].size()) break;
182 continue;
183 }
184 float deltatime = time - p->start_time;
185 float range = deltatime / p->duration;
186 prog->set_var("range", range);
187 prog->set_var("center", Point(fptr(i, std::string("center_x")), fptr(i, std::string("center_y")), fptr(i, std::string("center_z"))));
188 RenderVertexArray2 rend(*p->s1, *p->s2);
189 rend.render(0, id1b.loc, id2b.loc, id3b.loc, id4b.loc,
190 id1a.loc, id2a.loc, id3a.loc, id4a.loc);
191 //std::cout << "delta: " << deltatime << "Duration: " << p->duration << " range:" << range << "current_pair:" << current_pair[i] << std::endl;
192 break;
193
194 } while(current_pair[i] < (int)vec[i]->size());
195 }
196 }
197private:
198 struct Pair
199 {
200 VertexArraySet *s1;
201 VertexArraySet *s2;
202 float start_time;
203 float duration;
204 };
205#if 0
206 struct Assign
207 {
208 std::string name;
209 float value;
210 };
211 struct AssignArray
212 {
213 std::vector<Assign> vec;
214 };
215#endif
216 std::vector<std::vector<Pair> *> vec;
217 std::vector<int> current_pair;
218
219 TROArray &arr;
220};
EditorGuiWidgetAtlas GuiWidgetForward render()
Definition GameApi_gui.cc:1412
float EmptyOpenglFunc(int path, std::string name)
Definition StateChange.cc:4
virtual float duration() const
Definition StateChange.hh:23
DefaultTimeRange(T t1, T t2, float dur)
Definition StateChange.hh:20
virtual T start() const
Definition StateChange.hh:21
virtual T end() const
Definition StateChange.hh:22
Definition VertexArray.hh:436
void copy(int start_range, int end_range, std::vector< int > attribs=std::vector< int >(), std::vector< int > attribsi=std::vector< int >())
Definition VertexArray.cc:4184
Definition EffectI.hh:212
virtual int NumFaces() const =0
Definition EffectI.hh:11
Definition StateChange.hh:50
virtual FaceCollection * Elem(int range_id, bool start) const =0
Definition Shader.hh:75
Attrib find_attr(const std::string &attr_name, int id)
Definition Shader.cc:777
void set_var(const char *name, float val)
Definition Shader.cc:358
Definition VertexArray.hh:424
void render(int id, int a1, int a2, int a3, int a4, int aa1, int aa2, int aa3, int aa4)
Definition VertexArray.cc:3947
Definition Containment.hh:65
Definition StateChange.hh:94
void push_back(int path, TimeRange< T > *tr, Renderer< T > *rend)
Definition StateChange.hh:104
TROArray(int paths)
Definition StateChange.hh:96
TROArray(const TROArray &arr)
Definition StateChange.hh:100
TROArray * copy()
Definition StateChange.hh:110
std::vector< std::vector< TimeRangeObjects * > * > vec
Definition StateChange.hh:115
Definition StateChange.hh:71
virtual FaceCollection * start() const
Definition StateChange.hh:74
TRO(TimeRange< T > *tr, Renderer< T > *rend)
Definition StateChange.hh:73
virtual float duration() const
Definition StateChange.hh:84
virtual FaceCollection * end() const
Definition StateChange.hh:79
Definition StateChange.hh:31
void push_back(TimeRange< T > *elem)
Definition StateChange.hh:33
Definition StateChange.hh:62
virtual float duration() const =0
virtual FaceCollection * start() const =0
virtual FaceCollection * end() const =0
Definition StateChange.hh:8
virtual T start() const =0
virtual float duration() const =0
virtual T end() const =0
void copy2()
Definition StateChange.hh:123
VArray(TROArray &arr)
Definition StateChange.hh:122
void render(float time, Program *prog)
Definition StateChange.hh:154
void render(float time, Program *prog, float(*fptr)(int path, std::string name))
Definition StateChange.hh:158
Definition VertexArray.hh:49
d
Definition meshpage.php:3895
iVBORw0KGgoAAAANSUhEUgAAANcAAAB5CAMAAACdtUQZAAAA51BMVEX</div ></div >< div style="padding: 0px 0px; width: 1324px;">< div style="height: 400px; width: 1324px;"></div >< div itemscope itemtype="https: </div><div itemscope itemtype="https:</div >< div itemscope itemtype="https: </div></div><p><div style="padding:0px 0px;width:1324px;"><div></div><div itemscope itemtype="https:< ul >< li >< b > Application name
8AkrcAgqgAs9wqQ0ey2tkAo8gAuuQfeI4hPUH09fXHy8z4+fng4uNKXF/Lz9BzfoAcgpkQMTUAKjAbOT4Qr9AXhJ8Rl7ktMCwTosA...
Definition meshpage.php:1610
n< br > font size
Definition meshpage.php:3536
Definition Shader.hh:33
int loc
Definition Shader.hh:34
Definition Parser.cc:60
Definition StateChange.hh:39
float radius
Definition StateChange.hh:41
float cy
Definition StateChange.hh:40
float cz
Definition StateChange.hh:40
float cx
Definition StateChange.hh:40
Definition GameApi.h:42
Definition StateChange.hh:45