Print

This is the source for BloodyMess Tutorial 3.

#include "ExampleApplication.h"
 
#include <NxOgre.h>
#include <NxOgreOGRE3D.h>
 
class BloodyMessTutorial3Listener : public ExampleFrameListener
{ 
public:
    BloodyMessTutorial3Listener(RenderWindow *win, Camera *cam, NxOgre::VisualDebugger* visualDebugger, Ogre::SceneNode* node) 
        : ExampleFrameListener(win, cam)
    {
        mTimeController = NxOgre::TimeController::getSingleton();
        mVisualDebugger = visualDebugger;
        mVisualDebuggerNode = node;
    }
 
    bool frameStarted(const FrameEvent& evt)
    {
        mTimeController->advance(evt.timeSinceLastFrame);
        mVisualDebugger->draw();
        mVisualDebuggerNode->needUpdate();
 
        return ExampleFrameListener::frameStarted(evt);
    }
 
protected:
    NxOgre::TimeController*        mTimeController;
    NxOgre::VisualDebugger*        mVisualDebugger;
    Ogre::SceneNode*        mVisualDebuggerNode;
};
 
class BloodyMessTutorial3 : public ExampleApplication
{
protected:
    NxOgre::World*            mWorld;
    NxOgre::Scene*            mScene;
    NxOgre::TimeController*        mTimeController;
    OGRE3DRenderSystem*        mRenderSystem;
 
    OGRE3DBody*            mCube;
    OGRE3DBody*            mCubeTwo;
 
    NxOgre::VisualDebugger*        mVisualDebugger;
    OGRE3DRenderable*        mVisualDebuggerRenderable;
    Ogre::SceneNode*        mVisualDebuggerNode;
 
    void createScene()
    {
        // Set ambient light
        mSceneMgr->setAmbientLight(ColourValue(0.5f, 0.5f, 0.5f));
 
        // Create a light
        Light* l = mSceneMgr->createLight("MainLight");
        l->setPosition(20, 80, 50);
 
        // Position the camera
        mCamera->setPosition(0, 20, 80);
        mCamera->lookAt(0, 20, 0);
 
        // Create the world
        mWorld = NxOgre::World::createWorld();
 
        mVisualDebugger = mWorld->getVisualDebugger();
 
        // Create scene description
        NxOgre::SceneDescription sceneDesc;
        sceneDesc.mGravity = NxOgre::Vec3(0, -9.8f, 0);
        sceneDesc.mName = "DemoScene";
 
        // Create scene
        mScene = mWorld->createScene(sceneDesc);
 
        // Set some physical scene values
        mScene->getMaterial(0)->setStaticFriction(0.5);
        mScene->getMaterial(0)->setDynamicFriction(0.5);
        mScene->getMaterial(0)->setRestitution(0.1);
 
        // Create render system
        mRenderSystem = new OGRE3DRenderSystem(mScene);
 
        //Create time controller
        mTimeController = NxOgre::TimeController::getSingleton();
 
        // Add objects
        mCube = mRenderSystem->createBody(new NxOgre::Box(1, 1, 1), NxOgre::Vec3(0, 40, 0), "cube.1m.mesh");
        mCubeTwo = mRenderSystem->createBody(new NxOgre::Box(1, 1, 1), NxOgre::Vec3(20, 45, 0), "cube.1m.mesh");
        mCubeTwo->addForce(NxOgre::Vec3(-800, -200, 0), NxOgre::Enums::ForceMode_Force, true);
 
        // Create floor plane (BloodyMess)
        mScene->createSceneGeometry(new NxOgre::PlaneGeometry(0, NxOgre::Vec3(0, 1, 0)), Matrix44_Identity);
 
        // Create floor plane (Ogre)
        MovablePlane *plane = new MovablePlane("Plane");
        plane->d = 0;
        plane->normal = Vector3::UNIT_Y;
        Ogre::MeshManager::getSingleton().createPlane("PlaneMesh", 
            ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, 
            *plane, 120, 120, 1, 1, true, 1, 3, 3, Vector3::UNIT_Z);
        Entity *planeEnt = mSceneMgr->createEntity("PlaneEntity", "PlaneMesh");
        planeEnt->setMaterialName("Examples/GrassFloor");
 
        Ogre::SceneNode* mPlaneNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
        mPlaneNode->attachObject(planeEnt);
 
        mVisualDebuggerRenderable = new OGRE3DRenderable(NxOgre::Enums::RenderableType_VisualDebugger);
        mVisualDebugger->setRenderable(mVisualDebuggerRenderable);
        mVisualDebuggerNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
        mVisualDebuggerNode->attachObject(mVisualDebuggerRenderable);
        mVisualDebugger->setVisualisationMode(NxOgre::Enums::VisualDebugger_ShowAll);
    }
 
    // Create a new frame listener
    void createFrameListener()
    {
        mFrameListener = new BloodyMessTutorial3Listener(mWindow, mCamera, mVisualDebugger, mVisualDebuggerNode);
        mRoot->addFrameListener(mFrameListener);
    }
};
 
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
#define WIN32_LEAN_AND_MEAN
#include "windows.h"
#endif
 
#ifdef __cplusplus
extern "C" {
#endif
 
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
    INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT)
#else
    int main(int argc, char **argv)
#endif
    {
        // Create application object
        BloodyMessTutorial3 app;
 
        try {
            app.go();
        } catch(Exception& e) {
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
            MessageBoxA(NULL, e.getFullDescription().c_str(),
                "An exception has occurred!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
#else
            std::cerr << "An exception has occurred: " << e.getFullDescription();
#endif
        }
 
        return 0;
    }
 
#ifdef __cplusplus
}
#endif

 

 



Contributors to this page: jacmoe133512 points  and Spacegaier4386 points  .
Page last modified on Wednesday 23 of December, 2009 14:05:33 UTC by jacmoe133512 points .


The content on this page is licensed under the terms of the Creative Commons Attribution-ShareAlike License.
As an exception, any source code contributed within the content is released into the Public Domain.