Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/objecthierarchie/src/orxonox.cc @ 243

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

removed the "directParent" feature - it was a clever but unnecessary feature.

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