/*
* ORXONOX - the hottest 3D action shooter ever to exist
*
*
* License notice:
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
*
* Author:
* Benjamin Knecht , (C) 2007
* Co-authors:
* ...
*
*/
#include
#include
#include
#include
#include "IdentifierIncludes.h"
#include "BaseObject.h"
#include "Test.h"
#include "test1.h"
#include "test2.h"
#include "test3.h"
#if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
#include
// This function will locate the path to our application on OS X,
// unlike windows you can not rely on the curent working directory
// for locating your configuration files and resources.
std::string macBundlePath()
{
char path[1024];
CFBundleRef mainBundle = CFBundleGetMainBundle();
assert(mainBundle);
CFURLRef mainBundleURL = CFBundleCopyBundleURL(mainBundle);
assert(mainBundleURL);
CFStringRef cfStringRef = CFURLCopyFileSystemPath( mainBundleURL, kCFURLPOSIXPathStyle);
assert(cfStringRef);
CFStringGetCString(cfStringRef, path, 1024, kCFStringEncodingASCII);
CFRelease(mainBundleURL);
CFRelease(cfStringRef);
return std::string(path);
}
#endif
namespace orxonox
{
class OrxExitListener : public Ogre::FrameListener
{
public:
OrxExitListener(OIS::Keyboard *keyboard)
: mKeyboard(keyboard)
{
}
bool frameStarted(const Ogre::FrameEvent& evt)
{
mKeyboard->capture();
return !mKeyboard->isKeyDown(OIS::KC_ESCAPE);
}
private:
OIS::Keyboard *mKeyboard;
};
class OrxApplication
{
public:
void go()
{
/*
createRoot();
defineResources();
setupRenderSystem();
createRenderWindow();
initializeResourceGroups();
setupScene();
setupInputSystem();
setupCEGUI();
createFrameListener();
startRenderLoop();
*/
/*
std::cout << "Test 1\n";
BaseObject* test1;
test1 = new BaseObject();
test1 = new BaseObject();
test1 = new BaseObject();
std::cout << "Test 2\n";
A1* test2;
test2 = new A1();
test2 = new A1();
test2 = new A1();
std::cout << "Test 3\n";
BaseObject* test3;
test3 = new BaseObject();
test3 = new BaseObject();
test3 = new BaseObject();
std::cout << "Test 4\n";
A3* test4;
test4 = new A3();
test4 = new A3();
test4 = new A3();
*/
/*
std::cout << "Test 5\n";
A1* test5_01 = new A1();
A2* test5_02 = new A2();
A3* test5_03 = new A3();
A1B1* test5_04 = new A1B1();
A1B2* test5_05 = new A1B2();
A2B1* test5_06 = new A2B1();
A2B2* test5_07 = new A2B2();
A3B1* test5_08 = new A3B1();
A3B2* test5_09 = new A3B2();
A1B1C1* test5_10 = new A1B1C1();
A1B1C2* test5_11 = new A1B1C2();
A1B2C1* test5_12 = new A1B2C1();
A2B1C1* test5_13 = new A2B1C1();
A2B2C1* test5_14 = new A2B2C1();
A3B1C1* test5_15 = new A3B1C1();
A3B1C2* test5_16 = new A3B1C2();
A3B2C1* test5_17 = new A3B2C1();
A3B2C2* test5_18 = new A3B2C2();
*/
/*
OrxonoxClass* test5;
for (int i = 0; i <= 18; i++)
{
if (i == 0) test5 = test1;
if (i == 1) test5 = test5_01;
if (i == 2) test5 = test5_02;
if (i == 3) test5 = test5_03;
if (i == 4) test5 = test5_04;
if (i == 5) test5 = test5_05;
if (i == 6) test5 = test5_06;
if (i == 7) test5 = test5_07;
if (i == 8) test5 = test5_08;
if (i == 9) test5 = test5_09;
if (i == 10) test5 = test5_10;
if (i == 11) test5 = test5_11;
if (i == 12) test5 = test5_12;
if (i == 13) test5 = test5_13;
if (i == 14) test5 = test5_14;
if (i == 15) test5 = test5_15;
if (i == 16) test5 = test5_16;
if (i == 17) test5 = test5_17;
if (i == 18) test5 = test5_18;
std::cout << "\n";
std::cout << test5->getIdentifier()->getName() << ": directParents: " << test5->getIdentifier()->getDirectParents()->toString() << "\n";
std::cout << test5->getIdentifier()->getName() << ": allParents: " << test5->getIdentifier()->getAllParents()->toString() << "\n";
std::cout << test5->getIdentifier()->getName() << ": directChildren: " << test5->getIdentifier()->getDirectChildren()->toString() << "\n";
std::cout << test5->getIdentifier()->getName() << ": allChildren: " << test5->getIdentifier()->getAllChildren()->toString() << "\n";
}
*/
#define testandcout(code) \
std::cout << #code << " " << code << "\n"
/*
std::cout << "\n";
std::cout << "isA(XYZ)-Test:\n";
std::cout << "test5_01 = A1, Erwartet: 1 0 0 1 0\n";
testandcout(test5_01->isA(Class(A1)));
testandcout(test5_01->isA(Class(A2)));
testandcout(test5_01->isA(Class(A1B1)));
testandcout(test5_01->isA(Class(BaseObject)));
testandcout(test5_01->isA(Class(Interface1)));
std::cout << "\n";
std::cout << "test5_02 = A2, Erwartet: 0 1 0 1 0\n";
testandcout(test5_02->isA(Class(A1)));
testandcout(test5_02->isA(Class(A2)));
testandcout(test5_02->isA(Class(A1B1)));
testandcout(test5_02->isA(Class(BaseObject)));
testandcout(test5_02->isA(Class(Interface1)));
std::cout << "\n";
std::cout << "test5_01 = A3, Erwartet: 0 0 0 1 1\n";
testandcout(test5_03->isA(Class(A1)));
testandcout(test5_03->isA(Class(A2)));
testandcout(test5_03->isA(Class(A1B1)));
testandcout(test5_03->isA(Class(BaseObject)));
testandcout(test5_03->isA(Class(Interface1)));
std::cout << "\n";
std::cout << "isDirectA(XYZ)-Test:\n";
std::cout << "test5_01 = A1, Erwartet: 1 0 0 0 0\n";
testandcout(test5_01->isDirectlyA(Class(A1)));
testandcout(test5_01->isDirectlyA(Class(A2)));
testandcout(test5_01->isDirectlyA(Class(A1B1)));
testandcout(test5_01->isDirectlyA(Class(BaseObject)));
testandcout(test5_01->isDirectlyA(Class(Interface1)));
std::cout << "\n";
std::cout << "test5_02 = A2, Erwartet: 0 1 0 0 0\n";
testandcout(test5_02->isDirectlyA(Class(A1)));
testandcout(test5_02->isDirectlyA(Class(A2)));
testandcout(test5_02->isDirectlyA(Class(A1B1)));
testandcout(test5_02->isDirectlyA(Class(BaseObject)));
testandcout(test5_02->isDirectlyA(Class(Interface1)));
std::cout << "\n";
std::cout << "test5_03 = A3, Erwartet: 0 0 0 0 0\n";
testandcout(test5_03->isDirectlyA(Class(A1)));
testandcout(test5_03->isDirectlyA(Class(A2)));
testandcout(test5_03->isDirectlyA(Class(A1B1)));
testandcout(test5_03->isDirectlyA(Class(BaseObject)));
testandcout(test5_03->isDirectlyA(Class(Interface1)));
std::cout << "\n";
std::cout << "isChildOf(XYZ)-Test:\n";
std::cout << "test5_04 = A1B1, Erwartet: 1 0 1 0 0 0 0\n";
testandcout(test5_04->isChildOf(Class(A1)));
testandcout(test5_04->isChildOf(Class(A2)));
testandcout(test5_04->isChildOf(Class(BaseObject)));
testandcout(test5_04->isChildOf(Class(Interface1)));
testandcout(test5_04->isChildOf(Class(Interface2)));
testandcout(test5_04->isChildOf(Class(A1B1C2)));
testandcout(test5_04->isChildOf(Class(A1B1)));
std::cout << "\n";
std::cout << "test5_06 = A2B1, Erwartet: 0 1 1 0 0 0 0\n";
testandcout(test5_06->isChildOf(Class(A1)));
testandcout(test5_06->isChildOf(Class(A2)));
testandcout(test5_06->isChildOf(Class(BaseObject)));
testandcout(test5_06->isChildOf(Class(Interface1)));
testandcout(test5_06->isChildOf(Class(Interface2)));
testandcout(test5_06->isChildOf(Class(A1B1C2)));
testandcout(test5_06->isChildOf(Class(A1B1)));
std::cout << "\n";
std::cout << "test5_07 = A2B2, Erwartet: 0 1 1 1 0 0\n";
testandcout(test5_07->isChildOf(Class(A1)));
testandcout(test5_07->isChildOf(Class(A2)));
testandcout(test5_07->isChildOf(Class(BaseObject)));
testandcout(test5_07->isChildOf(Class(Interface1)));
testandcout(test5_07->isChildOf(Class(Interface2)));
testandcout(test5_07->isChildOf(Class(A1B1C2)));
std::cout << "\n";
std::cout << "test5_08 = A3B1, Erwartet: 0 0 1 1 0 0\n";
testandcout(test5_08->isChildOf(Class(A1)));
testandcout(test5_08->isChildOf(Class(A2)));
testandcout(test5_08->isChildOf(Class(BaseObject)));
testandcout(test5_08->isChildOf(Class(Interface1)));
testandcout(test5_08->isChildOf(Class(Interface2)));
testandcout(test5_08->isChildOf(Class(A1B1C2)));
std::cout << "\n";
std::cout << "test5_09 = A3B2, Erwartet: 0 0 1 1 1 0\n";
testandcout(test5_09->isChildOf(Class(A1)));
testandcout(test5_09->isChildOf(Class(A2)));
testandcout(test5_09->isChildOf(Class(BaseObject)));
testandcout(test5_09->isChildOf(Class(Interface1)));
testandcout(test5_09->isChildOf(Class(Interface2)));
testandcout(test5_09->isChildOf(Class(A1B1C2)));
std::cout << "\n";
std::cout << "isDirectChildOf(XYZ)-Test:\n";
std::cout << "test5_04 = A1B1, Erwartet: 1 0 0 0 0 0 0\n";
testandcout(test5_04->isDirectChildOf(Class(A1)));
testandcout(test5_04->isDirectChildOf(Class(A2)));
testandcout(test5_04->isDirectChildOf(Class(BaseObject)));
testandcout(test5_04->isDirectChildOf(Class(Interface1)));
testandcout(test5_04->isDirectChildOf(Class(Interface2)));
testandcout(test5_04->isDirectChildOf(Class(A1B1C2)));
testandcout(test5_04->isDirectChildOf(Class(A1B1)));
std::cout << "\n";
std::cout << "test5_06 = A2B1, Erwartet: 0 1 0 0 0 0 0\n";
testandcout(test5_06->isDirectChildOf(Class(A1)));
testandcout(test5_06->isDirectChildOf(Class(A2)));
testandcout(test5_06->isDirectChildOf(Class(BaseObject)));
testandcout(test5_06->isDirectChildOf(Class(Interface1)));
testandcout(test5_06->isDirectChildOf(Class(Interface2)));
testandcout(test5_06->isDirectChildOf(Class(A1B1C2)));
testandcout(test5_06->isDirectChildOf(Class(A1B1)));
std::cout << "\n";
std::cout << "test5_07 = A2B2, Erwartet: 0 1 0 1 0 0\n";
testandcout(test5_07->isDirectChildOf(Class(A1)));
testandcout(test5_07->isDirectChildOf(Class(A2)));
testandcout(test5_07->isDirectChildOf(Class(BaseObject)));
testandcout(test5_07->isDirectChildOf(Class(Interface1)));
testandcout(test5_07->isDirectChildOf(Class(Interface2)));
testandcout(test5_07->isDirectChildOf(Class(A1B1C2)));
std::cout << "\n";
std::cout << "test5_08 = A3B1, Erwartet: 0 0 0 0 0 0\n";
testandcout(test5_08->isDirectChildOf(Class(A1)));
testandcout(test5_08->isDirectChildOf(Class(A2)));
testandcout(test5_08->isDirectChildOf(Class(BaseObject)));
testandcout(test5_08->isDirectChildOf(Class(Interface1)));
testandcout(test5_08->isDirectChildOf(Class(Interface2)));
testandcout(test5_08->isDirectChildOf(Class(A1B1C2)));
std::cout << "\n";
std::cout << "test5_09 = A3B2, Erwartet: 0 0 0 0 1 0\n";
testandcout(test5_09->isDirectChildOf(Class(A1)));
testandcout(test5_09->isDirectChildOf(Class(A2)));
testandcout(test5_09->isDirectChildOf(Class(BaseObject)));
testandcout(test5_09->isDirectChildOf(Class(Interface1)));
testandcout(test5_09->isDirectChildOf(Class(Interface2)));
testandcout(test5_09->isDirectChildOf(Class(A1B1C2)));
std::cout << "\n";
std::cout << "isParentOf(XYZ)-Test:\n";
std::cout << "test1 = BaseObject, Erwartet: 0 0 1 1 1 1 1\n";
testandcout(test1->isParentOf(Class(BaseObject)));
testandcout(test1->isParentOf(Class(Interface1)));
testandcout(test1->isParentOf(Class(A1)));
testandcout(test1->isParentOf(Class(A2)));
testandcout(test1->isParentOf(Class(A1B1)));
testandcout(test1->isParentOf(Class(A2B2)));
testandcout(test1->isParentOf(Class(A3B1C2)));
std::cout << "\n";
std::cout << "test5_01 = A1, Erwartet: 0 0 0 0 1 0 0\n";
testandcout(test5_01->isParentOf(Class(BaseObject)));
testandcout(test5_01->isParentOf(Class(Interface1)));
testandcout(test5_01->isParentOf(Class(A1)));
testandcout(test5_01->isParentOf(Class(A2)));
testandcout(test5_01->isParentOf(Class(A1B1)));
testandcout(test5_01->isParentOf(Class(A2B2)));
testandcout(test5_01->isParentOf(Class(A3B1C2)));
std::cout << "\n";
std::cout << "Interface1, Erwartet: 0 0 0 0 0 1 1\n";
testandcout(Class(Interface1)->isParentOf(Class(BaseObject)));
testandcout(Class(Interface1)->isParentOf(Class(Interface1)));
testandcout(Class(Interface1)->isParentOf(Class(A1)));
testandcout(Class(Interface1)->isParentOf(Class(A2)));
testandcout(Class(Interface1)->isParentOf(Class(A1B1)));
testandcout(Class(Interface1)->isParentOf(Class(A2B2)));
testandcout(Class(Interface1)->isParentOf(Class(A3B1C2)));
std::cout << "\n";
std::cout << "isDirectParentOf(XYZ)-Test:\n";
std::cout << "test1 = BaseObject, Erwartet: 0 0 1 1 0 0 0\n";
testandcout(test1->isDirectParentOf(Class(BaseObject)));
testandcout(test1->isDirectParentOf(Class(Interface1)));
testandcout(test1->isDirectParentOf(Class(A1)));
testandcout(test1->isDirectParentOf(Class(A2)));
testandcout(test1->isDirectParentOf(Class(A1B1)));
testandcout(test1->isDirectParentOf(Class(A2B2)));
testandcout(test1->isDirectParentOf(Class(A3B1C2)));
std::cout << "\n";
std::cout << "test5_01 = A1, Erwartet: 0 0 0 0 1 0 0\n";
testandcout(test5_01->isDirectParentOf(Class(BaseObject)));
testandcout(test5_01->isDirectParentOf(Class(Interface1)));
testandcout(test5_01->isDirectParentOf(Class(A1)));
testandcout(test5_01->isDirectParentOf(Class(A2)));
testandcout(test5_01->isDirectParentOf(Class(A1B1)));
testandcout(test5_01->isDirectParentOf(Class(A2B2)));
testandcout(test5_01->isDirectParentOf(Class(A3B1C2)));
std::cout << "\n";
std::cout << "Interface1, Erwartet: 0 0 0 0 0 1 0\n";
testandcout(Class(Interface1)->isDirectParentOf(Class(BaseObject)));
testandcout(Class(Interface1)->isDirectParentOf(Class(Interface1)));
testandcout(Class(Interface1)->isDirectParentOf(Class(A1)));
testandcout(Class(Interface1)->isDirectParentOf(Class(A2)));
testandcout(Class(Interface1)->isDirectParentOf(Class(A1B1)));
testandcout(Class(Interface1)->isDirectParentOf(Class(A2B2)));
testandcout(Class(Interface1)->isDirectParentOf(Class(A3B1C2)));
*/
/*
std::cout << "Test 6\n";
std::cout << "1:\n";
Identifier* test6_01 = Class(A1B1);
std::cout << "2:\n";
Identifier* test6_02 = Class(A1B1);
std::cout << "3:\n";
Identifier* test6_03 = Class(A1);
std::cout << "4:\n";
Identifier* test6_04 = Class(A1B1C1);
std::cout << "5:\n";
Identifier* test6_05 = Class(A1B1);
std::cout << "6:\n";
Identifier* test6_06 = Class(A1B1C1);
*/
/*
std::cout << "\n";
std::cout << "BaseObject: directParents: " << Class(BaseObject)->getDirectParents()->toString() << "\n";
std::cout << "BaseObject: allParents: " << Class(BaseObject)->getAllParents()->toString() << "\n";
std::cout << "BaseObject: directChildren: " << Class(BaseObject)->getDirectChildren()->toString() << "\n";
std::cout << "BaseObject: allChildren: " << Class(BaseObject)->getAllChildren()->toString() << "\n";
std::cout << "\n";
std::cout << "A1: directParents: " << Class(A1)->getDirectParents()->toString() << "\n";
std::cout << "A1: allParents: " << Class(A1)->getAllParents()->toString() << "\n";
std::cout << "A1: directChildren: " << Class(A1)->getDirectChildren()->toString() << "\n";
std::cout << "A1: allChildren: " << Class(A1)->getAllChildren()->toString() << "\n";
std::cout << "\n";
std::cout << "A1B1: directParents: " << Class(A1B1)->getDirectParents()->toString() << "\n";
std::cout << "A1B1: allParents: " << Class(A1B1)->getAllParents()->toString() << "\n";
std::cout << "A1B1: directChildren: " << Class(A1B1)->getDirectChildren()->toString() << "\n";
std::cout << "A1B1: allChildren: " << Class(A1B1)->getAllChildren()->toString() << "\n";
std::cout << "\n";
std::cout << "A1B1C1: directParents: " << Class(A1B1C1)->getDirectParents()->toString() << "\n";
std::cout << "A1B1C1: allParents: " << Class(A1B1C1)->getAllParents()->toString() << "\n";
std::cout << "A1B1C1: directChildren: " << Class(A1B1C1)->getDirectChildren()->toString() << "\n";
std::cout << "A1B1C1: allChildren: " << Class(A1B1C1)->getAllChildren()->toString() << "\n";
std::cout << "\n";
std::cout << "A3B1C1 child of A3: " << Class(A3B1C1)->isChildOf(Class(A3)) << "\n";
std::cout << "\n";
std::cout << "A2 parent of A2B1C1: " << Class(A2)->isParentOf(Class(A2B1C1)) << "\n";
*/
/*
std::cout << "Test 7\n";
std::cout << "1\n";
BaseIdentifier test7_01;
test7_01 = Class(A1B1C1);
BaseIdentifier test7_02;
test7_02 = Class(A1B1);
std::cout << test7_01->getName() << "\n";
std::cout << test7_02->getName() << "\n";
*/
/*
std::cout << "2\n";
BaseIdentifier test7_03;
test7_03 = Class(A1);
BaseIdentifier test7_04;
test7_04 = Class(A1B2);
BaseIdentifier test7_05;
test7_05 = Class(A2);
*/
/*
std::cout << "Test 8\n";
std::cout << "1\n";
Test1* test8_01 = new Test1;
Test3* test8_03 = new Test3;
test8_03->usefullClassesIsATest(test8_01);
std::cout << "2\n";
Test2* test8_02 = new Test2;
test8_03->usefullClassesIsATest(test8_02);
std::cout << "3\n";
test8_01->setUsefullClass1(Class(Test1));
test8_01->setUsefullClass1(test8_02->getIdentifier());
test8_01->setUsefullClass2(Class(Test2));
test8_01->setUsefullClassOfTypeTest3(Class(Test3));
test8_01->setUsefullClassOfTypeTest3(test8_03->getIdentifier());
testandcout(test8_01->isA(Class(Test1)));
testandcout(test8_01->isA(Class(Test2)));
testandcout(test8_01->isA(Class(Test3)));
Test2* test8_04 = new Test2;
testandcout(test8_02->isA(Class(Test1)));
testandcout(test8_02->isA(Class(Test2)));
testandcout(test8_02->isA(Class(Test3)));
Test3* test8_05 = new Test3;
testandcout(test8_03->isA(Class(Test1)));
testandcout(test8_03->isA(Class(Test2)));
testandcout(test8_03->isA(Class(Test3)));
delete test8_01;
delete test8_02;
delete test8_03;
*/
/*
std::cout << "Test 9\n";
std::cout << "1\n";
Identifier* test9_01 = Class(A3);
BaseObject* test9_02 = test9_01->fabricate();
std::cout << test9_02->getIdentifier()->getName() << "\n";
std::cout << "\n2\n";
BaseObject* test9_03 = Class(A1B2)->fabricate();
std::cout << test9_03->getIdentifier()->getName() << "\n";
std::cout << "\n3\n";
BaseIdentifier test9_04;
test9_04 = Class(A1B1C1);
A1* test9_05 = test9_04.fabricate();
std::cout << test9_05->getIdentifier()->getName() << "\n";
std::cout << "\n4\n";
BaseObject* test9_06 = Factory("A2B2");
std::cout << test9_06->getIdentifier()->getName() << "\n";
std::cout << "\n5\n";
delete test9_02;
delete test9_03;
delete test9_05;
delete test9_06;
*/
std::cout << "Test 10\n";
Identifier* test10_01 = Class(A1B2);
Identifier* test10_02 = Class(A2);
Identifier* test10_03 = Class(A3B1C1);
BaseObject* test10_04 = test10_01->fabricate();
BaseObject* test10_05 = test10_02->fabricate();
BaseObject* test10_06 = test10_03->fabricate();
BaseObject* test10_07;
for (int i = 0; i < 10; i++)
test10_07 = Factory("A1B1C1");
std::cout << "1\n";
int count = 0;
for (Iterator it; it != 0; ++it)
count++;
std::cout << "Anzahl BaseObjects: " << count << "\n";
count = 0;
for (Iterator it; it != 0; ++it)
count++;
std::cout << "Anzahl A1: " << count << "\n";
count = 0;
for (Iterator it; it; ++it)
count++;
std::cout << "Anzahl A1B1: " << count << "\n";
count = 0;
for (Iterator it; it; ++it)
count++;
std::cout << "Anzahl A1B1C1: " << count << "\n";
count = 0;
for (Iterator it; it; ++it)
count++;
std::cout << "Anzahl A2: " << count << "\n";
std::cout << "2\n";
BaseObject* test10_08;
BaseObject* test10_09;
BaseObject* test10_10;
for (int i = 0; i < 10; i++)
{
test10_08 = Factory("A2B1C1");
test10_08->name_ = "A2B1C1#";
test10_08->name_ += ('0' + i);
if (i == 0)
test10_09 = test10_08;
if (i == 5)
test10_10 = test10_08;
}
for (Iterator it; it; ++it)
std::cout << "Name: " << it->name_ << "\n";
std::cout << "3\n";
for (Iterator it; it; --it)
std::cout << "Name: " << it->name_ << "\n";
std::cout << "4\n";
delete test10_08;
std::cout << "5\n";
for (Iterator it; it; ++it)
std::cout << "Name: " << it->name_ << "\n";
std::cout << "6\n";
for (Iterator it; it; --it)
std::cout << "Name: " << it->name_ << "\n";
std::cout << "7\n";
delete test10_09;
std::cout << "8\n";
for (Iterator it; it; ++it)
std::cout << "Name: " << it->name_ << "\n";
std::cout << "9\n";
for (Iterator it; it; --it)
std::cout << "Name: " << it->name_ << "\n";
std::cout << "10\n";
delete test10_10;
std::cout << "11\n";
for (Iterator it; it; ++it)
std::cout << "Name: " << it->name_ << "\n";
std::cout << "12\n";
for (Iterator it; it; --it)
std::cout << "Name: " << it->name_ << "\n";
}
~OrxApplication()
{
mInputManager->destroyInputObject(mKeyboard);
OIS::InputManager::destroyInputSystem(mInputManager);
delete mRenderer;
delete mSystem;
delete mListener;
delete mRoot;
}
private:
Ogre::Root *mRoot;
OIS::Keyboard *mKeyboard;
OIS::Mouse *mMouse;
OIS::InputManager *mInputManager;
CEGUI::OgreCEGUIRenderer *mRenderer;
CEGUI::System *mSystem;
OrxExitListener *mListener;
void createRoot()
{
#if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
mRoot = new Ogre::Root(macBundlePath() + "/Contents/Resources/plugins.cfg");
#else
mRoot = new Ogre::Root();
#endif
}
void defineResources()
{
Ogre::String secName, typeName, archName;
Ogre::ConfigFile cf;
#if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
cf.load(macBundlePath() + "/Contents/Resources/resources.cfg");
#else
cf.load("resources.cfg");
#endif
Ogre::ConfigFile::SectionIterator seci = cf.getSectionIterator();
while (seci.hasMoreElements())
{
secName = seci.peekNextKey();
Ogre::ConfigFile::SettingsMultiMap *settings = seci.getNext();
Ogre::ConfigFile::SettingsMultiMap::iterator i;
for (i = settings->begin(); i != settings->end(); ++i)
{
typeName = i->first;
archName = i->second;
#if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
Ogre::ResourceGroupManager::getSingleton().addResourceLocation( String(macBundlePath() + "/" + archName), typeName, secName);
#else
Ogre::ResourceGroupManager::getSingleton().addResourceLocation( archName, typeName, secName);
#endif
}
}
}
void setupRenderSystem()
{
if (!mRoot->restoreConfig() && !mRoot->showConfigDialog())
throw Ogre::Exception(52, "User canceled the config dialog!", "OrxApplication::setupRenderSystem()");
}
void createRenderWindow()
{
mRoot->initialise(true, "Ogre Render Window");
}
void initializeResourceGroups()
{
Ogre::TextureManager::getSingleton().setDefaultNumMipmaps(5);
Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
}
void setupScene()
{
Ogre::SceneManager *mgr = mRoot->createSceneManager(Ogre::ST_GENERIC, "Default SceneManager");
Ogre::Camera *cam = mgr->createCamera("Camera");
Ogre::Viewport *vp = mRoot->getAutoCreatedWindow()->addViewport(cam);
}
void setupInputSystem()
{
size_t windowHnd = 0;
std::ostringstream windowHndStr;
OIS::ParamList pl;
Ogre::RenderWindow *win = mRoot->getAutoCreatedWindow();
win->getCustomAttribute("WINDOW", &windowHnd);
windowHndStr << windowHnd;
pl.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));
mInputManager = OIS::InputManager::createInputSystem(pl);
try
{
mKeyboard = static_cast(mInputManager->createInputObject(OIS::OISKeyboard, false));
mMouse = static_cast(mInputManager->createInputObject(OIS::OISMouse, false));
}
catch (const OIS::Exception &e)
{
throw new Ogre::Exception(42, e.eText, "OrxApplication::setupInputSystem");
}
}
void setupCEGUI()
{
Ogre::SceneManager *mgr = mRoot->getSceneManager("Default SceneManager");
Ogre::RenderWindow *win = mRoot->getAutoCreatedWindow();
// CEGUI setup
mRenderer = new CEGUI::OgreCEGUIRenderer(win, Ogre::RENDER_QUEUE_OVERLAY, false, 3000, mgr);
mSystem = new CEGUI::System(mRenderer);
// Other CEGUI setup here.
}
void createFrameListener()
{
mListener = new OrxExitListener(mKeyboard);
mRoot->addFrameListener(mListener);
}
void startRenderLoop()
{
mRoot->startRendering();
}
};
}
using namespace Ogre;
#if OGRE_PLATFORM == PLATFORM_WIN32 || OGRE_PLATFORM == OGRE_PLATFORM_WIN32
#define WIN32_LEAN_AND_MEAN
#include "windows.h"
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT)
#else
int main(int argc, char **argv)
#endif
{
try
{
orxonox::OrxApplication orxonox;
orxonox.go();
}
catch(Exception& e)
{
#if OGRE_PLATFORM == PLATFORM_WIN32 || OGRE_PLATFORM == OGRE_PLATFORM_WIN32
MessageBoxA(NULL, e.getFullDescription().c_str(), "An exception has occurred!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
#else
fprintf(stderr, "An exception has occurred: %s\n",
e.getFullDescription().c_str());
#endif
}
return 0;
}