Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 135 for code/trunk/src


Ignore:
Timestamp:
Oct 31, 2007, 10:23:38 PM (17 years ago)
Author:
bknecht
Message:

merged back network and xml branch

Location:
code/trunk/src
Files:
2 edited
17 copied

Legend:

Unmodified
Added
Removed
  • code/trunk/src/CMakeLists.txt

    r121 r135  
    33# create a few variables to simplify life
    44SET(SRC_FILES orxonox.cc)
    5 #SET(INC_FILES ExampleApplication.h  ExampleFrameListener.h)
     5SET(INC_FILES ExampleApplication.h  ExampleFrameListener.h)
    66
    77#Creates an executable
    88ADD_EXECUTABLE(../bin/main ${SRC_FILES} ${INC_FILES})
    99#Links the executable against OGRE and OIS
    10 TARGET_LINK_LIBRARIES(../bin/main ${OGRE_LIBRARIES} ${OIS_LIBRARIES} ${CEGUI_OGRE_LIBRARIES} ${CEGUI_LIBRARIES})
     10TARGET_LINK_LIBRARIES(../bin/main ${OGRE_LIBRARIES} ${OIS_LIBRARIES})
     11
  • code/trunk/src/orxonox.cc

    r125 r135  
    2626 */
    2727
    28 #include <Ogre.h>
    29 #include <OIS/OIS.h>
    30 #include <CEGUI/CEGUI.h>
    31 #include <OgreCEGUIRenderer.h>
     28// TODO: Change this to orxonox.h and include all necessary functions there
     29#include "ExampleApplication.h"
    3230
    33 #if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
    34 #include <CoreFoundation/CoreFoundation.h>
     31// TODO: Put creation of SceneNode and implementation of FrameListener into an extern file
     32SceneNode *lightNode;
    3533
    36 // This function will locate the path to our application on OS X,
    37 // unlike windows you can not rely on the curent working directory
    38 // for locating your configuration files and resources.
    39 std::string macBundlePath()
    40 {
    41   char path[1024];
    42   CFBundleRef mainBundle = CFBundleGetMainBundle();
    43   assert(mainBundle);
    44 
    45   CFURLRef mainBundleURL = CFBundleCopyBundleURL(mainBundle);
    46   assert(mainBundleURL);
    47 
    48   CFStringRef cfStringRef = CFURLCopyFileSystemPath( mainBundleURL, kCFURLPOSIXPathStyle);
    49   assert(cfStringRef);
    50 
    51   CFStringGetCString(cfStringRef, path, 1024, kCFStringEncodingASCII);
    52 
    53   CFRelease(mainBundleURL);
    54   CFRelease(cfStringRef);
    55 
    56   return std::string(path);
    57 }
    58 #endif
    59 
    60 using namespace Ogre;
    61 
    62 class OrxExitListener : public FrameListener
     34class FrameListener : public ExampleFrameListener
    6335{
    6436  public:
    65     OrxExitListener(OIS::Keyboard *keyboard)
    66   : mKeyboard(keyboard)
     37    FrameListener(RenderWindow* win, Camera* cam, SceneManager *sceneMgr)
     38  : ExampleFrameListener(win, cam, false, false)
    6739    {
    6840    }
    6941
    70     bool frameStarted(const FrameEvent& evt)
     42    bool frameStarted(const FrameEvent &evt)
    7143    {
    72       mKeyboard->capture();
    73       return !mKeyboard->isKeyDown(OIS::KC_ESCAPE);
     44        // add tutorial code here:
     45        // ...
     46      lightNode->translate(Vector3(0, -10 * evt.timeSinceLastFrame, 0));
     47
     48      return ExampleFrameListener::frameStarted(evt);
     49    }
     50  private:
     51};
     52
     53// TODO: Make Doxygen tags work and create scene AFTER loading in an extern file
     54//! This is the application class of Orxonox
     55/**
     56  Application class. The starting point of Orxonox.
     57  Loading of ressources should start in here.
     58  ...
     59*/
     60class Orxonox : public ExampleApplication
     61{
     62  protected:
     63  public:
     64    Orxonox()
     65    {
    7466    }
    7567
    76   private:
    77     OIS::Keyboard *mKeyboard;
    78 };
    79 
    80 class OrxApplication
    81 {
    82   public:
    83     void go()
     68    ~Orxonox()
    8469    {
    85       createRoot();
    86       defineResources();
    87       setupRenderSystem();
    88       createRenderWindow();
    89       initializeResourceGroups();
    90       setupScene();
    91       setupInputSystem();
    92       setupCEGUI();
    93       createFrameListener();
    94       startRenderLoop();
     70    }
     71  protected:
     72    void createCamera(void)
     73    {
     74        // create camera
     75      mCamera = mSceneMgr->createCamera("PlayerCam");
     76      mCamera->setNearClipDistance(5);
     77      mCamera->setPosition(Vector3(0,10,500));
     78      mCamera->lookAt(Vector3(0,0,0));
    9579    }
    9680
    97     ~OrxApplication()
     81    void createScene(void)
    9882    {
    99       mInputManager->destroyInputObject(mKeyboard);
    100       OIS::InputManager::destroyInputSystem(mInputManager);
     83        // add tutorial code here:
     84        // ...
     85      mSceneMgr->setAmbientLight( ColourValue( 0.3, 0.3, 0.3 ) );
     86      //Entity* head = mSceneMgr->createEntity("head", "ogrehead.mesh");
    10187
    102       delete mRenderer;
    103       delete mSystem;
     88      //Entity* head2 = mSceneMgr->createEntity("head2", "ogrehead.mesh");
    10489
    105       delete mListener;
    106       delete mRoot;
     90      SceneNode *node = mSceneMgr->getRootSceneNode()->createChildSceneNode( "OgreHeadNode", Vector3( 0, 0, 0 ) );
     91      //node->attachObject( head );
     92
     93      SceneNode *node2 = mSceneMgr->getRootSceneNode()->createChildSceneNode( "OgreHeadNode2", Vector3( 50, 0, 0 ) );
     94      //node2->attachObject( head2 );
     95
     96
     97      //mSceneMgr->setSkyBox(true, "Examples/SpaceSkyBox");
     98
     99      Light *light = mSceneMgr->createLight("Light1");
     100      light->setType(Light::LT_POINT);
     101      light->setPosition(Vector3(0, 100, 0));
     102      light->setDiffuseColour(0.5, 0.5, 0.0);
     103      light->setSpecularColour(0.5, 0.5, 0.0);
     104
     105      BillboardSet *bbs = mSceneMgr->createBillboardSet("bb", 1);
     106      bbs->createBillboard(Vector3::ZERO, ColourValue(1.0, 0.0, 0.0));
     107      //bbs->setMaterialName("Examples/Flare");
     108
     109      lightNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("LightNode", Vector3(0, 100, 0));
     110      lightNode->attachObject(bbs);
     111      lightNode->attachObject(light);
     112      light->setPosition(0.0, 0.0, 0.0);
    107113    }
    108114
    109   private:
    110     Root *mRoot;
    111     OIS::Keyboard *mKeyboard;
    112     OIS::Mouse *mMouse;
    113     OIS::InputManager *mInputManager;
    114     CEGUI::OgreCEGUIRenderer *mRenderer;
    115     CEGUI::System *mSystem;
    116     OrxExitListener *mListener;
    117 
    118     void createRoot()
     115    void createFrameListener(void)
    119116    {
    120 #if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
    121       mRoot = new Root(macBundlePath() + "/Contents/Resources/plugins.cfg");
    122 #else
    123       mRoot = new Root();
    124 #endif
    125     }
    126 
    127     void defineResources()
    128     {
    129       String secName, typeName, archName;
    130       ConfigFile cf;
    131 #if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
    132       cf.load(macBundlePath() + "/Contents/Resources/resources.cfg");
    133 #else
    134       cf.load("resources.cfg");
    135 #endif
    136 
    137       ConfigFile::SectionIterator seci = cf.getSectionIterator();
    138       while (seci.hasMoreElements())
    139       {
    140         secName = seci.peekNextKey();
    141         ConfigFile::SettingsMultiMap *settings = seci.getNext();
    142         ConfigFile::SettingsMultiMap::iterator i;
    143         for (i = settings->begin(); i != settings->end(); ++i)
    144         {
    145           typeName = i->first;
    146           archName = i->second;
    147 #if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
    148           ResourceGroupManager::getSingleton().addResourceLocation( String(macBundlePath() + "/" + archName), typeName, secName);
    149 #else
    150           ResourceGroupManager::getSingleton().addResourceLocation( archName, typeName, secName);
    151 #endif
    152         }
    153       }
    154     }
    155 
    156     void setupRenderSystem()
    157     {
    158       if (!mRoot->restoreConfig() && !mRoot->showConfigDialog())
    159         throw Exception(52, "User canceled the config dialog!", "OrxApplication::setupRenderSystem()");
    160     }
    161 
    162     void createRenderWindow()
    163     {
    164       mRoot->initialise(true, "Ogre Render Window");
    165     }
    166 
    167     void initializeResourceGroups()
    168     {
    169       TextureManager::getSingleton().setDefaultNumMipmaps(5);
    170       ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
    171     }
    172 
    173     void setupScene()
    174     {
    175       SceneManager *mgr = mRoot->createSceneManager(ST_GENERIC, "Default SceneManager");
    176       Camera *cam = mgr->createCamera("Camera");
    177       Viewport *vp = mRoot->getAutoCreatedWindow()->addViewport(cam);
    178     }
    179 
    180     void setupInputSystem()
    181     {
    182       size_t windowHnd = 0;
    183       std::ostringstream windowHndStr;
    184       OIS::ParamList pl;
    185       RenderWindow *win = mRoot->getAutoCreatedWindow();
    186 
    187       win->getCustomAttribute("WINDOW", &windowHnd);
    188       windowHndStr << windowHnd;
    189       pl.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));
    190       mInputManager = OIS::InputManager::createInputSystem(pl);
    191 
    192       try
    193       {
    194         mKeyboard = static_cast<OIS::Keyboard*>(mInputManager->createInputObject(OIS::OISKeyboard, false));
    195         mMouse = static_cast<OIS::Mouse*>(mInputManager->createInputObject(OIS::OISMouse, false));
    196       }
    197       catch (const OIS::Exception &e)
    198       {
    199         throw new Exception(42, e.eText, "OrxApplication::setupInputSystem");
    200       }
    201     }
    202 
    203     void setupCEGUI()
    204     {
    205       SceneManager *mgr = mRoot->getSceneManager("Default SceneManager");
    206       RenderWindow *win = mRoot->getAutoCreatedWindow();
    207 
    208       // CEGUI setup
    209 //       mRenderer = new CEGUI::OgreCEGUIRenderer(win, Ogre::RENDER_QUEUE_OVERLAY, false, 3000, mgr);
    210 //       mSystem = new CEGUI::System(mRenderer);
    211 
    212       // Other CEGUI setup here.
    213     }
    214 
    215     void createFrameListener()
    216     {
    217       mListener = new OrxExitListener(mKeyboard);
    218       mRoot->addFrameListener(mListener);
    219     }
    220 
    221     void startRenderLoop()
    222     {
    223       mRoot->startRendering();
     117        // create frame listener
     118      mFrameListener = new ExampleFrameListener(mWindow, mCamera, mSceneMgr);
     119      mRoot->addFrameListener(mFrameListener);
    224120    }
    225121};
    226122
    227 #if OGRE_PLATFORM == PLATFORM_WIN32 || OGRE_PLATFORM == OGRE_PLATFORM_WIN32
     123#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
    228124#define WIN32_LEAN_AND_MEAN
    229125#include "windows.h"
    230126
    231              INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT)
     127INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
    232128#else
    233              int main(int argc, char **argv)
     129
     130int main(int argc, char **argv)
    234131#endif
    235132{
    236   try
    237   {
    238     OrxApplication orxonox;
     133  // Create application object
     134  Orxonox orxonox;
     135
     136  try {
    239137    orxonox.go();
    240   }
    241   catch(Exception& e)
    242   {
    243 #if OGRE_PLATFORM == PLATFORM_WIN32 || OGRE_PLATFORM == OGRE_PLATFORM_WIN32
    244     MessageBoxA(NULL, e.getFullDescription().c_str(), "An exception has occurred!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
     138  } catch( Exception& e ) {
     139#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
     140    MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occurred!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
    245141#else
    246142    fprintf(stderr, "An exception has occurred: %s\n",
     
    251147  return 0;
    252148}
    253 
Note: See TracChangeset for help on using the changeset viewer.