Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/objecthierarchy/src/orxonox/orxonox.cc @ 266

Last change on this file since 266 was 266, checked in by landauf, 16 years ago

spacing in oh-branch

File size: 27.0 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *
4 *
5 *   License notice:
6 *
7 *   This program 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 *   This program 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 General Public License
18 *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
19 *
20 *
21 *   Author:
22 *      Benjamin Knecht <beni_at_orxonox.net>, (C) 2007
23 *   Co-authors:
24 *      ...
25 *
26 */
27
28/**
29 @file  orxonox.cc
30 @brief Orxonox Main File
31 */
32
33#include <Ogre.h>
34#include <OIS/OIS.h>
35#include <CEGUI/CEGUI.h>
36#include <OgreCEGUIRenderer.h>
37
38#include <string>
39#include <iostream>
40
41#include "../xml/xmlParser.h"
42#include "../loader/LevelLoader.h"
43
44#include "core/IdentifierIncludes.h"
45#include "objects/BaseObject.h"
46#include "objects/Test.h"
47#include "objects/test1.h"
48#include "objects/test2.h"
49#include "objects/test3.h"
50
51
52// some tests to see if enet works without includsion
53//#include <enet/enet.h>
54//#include <enet/protocol.h>
55
56#if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
57#include <CoreFoundation/CoreFoundation.h>
58
59// This function will locate the path to our application on OS X,
60// unlike windows you can not rely on the curent working directory
61// for locating your configuration files and resources.
62std::string macBundlePath()
63{
64  char path[1024];
65  CFBundleRef mainBundle = CFBundleGetMainBundle();
66  assert(mainBundle);
67
68  CFURLRef mainBundleURL = CFBundleCopyBundleURL(mainBundle);
69  assert(mainBundleURL);
70
71  CFStringRef cfStringRef = CFURLCopyFileSystemPath( mainBundleURL, kCFURLPOSIXPathStyle);
72  assert(cfStringRef);
73
74  CFStringGetCString(cfStringRef, path, 1024, kCFStringEncodingASCII);
75
76  CFRelease(mainBundleURL);
77  CFRelease(cfStringRef);
78
79  return std::string(path);
80}
81#endif
82
83namespace orxonox
84{
85  class OrxExitListener : public Ogre::FrameListener
86  {
87    public:
88      OrxExitListener(OIS::Keyboard *keyboard)
89    : mKeyboard(keyboard)
90      {
91      }
92
93      bool frameStarted(const Ogre::FrameEvent& evt)
94      {
95        mKeyboard->capture();
96        return !mKeyboard->isKeyDown(OIS::KC_ESCAPE);
97      }
98
99    private:
100      OIS::Keyboard *mKeyboard;
101  };
102
103  class OrxApplication
104  {
105    public:
106      void go()
107      {
108/*
109        createRoot();
110        defineResources();
111        setupRenderSystem();
112        createRenderWindow();
113        initializeResourceGroups();
114        createScene();
115        setupScene();
116        setupInputSystem();
117        setupCEGUI();
118        createFrameListener();
119        startRenderLoop();
120*/
121
122        #define testandcout(code) \
123          std::cout << #code << " " << code << "\n"
124
125/*
126        std::cout << "Test 1\n";
127        BaseObject* test1;
128        test1 = new BaseObject();
129        test1 = new BaseObject();
130        test1 = new BaseObject();
131
132        std::cout << "Test 2\n";
133        A1* test2;
134        test2 = new A1();
135        test2 = new A1();
136        test2 = new A1();
137
138        std::cout << "Test 3\n";
139        BaseObject* test3;
140        test3 = new BaseObject();
141        test3 = new BaseObject();
142        test3 = new BaseObject();
143
144        std::cout << "Test 4\n";
145        A3* test4;
146        test4 = new A3();
147        test4 = new A3();
148        test4 = new A3();
149*/
150/*
151        std::cout << "Test 5\n";
152        A1* test5_01 = new A1();
153        A2* test5_02 = new A2();
154        A3* test5_03 = new A3();
155        A1B1* test5_04 = new A1B1();
156        A1B2* test5_05 = new A1B2();
157        A2B1* test5_06 = new A2B1();
158        A2B2* test5_07 = new A2B2();
159        A3B1* test5_08 = new A3B1();
160        A3B2* test5_09 = new A3B2();
161        A1B1C1* test5_10 = new A1B1C1();
162        A1B1C2* test5_11 = new A1B1C2();
163        A1B2C1* test5_12 = new A1B2C1();
164        A2B1C1* test5_13 = new A2B1C1();
165        A2B2C1* test5_14 = new A2B2C1();
166        A3B1C1* test5_15 = new A3B1C1();
167        A3B1C2* test5_16 = new A3B1C2();
168        A3B2C1* test5_17 = new A3B2C1();
169        A3B2C2* test5_18 = new A3B2C2();
170
171        OrxonoxClass* test5;
172        for (int i = 0; i <= 18; i++)
173        {
174          if (i == 0) test5 = new BaseObject;
175          if (i == 1) test5 = test5_01;
176          if (i == 2) test5 = test5_02;
177          if (i == 3) test5 = test5_03;
178          if (i == 4) test5 = test5_04;
179          if (i == 5) test5 = test5_05;
180          if (i == 6) test5 = test5_06;
181          if (i == 7) test5 = test5_07;
182          if (i == 8) test5 = test5_08;
183          if (i == 9) test5 = test5_09;
184          if (i == 10) test5 = test5_10;
185          if (i == 11) test5 = test5_11;
186          if (i == 12) test5 = test5_12;
187          if (i == 13) test5 = test5_13;
188          if (i == 14) test5 = test5_14;
189          if (i == 15) test5 = test5_15;
190          if (i == 16) test5 = test5_16;
191          if (i == 17) test5 = test5_17;
192          if (i == 18) test5 = test5_18;
193
194          std::cout << "\n";
195          std::cout << test5->getIdentifier()->getName() << ": parents:     " << test5->getIdentifier()->getParents().toString() << "\n";
196          std::cout << test5->getIdentifier()->getName() << ": children:    " << test5->getIdentifier()->getChildren().toString() << "\n";
197        }
198*/
199/*
200        std::cout << "\n";
201        std::cout << "isA(XYZ)-Test:\n";
202        std::cout << "test5_01 = A1, Erwartet: 1 0 0 1 0\n";
203        testandcout(test5_01->isA(Class(A1)));
204        testandcout(test5_01->isA(Class(A2)));
205        testandcout(test5_01->isA(Class(A1B1)));
206        testandcout(test5_01->isA(Class(BaseObject)));
207        testandcout(test5_01->isA(Class(Interface1)));
208
209        std::cout << "\n";
210        std::cout << "test5_02 = A2, Erwartet: 0 1 0 1 0\n";
211        testandcout(test5_02->isA(Class(A1)));
212        testandcout(test5_02->isA(Class(A2)));
213        testandcout(test5_02->isA(Class(A1B1)));
214        testandcout(test5_02->isA(Class(BaseObject)));
215        testandcout(test5_02->isA(Class(Interface1)));
216
217        std::cout << "\n";
218        std::cout << "test5_01 = A3, Erwartet: 0 0 0 1 1\n";
219        testandcout(test5_03->isA(Class(A1)));
220        testandcout(test5_03->isA(Class(A2)));
221        testandcout(test5_03->isA(Class(A1B1)));
222        testandcout(test5_03->isA(Class(BaseObject)));
223        testandcout(test5_03->isA(Class(Interface1)));
224
225        std::cout << "\n";
226        std::cout << "isDirectA(XYZ)-Test:\n";
227        std::cout << "test5_01 = A1, Erwartet: 1 0 0 0 0\n";
228        testandcout(test5_01->isDirectlyA(Class(A1)));
229        testandcout(test5_01->isDirectlyA(Class(A2)));
230        testandcout(test5_01->isDirectlyA(Class(A1B1)));
231        testandcout(test5_01->isDirectlyA(Class(BaseObject)));
232        testandcout(test5_01->isDirectlyA(Class(Interface1)));
233
234        std::cout << "\n";
235        std::cout << "test5_02 = A2, Erwartet: 0 1 0 0 0\n";
236        testandcout(test5_02->isDirectlyA(Class(A1)));
237        testandcout(test5_02->isDirectlyA(Class(A2)));
238        testandcout(test5_02->isDirectlyA(Class(A1B1)));
239        testandcout(test5_02->isDirectlyA(Class(BaseObject)));
240        testandcout(test5_02->isDirectlyA(Class(Interface1)));
241
242        std::cout << "\n";
243        std::cout << "test5_03 = A3, Erwartet: 0 0 0 0 0\n";
244        testandcout(test5_03->isDirectlyA(Class(A1)));
245        testandcout(test5_03->isDirectlyA(Class(A2)));
246        testandcout(test5_03->isDirectlyA(Class(A1B1)));
247        testandcout(test5_03->isDirectlyA(Class(BaseObject)));
248        testandcout(test5_03->isDirectlyA(Class(Interface1)));
249
250        std::cout << "\n";
251        std::cout << "isChildOf(XYZ)-Test:\n";
252        std::cout << "test5_04 = A1B1, Erwartet: 1 0 1 0 0 0 0\n";
253        testandcout(test5_04->isChildOf(Class(A1)));
254        testandcout(test5_04->isChildOf(Class(A2)));
255        testandcout(test5_04->isChildOf(Class(BaseObject)));
256        testandcout(test5_04->isChildOf(Class(Interface1)));
257        testandcout(test5_04->isChildOf(Class(Interface2)));
258        testandcout(test5_04->isChildOf(Class(A1B1C2)));
259        testandcout(test5_04->isChildOf(Class(A1B1)));
260
261        std::cout << "\n";
262        std::cout << "test5_06 = A2B1, Erwartet: 0 1 1 0 0 0 0\n";
263        testandcout(test5_06->isChildOf(Class(A1)));
264        testandcout(test5_06->isChildOf(Class(A2)));
265        testandcout(test5_06->isChildOf(Class(BaseObject)));
266        testandcout(test5_06->isChildOf(Class(Interface1)));
267        testandcout(test5_06->isChildOf(Class(Interface2)));
268        testandcout(test5_06->isChildOf(Class(A1B1C2)));
269        testandcout(test5_06->isChildOf(Class(A1B1)));
270
271        std::cout << "\n";
272        std::cout << "test5_07 = A2B2, Erwartet: 0 1 1 1 0 0\n";
273        testandcout(test5_07->isChildOf(Class(A1)));
274        testandcout(test5_07->isChildOf(Class(A2)));
275        testandcout(test5_07->isChildOf(Class(BaseObject)));
276        testandcout(test5_07->isChildOf(Class(Interface1)));
277        testandcout(test5_07->isChildOf(Class(Interface2)));
278        testandcout(test5_07->isChildOf(Class(A1B1C2)));
279
280        std::cout << "\n";
281        std::cout << "test5_08 = A3B1, Erwartet: 0 0 1 1 0 0\n";
282        testandcout(test5_08->isChildOf(Class(A1)));
283        testandcout(test5_08->isChildOf(Class(A2)));
284        testandcout(test5_08->isChildOf(Class(BaseObject)));
285        testandcout(test5_08->isChildOf(Class(Interface1)));
286        testandcout(test5_08->isChildOf(Class(Interface2)));
287        testandcout(test5_08->isChildOf(Class(A1B1C2)));
288
289        std::cout << "\n";
290        std::cout << "test5_09 = A3B2, Erwartet: 0 0 1 1 1 0\n";
291        testandcout(test5_09->isChildOf(Class(A1)));
292        testandcout(test5_09->isChildOf(Class(A2)));
293        testandcout(test5_09->isChildOf(Class(BaseObject)));
294        testandcout(test5_09->isChildOf(Class(Interface1)));
295        testandcout(test5_09->isChildOf(Class(Interface2)));
296        testandcout(test5_09->isChildOf(Class(A1B1C2)));
297
298        std::cout << "\n";
299        std::cout << "isParentOf(XYZ)-Test:\n";
300        std::cout << "test1 = BaseObject, Erwartet: 0 0 1 1 1 1 1\n";
301        testandcout(test1->isParentOf(Class(BaseObject)));
302        testandcout(test1->isParentOf(Class(Interface1)));
303        testandcout(test1->isParentOf(Class(A1)));
304        testandcout(test1->isParentOf(Class(A2)));
305        testandcout(test1->isParentOf(Class(A1B1)));
306        testandcout(test1->isParentOf(Class(A2B2)));
307        testandcout(test1->isParentOf(Class(A3B1C2)));
308
309        std::cout << "\n";
310        std::cout << "test5_01 = A1, Erwartet: 0 0 0 0 1 0 0\n";
311        testandcout(test5_01->isParentOf(Class(BaseObject)));
312        testandcout(test5_01->isParentOf(Class(Interface1)));
313        testandcout(test5_01->isParentOf(Class(A1)));
314        testandcout(test5_01->isParentOf(Class(A2)));
315        testandcout(test5_01->isParentOf(Class(A1B1)));
316        testandcout(test5_01->isParentOf(Class(A2B2)));
317        testandcout(test5_01->isParentOf(Class(A3B1C2)));
318
319        std::cout << "\n";
320        std::cout << "Interface1, Erwartet: 0 0 0 0 0 1 1\n";
321        testandcout(Class(Interface1)->isParentOf(Class(BaseObject)));
322        testandcout(Class(Interface1)->isParentOf(Class(Interface1)));
323        testandcout(Class(Interface1)->isParentOf(Class(A1)));
324        testandcout(Class(Interface1)->isParentOf(Class(A2)));
325        testandcout(Class(Interface1)->isParentOf(Class(A1B1)));
326        testandcout(Class(Interface1)->isParentOf(Class(A2B2)));
327        testandcout(Class(Interface1)->isParentOf(Class(A3B1C2)));
328*/
329/*
330        std::cout << "Test 6\n";
331        std::cout << "1:\n";
332        Identifier* test6_01 = Class(A1B1);
333        std::cout << "2:\n";
334        Identifier* test6_02 = Class(A1B1);
335        std::cout << "3:\n";
336        Identifier* test6_03 = Class(A1);
337        std::cout << "4:\n";
338        Identifier* test6_04 = Class(A1B1C1);
339        std::cout << "5:\n";
340        Identifier* test6_05 = Class(A1B1);
341        std::cout << "6:\n";
342        Identifier* test6_06 = Class(A1B1C1);
343
344        std::cout << "\n";
345        std::cout << "BaseObject: parents:     " << Class(BaseObject)->getParents().toString() << "\n";
346        std::cout << "BaseObject: children:    " << Class(BaseObject)->getChildren().toString() << "\n";
347
348        std::cout << "\n";
349        std::cout << "A1: parents:     " << Class(A1)->getParents().toString() << "\n";
350        std::cout << "A1: children:    " << Class(A1)->getChildren().toString() << "\n";
351
352        std::cout << "\n";
353        std::cout << "A1B1: parents:     " << Class(A1B1)->getParents().toString() << "\n";
354        std::cout << "A1B1: children:    " << Class(A1B1)->getChildren().toString() << "\n";
355
356        std::cout << "\n";
357        std::cout << "A1B1C1: parents:     " << Class(A1B1C1)->getParents().toString() << "\n";
358        std::cout << "A1B1C1: children:    " << Class(A1B1C1)->getChildren().toString() << "\n";
359
360        std::cout << "\n";
361        std::cout << "A3B1C1 child of A3:  " << Class(A3B1C1)->isChildOf(Class(A3)) << "\n";
362        std::cout << "\n";
363        std::cout << "A2 parent of A2B1C1: " << Class(A2)->isParentOf(Class(A2B1C1)) << "\n";
364*/
365/*
366        std::cout << "Test 7\n";
367        std::cout << "1\n";
368        SubclassIdentifier<A1B1> test7_01;
369        test7_01 = Class(A1B1C1);
370
371        SubclassIdentifier<A1B1> test7_02;
372        test7_02 = Class(A1B1);
373
374        std::cout << test7_01->getName() << "\n";
375        std::cout << test7_02->getName() << "\n";
376*/
377/*
378        std::cout << "2\n";
379
380        SubclassIdentifier<A1B1> test7_03;
381        test7_03 = Class(A1);
382
383        SubclassIdentifier<A1B1> test7_04;
384        test7_04 = Class(A1B2);
385
386        SubclassIdentifier<A1B1> test7_05;
387        test7_05 = Class(A2);
388*/
389/*
390        std::cout << "Test 8\n";
391
392        std::cout << "1\n";
393        Test1* test8_01 = new Test1;
394        Test3* test8_03 = new Test3;
395        test8_03->usefullClassesIsATest(test8_01);
396
397        std::cout << "2\n";
398        Test2* test8_02 = new Test2;
399        test8_03->usefullClassesIsATest(test8_02);
400
401        std::cout << "3\n";
402        test8_01->setUsefullClass1(Class(Test1));
403        test8_01->setUsefullClass1(test8_02->getIdentifier());
404        test8_01->setUsefullClass2(Class(Test2));
405        test8_01->setUsefullClassOfTypeTest3(Class(Test3));
406        test8_01->setUsefullClassOfTypeTest3(test8_03->getIdentifier());
407
408
409        testandcout(test8_01->isA(Class(Test1)));
410        testandcout(test8_01->isA(Class(Test2)));
411        testandcout(test8_01->isA(Class(Test3)));
412
413        Test2* test8_04 = new Test2;
414        testandcout(test8_02->isA(Class(Test1)));
415        testandcout(test8_02->isA(Class(Test2)));
416        testandcout(test8_02->isA(Class(Test3)));
417
418        Test3* test8_05 = new Test3;
419        testandcout(test8_03->isA(Class(Test1)));
420        testandcout(test8_03->isA(Class(Test2)));
421        testandcout(test8_03->isA(Class(Test3)));
422
423        delete test8_01;
424        delete test8_02;
425        delete test8_03;
426
427
428        std::cout << "Test 9\n";
429        std::cout << "1\n";
430        Identifier* test9_01 = Class(A3);
431        BaseObject* test9_02 = test9_01->fabricate();
432        std::cout << test9_02->getIdentifier()->getName() << "\n";
433
434        std::cout << "\n2\n";
435        BaseObject* test9_03 = Class(A1B2)->fabricate();
436        std::cout << test9_03->getIdentifier()->getName() << "\n";
437
438        std::cout << "\n3\n";
439        SubclassIdentifier<A1> test9_04;
440        test9_04 = Class(A1B1C1);
441        A1* test9_05 = test9_04.fabricate();
442        std::cout << test9_05->getIdentifier()->getName() << "\n";
443
444        std::cout << "\n4\n";
445        BaseObject* test9_06 = ID("A2B2")->fabricate();
446        std::cout << test9_06->getIdentifier()->getName() << "\n";
447
448        std::cout << "\n5\n";
449        delete test9_02;
450        delete test9_03;
451        delete test9_05;
452        delete test9_06;
453*/
454
455        std::cout << "Test 10\n";
456        Identifier* test10_01 = Class(A1B2);
457        Identifier* test10_02 = Class(A2);
458        Identifier* test10_03 = Class(A3B1C1);
459
460        BaseObject* test10_04 = test10_01->fabricate();
461        BaseObject* test10_05 = test10_02->fabricate();
462        BaseObject* test10_06 = test10_03->fabricate();
463
464        BaseObject* test10_07;
465        for (int i = 0; i < 10; i++)
466            test10_07 = ID("A1B1C1")->fabricate();
467
468        std::cout << "1\n";
469        int count;
470
471        count = 0; for (Iterator<BaseObject> it = ObjectList<BaseObject>::start(); it != 0; ++it) { count++; }
472        std::cout << "Anzahl BaseObjects: " << count << "\n";
473        count = 0; for (Iterator<A1> it = ObjectList<A1>::start(); it != 0; ++it) { count++; }
474        std::cout << "Anzahl A1: " << count << "\n";
475        count = 0; for (Iterator<A1B1> it = ObjectList<A1B1>::start(); it; ++it) { count++; }
476        std::cout << "Anzahl A1B1: " << count << "\n";
477        count = 0; for (Iterator<A1B1C1> it = ObjectList<A1B1C1>::start(); it; ++it) { count++; }
478        std::cout << "Anzahl A1B1C1: " << count << "\n";
479        count = 0; for (Iterator<A2> it = ObjectList<A2>::start(); it; ++it) { count++; }
480        std::cout << "Anzahl A2: " << count << "\n";
481
482        std::cout << "2\n";
483        BaseObject* test10_08;
484        BaseObject* test10_09;
485        BaseObject* test10_10;
486        for (int i = 0; i < 10; i++)
487        {
488            test10_08 = ID("A2B1C1")->fabricate();
489            test10_08->name_ = "A2B1C1#";
490            test10_08->name_ += ('0' + i);
491
492            if (i == 0)
493                test10_09 = test10_08;
494
495            if (i == 5)
496                test10_10 = test10_08;
497        }
498
499        count = 0; for (Iterator<BaseObject> it = ObjectList<BaseObject>::start(); it != 0; ++it) { count++; }
500        std::cout << "Anzahl BaseObjects: " << count << "\n";
501        count = 0; for (Iterator<A1> it = ObjectList<A1>::start(); it != 0; ++it) { count++; }
502        std::cout << "Anzahl A1: " << count << "\n";
503        count = 0; for (Iterator<A1B1> it = ObjectList<A1B1>::start(); it; ++it) { count++; }
504        std::cout << "Anzahl A1B1: " << count << "\n";
505        count = 0; for (Iterator<A1B1C1> it = ObjectList<A1B1C1>::start(); it; ++it) { count++; }
506        std::cout << "Anzahl A1B1C1: " << count << "\n";
507        count = 0; for (Iterator<A2> it = ObjectList<A2>::start(); it; ++it) { count++; }
508        std::cout << "Anzahl A2: " << count << "\n";
509
510        for (Iterator<A2B1C1> it = ObjectList<A2B1C1>::start(); it; ++it)
511            std::cout << "Name: " << it->name_ << "\n";
512
513        std::cout << "3\n";
514        for (Iterator<A2B1C1> it = ObjectList<A2B1C1>::end(); it; --it)
515            std::cout << "Name: " << it->name_ << "\n";
516
517        std::cout << "4\n";
518        delete test10_08;
519
520        count = 0; for (Iterator<BaseObject> it = ObjectList<BaseObject>::start(); it != 0; ++it) { count++; }
521        std::cout << "Anzahl BaseObjects: " << count << "\n";
522        count = 0; for (Iterator<A1> it = ObjectList<A1>::start(); it != 0; ++it) { count++; }
523        std::cout << "Anzahl A1: " << count << "\n";
524        count = 0; for (Iterator<A1B1> it = ObjectList<A1B1>::start(); it; ++it) { count++; }
525        std::cout << "Anzahl A1B1: " << count << "\n";
526        count = 0; for (Iterator<A1B1C1> it = ObjectList<A1B1C1>::start(); it; ++it) { count++; }
527        std::cout << "Anzahl A1B1C1: " << count << "\n";
528        count = 0; for (Iterator<A2> it = ObjectList<A2>::start(); it; ++it) { count++; }
529        std::cout << "Anzahl A2: " << count << "\n";
530
531        std::cout << "5\n";
532        for (Iterator<A2B1C1> it = ObjectList<A2B1C1>::start(); it; ++it)
533            std::cout << "Name: " << it->name_ << "\n";
534
535        std::cout << "6\n";
536        for (Iterator<A2B1C1> it = ObjectList<A2B1C1>::end(); it; --it)
537            std::cout << "Name: " << it->name_ << "\n";
538
539        std::cout << "7\n";
540        delete test10_09;
541
542        count = 0; for (Iterator<BaseObject> it = ObjectList<BaseObject>::end(); it != 0; --it) { count++; }
543        std::cout << "Anzahl BaseObjects: " << count << "\n";
544        count = 0; for (Iterator<A1> it = ObjectList<A1>::end(); it != 0; --it) { count++; }
545        std::cout << "Anzahl A1: " << count << "\n";
546        count = 0; for (Iterator<A1B1> it = ObjectList<A1B1>::end(); it; --it) { count++; }
547        std::cout << "Anzahl A1B1: " << count << "\n";
548        count = 0; for (Iterator<A1B1C1> it = ObjectList<A1B1C1>::end(); it; --it) { count++; }
549        std::cout << "Anzahl A1B1C1: " << count << "\n";
550        count = 0; for (Iterator<A2> it = ObjectList<A2>::end(); it; --it) { count++; }
551        std::cout << "Anzahl A2: " << count << "\n";
552
553        std::cout << "8\n";
554        for (Iterator<A2B1C1> it = ObjectList<A2B1C1>::start(); it; ++it)
555            std::cout << "Name: " << it->name_ << "\n";
556
557        std::cout << "9\n";
558        for (Iterator<A2B1C1> it = ObjectList<A2B1C1>::end(); it; --it)
559            std::cout << "Name: " << it->name_ << "\n";
560
561        std::cout << "10\n";
562        delete test10_10;
563
564        count = 0; for (Iterator<BaseObject> it = ObjectList<BaseObject>::start(); it != 0; ++it) { count++; }
565        std::cout << "Anzahl BaseObjects: " << count << "\n";
566        count = 0; for (Iterator<A1> it = ObjectList<A1>::start(); it != 0; ++it) { count++; }
567        std::cout << "Anzahl A1: " << count << "\n";
568        count = 0; for (Iterator<A1B1> it = ObjectList<A1B1>::start(); it; ++it) { count++; }
569        std::cout << "Anzahl A1B1: " << count << "\n";
570        count = 0; for (Iterator<A1B1C1> it = ObjectList<A1B1C1>::start(); it; ++it) { count++; }
571        std::cout << "Anzahl A1B1C1: " << count << "\n";
572        count = 0; for (Iterator<A2> it = ObjectList<A2>::start(); it; ++it) { count++; }
573        std::cout << "Anzahl A2: " << count << "\n";
574
575        std::cout << "11\n";
576        for (Iterator<A2B1C1> it = ObjectList<A2B1C1>::start(); it; ++it)
577            std::cout << "Name: " << it->name_ << "\n";
578
579        std::cout << "12\n";
580        for (Iterator<A2B1C1> it = ObjectList<A2B1C1>::end(); it; --it)
581            std::cout << "Name: " << it->name_ << "\n";
582
583        std::cout << "13\n";
584
585      }
586
587      ~OrxApplication()
588      {
589        mInputManager->destroyInputObject(mKeyboard);
590        OIS::InputManager::destroyInputSystem(mInputManager);
591
592//        delete mRenderer;
593//        delete mSystem;
594
595        delete mListener;
596        delete mRoot;
597      }
598
599    private:
600      Ogre::Root *mRoot;
601      OIS::Keyboard *mKeyboard;
602      OIS::Mouse *mMouse;
603      OIS::InputManager *mInputManager;
604      CEGUI::OgreCEGUIRenderer *mRenderer;
605      CEGUI::System *mSystem;
606      OrxExitListener *mListener;
607
608      void createRoot()
609      {
610#if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
611        mRoot = new Ogre::Root(macBundlePath() + "/Contents/Resources/plugins.cfg");
612#else
613        mRoot = new Ogre::Root();
614#endif
615      }
616
617      void defineResources()
618      {
619        Ogre::String secName, typeName, archName;
620        Ogre::ConfigFile cf;
621#if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
622        cf.load(macBundlePath() + "/Contents/Resources/resources.cfg");
623#else
624        cf.load("resources.cfg");
625#endif
626
627        Ogre::ConfigFile::SectionIterator seci = cf.getSectionIterator();
628        while (seci.hasMoreElements())
629        {
630          secName = seci.peekNextKey();
631          Ogre::ConfigFile::SettingsMultiMap *settings = seci.getNext();
632          Ogre::ConfigFile::SettingsMultiMap::iterator i;
633          for (i = settings->begin(); i != settings->end(); ++i)
634          {
635            typeName = i->first;
636            archName = i->second;
637#if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
638            Ogre::ResourceGroupManager::getSingleton().addResourceLocation( String(macBundlePath() + "/" + archName), typeName, secName);
639#else
640            Ogre::ResourceGroupManager::getSingleton().addResourceLocation( archName, typeName, secName);
641#endif
642          }
643        }
644      }
645
646      void setupRenderSystem()
647      {
648        if (!mRoot->restoreConfig() && !mRoot->showConfigDialog())
649          throw Ogre::Exception(52, "User canceled the config dialog!", "OrxApplication::setupRenderSystem()");
650      }
651
652      void createRenderWindow()
653      {
654        mRoot->initialise(true, "Ogre Render Window");
655      }
656
657      void initializeResourceGroups()
658      {
659        Ogre::TextureManager::getSingleton().setDefaultNumMipmaps(5);
660        Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
661      }
662
663      void createScene(void)
664      {
665
666        string levelFile = "sp_level_moonstation.oxw";
667        loader::LevelLoader* loader = new loader::LevelLoader(levelFile);
668      }
669
670      void setupScene()
671      {
672        Ogre::SceneManager *mgr = mRoot->createSceneManager(Ogre::ST_GENERIC, "Default SceneManager");
673        Ogre::Camera *cam = mgr->createCamera("Camera");
674        Ogre::Viewport *vp = mRoot->getAutoCreatedWindow()->addViewport(cam);
675      }
676
677      void setupInputSystem()
678      {
679        size_t windowHnd = 0;
680        std::ostringstream windowHndStr;
681        OIS::ParamList pl;
682        Ogre::RenderWindow *win = mRoot->getAutoCreatedWindow();
683
684        win->getCustomAttribute("WINDOW", &windowHnd);
685        windowHndStr << windowHnd;
686        pl.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));
687        mInputManager = OIS::InputManager::createInputSystem(pl);
688
689        try
690        {
691          mKeyboard = static_cast<OIS::Keyboard*>(mInputManager->createInputObject(OIS::OISKeyboard, false));
692          mMouse = static_cast<OIS::Mouse*>(mInputManager->createInputObject(OIS::OISMouse, false));
693        }
694        catch (const OIS::Exception &e)
695        {
696          throw new Ogre::Exception(42, e.eText, "OrxApplication::setupInputSystem");
697        }
698      }
699
700      void setupCEGUI()
701      {
702        Ogre::SceneManager *mgr = mRoot->getSceneManager("Default SceneManager");
703        Ogre::RenderWindow *win = mRoot->getAutoCreatedWindow();
704
705        // CEGUI setup
706//        mRenderer = new CEGUI::OgreCEGUIRenderer(win, Ogre::RENDER_QUEUE_OVERLAY, false, 3000, mgr);
707//        mSystem = new CEGUI::System(mRenderer);
708
709        // Other CEGUI setup here.
710      }
711
712      void createFrameListener()
713      {
714        mListener = new OrxExitListener(mKeyboard);
715        mRoot->addFrameListener(mListener);
716      }
717
718      void startRenderLoop()
719      {
720        mRoot->startRendering();
721      }
722  };
723}
724
725using namespace Ogre;
726
727#if OGRE_PLATFORM == PLATFORM_WIN32 || OGRE_PLATFORM == OGRE_PLATFORM_WIN32
728#define WIN32_LEAN_AND_MEAN
729#include "windows.h"
730
731             INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT)
732#else
733             int main(int argc, char **argv)
734#endif
735{
736  try
737  {
738    orxonox::OrxApplication orxonox;
739    orxonox.go();
740  }
741  catch(Exception& e)
742  {
743#if OGRE_PLATFORM == PLATFORM_WIN32 || OGRE_PLATFORM == OGRE_PLATFORM_WIN32
744    MessageBoxA(NULL, e.getFullDescription().c_str(), "An exception has occurred!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
745#else
746    fprintf(stderr, "An exception has occurred: %s\n",
747            e.getFullDescription().c_str());
748#endif
749  }
750
751  return 0;
752}
753
Note: See TracBrowser for help on using the repository browser.