GameApi 28
Library used by GameApi Builder tool
Loading...
Searching...
No Matches
Event.hh
Go to the documentation of this file.
1//
2// Copyright (C) 2009 Tero Pulkkinen
3// Released under LGPL License.
4//
5// This file is part of Polygon.
6//
7// Polygon is free software: you can redistribute it and/or modify
8// it under the terms of the GNU General Public License as published by
9// the Free Software Foundation, either version 3 of the License, or
10// (at your option) any later version.
11//
12// Polygon is distributed in the hope that it will be useful,
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15// GNU General Public License for more details.
16//
17// You should have received a copy of the GNU Library General Public License
18// along with Polygon. If not, see <http://www.gnu.org/licenses/>.
19//
20
21
22#ifndef EVENT_HH
23#define EVENT_HH
24
25#include "Effect.hh"
26
27template<class T>
28class Time
29{
30public:
31 float time;
33};
37
38class TimeLine : public Curve<Point>
39{
40};
41
42class TimedPointCollection : public Array<int, TimedPoint>
43{
44};
45
46template<class T>
47class Paths
48{
49public:
50 virtual ~Paths() { }
51 virtual float Length() const=0;
52 virtual int Size() const=0;
53 virtual T Index(float time, int p) const=0;
54};
55
56class TimedPointCloud : public Paths<Point>
57{
58public:
59};
60
61class TimedMatrixPaths : public Paths<Matrix>
62{
63public:
64};
65
67{
68public:
69 TranslatePaths(TimedPointCloud &cloud) : cloud(cloud) { }
70 float Length() const { return cloud.Length(); }
71 int Size() const { return cloud.Size(); }
72 Matrix Index(float time, int p) const
73 {
74 Point pp = cloud.Index(time, p);
75 //std::cout << p << ":" << pp << std::endl;
76 return Matrix::Translate(pp.x,pp.y,pp.z);
77 }
78private:
79 TimedPointCloud &cloud;
80};
81
82class TimedWaveforms : public Paths<float>
83{
84};
85
87{
88public:
90 float Size() const
91 {
92 int size = arr.Size();
93 float length=0.0;
94 for(int i=0;i<size;i++)
95 {
96 length += arr.Index(i)->Size();
97 }
98 return length;
99 }
100 Point Index(float time) const
101 {
102 int size = arr.Size();
103 float length = 0.0;
104 for(int i=0;i<size;i++)
105 {
106 int oldlength = length;
107 length += arr.Index(i)->Size();
108 if (length > time)
109 {
110 return arr.Index(i)->Index(time-oldlength);
111 }
112 }
113 return Point(0.0,0.0,0.0);
114
115 }
116private:
118};
120{
121public:
123 float Length() const
124 {
125 int size = arr.Size();
126 float length = 0.0;
127 for(int i=0;i<size;i++)
128 {
129 length += arr.Index(i)->Length();
130 }
131 return length;
132 }
133 int Size() const
134 {
135 int size = arr.Size();
136 int num = 999999;
137 for(int i=0;i<size;i++)
138 {
139 num = std::min(num, arr.Index(i)->Size());
140 }
141 return num;
142 }
143 Point Index(float time, int p) const
144 {
145 int size = arr.Size();
146 float length = 0.0;
147 Point pp(0.0,0.0,0.0);
148 for(int i=0;i<size;i++)
149 {
150 int oldlength = length;
151 length += arr.Index(i)->Length();
152 if (length > time)
153 {
154 return pp+arr.Index(i)->Index(time-oldlength, p);
155 }
156 pp += arr.Index(i)->Index(arr.Index(i)->Length(), p);
157 }
158 return pp;
159 }
160private:
162};
163
165{
166public:
167 TimeLineFromPointCloud(TimedPointCloud &cloud, int p) : cloud(cloud), p(p) { }
168 float Size() const { return cloud.Length(); }
169 Point Index(float time) const
170 {
171 return cloud.Index(time, p);
172 }
173private:
174 TimedPointCloud &cloud;
175 int p;
176};
178{
179public:
180 BoxCollectionFromPaths(TimedMatrixPaths &paths, float time) : paths(paths), time(time) { }
181 int Size() const
182 {
183 return paths.Size();
184 }
185 Matrix Index(int i) const
186 {
187 return paths.Index(time, i);
188 }
189private:
190 TimedMatrixPaths &paths;
191 float time;
192};
193
195{
196public:
197 InterpolatePoints(PointCollection &c1, PointCollection &c2, float length) : c1(c1), c2(c2), length(length) { }
198 int NumPoints() const { return std::min(c1.Size(), c2.Size()); }
199 float Length() const { return length; }
200 Point Index(float time, int p) const
201 {
202 Point p1 = c1.Index(p);
203 Point p2 = c2.Index(p);
204 float val = time / length;
205 return val*Vector(p1)+(1.0-val)*Vector(p2);
206 }
207private:
208 PointCollection &c1;
209 PointCollection &c2;
210 float length;
211};
212
214{
215public:
216 InterpolateMatrixes(BoxCollection &c1, BoxCollection &c2, float length) : c1(c1), c2(c2), length(length) { }
217 float Length() const { return length; }
218 int Size() const { return std::min(c1.Size(), c2.Size()); }
219 Matrix Index(float time, int p) const
220 {
221 Matrix m1 = c1.Index(p);
222 Matrix m2 = c2.Index(p);
223 //return m2;
224 return Matrix::Interpolate(m1,m2,time/length);
225 }
226private:
227 BoxCollection &c1, &c2;
228 float length;
229};
230
231
233{
234public:
236 float Length() const
237 {
238 int size = arr.Size();
239 float length = 0.0;
240 for(int i=0;i<size;i++)
241 {
242 length += arr.Index(i)->Length();
243 }
244 return length;
245 }
246 int Size() const
247 {
248 int size = arr.Size();
249 int num = 999999;
250 for(int i=0;i<size;i++)
251 {
252 num = std::min(num, arr.Index(i)->Size());
253 }
254 return num;
255 }
256 Matrix Index(float time, int p) const
257 {
258 int size = arr.Size();
259 float length = 0.0;
261 for(int i=0;i<size;i++)
262 {
263 int oldlength = length;
264 length += arr.Index(i)->Length();
265 if (length > time)
266 {
267 return m*arr.Index(i)->Index(time-oldlength, p);
268 }
269 m = m * arr.Index(i)->Index(arr.Index(i)->Length(),p);
270 }
271 return m;
272 }
273private:
275};
276
278{
279public:
280 ParallelCurves(Array<int, MatrixCurve*> &curves) : curves(curves) { }
281 float Length() const
282 {
283 int size = curves.Size();
284 float num = 999999.0;
285 for(int i=0;i<size;i++)
286 {
287 num = std::min(num, curves.Index(i)->Size());
288 }
289 return num;
290 }
291 int Size() const
292 {
293 return curves.Size();
294 }
295 Matrix Index(float time, int p) const
296 {
297 return curves.Index(p)->Index(time);
298 }
299private:
301};
302
304{
305public:
306 ConnectMatrixPaths(TimedMatrixPaths &c1, TimedMatrixPaths &c2, float length) : /*c1(c1), c2(c2),*/ b1(c1, c1.Length()), b2(c2, 0.0), inter(b1,b2, length), seq(arr)
307 {
308 arr.push_back(&c1);
309 arr.push_back(&inter);
310 arr.push_back(&c2);
311 }
312 float Length() const { return seq.Length(); }
313 int Size() const { return seq.Size(); }
314 Matrix Index(float time, int p) const { return seq.Index(time,p); }
315
316private:
317 //TimedMatrixPaths &c1, &c2;
322};
323
324class SplineFunctions : public Array<int, const Function<float, float>* >, private Function<float,float>
325{
326public:
327 SplineFunctions(const PointCollection2d &points, float z_0) : points(points), z_0(z_0) { }
328 int Size() const { return points.Size()-1; }
329 const Function<float,float>* Index(int i) const
330 {
331 func = i;
332 return this;
333 }
334 float Index(float x) const
335 {
336 Point2d p = points.Index(func);
337 float y_i = p.y;
338 float x_i = p.x;
339 float z_i = z_i_f(z_0, func);
340 Point2d p2 = points.Index(func+1);
341 //float y_i_1 = p2.y;
342 float x_i_1 = p2.x;
343 float z_i_1 = z_i_1_f(z_i, func);
344 float S_i = y_i + z_i*(x-x_i) + (z_i_1 - z_i)/2.0/(x_i_1-x_i) * (x-x_i)*(x-x_i);
345 return S_i;
346 }
347 float z_i_1_f(float z_i, int i) const
348 {
349 Point2d p = points.Index(i);
350 Point2d p2 = points.Index(i+1);
351 return -z_i + 2.0*(p2.y-p.y)/(p2.x-p.x);
352 }
353 float z_i_f(float z_0, int ii) const
354 {
355 float z= z_0;
356 for(int i=1;i<ii;i++)
357 {
358 z = z_i_1_f(z, i);
359 }
360 return z;
361 }
362
363private:
364 const PointCollection2d &points;
365 mutable int func;
366 float z_0;
367};
368
369class SplineInterpolation : public Function<float, float>
370{
371public:
372 SplineInterpolation(PointCollection2d &coll) : coll(coll), func(coll, 0.5) { }
373 float Index(float x) const
374 {
375 int size=coll.Size()-1;
376 for(int i=0;i<size;i++)
377 {
378 if (x>=coll.Index(i).x && x<coll.Index(i+1).x)
379 {
380 return func.Index(i)->Index(x);
381 }
382 }
383 return 0.0;
384 }
385private:
386 PointCollection2d &coll;
388};
389
391{
392public:
393 ChooseXYZ(PointCollection &coll, FloatArray &arr, int xyz) : coll(coll), arr(arr), xyz(xyz) { }
394 int Size() const { return std::min(coll.Size(), arr.Size()); }
395 Point2d Index(int i) const
396 {
397 Point2d p;
398 p.x = arr.Index(i);
399 if (xyz == 0)
400 p.y = coll.Index(i).x;
401 else if (xyz==1)
402 p.y = coll.Index(i).y;
403 else if (xyz==2)
404 p.y = coll.Index(i).z;
405 else
406 p.y = 0.0;
407 return p;
408 }
409private:
410 PointCollection &coll;
411 FloatArray &arr;
412 int xyz;
413};
414
415#if 0
416class SplineCurve : public CurveIn3d
417{ // arr should be increasing float numbers.
418 // and there needs to be same amount of points as floats.
419public:
420 SplineCurve(PointCollection &coll, FloatArray &arr) : /*coll(coll),*/ arr(arr), x(coll, arr, 0), y(coll,arr,1), z(coll,arr,2), sx(x), sy(y), sz(z) { }
421 float Size() const { return arr.Index(arr.Size()-1) - arr.Index(0); }
422 Point Index(float t) const
423 {
424 t += arr.Index(0);
425 Point p;
426 p.x = sx.Index(t);
427 p.y = sy.Index(t);
428 p.z = sz.Index(t);
429 return p;
430 }
431private:
432 //PointCollection &coll;
433 FloatArray &arr;
434 ChooseXYZ x;
435 ChooseXYZ y;
436 ChooseXYZ z;
437 SplineInterpolation sx;
438 SplineInterpolation sy;
439 SplineInterpolation sz;
440};
441#endif
442
444{
445public:
446 CircleMatrixPath(float x1, float x2, int count, float time) : circle(x1), circle2(x2), sample(circle, count), sample2(circle2, count), im(sample, sample2, time) { }
447 float Length() const { return im.Length(); }
448 int Size() const { return im.Size(); }
449 Matrix Index(float time, int p) const
450 {
451 Matrix m = im.Index(time,p);
452 //std::cout << m << ":" << time << ", " << p << std::endl;
453 return m;
454 }
455
456private:
457 CircleMatrixCurve circle;
458 CircleMatrixCurve circle2;
459 SampleMatrixCurve sample;
460 SampleMatrixCurve sample2;
462};
463
464class SplineCurves : public Array<int, CurveIn3d*>
465{
466public:
467 SplineCurves(Array<int, PointCollection*> &arr, FloatArray &arr2) : arr(arr), arr2(arr2){ }
468 int Size() const { return arr.Size(); }
469 CurveIn3d *Index(int i) const
470 {
471 //delete c;
472 PointCollection *coll = arr.Index(i);
473 //c = new SplineCurve(*coll, arr2);
474 //return c;
475 return 0;
476 }
477
478private:
479 //mutable SplineCurve *c;
481 FloatArray &arr2;
482};
484{
485public:
486 virtual float Dist(int p1, int p2) const=0;
487};
489{
490public:
491 Dist1(PointCollection &coll) : coll(coll) { }
492 float Dist(int p1, int p2) const
493 {
494 Point r = coll.Index(p1);
495 Point r2 = coll.Index(p2);
496 return (r2-r).Dist();
497 }
498private:
499 PointCollection &coll;
500};
502{
503public:
504 Dist2(FloatArray &arr) : arr(arr) { }
505 float Dist(int p1, int p2) const
506 {
507 return arr.Index(p2)-arr.Index(p1);
508 }
509private:
510 FloatArray &arr;
511};
512
513#if 0
514class LinearInterpolation : public CurveIn3d
515{
516public:
517 LinearInterpolation(PointCollection &coll) : coll(coll), d(coll), dist(d) { }
518 LinearInterpolation(PointCollection &coll, InterpolationDistance &dist) : coll(coll), d(coll), dist(dist) { }
519 Point Index(float pos) const
520 {
521 float length = 0;
522 int i;
523 float d = 0.0;
524 int size = coll.Size()-1;
525 for(i=0;i<size;i++)
526 {
527 d = dist.Dist(i,i+1);
528 length += d;
529 if (length>pos) break;
530 }
531 length -= d;
532 pos -= length;
533 pos /= d;
534 Point px = Point((1.0-pos)*Vector(coll.Index(i)) + pos*Vector(coll.Index(i+1)));
535 return px;
536 }
537 float Size() const
538 {
539 float length = 0;
540 for(int i=0;i<coll.Size()-1;i++)
541 {
542 length += dist.Dist(i,i+1);
543 }
544 return length;
545 }
546
547 //float Distance(int p, int p2) const
548 //{
549 // Point r = coll.Index(p);
550 // Point r2 = coll.Index(p2);
551 // return (r2-r).Dist();
552 //}
553
554private:
555 PointCollection &coll;
556 Dist1 d;
557 InterpolationDistance &dist;
558};
559#endif
561{
562public:
564 float Length() const { return arr.Index(0)->Size(); }
565 int Size() const { return arr.Size(); }
566 Point Index(float time, int p) const
567 {
568 return arr.Index(p)->Index(time);
569 }
570private:
572};
573
574#if 0
575class SelectPoints : public PointCollection
576{
577public:
578 SelectPoints(Array<int, PointCollection*> &arr, int select) : arr(arr), select(select) { }
579 int Size() const { return arr.Size(); }
580 Point Index(int index) const
581 {
582 return arr.Index(index)->Index(select);
583 }
584private:
585 Array<int, PointCollection*> &arr;
586 int select;
587};
588#endif
589
591{ // All PointCollections to have same number of elements.
592 // arr and FloatArray should have same number of elements.
593public:
594 LinearMovement(Array<int, PointCollection*> &arr, FloatArray &time) : arr(arr), /*time(time),*/ lm(*this), dist(time), parallel(lm) { }
595public:
596 float Length() const { return parallel.Length(); }
597 int Size() const { return parallel.Size(); }
598 Point Index(float time, int p) const
599 {
600 return parallel.Index(time,p);
601 }
602
603private:
604 struct LM : public Array<int, CurveIn3d*>
605 {
606 LM(LinearMovement &mv) : mv(mv) { }
607 int Size() const {
608 int size = mv.arr.Index(0)->Size();
609 //std::cout << "size2: " << size << std::endl;
610 return size;
611 }
612 CurveIn3d *Index(int i) const
613 {
614 //if (i>=Size()) i=Size();
615 //delete mv.interpol;
616 //delete mv.points;
617 //mv.points = new SelectPoints(mv.arr, i);
618 //mv.interpol = new LinearInterpolation(*mv.points, mv.dist);
619 //return mv.interpol;
620 return 0;
621 }
622 LinearMovement &mv;
623 };
624 friend struct LM;
625private:
627 //FloatArray &time;
628 LM lm;
629 //SelectPoints *points; // (Array<int,PointCollection*>, int) => PointCollection
630 Dist2 dist; // FloatArray => InterpolationDistance
631 //LinearInterpolation *interpol; // PointCollection, InterpolationDistance => CurveIn3d
632 ParallelCurvesPoint parallel; // array<int, curvein3d*> => timedpointcloud
633};
634
635class SizeCollections : public Array<int, PointCollection*>
636{ // makes all pointcollections the same size by adding new 0.0,0.0,0.0 points.
637public:
639 {
640 pc.size = MaxSize();
641 }
642 int Size() const { return arr.Size(); }
643 PointCollection *Index(int i) const
644 {
645 if (i>=Size()) i--;
646 //delete pc;
647 //pc = new PC(arr.Index(i), MaxSize());
648 pc.coll = arr.Index(i);
649 return &pc;
650 }
651 int MaxSize() const
652 {
653 int size = arr.Size();
654 int maxsize = 0;
655 for(int i=0;i<size;i++)
656 {
657 maxsize = std::max(maxsize, arr.Index(i)->Size());
658 }
659 return maxsize;
660 }
661 struct PC : public PointCollection
662 {
663 int Size() const { return size; }
664 Point Index(int i) const
665 {
666 if (i < coll->Size())
667 return coll->Index(i);
668 else
669 return coll->Index(0);
670 }
672 int size;
673 };
674private:
676 mutable PC pc;
677};
678void DrawVBO(TimedMatrixPaths &paths, float time, VBOState &vbostate, VBOUpdate u);
679void DrawVBO(Array<int, PointCollection*> &arr, FloatArray &t, float time, VBOState &vbostate, VBOUpdate u, PieceShader &shader);
680
681
682
683
684
685
686#endif
P func(int c, EveryApi &ev)
Definition test.cpp:59
VBOUpdate
Definition Effect.hh:10676
Time< Point > TimedPoint
Definition Event.hh:34
void DrawVBO(TimedMatrixPaths &paths, float time, VBOState &vbostate, VBOUpdate u)
Definition Event.cc:27
Time< Vector > TimedVector
Definition Event.hh:35
Time< Matrix > TimedMatrix
Definition Event.hh:36
long double select(long double n, int k)
Definition Math2.cc:413
Definition EffectI.hh:22
virtual float Size() const=0
Definition Event.hh:178
BoxCollectionFromPaths(TimedMatrixPaths &paths, float time)
Definition Event.hh:180
int Size() const
Definition Event.hh:181
Matrix Index(int i) const
Definition Event.hh:185
Definition Effect.hh:5476
int Size() const
Definition Event.hh:394
ChooseXYZ(PointCollection &coll, FloatArray &arr, int xyz)
Definition Event.hh:393
Point2d Index(int i) const
Definition Event.hh:395
Definition Effect.hh:1718
int Size() const
Definition Event.hh:448
float Length() const
Definition Event.hh:447
CircleMatrixPath(float x1, float x2, int count, float time)
Definition Event.hh:446
Matrix Index(float time, int p) const
Definition Event.hh:449
Matrix Index(float time, int p) const
Definition Event.hh:314
float Length() const
Definition Event.hh:312
int Size() const
Definition Event.hh:313
ConnectMatrixPaths(TimedMatrixPaths &c1, TimedMatrixPaths &c2, float length)
Definition Event.hh:306
Definition EffectI.hh:49
Definition EffectI.hh:30
Dist1(PointCollection &coll)
Definition Event.hh:491
float Dist(int p1, int p2) const
Definition Event.hh:492
Definition Event.hh:502
Dist2(FloatArray &arr)
Definition Event.hh:504
float Dist(int p1, int p2) const
Definition Event.hh:505
Definition Effect.hh:2039
Definition EffectI.hh:11
virtual B Index(A a) const =0
Definition Event.hh:214
Matrix Index(float time, int p) const
Definition Event.hh:219
int Size() const
Definition Event.hh:218
InterpolateMatrixes(BoxCollection &c1, BoxCollection &c2, float length)
Definition Event.hh:216
float Length() const
Definition Event.hh:217
float Length() const
Definition Event.hh:199
InterpolatePoints(PointCollection &c1, PointCollection &c2, float length)
Definition Event.hh:197
int NumPoints() const
Definition Event.hh:198
Point Index(float time, int p) const
Definition Event.hh:200
Definition Event.hh:484
virtual float Dist(int p1, int p2) const =0
Definition Event.hh:591
Point Index(float time, int p) const
Definition Event.hh:598
float Length() const
Definition Event.hh:596
LinearMovement(Array< int, PointCollection * > &arr, FloatArray &time)
Definition Event.hh:594
int Size() const
Definition Event.hh:597
friend struct LM
Definition Event.hh:624
Definition VectorTools.hh:279
static Matrix Translate(float x, float y, float z)
Definition VectorTools.cc:547
static Matrix Identity()
Definition VectorTools.cc:487
static Matrix Interpolate(const Matrix &m1, const Matrix &m2, float t)
Definition VectorTools.cc:983
Definition Event.hh:561
Point Index(float time, int p) const
Definition Event.hh:566
float Length() const
Definition Event.hh:564
int Size() const
Definition Event.hh:565
ParallelCurvesPoint(Array< int, CurveIn3d * > &arr)
Definition Event.hh:563
ParallelCurves(Array< int, MatrixCurve * > &curves)
Definition Event.hh:280
Matrix Index(float time, int p) const
Definition Event.hh:295
int Size() const
Definition Event.hh:291
float Length() const
Definition Event.hh:281
Definition Event.hh:48
virtual int Size() const =0
virtual ~Paths()
Definition Event.hh:50
virtual float Length() const =0
virtual T Index(float time, int p) const =0
Definition Shader.hh:1251
int Size() const
Definition Event.hh:133
float Length() const
Definition Event.hh:123
Point Index(float time, int p) const
Definition Event.hh:143
PointCloudSequence(Array< int, TimedPointCloud * > &arr)
Definition Event.hh:122
Definition Effect.hh:2663
Definition Effect.hh:2456
Definition Effect.hh:5822
int Size() const
Definition Event.hh:642
SizeCollections(Array< int, PointCollection * > &arr)
Definition Event.hh:638
int MaxSize() const
Definition Event.hh:651
PointCollection * Index(int i) const
Definition Event.hh:643
SplineCurves(Array< int, PointCollection * > &arr, FloatArray &arr2)
Definition Event.hh:467
int Size() const
Definition Event.hh:468
CurveIn3d * Index(int i) const
Definition Event.hh:469
Definition Event.hh:325
SplineFunctions(const PointCollection2d &points, float z_0)
Definition Event.hh:327
float Index(float x) const
Definition Event.hh:334
float z_i_f(float z_0, int ii) const
Definition Event.hh:353
int Size() const
Definition Event.hh:328
float z_i_1_f(float z_i, int i) const
Definition Event.hh:347
const Function< float, float > * Index(int i) const
Definition Event.hh:329
SplineInterpolation(PointCollection2d &coll)
Definition Event.hh:372
float Index(float x) const
Definition Event.hh:373
float Size() const
Definition Event.hh:168
TimeLineFromPointCloud(TimedPointCloud &cloud, int p)
Definition Event.hh:167
Point Index(float time) const
Definition Event.hh:169
TimeLineSequence(Array< int, TimeLine * > &arr)
Definition Event.hh:89
float Size() const
Definition Event.hh:90
Point Index(float time) const
Definition Event.hh:100
Definition Event.hh:39
Definition Event.hh:29
Point o
Definition Event.hh:32
float time
Definition Event.hh:31
Definition Event.hh:62
Definition Event.hh:233
int Size() const
Definition Event.hh:246
Matrix Index(float time, int p) const
Definition Event.hh:256
float Length() const
Definition Event.hh:236
TimedMatrixSequence(Array< int, TimedMatrixPaths * > &arr)
Definition Event.hh:235
Definition Event.hh:57
Definition Event.hh:43
Definition Event.hh:83
TranslatePaths(TimedPointCloud &cloud)
Definition Event.hh:69
Matrix Index(float time, int p) const
Definition Event.hh:72
int Size() const
Definition Event.hh:71
float Length() const
Definition Event.hh:70
Definition Effect.hh:10694
Definition Effect.hh:1122
Definition VectorTools.hh:125
d
Definition meshpage.php:3895
n< br > font size
Definition meshpage.php:3536
Definition VectorTools.hh:910
float x
Definition VectorTools.hh:911
float y
Definition VectorTools.hh:911
Definition Parser.cc:60
float x
Definition Parser.cc:60
float Dist() const
Definition VectorTools.cc:150
float y
Definition Parser.cc:60
float z
Definition Parser.cc:60
Definition Event.hh:662
PointCollection * coll
Definition Event.hh:671
int size
Definition Event.hh:672
int Size() const
Definition Event.hh:663
Point Index(int i) const
Definition Event.hh:664
Definition GameApi.h:42
num
Definition view.php:2821