int main(int argc, char** argv) { IrrlichtDevice *device=createDevice(EDT_OPENGL,dimension2d<s32>(1024,600),16,false,false,false,0); device->setWindowCaption(L"FollowPathAnimator"); IVideoDriver* driver = device->getVideoDriver(); ISceneManager* smgr = device->getSceneManager(); IGUIEnvironment* guienv = device->getGUIEnvironment(); smgr->loadScene("data/irrOdeMarble_level_.xml"); ICameraSceneNode *pCam=smgr->addCameraSceneNode(NULL,vector3df(0.0f,0.0f,0.0f),vector3df(1.0f,0.0f,0.0f)); CFollowPathAnimator *myAnimator=new CFollowPathAnimator(device,"pathToFollow",120,500); pCam->addAnimator(myAnimator); myAnimator->setCamParameter(pCam); while(device->run()) { driver->beginScene(true, true, SColor(0,200,200,200)); smgr->drawAll(); guienv->drawAll(); driver->endScene(); } device->drop(); return 0; }
int main() { // we'll use the OGL driver IrrlichtDevice *device = createDevice(EDT_OPENGL, dimension2du(640, 480), 16, false, false, false, 0); IVideoDriver* driver = device->getVideoDriver(); ISceneManager* smgr = device->getSceneManager(); IGUIEnvironment* guienv = device->getGUIEnvironment(); // load sydney IAnimatedMesh* mesh = smgr->getMesh("../../media/sydney.md2"); // squash her! CSquashingMeshSceneNode* node = new CSquashingMeshSceneNode( mesh->getMesh(0), 0, smgr, 0 ); if (node) { node->setMaterialFlag(EMF_LIGHTING, false); node->setPosition( vector3df(0,0,50)); node->setMaterialTexture( 0, driver->getTexture("../../media/sydney.bmp") ); } smgr->addCameraSceneNodeFPS(); int lastFPS = -1; while(device->run()) { driver->beginScene(true, true, SColor(255,100,101,140)); node->render(); node->OnPostRender(device->getTimer()->getTime()); smgr->drawAll(); guienv->drawAll(); driver->endScene(); int fps = driver->getFPS(); if (lastFPS != fps) { core::stringw str = L"Irrlicht Mesh Deformation Contest ["; str += driver->getName(); str += "] FPS:"; str += fps; device->setWindowCaption(str.c_str()); lastFPS = fps; } } device->drop(); return 0; }
/** The result should be as follows: We have three times the same image, a billboard with a cube and the text in front. They are replicated three times, one centered in the screen without viewport, one in the upper left (qurter screen) and one on the right (half screen). The latter is stretched due to the changed aspect ratio. The two viewport scenes get the texture drawn over the center as well, using draw2dimage. This should mark the proper image position with the top left corner of the texture. Finally, each scene has a checkbox drawn at the left side, vertically centered. This will show whether GUI elements adhere to viewports as well. */ static bool viewPortText(E_DRIVER_TYPE driverType) { IrrlichtDevice *device = createDevice( driverType, dimension2d<u32>(160, 120), 32); if (!device) return true; // Treat a failure to create a driver as benign; this saves a lot of #ifdefs IVideoDriver* driver = device->getVideoDriver(); ISceneManager * smgr = device->getSceneManager(); IGUIEnvironment* env = smgr->getGUIEnvironment(); stabilizeScreenBackground(driver); env->addCheckBox(true, core::recti(10,60,28,82)); logTestString("Testing driver %ls\n", driver->getName()); IBillboardSceneNode * bnode = smgr->addBillboardSceneNode(0,dimension2d<f32>(32,32),core::vector3df(0,0,10)); bnode->setMaterialFlag(video::EMF_LIGHTING, false); bnode->setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR); bnode->setMaterialTexture(0, driver->getTexture("../media/fire.bmp")); smgr->addTextSceneNode(device->getGUIEnvironment()->getBuiltInFont(), L"TEST", video::SColor(255,255,255,255), 0); smgr->addCubeSceneNode(); smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0)); driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH, SColor(255,100,101,140)); smgr->drawAll(); env->drawAll(); driver->setViewPort(rect<s32>(0,0,160/2,120/2)); smgr->drawAll(); env->drawAll(); driver->draw2DImage(driver->getTexture("../media/fire.bmp"), core::vector2di(160/2,120/2)); driver->setViewPort(rect<s32>(160/2,0,160,120)); smgr->drawAll(); env->drawAll(); driver->draw2DImage(driver->getTexture("../media/fire.bmp"), core::vector2di(160/2,120/2)); driver->endScene(); bool result = takeScreenshotAndCompareAgainstReference(driver, "-viewPortText.png", 98.71f); device->closeDevice(); device->run(); device->drop(); return result; }
int main() { int rows = 10, colums = 10; printf("Number of stack rows: "); cin >> rows; printf("\nNumber of stack colums: "); cin >> colums; CReceiver receiver; IrrlichtDevice *device = createDevice(EDT_DIRECT3D9, dimension2d<u32>(640, 480), 16, false, false, false, &receiver); IVideoDriver *driver = device->getVideoDriver(); ISceneManager *smgr = device->getSceneManager(); IGUIEnvironment *guienv = device->getGUIEnvironment(); device->setWindowCaption(L"HelloWorld"); irrBulletWorld * world = createIrrBulletWorld(device, true, true); world->setDebugMode(EPDM_DrawAabb | EPDM_DrawContactPoints); world->setGravity(core::vector3df(0, -10, 0)); createWorld(rows, colums, device, world); scene::ICameraSceneNode* camera = smgr->addCameraSceneNodeFPS(); camera->setPosition(core::vector3df(50, 15, 200)); u32 then = device->getTimer()->getTime(); while (device->run()) { const u32 now = device->getTimer()->getTime(); const f32 frameDeltaTime = (f32)(now - then) / 1000.f; // в секундах then = now; if (receiver.isMouseDown(EMIE_RMOUSE_PRESSED_DOWN)) { core::vector3df pos(camera->getPosition().X, camera->getPosition().Y, camera->getPosition().Z); scene::ISceneNode *Node = smgr->addCubeSceneNode(); Node->setScale(core::vector3df(0.2, 0.2, 0.2)); Node->setPosition(pos); Node->setMaterialFlag(video::EMF_LIGHTING, false); Node->setMaterialTexture(0, driver->getTexture("../rockwall.jpg")); ICollisionShape *shape = new IBoxShape(Node, 1, true); IRigidBody *body = world->addRigidBody(shape); body->setDamping(0.2, 0.2); body->setFriction(0.4f); body->setGravity(core::vector3df(0, -10, 0)); core::vector3df rot = camera->getRotation(); core::matrix4 mat; mat.setRotationDegrees(rot); core::vector3df forwardDir(core::vector3df(mat[8], mat[9], mat[10]) * 120); body->setLinearVelocity(forwardDir); } driver->beginScene(true, true, video::SColor(255, 100, 101, 140)); world->stepSimulation(frameDeltaTime, 120); world->debugDrawWorld(true); world->debugDrawProperties(true); smgr->drawAll(); guienv->drawAll(); driver->endScene(); if (world) delete world; device->drop(); return 0; } }
int main( ) { // Boring stuff: set up the scene, object & camera as usual IrrlichtDevice* device = createDevice( DRIVER, dimension2d<s32>( 640, 480 ), 16, false, false, false, 0 ); IVideoDriver* driver = device->getVideoDriver( ); ISceneManager* smgr = device->getSceneManager( ); IGUIEnvironment* guienv = device->getGUIEnvironment( ); device->getFileSystem( )->changeWorkingDirectoryTo( MEDIA_DIRECTORY ); guienv->addStaticText( L"Lens Flare", rect<s32>( 10, 10, 260, 22 ), true ); IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( smgr->getMesh( "sydney.md2" ) ); node->setMaterialFlag( EMF_LIGHTING, false ); node->setMD2Animation( scene::EMAT_STAND ); node->setMaterialTexture( 0, driver->getTexture("sydney.bmp") ); IAnimatedMeshSceneNode* node2 = smgr->addAnimatedMeshSceneNode( smgr->getMesh( "sydney.md2" ) ); node2->setMaterialFlag( EMF_LIGHTING, false ); node2->setMD2Animation( scene::EMAT_STAND ); node2->setMaterialTexture( 0, driver->getTexture("sydney.bmp") ); node2->setPosition( vector3df( 20.0f, 0.0f, 0.0f ) ); ICameraSceneNode* cam = smgr->addCameraSceneNode( 0, vector3df( 40.0f, 30.0f, -40.0f ), vector3df( 0.0f, 5.0f, 0.0f ) ); ISceneNode* sun = smgr->addSphereSceneNode( 50.0f, 16 ); sun->setPosition( vector3df( 0.0f, 50.0f, 1000.0f ) ); sun->setMaterialFlag( EMF_LIGHTING, false ); sun->setMaterialTexture( 0, driver->getTexture("sun.png") ); // Interesting stuff // As before, we make a renderer IPostProc* ppRenderer = new CRendererPostProc( smgr, dimension2di( 1024, 512 ), true, true, SColor( 255u, 100u, 101u, 140u ) ); // Now make a flare effect: // (render from, output size, sun scene node) // can also use a vector instead of a scene node - when using a scene node the position will follow node automatically CLensFlarePostProc* ppFlare1 = new CLensFlarePostProc( ppRenderer, dimension2di( 1024, 512 ), driver->getTexture("flare.png"), sun, 50.0f ); CLensFlarePostProc* ppFlare2 = new CLensFlarePostProc( ppFlare1, dimension2di( 1024, 512 ), driver->getTexture("flare.png"), vector3df( -2000.0f, 50.0f, 1000.0f ) ); ppFlare2->setQuality( PPQ_CRUDE ); // Setting the quality to crude avoids pixel checking, which is slow (expecially when more than one lens flare), so if you use >1 flare, set most of them to crude. // These variables aren't important - they are just for showing the FPS wchar_t tmp[255]; u8 t = 0u; while( device->run( ) ) { cam->setPosition( vector3df( -(device->getCursorControl( )->getPosition( ).X - 320.0f) * 0.1f, (device->getCursorControl( )->getPosition( ).Y - 240.0f) * 0.2f, -70.0f ) ); driver->beginScene( false, driver->getDriverType( ) == video::EDT_DIRECT3D9 ); ppFlare2->render( NULL ); guienv->drawAll( ); driver->endScene( ); // Show the current FPS if( ++ t == 30u ) { t = 0u; swprintf(tmp, 255, L"%ls fps:%3d", driver->getName(), driver->getFPS() ); device->setWindowCaption( tmp ); } } delete ppFlare1; delete ppFlare2; delete ppRenderer; // Back to boring stuff device->drop(); return 0; }
int main( ) { // Boring stuff: set up the scene, object & camera as usual IrrlichtDevice* device = createDevice( DRIVER, dimension2d<s32>( 640, 480 ), 16, false, false, false, 0 ); IVideoDriver* driver = device->getVideoDriver( ); ISceneManager* smgr = device->getSceneManager( ); IGUIEnvironment* guienv = device->getGUIEnvironment( ); device->getFileSystem( )->changeWorkingDirectoryTo( MEDIA_DIRECTORY ); guienv->addStaticText( L"Multiple Renders", rect<s32>( 10, 10, 260, 22 ), true ); IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( smgr->getMesh( "sydney.md2" ) ); node->setMaterialFlag( EMF_LIGHTING, false ); node->setMD2Animation( scene::EMAT_STAND ); node->setMaterialTexture( 0, driver->getTexture("sydney.bmp") ); smgr->addCameraSceneNode( 0, vector3df( 40.0f, 30.0f, -40.0f ), vector3df( 0.0f, 5.0f, 0.0f ) ); // Interesting stuff // This time, we make 2 renderers for the same scene IPostProc* ppRenderer1 = new CRendererPostProc( smgr, dimension2di( 1024, 512 ), true, true, SColor( 255u, 100u, 101u, 140u ) ); IPostProc* ppRenderer2 = new CRendererPostProc( smgr, dimension2di( 1024, 512 ), true, true, SColor( 255u, 100u, 101u, 140u ) ); CEffectPostProc* ppBlur = new CEffectPostProc( ppRenderer2, dimension2di( 1024, 512 ), PP_BLUR, 0.005f ); CEffectPostProc* ppOverlay = new CEffectPostProc( ppRenderer1, dimension2di( 1024, 512 ), PP_OVERLAY, 1.0f ); ppOverlay->setInput( 1, ppBlur ); // These variables aren't important - they are just for showing the FPS wchar_t tmp[255]; u8 t = 0u; while( device->run( ) ) { driver->beginScene( false, driver->getDriverType( ) == video::EDT_DIRECT3D9 ); // Because we want to have each scene render differently, we need to render them manually between changes: node->setMaterialTexture( 0, driver->getTexture("sydney.bmp") ); ppRenderer1->preRender( ); // Note: preRender not render, and no NULL node->setMaterialTexture( 0, driver->getTexture("fireball.bmp") ); // We could call ppRender2->preRender() here, but it isn't necessary since the overlay will do that for us anyway ppOverlay->render( NULL ); guienv->drawAll( ); driver->endScene( ); // Show the current FPS if( ++ t == 30u ) { t = 0u; swprintf(tmp, 255, L"%ls fps:%3d", driver->getName(), driver->getFPS() ); device->setWindowCaption( tmp ); } } delete ppOverlay; delete ppBlur; delete ppRenderer1; delete ppRenderer2; // Back to boring stuff device->drop(); return 0; }
int main( ) { // Boring stuff: set up the scene, object & camera as usual IrrlichtDevice* device = createDevice( DRIVER, dimension2d<s32>( 640, 480 ), 16, false, false, false, 0 ); IVideoDriver* driver = device->getVideoDriver( ); ISceneManager* smgr = device->getSceneManager( ); IGUIEnvironment* guienv = device->getGUIEnvironment( ); device->getFileSystem( )->changeWorkingDirectoryTo( MEDIA_DIRECTORY ); guienv->addStaticText( L"Mixing Scenes", rect<s32>( 10, 10, 260, 22 ), true ); IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( smgr->getMesh( "sydney.md2" ) ); node->setMaterialFlag( EMF_LIGHTING, false ); node->setMD2Animation( scene::EMAT_STAND ); node->setMaterialTexture( 0, driver->getTexture("sydney.bmp") ); smgr->addCameraSceneNode( 0, vector3df( 40.0f, 30.0f, -40.0f ), vector3df( 0.0f, 5.0f, 0.0f ) ); // Set up the second scene, object & camera - this time, use a different texture and camera angle to show some change ISceneManager* smgr2 = smgr->createNewSceneManager( false ); ISceneNode* rootnode2 = smgr2->getRootSceneNode( ); IAnimatedMeshSceneNode* node2 = smgr2->addAnimatedMeshSceneNode( smgr2->getMesh( "sydney.md2" ), rootnode2 ); node2->setMaterialFlag( EMF_LIGHTING, false ); node2->setMD2Animation( scene::EMAT_STAND ); node2->setMaterialTexture( 0, driver->getTexture("fireball.bmp") ); smgr2->addCameraSceneNode( 0, vector3df( 40.0f, 30.0f, -40.0f ), vector3df( 10.0f, 5.0f, 0.0f ) ); // Interesting stuff (see previous example for full details) IPostProc* ppRenderer1 = new CRendererPostProc( smgr, dimension2di( 1024, 512 ), true, true, SColor( 255u, 100u, 101u, 140u ) ); IPostProc* ppRenderer2 = new CRendererPostProc( smgr2, dimension2di( 1024, 512 ), true, true, SColor( 255u, 0u, 0u, 0u ) ); // PP_OVERLAY takes a multiplication parameter - setting this to 1.0 does a simple add, 2.0 doubles the second texture's luminosity, etc. CEffectPostProc* ppOverlay = new CEffectPostProc( ppRenderer1, dimension2di( 1024, 512 ), PP_OVERLAY, 2.0f ); // The constructor can only take 1 input, but PP_OVERLAY needs 2, so set the other one now; ppOverlay->setInput( 1, ppRenderer2 ); // These variables aren't important - they are just for showing the FPS wchar_t tmp[255]; u8 t = 0u; while( device->run( ) ) { driver->beginScene( false, driver->getDriverType( ) == video::EDT_DIRECT3D9 ); // We only need to tell the final node to render - it will automatically render both scenes ppOverlay->render( NULL ); guienv->drawAll( ); driver->endScene( ); // Show the current FPS if( ++ t == 30u ) { t = 0u; swprintf(tmp, 255, L"%ls fps:%3d", driver->getName(), driver->getFPS() ); device->setWindowCaption( tmp ); } } delete ppRenderer1; delete ppRenderer2; delete ppOverlay; // Back to boring stuff device->drop(); return 0; }
int main( ) { // Boring stuff: set up the scene, object & camera as usual IrrlichtDevice* device = createDevice( DRIVER, dimension2d<s32>( 640, 480 ), 16, false, false, false, 0 ); IVideoDriver* driver = device->getVideoDriver( ); ISceneManager* smgr = device->getSceneManager( ); IGUIEnvironment* guienv = device->getGUIEnvironment( ); device->getFileSystem( )->changeWorkingDirectoryTo( MEDIA_DIRECTORY ); guienv->addStaticText( L"Custom Effect (Old Monitor)", rect<s32>( 10, 10, 260, 22 ), true ); IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( smgr->getMesh( "sydney.md2" ) ); node->setMaterialFlag( EMF_LIGHTING, false ); node->setMD2Animation( scene::EMAT_STAND ); node->setMaterialTexture( 0, driver->getTexture("sydney.bmp") ); smgr->addCameraSceneNode( 0, vector3df( 40.0f, 30.0f, -40.0f ), vector3df( 0.0f, 5.0f, 0.0f ) ); // Interesting stuff IPostProc* ppRenderer = new CRendererPostProc( smgr, dimension2di( 1024, 512 ), true, true, SColor( 255u, 100u, 101u, 140u ) ); CEffectPostProc* ppMine = new CEffectPostProc( ppRenderer, dimension2di( 1024, 512 ), GL_OLDMONITOR, DX_OLDMONITOR, EPST_PS_1_2, EPST_PS_2_0, EMT_SOLID, PPF_FROMCODE, 1.0f ); // Notes: // EPST_PS_1_2 shows the minimum version required to run your shader - usually EPST_PS_1_1 for simple things // EMT_SOLID can be changed to EMT_TRANSPARENT_ALPHA_CHANNEL, EMT_TRANSPARENT_ALPHA_CHANNEL_REF, etc. If this is done, the first texture is copied to the screen, then the second drawn on top using your shader. This is much faster than using 2 dynamic textures in one shader (not sure why) so use it when you can if you have 2 inputs // 1.0f is where your parameters go // Remember to use setTimer if your effect uses the time variable: ppMine->setTimer( device->getTimer( ) ); // I hate this next line, but it needs to be set correctly to prevent MAJOR slowdown in Irrlicht when running in Direct3D mode. // (if not called, your shader will have all parameters set to 0. If called with values too high, your app will slow significantly) // Note: this is ONLY needed with custom shaders ppMine->setRequiredVariables( 1, true, true ); // (number of input parameters, uses time?, uses randNum?) // These variables aren't important - they are just for showing the FPS wchar_t tmp[255]; u8 t = 0u; while( device->run( ) ) { // The monitor effect needs to know how strong it should be ppMine->setParameters( min_( 1.0f, device->getTimer( )->getTime( ) * 0.0002f ) ); driver->beginScene( false, driver->getDriverType( ) == video::EDT_DIRECT3D9 ); ppMine->render( NULL ); guienv->drawAll( ); driver->endScene( ); // Show the current FPS if( ++ t == 30u ) { t = 0u; swprintf(tmp, 255, L"%ls fps:%3d", driver->getName(), driver->getFPS() ); device->setWindowCaption( tmp ); } } delete ppMine; delete ppRenderer; // Back to boring stuff device->drop(); return 0; }
int main( ) { // Boring stuff: set up the scene, object & camera as usual IrrlichtDevice* device = createDevice( DRIVER, dimension2d<s32>( 640, 480 ), 16, false, false, false, 0 ); IVideoDriver* driver = device->getVideoDriver( ); ISceneManager* smgr = device->getSceneManager( ); IGUIEnvironment* guienv = device->getGUIEnvironment( ); device->getFileSystem( )->changeWorkingDirectoryTo( MEDIA_DIRECTORY ); guienv->addStaticText( L"Transitions", rect<s32>( 10, 10, 260, 22 ), true ); IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( smgr->getMesh( "sydney.md2" ) ); node->setMaterialFlag( EMF_LIGHTING, false ); node->setMD2Animation( scene::EMAT_STAND ); node->setMaterialTexture( 0, driver->getTexture("sydney.bmp") ); smgr->addCameraSceneNode( 0, vector3df( 40.0f, 30.0f, -40.0f ), vector3df( 0.0f, 5.0f, 0.0f ) ); // Set up the second scene, object & camera - this time, use a different texture and camera angle to show some change ISceneManager* smgr2 = smgr->createNewSceneManager( false ); ISceneNode* rootnode2 = smgr2->getRootSceneNode( ); IAnimatedMeshSceneNode* node2 = smgr2->addAnimatedMeshSceneNode( smgr2->getMesh( "sydney.md2" ), rootnode2 ); node2->setMaterialFlag( EMF_LIGHTING, false ); node2->setMD2Animation( scene::EMAT_STAND ); node2->setMaterialTexture( 0, driver->getTexture("fireball.bmp") ); smgr2->addCameraSceneNode( 0, vector3df( 40.0f, 30.0f, -40.0f ), vector3df( 10.0f, 5.0f, 0.0f ) ); // Interesting stuff IPostProc* ppRenderer1 = new CRendererPostProc( smgr, dimension2di( 1024, 512 ), true, true, SColor( 255u, 100u, 101u, 140u ) ); IPostProc* ppRenderer2 = new CRendererPostProc( smgr2, dimension2di( 1024, 512 ), true, true, SColor( 255u, 0u, 0u, 0u ) ); CTransitionPostProc* ppTransition = new CTransitionPostProc( ppRenderer1, ppRenderer2, dimension2di( 1024, 512 ), driver->getTexture("terrain-heightmap.bmp") ); // ppTransition->setQuality( PPQ_CRUDE ); // These variables aren't important - they are just for showing the FPS wchar_t tmp[255]; u8 t = 0u; while( device->run( ) ) { ppTransition->setBlend( sinf( device->getTimer( )->getTime( ) * 0.0005f - 2.0f ) * 2.0f + 0.5f ); driver->beginScene( false, driver->getDriverType( ) == video::EDT_DIRECT3D9 ); ppTransition->render( NULL ); guienv->drawAll( ); driver->endScene( ); // Show the current FPS if( ++ t == 30u ) { t = 0u; swprintf(tmp, 255, L"%ls fps:%3d", driver->getName(), driver->getFPS() ); device->setWindowCaption( tmp ); } } delete ppTransition; delete ppRenderer1; delete ppRenderer2; // Back to boring stuff device->drop(); return 0; }
int main( ) { // Boring stuff: set up the scene, object & camera as usual IrrlichtDevice* device = createDevice( DRIVER, dimension2d<s32>( 640, 480 ), 16, false, false, false, 0 ); IVideoDriver* driver = device->getVideoDriver( ); ISceneManager* smgr = device->getSceneManager( ); IGUIEnvironment* guienv = device->getGUIEnvironment( ); device->getFileSystem( )->changeWorkingDirectoryTo( MEDIA_DIRECTORY ); guienv->addStaticText( L"Splitscreen", rect<s32>( 10, 10, 260, 22 ), true ); IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( smgr->getMesh( "sydney.md2" ) ); node->setMaterialFlag( EMF_LIGHTING, false ); node->setMD2Animation( scene::EMAT_STAND ); node->setMaterialTexture( 0, driver->getTexture("sydney.bmp") ); smgr->addCameraSceneNode( 0, vector3df( 40.0f, 30.0f, -40.0f ), vector3df( 0.0f, 5.0f, 0.0f ) ); // Set up the second scene, object & camera - this time, use a different texture and camera angle to show some change ISceneManager* smgr2 = smgr->createNewSceneManager( false ); ISceneNode* rootnode2 = smgr2->getRootSceneNode( ); IAnimatedMeshSceneNode* node2 = smgr2->addAnimatedMeshSceneNode( smgr2->getMesh( "sydney.md2" ), rootnode2 ); node2->setMaterialFlag( EMF_LIGHTING, false ); node2->setMD2Animation( scene::EMAT_STAND ); node2->setMaterialTexture( 0, driver->getTexture("fireball.bmp") ); smgr2->addCameraSceneNode( 0, vector3df( 40.0f, 30.0f, -40.0f ), vector3df( 10.0f, 5.0f, 0.0f ) ); // Interesting stuff IPostProc* ppRenderer1 = new CRendererPostProc( smgr, dimension2di( 1024, 512 ), true, true, SColor( 255u, 100u, 101u, 140u ) ); IPostProc* ppRenderer2 = new CRendererPostProc( smgr2, dimension2di( 1024, 512 ), true, true, SColor( 255u, 0u, 0u, 0u ) ); // Splitscreen objects can be given up to 4 views. The rects at the end are optional - if not given, an arrangement will be created to fit the given number of views CSplitPostProc* ppSplit = new CSplitPostProc( ppRenderer1, ppRenderer2, dimension2di( 1024, 512 ), rect<f32>( -0.5f, -1.0f, 0.5f, 0.0f ), rect<f32>( -0.7f, 0.0f, 0.3f, 1.0f ) ); ppSplit->setVoidColor( SColor( 255u, 128u, 128u, 128u ) ); // Change the colour shown where there are no views. Call setVoidColor() to use no color (slightly faster, but should only be used if the views entirely cover the screen) // These variables aren't important - they are just for showing the FPS wchar_t tmp[255]; u8 t = 0u; while( device->run( ) ) { driver->beginScene( false, driver->getDriverType( ) == video::EDT_DIRECT3D9 ); ppSplit->render( NULL ); guienv->drawAll( ); driver->endScene( ); // Show the current FPS if( ++ t == 30u ) { t = 0u; swprintf(tmp, 255, L"%ls fps:%3d", driver->getName(), driver->getFPS() ); device->setWindowCaption( tmp ); } } delete ppRenderer1; delete ppSplit; delete ppRenderer2; // Back to boring stuff device->drop(); return 0; }
int main( ) { // Boring stuff: set up the scene, object & camera as usual IrrlichtDevice* device = createDevice( DRIVER, dimension2d<s32>( 640, 480 ), 16, false, false, false, 0 ); IVideoDriver* driver = device->getVideoDriver( ); ISceneManager* smgr = device->getSceneManager( ); IGUIEnvironment* guienv = device->getGUIEnvironment( ); device->getFileSystem( )->changeWorkingDirectoryTo( MEDIA_DIRECTORY ); guienv->addStaticText( L"Single Effect", rect<s32>( 10, 10, 260, 22 ), true ); IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( smgr->getMesh( "sydney.md2" ) ); node->setMaterialFlag( EMF_LIGHTING, false ); node->setMD2Animation( scene::EMAT_STAND ); node->setMaterialTexture( 0, driver->getTexture("sydney.bmp") ); smgr->addCameraSceneNode( 0, vector3df( 40.0f, 30.0f, -40.0f ), vector3df( 0.0f, 5.0f, 0.0f ) ); // Interesting stuff // We make 2 objects - a scene renderer, and a blur. both render to textures with size 1024x512 (always use powers of 2) // When setting up the renderer, the parameters are: // SceneManager to render, size of output, clearBackBuffer?, clearZBuffer?, background colour IPostProc* ppRenderer = new CRendererPostProc( smgr, dimension2di( 1024, 512 ), true, true, SColor( 255u, 100u, 101u, 140u ) ); // When setting up the effect, the parameters are: // Input, size of output, effect ID (see CEffectPostProc.h for full list), effect parameters (in this case, blur size) CEffectPostProc* ppBlur = new CEffectPostProc( ppRenderer, dimension2di( 1024, 512 ), PP_BLUR, 0.01f ); // Change to a better quality - not all shaders will respect these, but they can be used to hint the rendering standard required. ppBlur->setQuality( PPQ_GOOD ); // Options (worst to best): PPQ_CRUDE, PPQ_FAST, PPQ_DEFAULT, PPQ_GOOD, PPQ_BEST // You can also call setOverallQuality( PPQ_WHATEVER ) to change the quality of all effects which are in the chain. // These variables aren't important - they are just for showing the FPS wchar_t tmp[255]; u8 t = 0u; while( device->run( ) ) { // What's happened to beginScene? well we want to use beginScene( false, false ) for speed, but this makes Irrlicht complain (wrongly) when using Direct3D9, so use ( false, true ) in that case. driver->beginScene( false, driver->getDriverType( ) == video::EDT_DIRECT3D9 ); // The rendering is as normal, except smgr->drawAll(); is replaced with this line: ppBlur->render( NULL ); // NULL = render to screen. Can also take a texture to render to, or no parameter (renders to an internal texture) guienv->drawAll( ); driver->endScene( ); // Show the current FPS if( ++ t == 30u ) { t = 0u; swprintf(tmp, 255, L"%ls fps:%3d", driver->getName(), driver->getFPS() ); device->setWindowCaption( tmp ); } } delete ppBlur; delete ppRenderer; // Back to boring stuff device->drop(); return 0; }
/** * Irrlicht描画処理 * @param destRect 描画先領域 * @param srcRect 描画元領域 * @param destDC 描画先DC * @return 描画された */ bool IrrlichtBase::show(irr::core::rect<irr::s32> *destRect, irr::core::rect<irr::s32> *srcRect, HDC destDC) { if (device) { // 時間を進める XXX tick を外部から与えられないか? device->getTimer()->tick(); IVideoDriver *driver = device->getVideoDriver(); // 描画開始 if (driver && driver->beginScene(true, true, irr::video::SColor(0,0,0,0))) { if ((eventMask & EMASK_BEFORE_SCENE)) { sendTJSEvent(L"onBeforeScene"); } /// シーンマネージャの描画 ISceneManager *smgr = device->getSceneManager(); if (smgr) { smgr->drawAll(); } if ((eventMask & EMASK_AFTER_SCENE)) { sendTJSEvent(L"onAfterScene"); } // 固有処理 update(driver); if ((eventMask & EMASK_BEFORE_GUI)) { sendTJSEvent(L"onBeforeGUI"); } // GUIの描画 IGUIEnvironment *gui = device->getGUIEnvironment(); if (gui) { gui->drawAll(); } if ((eventMask & EMASK_AFTER_GUI)) { sendTJSEvent(L"onAfterGUI"); } // 描画完了 driver->endScene(0, srcRect, destRect, destDC); return true; } } return false; };
int main() { IrrlichtDevice *device = createDevice( video::EDT_BURNINGSVIDEO, dimension2d<u32>(640, 480), 16, false, false, false, 0); if (!device) return 1; IVideoDriver* driver = device->getVideoDriver(); ISceneManager* smgr = device->getSceneManager(); IGUIEnvironment* guienv = device->getGUIEnvironment(); // Add Light to the Scene ILightSceneNode *light = smgr->addLightSceneNode( 0, vector3df() ); light->getLightData().AmbientColor = SColorf( 0.2f, 0.2f, 0.2f ); light->getLightData().SpecularColor = SColorf( 1.0f, 1.0f, 1.0f ); light->getLightData().DiffuseColor = SColorf( 0.8f, 0.8f, 0.8f ); light->setLightType( ELT_DIRECTIONAL ); light->setRotation( vector3df( 45.0f, 45.0f, 0.0f )); smgr->setAmbientLight( SColorf( 0.2f, 0.2f, 0.2f )); // scene::IMeshSceneNode* node = smgr->addCubeSceneNode(20); // if (node){ // node->setMaterialFlag(EMF_LIGHTING, false); // smgr->getMeshManipulator()->setVertexColors(node->getMesh(),SColor(250,250,0,0)); // node->setPosition(core::vector3df(0,0,0) ); // node->setVisible(false); // } smgr->addCameraSceneNode(0, vector3df(0,0,-50), vector3df(0,0,0)); while(device->run()) { core::aabbox3df box; box.MinEdge.set(vector3df(-100,-100,-100)); box.MaxEdge.set(vector3df(100,100,100)); driver->beginScene(true, true, SColor(250, 100, 150, 150)); smgr->drawAll(); guienv->drawAll(); criaGizmosBicos(driver); // criaRegiaAnalise(box, driver); driver->endScene(); } device->drop(); return 0; }
void viewprt::drawViewPorts(float scale2, float scale3, float scale4, float scalepers) { // Left top view video::IVideoDriver* driver = device->getVideoDriver(); scene::ISceneManager* smgr = device->getSceneManager(); IGUIEnvironment* env = device->getGUIEnvironment(); s32 screenx = driver->getScreenSize().Width; s32 screeny = driver->getScreenSize().Height; screenx-=viewrightspace; bool skyb = SkyBox->isVisible(); // Right top view - perspective driver->beginScene(true, true, video::SColor(150,50,50,50)); if (skyb) SkyBox->setVisible(true); else SkyBox->setVisible(false); // show the skybox drawPerspectiveView(); driver->setViewPort(core::rect<s32>((screenx/2),50,screenx,(screeny/2)-5)); smgr->drawAll(); // hide the skybox not working for ortho viewports drawTopView(); driver->setViewPort(core::rect<s32>(0,50,screenx/2,(screeny/2)-5)); smgr->drawAll(); drawSideView(); driver->setViewPort(core::rect<s32>(0,(screeny/2),screenx/2,screeny)); smgr->drawAll(); drawFrontView(); driver->setViewPort(core::rect<s32>((screenx/2),(screeny/2)+2,screenx,screeny)); smgr->drawAll(); // restore the view for GUI drawing driver->setViewPort(core::rect<s32>(0,0,driver->getScreenSize().Width,screeny)); bill->setVisible(false); // draw the viewport boundary smgr->setActiveCamera(Camera[0]); driver->draw2DRectangle(video::SColor(255,20,20,20), core::rect<s32>(0, screeny/2-5, screenx, screeny/2-1)); driver->draw2DRectangle(video::SColor(255,20,20,20), core::rect<s32>(screenx/2-2, 50, screenx/2+2, screeny)); if (skyb) SkyBox->setVisible(true); else SkyBox->setVisible(false); // redisplay the viewport env->drawAll(); driver->endScene(); }
int main() { IrrlichtDevice *device = createDevice( video::EDT_OPENGL, dimension2d<u32>(640, 480), 16, false, false, false, 0); if (!device) cout<<"error"; else { device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo"); IVideoDriver* driver = device->getVideoDriver(); ISceneManager* smgr = device->getSceneManager(); IGUIEnvironment* guienv = device->getGUIEnvironment(); guienv->addStaticText(L"Hello World! This is the Irrlicht Software renderer!", rect<s32>(10,10,260,22), true); IAnimatedMesh* mesh = smgr->getMesh("sydney.md2"); if (!mesh) { device->drop(); return 1; } IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh ); if (node) { node->setMaterialFlag(EMF_LIGHTING, false); node->setMD2Animation(scene::EMAT_STAND); node->setMaterialTexture( 0, driver->getTexture("sydney.bmp") ); } smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0)); while(device->run()) { driver->beginScene(true, true, SColor(255,100,101,140)); smgr->drawAll(); guienv->drawAll(); driver->endScene(); } device->drop(); } cout<<"hello world2"; }
int main( ) { // Boring stuff: set up the scene, object & camera as usual IrrlichtDevice* device = createDevice( DRIVER, dimension2d<s32>( 640, 480 ), 16, false, false, false, 0 ); IVideoDriver* driver = device->getVideoDriver( ); ISceneManager* smgr = device->getSceneManager( ); IGUIEnvironment* guienv = device->getGUIEnvironment( ); device->getFileSystem( )->changeWorkingDirectoryTo( MEDIA_DIRECTORY ); guienv->addStaticText( L"Combined Effects", rect<s32>( 10, 10, 260, 22 ), true ); IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( smgr->getMesh( "sydney.md2" ) ); node->setMaterialFlag( EMF_LIGHTING, false ); node->setMD2Animation( scene::EMAT_STAND ); node->setMaterialTexture( 0, driver->getTexture("sydney.bmp") ); smgr->addCameraSceneNode( 0, vector3df( 40.0f, 30.0f, -40.0f ), vector3df( 0.0f, 5.0f, 0.0f ) ); // Interesting stuff (see previous example for full details) IPostProc* ppRenderer = new CRendererPostProc( smgr, dimension2di( 1024, 512 ), true, true, SColor( 255u, 100u, 101u, 140u ) ); CEffectPostProc* ppInvert = new CEffectPostProc( ppRenderer, dimension2di( 1024, 512 ), PP_INVERT ); // The second effect is made exactly the same way, but takes ppInvert as the input instead of ppRenderer CEffectPostProc* ppBlur = new CEffectPostProc( ppInvert, dimension2di( 1024, 512 ), PP_BLUR, 0.01f ); // delete ppInvert; // These variables aren't important - they are just for showing the FPS wchar_t tmp[255]; u8 t = 0u; while( device->run( ) ) { driver->beginScene( false, driver->getDriverType( ) == video::EDT_DIRECT3D9 ); ppBlur->render( NULL ); guienv->drawAll( ); driver->endScene( ); // Show the current FPS if( ++ t == 30u ) { t = 0u; swprintf(tmp, 255, L"%ls fps:%3d", driver->getName(), driver->getFPS() ); device->setWindowCaption( tmp ); } } // The effects can be deleted in any order delete ppBlur; delete ppInvert; delete ppRenderer; // Back to boring stuff device->drop(); return 0; }
bool render() { static s32 lastFPS = -1; if (irrDevice == NULL) { return false; } if (!irrDevice->run()) { irrDevice->drop(); irrDevice = NULL; return false; } getGameSceneMgr()->update(getTime()); driver->beginScene(true, true, video::SColor(255,113,113,133)); smgr->drawAll(); guienv->drawAll(); driver->endScene(); const s32 fps = driver->getFPS(); if (lastFPS != fps) { const char * camName = irrDevice->getSceneManager()->getActiveCamera()->getName(); core::stringw str = L"stat: cam - "; str += camName; str += " FPS:"; str += fps; irrDevice->setWindowCaption(str.c_str()); lastFPS = fps; } return true; }
void viewprt::drawSingle(int view) { video::IVideoDriver* driver = device->getVideoDriver(); scene::ISceneManager* smgr = device->getSceneManager(); IGUIEnvironment* env = device->getGUIEnvironment(); s32 screenx = driver->getScreenSize().Width; s32 screeny = driver->getScreenSize().Height; driver->beginScene(true, true, video::SColor(150,50,50,50)); switch (view) {case 0 : {drawPerspectiveView(); break;} case 2 : {drawTopView(); break;} case 3 : {drawFrontView(); break;} case 4 : {drawSideView(); break;} } driver->setViewPort(core::rect<s32>(0,50,screenx-viewrightspace,screeny)); smgr->drawAll(); driver->setViewPort(core::rect<s32>(0,0,driver->getScreenSize().Width,screeny)); env->drawAll(); driver->endScene(); }
int main() { IrrlichtDevice *device = createDevice( video::EDT_OPENGL, dimension2d<u32>(1680, 1050), 16, true, false, false, 0); if (!device) return 1; device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo"); device->getCursorControl()->setVisible(false); IVideoDriver* driver = device->getVideoDriver(); ISceneManager* smgr = device->getSceneManager(); IGUIEnvironment* guienv = device->getGUIEnvironment(); StandardObject::smgr = smgr; StandardObject::driver = driver; GameScreen::smgr = smgr; GameScreen::driver = driver; GameScreen::guienv = guienv; GameScreen gameScreen = GameScreen(); while(device->run()) { gameScreen.Update(); driver->beginScene(true, true, SColor(255,100,101,140)); smgr->drawAll(); guienv->drawAll(); driver->endScene(); } device->drop(); return 0; }
/* This is the main method. We can now use main() on every platform. */ int main() { /* The most important function of the engine is the createDevice() function. The IrrlichtDevice is created by it, which is the root object for doing anything with the engine. createDevice() has 7 parameters: - deviceType: Type of the device. This can currently be the Null-device, one of the two software renderers, D3D9, or OpenGL. In this example we use EDT_SOFTWARE, but to try out, you might want to change it to EDT_BURNINGSVIDEO, EDT_NULL, EDT_DIRECT3D9, or EDT_OPENGL. - windowSize: Size of the Window or screen in FullScreenMode to be created. In this example we use 640x480. - bits: Amount of color bits per pixel. This should be 16 or 32. The parameter is often ignored when running in windowed mode. - fullscreen: Specifies if we want the device to run in fullscreen mode or not. - stencilbuffer: Specifies if we want to use the stencil buffer (for drawing shadows). - vsync: Specifies if we want to have vsync enabled, this is only useful in fullscreen mode. - eventReceiver: An object to receive events. We do not want to use this parameter here, and set it to 0. Always check the return value to cope with unsupported drivers, dimensions, etc. */ IrrlichtDevice *device = createDevice( video::EDT_OGLES1, dimension2d<u32>(640, 480), 16, false, false, false, 0); if (!device) return 1; /* Set the caption of the window to some nice text. Note that there is an 'L' in front of the string. The Irrlicht Engine uses wide character strings when displaying text. */ device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo"); /* Get a pointer to the VideoDriver, the SceneManager and the graphical user interface environment, so that we do not always have to write device->getVideoDriver(), device->getSceneManager(), or device->getGUIEnvironment(). */ IVideoDriver* driver = device->getVideoDriver(); ISceneManager* smgr = device->getSceneManager(); IGUIEnvironment* guienv = device->getGUIEnvironment(); /* We add a hello world label to the window, using the GUI environment. The text is placed at the position (10,10) as top left corner and (260,22) as lower right corner. */ guienv->addStaticText(L"Hello World! This is the Irrlicht Software renderer!", rect<s32>(10,10,260,22), true); /* Get a media path dedicated for your platform. */ const io::path mediaPath = getExampleMediaPath(); /* To show something interesting, we load a Quake 2 model and display it. We only have to get the Mesh from the Scene Manager with getMesh() and add a SceneNode to display the mesh with addAnimatedMeshSceneNode(). We check the return value of getMesh() to become aware of loading problems and other errors. Instead of writing the filename sydney.md2, it would also be possible to load a Maya object file (.obj), a complete Quake3 map (.bsp) or any other supported file format. By the way, that cool Quake 2 model called sydney was modelled by Brian Collins. */ IAnimatedMesh* mesh = smgr->getMesh(mediaPath + "sydney.md2"); if (!mesh) { device->drop(); return 1; } IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh ); /* To let the mesh look a little bit nicer, we change its material. We disable lighting because we do not have a dynamic light in here, and the mesh would be totally black otherwise. Then we set the frame loop, such that the predefined STAND animation is used. And last, we apply a texture to the mesh. Without it the mesh would be drawn using only a color. */ if (node) { node->setMaterialFlag(EMF_LIGHTING, false); node->setMD2Animation(scene::EMAT_STAND); node->setMaterialTexture( 0, driver->getTexture(mediaPath + "sydney.bmp") ); } /* To look at the mesh, we place a camera into 3d space at the position (0, 30, -40). The camera looks from there to (0,5,0), which is approximately the place where our md2 model is. */ smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0)); /* Ok, now we have set up the scene, lets draw everything: We run the device in a while() loop, until the device does not want to run any more. This would be when the user closes the window or presses ALT+F4 (or whatever keycode closes a window). */ while(device->run()) { /* Anything can be drawn between a beginScene() and an endScene() call. The beginScene() call clears the screen with a color and the depth buffer, if desired. Then we let the Scene Manager and the GUI Environment draw their content. With the endScene() call everything is presented on the screen. */ driver->beginScene(ECBF_COLOR | ECBF_DEPTH, SColor(255,100,101,140)); smgr->drawAll(); guienv->drawAll(); driver->endScene(); } /* After we are done with the render loop, we have to delete the Irrlicht Device created before with createDevice(). In the Irrlicht Engine, you have to delete all objects you created with a method or function which starts with 'create'. The object is simply deleted by calling ->drop(). See the documentation at irr::IReferenceCounted::drop() for more information. */ device->drop(); return 0; }
int main() { srand(time(NULL)); int numPlayers = 4; //Setup irrlicht MyEventReceiver Receiver; IrrlichtDevice *device = createDevice(EDT_OPENGL,dimension2d<u32>(SCREENX,SCREENY),32,FULLSCREEN,false,false,&Receiver); IVideoDriver* driver = device->getVideoDriver(); ISceneManager* smgr = device->getSceneManager(); IGUIEnvironment* guienv = device->getGUIEnvironment(); //Load key config Receiver.KeyConfig.loadFromFile("KeyConfig.txt"); //Generate maze MazeGenerator MG; /* MG.NewSize(495,497,495,497); MG.Generate("DrunkenWalk2",500,numPlayers);//500,numPlayers); MG.Minimise(); MG.MinimalSolids(false); MG.ConvertLoneToCover();*/ MG.MapFromFile("Maps/01g.txt", "Maps/01m.txt", "Maps/01e.txt"); vector<int> PlayerStartPos; PlayerStartPos.push_back(10); PlayerStartPos.push_back(11); PlayerStartPos.push_back(12); PlayerStartPos.push_back(13); MG.ParseForPlayerStartPositions(PlayerStartPos); //Setup textures ITexture *FloorTexture = driver->getTexture("Textures/Floor.png"); ITexture *WallTexture = driver->getTexture("Textures/Wall.png"); ITexture *CoverTexture = driver->getTexture("Textures/Cover.png"); //Import maze MazeRenderer MR; MR.CreateFromMazeGenerator( MG, smgr ); MR.SetTextures( FloorTexture, WallTexture, CoverTexture ); //Setup camera GameCamera gameCam(70); gameCam.camera = smgr->addCameraSceneNode(); gameCam.camera->setPosition( vector3df( (MR.XSize/2)*MR.TileSize, 40, (MR.YSize/2)*MR.TileSize ) ); gameCam.camera->setRotation( vector3df(0,90,90)); //Create players (4) for testing //Have to use an array as you can't copy boost::threads which pushing into vectors does EntityManager PlayerManager(numPlayers); //Textures ITexture* PlayerTexture[4]; PlayerTexture[0] = driver->getTexture("Textures/Player1.png"); PlayerTexture[1] = driver->getTexture("Textures/Player2.png"); PlayerTexture[2] = driver->getTexture("Textures/Player3.png"); PlayerTexture[3] = driver->getTexture("Textures/Player4.png"); //Names vector<std::string> PlayerName; PlayerName.push_back("Motoko"); PlayerName.push_back("Saito"); PlayerName.push_back("Batou"); PlayerName.push_back("Togusa"); //use this method to get starting cells for an enemy group vector<v2d> vv = GetFreeCells(MG.Convert(),MG.StartX,MG.StartY,4); //HUD test hud HUD(guienv,dimension2d<s32>(SCREENX,SCREENY),"Font\\myfont.xml"); for (int i = 0; i < numPlayers; i++ ) { PlayerManager.GetEntity(i)->Construct(smgr,MG.Convert(), PlayerTexture[i]); PlayerManager.GetEntity(i)->Stats.Name = PlayerName[i]; PlayerManager.GetEntity(i)->Stats.MaxHealth = 100; PlayerManager.GetEntity(i)->Stats.RestoreAll(); PlayerManager.GetEntity(i)->X = MG.XStarts[i]; PlayerManager.GetEntity(i)->Y = MG.YStarts[i]; PlayerManager.GetEntity(i)->Stats.MovementSteps = 5+i; PlayerManager.GetEntity(i)->ReachableTile = driver->getTexture("Textures/TurnReachable.png"); PlayerManager.GetEntity(i)->UnreachableTile = driver->getTexture("Textures/TurnUnreachable.png"); PlayerManager.GetEntity(i)->Stats.RealFiringDistance = 100; PlayerManager.GetEntity(i)->CellShootable = driver->getTexture("Textures/CellShootable.png"); PlayerManager.GetEntity(i)->CellShootableCover = driver->getTexture("Textures/CellShootableCover.png"); PlayerManager.GetEntity(i)->Position(); path filename = "Avatars/"; filename.append(PlayerName[i].c_str()); filename.append(".png"); PlayerManager.GetEntity(i)->Avatar = driver->getTexture( filename ); //test stats PlayerManager.GetEntity(i)->Stats.Accuracy = 100; PlayerManager.GetEntity(i)->Stats.Attack = 100; PlayerManager.GetEntity(i)->Stats.AttackVariance = 0; PlayerManager.GetEntity(i)->Stats.Defense = 0; PlayerManager.GetEntity(i)->Stats.DefenseVariance = 0; } // Create the 3D cursor ISceneNode *Cursor = smgr->addSphereSceneNode(4); //Setup AI int numEnemies = 1; EntityManager EnemyManager(numEnemies); //Textures (none for now) //Need to keep track of all entity positions, so they don't get placed ontop of each other vector<Entity*> EntityList( PlayerManager.GetEntityList() ); for (int i = 0; i < numEnemies; i++) { EnemyManager.GetEntity(i)->Construct(smgr,MG.Convert(), driver->getTexture("Textures/Enemy.png")); EnemyManager.GetEntity(i)->Stats.Name = PlayerName[i]; EnemyManager.GetEntity(i)->Stats.MaxHealth = 100; EnemyManager.GetEntity(i)->Stats.RestoreAll(); EnemyManager.GetEntity(i)->Stats.MovementSteps = 5+i; EnemyManager.GetEntity(i)->Stats.RealFiringDistance = 100; EnemyManager.GetEntity(i)->Stats.Attack = 50; EnemyManager.GetEntity(i)->Stats.Accuracy = 100; //Stats //steup random position EnemyManager.GetEntity(i)->AI_SetRandomDestination(EntityList); EnemyManager.GetEntity(i)->X = EnemyManager.GetEntity(i)->AI_DestinationX; EnemyManager.GetEntity(i)->Y = EnemyManager.GetEntity(i)->AI_DestinationY; //new path will be created EnemyManager.GetEntity(i)->Position(); EnemyManager.GetEntity(i)->AI_State = AI::Patrol; EnemyManager.GetEntity(i)->isAI = true; EntityList.push_back(EnemyManager.GetEntity(i)); } bool rkf = false; //Game loop while (device->run()) { //Create a list of all entities EntityList.clear(); vector<Entity*> EnemyList( EnemyManager.GetEntityList() ); EntityList.insert( EntityList.end(), EnemyList.begin(), EnemyList.end() ); /* * * * * * * * * * * * * * */ /* Player switching module */ /* * * * * * * * * * * * * * */ for (int i = 0; i < PlayerManager.Size; i++) PlayerManager.GetEntity(i)->CheckIfDead(); PlayerManager.ManageCharacterSwitching(Receiver); /* * * * * * * * * * * */ /* Pathfinding module */ /* * * * * * * * * * * */ PlayerManager.GetCurrentEntity()->UpdatePathDisplayTimer(); if (Receiver.MouseState.LeftButtonDown && PlayerManager.GetCurrentEntity()->NewPathDisplayTimer < 1) PlayerManager.GetCurrentEntity()->CreatePathToDestination(EntityList,smgr,Receiver,Cursor->getPosition(),dimension2d<s32>(MR.XSize,MR.YSize),MG.Convert()); /* * * * * * * * * * * * * */ /* Update position module */ /* * * * * * * * * * * * * */ PlayerManager.GetCurrentEntity()->Position(); /* * * * * * * * * * * */ /* Follow path module */ /* * * * * * * * * * * */ if (Receiver.IsKeyDown(Receiver.KeyConfig.FOLLOW_PATH)) PlayerManager.GetCurrentEntity()->FollowPath(EntityList); /* * * * * * * * * */ /* End turn module */ /* * * * * * * * * */ if (Receiver.IsKeyDown(Receiver.KeyConfig.END_TURN) && !rkf) { rkf = true; PlayerManager.EndTurn(); EnemyManager.AI_StartTurn(EntityList, PlayerManager, smgr, Receiver, irr::core::dimension2d<s32>(MR.XSize,MR.YSize), MG.Convert(), MR.MetaTriangleSelector, MR.MetaCoverTriangleSelector); PlayerManager.StartTurn(); } else if (!Receiver.IsKeyDown(Receiver.KeyConfig.END_TURN)) rkf = false; /* * * * * * * * */ /* Cursor module */ /* * * * * * * * */ Cursor->setPosition( vftovi(MouseTo3D( Receiver, MR.CollisionManager, MR.TriSelector)) ); /* * * * * * * * */ /* Camera module */ /* * * * * * * * */ gameCam.Update(Receiver,PlayerManager.GetCurrentEntity()->Node); /* * * * * * * * * * * * */ /* Stats monitor module */ /* * * * * * * * * * * * */ for (int i=0;i<PlayerManager.Size;i++) PlayerManager.GetEntity(i)->Stats.MonitorAll(); /* * * * * * * * * * */ /* Draw scene module */ /* * * * * * * * * * */ driver->beginScene(true,true,SColor(255,100,101,140)); smgr->drawAll(); guienv->drawAll(); HUD.Draw(guienv,PlayerManager.GetCurrentEntity()->Stats,PlayerManager.GetCurrentEntity()->Avatar); //HUD.DrawAIDebug(guienv,*EnemyManager.GetEntity(0),PlayerManager); driver->endScene(); /* * * * * * * */ /* Menu module */ /* * * * * * * */ if (Receiver.IsKeyDown(Receiver.KeyConfig.MENU)) return 0; /* * * * * * * * * * * * */ /* Firing display module */ /* * * * * * * * * * * * */ if (!Receiver.IsKeyDown(KEY_KEY_S)) PlayerManager.GetCurrentEntity()->ShootDisplayKeyFlag = false; else { PlayerManager.GetCurrentEntity()->ShootDisplayKeyFlag = true; PlayerManager.GetCurrentEntity()->DisplayAllCellsThatCanBeShotUsingThreads(smgr,MR.CollisionManager,MR.MetaTriangleSelector,MR.MetaCoverTriangleSelector); } /* * * * * * * * * */ /* Firing module * */ /* * * * * * * * * */ if (Receiver.MouseState.RightButtonDown && !PlayerManager.GetCurrentEntity()->RightMouseFlag) { PlayerManager.GetCurrentEntity()->RightMouseFlag = true; //second playerManager needs to replaced with enemyManager when in place, the function will also need to be edited FireAtTarget(Receiver, PlayerManager, EnemyManager, MR, smgr, Cursor); } else if (!Receiver.MouseState.RightButtonDown) PlayerManager.GetCurrentEntity()->RightMouseFlag = false; } return 0; }
/* This is the main method. We can use void main() on every platform. On Windows platforms, we could also use the WinMain method if we would want to get rid of the console window, which pops up when starting a program with main(), but to keep this example simple, we use main(). */ int main(int argc, char** argv) { /* The most important function of the engine is the 'createDevice' function. The Irrlicht Device can be created with it, which is the root object for doing everything with the engine. createDevice() has 7 paramters: deviceType: Type of the device. This can currently be the Null-device, the Software device, DirectX8, DirectX9, or OpenGL. In this example we use EDT_SOFTWARE, but to try out, you might want to change it to EDT_NULL, EDT_DIRECTX8 , EDT_DIRECTX9, or EDT_OPENGL. windowSize: Size of the Window or FullscreenMode to be created. In this example we use 640x480. bits: Amount of bits per pixel when in fullscreen mode. This should be 16 or 32. This parameter is ignored when running in windowed mode. fullscreen: Specifies if we want the device to run in fullscreen mode or not. stencilbuffer: Specifies if we want to use the stencil buffer for drawing shadows. vsync: Specifies if we want to have vsync enabled, this is only useful in fullscreen mode. eventReceiver: An object to receive events. We do not want to use this parameter here, and set it to 0. */ IrrlichtDevice *device = createDevice(EDT_SOFTWARE, dimension2d<s32>(640, 480), 16, false, false, false, 0); /* Set the caption of the window to some nice text. Note that there is a 'L' in front of the string. The Irrlicht Engine uses wide character strings when displaying text. */ device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo"); /* Get a pointer to the video driver, the SceneManager and the graphical user interface environment, so that we do not always have to write device->getVideoDriver(), device->getSceneManager() and device->getGUIEnvironment(). */ IVideoDriver* driver = device->getVideoDriver(); ISceneManager* smgr = device->getSceneManager(); IGUIEnvironment* guienv = device->getGUIEnvironment(); /* We add a hello world label to the window, using the GUI environment. */ guienv->addStaticText(L"Hello World! This is the Irrlicht Software renderer!", rect<int>(10,10,200,22), true); /* To display something interesting, we load a Quake 2 model and display it. We only have to get the Mesh from the Scene Manager (getMesh()) and add a SceneNode to display the mesh. (addAnimatedMeshSceneNode()). Instead of writing the filename sydney.md2, it would also be possible to load a Maya object file (.obj), a complete Quake3 map (.bsp) or a Milshape file (.ms3d). By the way, that cool Quake 2 model called sydney was modelled by Brian Collins. */ IAnimatedMesh* mesh = smgr->getMesh("../../media/sydney.md2"); IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh ); /* To let the mesh look a little bit nicer, we change its material a little bit: We disable lighting because we do not have a dynamic light in here, and the mesh would be totally black. Then we set the frame loop, so that the animation is looped between the frames 0 and 310. And at last, we apply a texture to the mesh. Without it the mesh would be drawn using only a color. */ if (node) { node->setMaterialFlag(EMF_LIGHTING, false); node->setFrameLoop(0, 310); node->setMaterialTexture( 0, driver->getTexture("../../media/sydney.bmp") ); } /* To look at the mesh, we place a camera into 3d space at the position (0, 30, -40). The camera looks from there to (0,5,0). */ smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0)); /* Ok, now we have set up the scene, lets draw everything: We run the device in a while() loop, until the device does not want to run any more. This would be when the user closed the window or pressed ALT+F4 in windows. */ while(device->run()) { /* Anything can be drawn between a beginScene() and an endScene() call. The beginScene clears the screen with a color and also the depth buffer if wanted. Then we let the Scene Manager and the GUI Environment draw their content. With the endScene() call everything is presented on the screen. */ driver->beginScene(true, true, SColor(0,200,200,200)); smgr->drawAll(); guienv->drawAll(); driver->endScene(); } /* After we are finished, we have to delete the Irrlicht Device created before with createDevice(). In the Irrlicht Engine, you will have to delete all objects you created with a method or function which starts with 'create'. The object is simply deleted by calling ->drop(). See the documentation at http://irrlicht.sourceforge.net//docu/classirr_1_1IUnknown.html#a3 for more information. */ device->drop(); return 0; }
/* Ok, now for the more interesting part. First, create the Irrlicht device. As in some examples before, we ask the user which driver he wants to use for this example: */ int main() { // ask user for driver video::E_DRIVER_TYPE driverType=driverChoiceConsole(); if (driverType==video::EDT_COUNT) return 1; // create device and exit if creation failed IrrlichtDevice * device = createDevice(driverType, core::dimension2d<u32>(640, 480)); if (device == 0) return 1; // could not create selected driver. /* The creation was successful, now we set the event receiver and store pointers to the driver and to the gui environment. */ device->setWindowCaption(L"Irrlicht Engine - User Interface Demo"); device->setResizable(true); video::IVideoDriver* driver = device->getVideoDriver(); IGUIEnvironment* env = device->getGUIEnvironment(); /* To make the font a little bit nicer, we load an external font and set it as the new default font in the skin. To keep the standard font for tool tip text, we set it to the built-in font. */ IGUISkin* skin = env->getSkin(); IGUIFont* font = env->getFont("../../media/fonthaettenschweiler.bmp"); if (font) skin->setFont(font); skin->setFont(env->getBuiltInFont(), EGDF_TOOLTIP); /* We add three buttons. The first one closes the engine. The second creates a window and the third opens a file open dialog. The third parameter is the id of the button, with which we can easily identify the button in the event receiver. */ env->addButton(rect<s32>(10,240,110,240 + 32), 0, GUI_ID_QUIT_BUTTON, L"Quit", L"Exits Program"); env->addButton(rect<s32>(10,280,110,280 + 32), 0, GUI_ID_NEW_WINDOW_BUTTON, L"New Window", L"Launches a new Window"); env->addButton(rect<s32>(10,320,110,320 + 32), 0, GUI_ID_FILE_OPEN_BUTTON, L"File Open", L"Opens a file"); /* Now, we add a static text and a scrollbar, which modifies the transparency of all gui elements. We set the maximum value of the scrollbar to 255, because that's the maximal value for a color value. Then we create an other static text and a list box. */ env->addStaticText(L"Transparent Control:", rect<s32>(150,20,350,40), true); IGUIScrollBar* scrollbar = env->addScrollBar(true, rect<s32>(150, 45, 350, 60), 0, GUI_ID_TRANSPARENCY_SCROLL_BAR); scrollbar->setMax(255); scrollbar->setPos(255); setSkinTransparency( scrollbar->getPos(), env->getSkin()); // set scrollbar position to alpha value of an arbitrary element scrollbar->setPos(env->getSkin()->getColor(EGDC_WINDOW).getAlpha()); env->addStaticText(L"Logging ListBox:", rect<s32>(10,110,350,130), true); IGUIListBox * listbox = env->addListBox(rect<s32>(10, 140, 350, 210)); env->addEditBox(L"Editable Text", rect<s32>(350, 80, 550, 100)); // Store the appropriate data in a context structure. SAppContext context; context.device = device; context.counter = 0; context.listbox = listbox; // Then create the event receiver, giving it that context structure. MyEventReceiver receiver(context); // And tell the device to use our custom event receiver. device->setEventReceiver(&receiver); /* And at last, we create a nice Irrlicht Engine logo in the top left corner. */ env->addImage(driver->getTexture("../../media/irrlichtlogo2.png"), position2d<int>(10,10)); /* That's all, we only have to draw everything. */ while(device->run() && driver) if (device->isWindowActive()) { driver->beginScene(true, true, SColor(0,200,200,200)); env->drawAll(); driver->endScene(); } device->drop(); return 0; }
int main(int argc, char **argv) { BSPdungeon dun(50,50,5); IrrlichtDevice *device =createDevice( video::EDT_OPENGL, dimension2d<u32>(1280,720), 16,false, false, false, 0); if (!device) return 1; device->setWindowCaption(L"Pangolin Kwest"); IVideoDriver* driver = device->getVideoDriver(); ISceneManager* smgr = device->getSceneManager(); IGUIEnvironment* guienv = device->getGUIEnvironment(); smgr->setAmbientLight(video::SColorf(0.1,0.1,0.1,1)); ILightSceneNode* mylight1 = smgr->addLightSceneNode( 0, core::vector3df(00,00,00), video::SColorf(0.3f,0.3f,0.3f), 30.0f, 1 ); //IGUIFont* myfont=guienv->getFont("./myfont.xml"); //if(myfont==0)exit(93); //guienv->addMessageBox(L"Alertz!",L"You pangolin are been createrized. You totalleh ready to bash monstaz etc.!"); mylight1->enableCastShadow(true); //guienv->addStaticText(L"Pangolin Kwest 3D",rect<s32>(10,10,260,22), true); //------------------------------------------- int x,y,z; for(x=0;x<50;x++){ for(y=0;y<50;y++){ if(dun.map[x][y]==NIL){ for(z=0;z<3;z++){ ISceneNode* cueb=smgr->addCubeSceneNode(10); cueb->setMaterialFlag(EMF_LIGHTING, true); cueb->setMaterialTexture( 0, driver->getTexture("media/stdwall.jpg") ); // cueb->getMaterial(0).getTextureMatrix(0).setTextureTranslate(0.25,0.5); // cueb->getMaterial(0).getTextureMatrix(0).setTextureScale(0.0625,0.0625); cueb->setPosition(vector3df(x*10,z*10,y*10)); } } // ISceneNode* cueb=smgr->addCubeSceneNode(10); // cueb->setMaterialFlag(EMF_LIGHTING, true); // cueb->setMaterialTexture( 0, driver->getTexture("media/stdfloor.jpg") ); // cueb->setPosition(vector3df(x*10,-10,y*10)); ISceneNode* cueb=smgr->addCubeSceneNode(10); cueb->setMaterialFlag(EMF_LIGHTING, true); cueb->setMaterialTexture( 0, driver->getTexture("media/stdup.jpg") ); cueb->setPosition(vector3df(x*10,30,y*10)); } } ISceneNode* cueb=smgr->addCubeSceneNode(500); cueb->setMaterialFlag(EMF_LIGHTING, true); cueb->setMaterialTexture( 0, driver->getTexture("media/stdfloor.jpg") ); cueb->setPosition(vector3df(250,-255,250)); //cueb->getMaterial(0).getTextureMatrix(0).setTextureTranslate(0.25,0.5); cueb->getMaterial(0).getTextureMatrix(0).setTextureScale(50,50); //cueb->setScale(vector3df(0,-5,0)); //cueb->addshadowVolumeSceneNode(); //------------------------------------------- int lastFPS; //smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0)); ICameraSceneNode* mycam; mycam=smgr->addCameraSceneNodeFPS(0,100.0f,0.025f); mycam->setFOV(45); mylight1->setParent(mycam); while(device->run()) { //mylight1->setPosition(); //mylight1-> driver->beginScene(true, true, SColor(255,100,101,140)); smgr->drawAll(); guienv->drawAll(); driver->endScene(); int fps = driver->getFPS(); if (lastFPS != fps) { core::stringw str = L"Pangolin Kwest 3D ["; str += driver->getName(); str += "] FPS:"; str += fps; device->setWindowCaption(str.c_str()); lastFPS = fps; } } device->drop(); return 0; }
int main() { video::E_DRIVER_TYPE driverType = driverChoiceConsole(); if (driverType==video::EDT_COUNT) return 1; IrrlichtDevice * device = createDevice(driverType, dimension2d<u32>(640, 480)); if (device == 0) return 1; // could not create selected driver. // It's sometimes of interest to know how the mouse behaves after a resize device->setResizable(true); device->setWindowCaption(L"Cursor control - Irrlicht engine tutorial"); video::IVideoDriver* driver = device->getVideoDriver(); IGUIEnvironment* env = device->getGUIEnvironment(); gui::IGUISpriteBank * SpriteBankIcons; SAppContext context; context.Device = device; rect< s32 > rectInfoStatic(10,10, 200, 200); env->addStaticText (L"Cursor state information", rectInfoStatic, true, true); rectInfoStatic.UpperLeftCorner += dimension2di(0, 15); context.InfoStatic = env->addStaticText (L"", rectInfoStatic, true, true); rect< s32 > rectEventBox(10,210, 200, 400); env->addStaticText (L"click events (new on top)", rectEventBox, true, true); rectEventBox.UpperLeftCorner += dimension2di(0, 15); context.EventBox = env->addListBox(rectEventBox); rect< s32 > rectCursorBox(210,10, 400, 250); env->addStaticText (L"cursors, click to set the active one", rectCursorBox, true, true); rectCursorBox.UpperLeftCorner += dimension2di(0, 15); context.CursorBox = env->addListBox(rectCursorBox); rect< s32 > rectSpriteBox(210,260, 400, 400); env->addStaticText (L"sprites", rectSpriteBox, true, true); rectSpriteBox.UpperLeftCorner += dimension2di(0, 15); context.SpriteBox = env->addListBox(rectSpriteBox); context.ButtonSetVisible = env->addButton( rect<s32>( 410, 20, 560, 40 ), 0, -1, L"set visible (delayed)" ); context.ButtonSetInvisible = env->addButton( rect<s32>( 410, 50, 560, 70 ), 0, -1, L"set invisible (delayed)" ); context.ButtonSimulateBadFps = env->addButton( rect<s32>( 410, 80, 560, 100 ), 0, -1, L"simulate bad FPS" ); context.ButtonSimulateBadFps->setIsPushButton(true); context.ButtonChangeIcon = env->addButton( rect<s32>( 410, 140, 560, 160 ), 0, -1, L"replace cursor icon\n(cursor+sprite must be selected)" ); // set the names for all the system cursors for ( int i=0; i < (int)gui::ECI_COUNT; ++i ) { context.CursorBox->addItem(stringw( GUICursorIconNames[i] ).c_str()); } /* Create sprites which then can be used as cursor icons. */ SpriteBankIcons = env->addEmptySpriteBank(io::path("cursor_icons")); context.SpriteBox->setSpriteBank(SpriteBankIcons); // create one animated icon from several files array< io::path > files; files.push_back( io::path("../media/icon_crosshairs16x16bw1.png") ); files.push_back( io::path("../media/icon_crosshairs16x16bw2.png") ); files.push_back( io::path("../media/icon_crosshairs16x16bw3.png") ); files.push_back( io::path("../media/icon_crosshairs16x16bw3.png") ); files.push_back( io::path("../media/icon_crosshairs16x16bw2.png") ); SCursorSprite spriteBw; // the sprite + some additional information needed for cursors spriteBw.SpriteId = AddAnimatedIconToSpriteBank( SpriteBankIcons, driver, files, 200 ); spriteBw.SpriteBank = SpriteBankIcons; spriteBw.HotSpot = position2d<s32>(7,7); context.addIcon(L"crosshair_bw", spriteBw); // create one animated icon from one file array< rect<s32> > iconRects; iconRects.push_back( rect<s32>(0,0, 16, 16) ); iconRects.push_back( rect<s32>(16,0, 32, 16) ); iconRects.push_back( rect<s32>(0,16, 16, 32) ); iconRects.push_back( rect<s32>(0,16, 16, 32) ); iconRects.push_back( rect<s32>(16,0, 32, 16) ); SCursorSprite spriteCol; // the sprite + some additional information needed for cursors spriteCol.SpriteId = AddAnimatedIconToSpriteBank( SpriteBankIcons, driver, io::path("../media/icon_crosshairs16x16col.png"), iconRects, 200 ); spriteCol.HotSpot = position2d<s32>(7,7); spriteCol.SpriteBank = SpriteBankIcons; context.addIcon(L"crosshair_colored", spriteCol); // Create some non-animated icons rect<s32> rectIcon; SCursorSprite spriteNonAnimated(SpriteBankIcons, 0, position2d<s32>(7,7)); rectIcon = rect<s32>(0,0, 16, 16); spriteNonAnimated.SpriteId = AddIconToSpriteBank( SpriteBankIcons, driver, io::path("../media/icon_crosshairs16x16col.png"), rectIcon ); context.addIcon(L"crosshair_col1", spriteNonAnimated, false); rectIcon = rect<s32>(16,0, 32, 16); spriteNonAnimated.SpriteId = AddIconToSpriteBank( SpriteBankIcons, driver, io::path("../media/icon_crosshairs16x16col.png"), rectIcon ); context.addIcon(L"crosshair_col2", spriteNonAnimated, false); rectIcon = rect<s32>(0,16, 16, 32); spriteNonAnimated.SpriteId = AddIconToSpriteBank( SpriteBankIcons, driver, io::path("../media/icon_crosshairs16x16col.png"), rectIcon ); context.addIcon(L"crosshair_col3", spriteNonAnimated, false); MyEventReceiver receiver(context); device->setEventReceiver(&receiver); while(device->run() && driver) { // if (device->isWindowActive()) { u32 realTimeNow = device->getTimer()->getRealTime(); context.update(); driver->beginScene(true, true, SColor(0,200,200,200)); env->drawAll(); // draw custom sprite with Irrlicht functions for comparison. It should usually look the same as the cursors. if ( context.SpriteBox ) { s32 selectedSprite = context.SpriteBox->getSelected(); if ( selectedSprite >= 0 && context.Sprites[selectedSprite].SpriteId >= 0 ) { SpriteBankIcons->draw2DSprite(u32(context.Sprites[selectedSprite].SpriteId), position2di(580, 140), 0, video::SColor(255, 255, 255, 255), 0, realTimeNow); } } driver->endScene(); } // By simulating bad fps we can find out if hardware-support for cursors works or not. If it works the cursor will move as usual,while it otherwise will just update with 2 fps now. if ( context.SimulateBadFps ) { device->sleep(500); // 2 fps } else { device->sleep(10); } } device->drop(); return 0; }
bool Editor::run(IrrlichtDevice* irr_device,Configuration* conf){ // Do Irrlicht Stuff _device = irr_device; IVideoDriver* driver = GetDevice()->getVideoDriver(); ISceneManager* smgr = GetDevice()->getSceneManager(); IGUIEnvironment* guienv = GetDevice()->getGUIEnvironment(); GetDevice()->setEventReceiver(this); if (!conf->getSettingAsBool("fullscreen")) GetDevice()->setResizable(true); // Project and state Project* proj = new Project(); _state = new EditorState(GetDevice(),proj,conf); // Menu State MenuState* ms = new MenuState(GetState()); GetState()->SetMenu(ms); // Add editor modes GetState()->AddMode(new NBEditor(GetState())); // Set up project proj->AddNode(new Node(GetDevice(),GetState())); proj->SelectNode(0); // Load user interface LoadScene(); GetState()->Menu()->init(); GetState()->Mode()->load(); printf("Complete!\n"); int LastX = driver->getScreenSize().Width; if (!GetState()->Settings()->getSettingAsBool("hide_sidebar")) LastX -= 256; int LastY = driver->getScreenSize().Height; int lastFPS = -1; while (GetDevice()->run()){ if (GetState()->NeedsClose()){ GetDevice()->closeDevice(); return true; } driver->beginScene(true, true, irr::video::SColor(255,150,150,150)); int ResX = driver->getScreenSize().Width; if (!GetState()->Settings()->getSettingAsBool("hide_sidebar")) ResX -= 256; int ResY = driver->getScreenSize().Height; if (currentWindow == -1) { // Draw Camera 0 if (camera[0]){ smgr->setActiveCamera(camera[0]); rect<s32> offset = rect<s32>(0,0,ResX/2,ResY/2); driver->setViewPort(offset); smgr->drawAll(); if (GetState()->Mode()) GetState()->Mode()->viewportTick(EVIEW_PERS, driver, offset); } // Draw Camera 1 if (camera[1]){ smgr->setActiveCamera(camera[1]); rect<s32> offset = rect<s32>(ResX/2,0,ResX,ResY/2); driver->setViewPort(offset); smgr->drawAll(); if (GetState()->Mode()) GetState()->Mode()->viewportTick(EVIEW_XZ, driver, offset); } // Draw Camera 2 if (camera[2]){ smgr->setActiveCamera(camera[2]); rect<s32> offset = rect<s32>(0,ResY/2,ResX/2,ResY); driver->setViewPort(offset); smgr->drawAll(); if (GetState()->Mode()) GetState()->Mode()->viewportTick(EVIEW_XY, driver, offset); } // Draw Camera 3 if (camera[3]){ smgr->setActiveCamera(camera[3]); rect<s32> offset = rect<s32>(ResX/2,ResY/2,ResX,ResY); driver->setViewPort(offset); smgr->drawAll(); if (GetState()->Mode()) GetState()->Mode()->viewportTick(EVIEW_ZY, driver, offset); } // Draw GUI driver->setViewPort(rect<s32>(0,0,driver->getScreenSize().Width,driver->getScreenSize().Height)); driver->draw2DLine(vector2d<irr::s32>(0,ResY/2),vector2d<irr::s32>(ResX,ResY/2),SColor(175,255,255,255)); driver->draw2DLine(vector2d<irr::s32>(0,ResY/2-1),vector2d<irr::s32>(ResX,ResY/2-1),SColor(175,255,255,255)); driver->draw2DLine(vector2d<irr::s32>(ResX/2,0),vector2d<irr::s32>(ResX/2,ResY),SColor(175,255,255,255)); driver->draw2DLine(vector2d<irr::s32>(ResX/2+1,0),vector2d<irr::s32>(ResX/2+1,ResY),SColor(175,255,255,255)); }else if (camera[currentWindow]){ smgr->setActiveCamera(camera[currentWindow]); driver->setViewPort(rect<s32>(0,0,ResX,ResY)); smgr->drawAll(); if (GetState()->Mode()) GetState()->Mode()->viewportTick((VIEWPORT)currentWindow, driver, rect<s32>(0,0,ResX,ResY)); driver->setViewPort(rect<s32>(0,0,driver->getScreenSize().Width,driver->getScreenSize().Height)); } if (GetState()->Menu()) GetState()->Menu()->draw(driver); if (GetState()->Mode()) GetState()->Mode()->draw(driver); guienv->drawAll(); driver->endScene(); int fps = driver->getFPS(); if (lastFPS != fps) { irr::core::stringw str = L"Nodebox Editor [FPS: "; str += fps; str += "]"; GetDevice()->setWindowCaption(str.c_str()); lastFPS = fps; } if (LastX != ResX || LastY != ResY){ printf("Adjusting FOV to new screen size...\n"); LastX = ResX; LastY = ResY; camera[0]->setAspectRatio((float)ResX/(float)ResY); // reset matrix matrix4 projMat; irr::f32 orth_w = (float)ResX / (float)ResY; orth_w = 3 * orth_w; projMat.buildProjectionMatrixOrthoLH(orth_w,3,1,100); for (int i=1;i<4;i++){ if (camera[i]){ camera[i]->remove(); camera[i]=NULL; } } // Remake cameras camera[1]=smgr->addCameraSceneNode(target,vector3df(0,2,-0.01),vector3df(0,0,0)); camera[1]->setProjectionMatrix(projMat,true); camera[2]=smgr->addCameraSceneNode(target,vector3df(0,0,-5),vector3df(0,0,0)); camera[2]->setProjectionMatrix(projMat,true); camera[3]=smgr->addCameraSceneNode(target,vector3df(-5,0,0),vector3df(0,0,0)); camera[3]->setProjectionMatrix(projMat,true); } } return true; }
int main() { EventHandler eventHandler; irrlicht = createDevice( video::EDT_OPENGL, dimension2d<u32>(800, 600), 32, false, false, false, &eventHandler); if (!irrlicht) { return 1; } pdp::initTemplates(); irrlicht->setWindowCaption(L"Procedural Death Planet"); IVideoDriver* driver = irrlicht->getVideoDriver(); ISceneManager* smgr = irrlicht->getSceneManager(); IGUIEnvironment* guienv = irrlicht->getGUIEnvironment(); pdp::VehicleDesign *design = pdp::getPatentOffice()->getVehicleDesign(pdp::getPlayerVehicle()); if (design) { player = spawnVehicle(design, vector3df(0.0f)); } ICameraSceneNode *camera = smgr->addCameraSceneNode( 0, vector3df( 0, 8, -20 ), vector3df( 0, 1, 0 ) ); camera->setFOV( 0.34906585f ); u32 prevT = irrlicht->getTimer()->getTime(); float speed = 10.f; float turn_speed = 100.f; while (irrlicht->run()) { const u32 t = irrlicht->getTimer()->getTime(); float deltaT = (t - prevT) / 1000.f; prevT = t; float theta = 0.f; bool ctrl = eventHandler.IsKeyDown(KEY_LSHIFT); if (eventHandler.IsKeyDown(KEY_LEFT)) { theta -= deltaT * turn_speed * clamp(speed / 30.f, 0.f, 1.f); vector3df rot = (ctrl ? playerTurret : player)->getRotation(); rot.Y += theta; if (rot.Y < 0.0f) { rot.Y += 360.0f; } (ctrl ? playerTurret : player)->setRotation( rot ); } else if (eventHandler.IsKeyDown(KEY_RIGHT)) { theta += deltaT * turn_speed * clamp(speed / 30.f, 0.f, 1.f); vector3df rot = (ctrl ? playerTurret : player)->getRotation(); rot.Y += theta; if (rot.Y >= 360.0) { rot.Y -= 360.0f; } (ctrl ? playerTurret : player)->setRotation( rot ); } driver->beginScene( true, true, SColor(255,100,101,140) ); smgr->drawAll(); guienv->drawAll(); driver->endScene(); } irrlicht->drop(); return 0; }
/* OK, now for the more interesting part. First, create the Irrlicht device. As in some examples before, we ask the user which driver he wants to use for this example. */ int main() { // create device and exit if creation failed IrrlichtDevice * device = createDevice(EDT_OPENGL,core::dimension2d<u32>(640, 480)); if (device == 0) return 1; // could not create selected driver. /* The creation was successful, now we set the event receiver and store pointers to the driver and to the gui environment. */ device->setWindowCaption(L"Irrlicht Engine - User Interface Demo"); device->setResizable(true); video::IVideoDriver* driver = device->getVideoDriver(); IGUIEnvironment* env = device->getGUIEnvironment(); const io::path mediaPath = getExampleMediaPath(); /* To make the font a little bit nicer, we load an external font and set it as the new default font in the skin. To keep the standard font for tool tip text, we set it to the built-in font. */ IGUISkin* skin = env->getSkin(); IGUIFont* font = env->getFont(mediaPath + "fonthaettenschweiler.bmp"); if (font) skin->setFont(font); skin->setFont(env->getBuiltInFont(), EGDF_TOOLTIP); /* We add three buttons. The first one closes the engine. The second creates a window and the third opens a file open dialog. The third parameter is the id of the button, with which we can easily identify the button in the event receiver. */ env->addButton(rect<s32>(10,240,110,240 + 32), 0, GUI_ID_QUIT_BUTTON, L"Quit", L"Exits Program"); env->addButton(rect<s32>(10,280,110,280 + 32), 0, GUI_ID_NEW_WINDOW_BUTTON, L"New Window", L"Launches a new Window"); env->addButton(rect<s32>(10,320,110,320 + 32), 0, GUI_ID_FILE_OPEN_BUTTON, L"File Open", L"Opens a file"); /* Now, we add a static text and a scrollbar, which modifies the transparency of all gui elements. We set the maximum value of the scrollbar to 255, because that's the maximal value for a color value. Then we create an other static text and a list box. */ env->addStaticText(L"Transparent Control:", rect<s32>(150,20,350,40), true); IGUIScrollBar* scrollbar = env->addScrollBar(true, rect<s32>(150, 45, 350, 60), 0, GUI_ID_TRANSPARENCY_SCROLL_BAR); scrollbar->setMax(255); scrollbar->setPos(255); setSkinTransparency( scrollbar->getPos(), env->getSkin()); // set scrollbar position to alpha value of an arbitrary element scrollbar->setPos(env->getSkin()->getColor(EGDC_WINDOW).getAlpha()); env->addStaticText(L"Logging ListBox:", rect<s32>(10,110,350,130), true); IGUIListBox * listbox = env->addListBox(rect<s32>(10, 140, 350, 210)); env->addEditBox(L"Editable Text", rect<s32>(350, 80, 550, 100)); // Store the appropriate data in a context structure. SAppContext context; context.device = device; context.counter = 0; context.listbox = listbox; // Then create the event receiver, giving it that context structure. MyEventReceiver receiver(context); // And tell the device to use our custom event receiver. device->setEventReceiver(&receiver); /* And at last, we create a nice Irrlicht Engine logo in the top left corner. */ env->addImage(driver->getTexture(mediaPath + "irrlichtlogo2.png"), position2d<int>(10,10)); /* That's all, we only have to draw everything. */ fluid_settings_t* settings; // int arg1 = 1; char buf[512]; // int c, i; int interactive = 1; int midi_in = 1; fluid_player_t* player = NULL; fluid_midi_router_t* router = NULL; //fluid_sequencer_t* sequencer = NULL; fluid_midi_driver_t* mdriver = NULL; fluid_audio_driver_t* adriver = NULL; fluid_synth_t* synth = NULL; #ifdef NETWORK_SUPPORT fluid_server_t* server = NULL; int with_server = 0; #endif char* config_file = NULL; int audio_groups = 0; int audio_channels = 0; int dump = 0; int fast_render = 0; static const char optchars[] = "a:C:c:dE:f:F:G:g:hijK:L:lm:nO:o:p:R:r:sT:Vvz:"; #ifdef LASH_ENABLED int connect_lash = 1; int enabled_lash = 0; /* set to TRUE if lash gets enabled */ fluid_lash_args_t *lash_args; lash_args = fluid_lash_extract_args (&argc, &argv); #endif settings = new_fluid_settings(); /* The 'groups' setting is relevant for LADSPA operation and channel mapping * in rvoice_mixer. * If not given, set number groups to number of audio channels, because * they are the same (there is nothing between synth output and 'sound card') */ if ((audio_groups == 0) && (audio_channels != 0)) { audio_groups = audio_channels; } if (audio_groups != 0) { fluid_settings_setint(settings, "synth.audio-groups", audio_groups); } if (fast_render) { midi_in = 0; interactive = 0; #ifdef NETWORK_SUPPORT with_server = 0; #endif fluid_settings_setstr(settings, "player.timing-source", "sample"); fluid_settings_setint(settings, "synth.lock-memory", 0); } /* create the synthesizer */ synth = new_fluid_synth(settings); if (synth == NULL) { fprintf(stderr, "Failed to create the synthesizer\n"); exit(-1); } /* load the soundfonts (check that all non options are SoundFont or MIDI files) */ // for (i = arg1; i < argc; i++) { if (fluid_is_soundfont(psoundfont)) { if (fluid_synth_sfload(synth, psoundfont, 1) == -1) fprintf(stderr, "Failed to load the SoundFont %s\n", psoundfont); } else if (!fluid_is_midifile(psoundfont)) fprintf (stderr, "Parameter '%s' not a SoundFont or MIDI file or error occurred identifying it.\n", psoundfont); /* start the synthesis thread */ if (!fast_render) { fluid_settings_setstr(settings, "audio.driver", "alsa"); adriver = new_fluid_audio_driver(settings, synth); if (adriver == NULL) { fprintf(stderr, "Failed to create the audio driver\n"); // goto cleanup; } } /* start the midi router and link it to the synth */ #if WITH_MIDI if (midi_in) { /* In dump mode, text output is generated for events going into and out of the router. * The example dump functions are put into the chain before and after the router.. */ //sequencer = new_fluid_sequencer2(0); router = new_fluid_midi_router( settings, dump ? fluid_midi_dump_postrouter : fluid_synth_handle_midi_event, (void*)synth); if (router == NULL) { fprintf(stderr, "Failed to create the MIDI input router; no MIDI input\n" "will be available. You can access the synthesizer \n" "through the console.\n"); } else { mdriver = new_fluid_midi_driver( settings, dump ? fluid_midi_dump_prerouter : fluid_midi_router_handle_midi_event, (void*) router); if (mdriver == NULL) { fprintf(stderr, "Failed to create the MIDI thread; no MIDI input\n" "will be available. You can access the synthesizer \n" "through the console.\n"); } } } #endif /* play the midi fildes, if any */ // for (i = arg1; i < argc; i++) { if (fluid_is_midifile(psong)) { if (player == NULL) { player = new_fluid_player(synth); if (player == NULL) { fprintf(stderr, "Failed to create the midifile player.\n" "Continuing without a player.\n"); // break; } } fluid_player_add(player, psong); } // } if (player != NULL) { if (fluid_synth_get_sfont(synth, 0) == NULL) { /* Try to load the default soundfont if no soundfont specified */ char *s; if (fluid_settings_dupstr(settings, "synth.default-soundfont", &s) != FLUID_OK) s = NULL; if ((s != NULL) && (s[0] != '\0')) fluid_synth_sfload(synth, s, 1); FLUID_FREE(s); } fluid_player_play(player); } cmd_handler = new_fluid_cmd_handler(synth, router); if (cmd_handler == NULL) { fprintf(stderr, "Failed to create the command handler\n"); // goto cleanup; } /* try to load the user or system configuration */ if (config_file != NULL) { fluid_source(cmd_handler, config_file); } else if (fluid_get_userconf(buf, sizeof(buf)) != NULL) { fluid_source(cmd_handler, buf); } else if (fluid_get_sysconf(buf, sizeof(buf)) != NULL) { fluid_source(cmd_handler, buf); } /* run the server, if requested */ #ifdef NETWORK_SUPPORT if (with_server) { server = new_fluid_server(settings, synth, router); if (server == NULL) { fprintf(stderr, "Failed to create the server.\n" "Continuing without it.\n"); } } #endif #ifdef LASH_ENABLED if (enabled_lash) fluid_lash_create_thread (synth); #endif while(device->run() && driver) if (device->isWindowActive()) { driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH, SColor(0,200,200,200)); env->drawAll(); //fast_render; // if (fast_render) { // char *filename; // if (player == NULL) { // fprintf(stderr, "No midi file specified!\n"); // // fluid_player_play(player); //// goto cleanup; // } // // fluid_settings_dupstr (settings, "audio.file.name", &filename); // printf ("Rendering audio to file '%s'..\n", filename); // if (filename) FLUID_FREE (filename); // // fast_render_loop(settings, synth, player); // } /* Play a note */ // fluid_synth_noteon(synth, 0, 60, 100); // printf("Press \"Enter\" to stop: "); // fgetc(stdin); // printf("done\n"); device->sleep(129); driver->endScene(); } if (adriver) { delete_fluid_audio_driver(adriver); } if (synth) { delete_fluid_synth(synth); } if (settings) { delete_fluid_settings(settings); } device->drop(); return 0; }
int main() { IrrlichtDevice *device = createDevice( video::EDT_OPENGL, dimension2d<u32>(1200, 800), 32, false, true, false, 0); PhysicsContext odeContext; std::vector<PlaceableObject> objects; odeContext.sceneWidth = 512; odeContext.sceneHeight = 512; lineWidth = odeContext.sceneWidth; SetupOde(odeContext); if (!device) return 1; device->setWindowCaption(L"REPO prototype"); IVideoDriver* driver = device->getVideoDriver(); ISceneManager* smgr = device->getSceneManager(); IGUIEnvironment* guienv = device->getGUIEnvironment(); SetupCamera(smgr, device); SetupGui(guienv); AddActors(smgr, driver, odeContext, objects ); SetupLightsAndShadows(smgr, driver); //---------------- auto scale = 80; AddTerrain(odeContext, driver, smgr, scale); //---------------- auto infotext = guienv->addStaticText(L"Irrlicht", rect<s32>(10, 10, 200, 40), true); auto frameCounter = 0; while(device->run()) { driver->beginScene(true, true, SColor(255, 0, 0, 0)); smgr->drawAll(); guienv->drawAll(); driver->endScene(); core::stringw strFps = L"FPS: "; strFps += (s32)driver->getFPS(); infotext->setText(strFps.c_str()); if (frameCounter % 1 == 0) { SimulationStep(odeContext); UpdateActors(objects); } frameCounter++; } device->drop(); return 0; }
int main() { // ask user for driver video::E_DRIVER_TYPE driverType=driverChoiceConsole(); if (driverType==video::EDT_COUNT) return 1; // create device and exit if creation failed Device = createDevice(driverType, core::dimension2d<u32>(640, 480)); if(Device == NULL) return 1; IVideoDriver *Driver = Device->getVideoDriver(); IGUIEnvironment* env = Device->getGUIEnvironment(); ISceneManager *Scene = Device->getSceneManager(); Scene->addCameraSceneNode(0, vector3df(0,10,-40), vector3df(0,0,0)); MyEventReceiver receiver; Device->setEventReceiver(&receiver); // Load fonts fonts[0] = env->getFont(FONTPATH1, SIZE_FONT_NORMAL); fonts[1] = env->getFont(FONTPATH1, SIZE_FONT_BIG); fonts[2] = env->getFont(FONTPATH2, SIZE_FONT_NORMAL); fonts[3] = env->getFont(FONTPATH2, SIZE_FONT_BIG); fonts[4] = env->getFont(FONTPATH3, SIZE_FONT_NORMAL); fonts[5] = env->getFont(FONTPATH3, SIZE_FONT_BIG); for( int i = 0; i < 6; ++i ) { fonts[i]->setBatchLoadSize(1); fonts[i]->setMaxPageTextureSize( dimension2du(512, 512) ); } font = fonts[0]; font2 = fonts[1]; skin = env->getSkin(); skin->setFont(font); txtTrans = env->addStaticText(L"Transparency:", rect<s32>(50,20,250,40), true); IGUIScrollBar* scrollbar = env->addScrollBar(true, rect<s32>(50, 45, 250, 60), 0, 104); scrollbar->setMax(255); SColor col = env->getSkin()->getColor((EGUI_DEFAULT_COLOR)0); scrollbar->setPos(col.getAlpha()); txtLog = env->addStaticText(L"Logging ListBox:", rect<s32>(50,80,250,100), true); listbox = env->addListBox(rect<s32>(50, 110, 250, 180)); btnQuit = env->addButton(rect<s32>(10,210,100,240), 0, 101, L"Quit"); btnNew = env->addButton(rect<s32>(10,250,100,290), 0, 102, L"New Window"); btnFile = env->addButton(rect<s32>(10,300,100,340), 0, 103, L"Open File"); edtName = env->addEditBox(L"",rect<s32>(300,60,580,80)); edtName->setMax(40); edtMemo = env->addEditBox(L"",rect<s32>(300,100,580,450)); edtMemo->setMultiLine(true); edtMemo->setTextAlignment(EGUIA_UPPERLEFT, EGUIA_UPPERLEFT); lstLang = env->addListBox(rect<s32>(10, 400, 250, 470),0,120); lstLang->addItem(L"Arial"); lstLang->addItem(L"Times Roman"); lstLang->addItem(L"MS-Gothic(Japanese)"); lstLang->setSelected(0); int lastFPS = -1; while(Device->run()) { Driver->beginScene(true, true, SColor(0,64,64,128)); Scene->drawAll(); env->drawAll(); if (!lang){ font2->draw(L"Hello TrueType",rect<s32>(250,20,640,100),SColor(255,255,64,64),true); } else { //font2->draw(jtxtHello,rect<s32>(250,20,640,100),SColor(255,255,64,64),true); font2->draw(zhtwHello,rect<s32>(100,100,640,100),SColor(255,255,64,64),false); } Driver->endScene(); int fps = Driver->getFPS(); if (lastFPS != fps) { wchar_t tmp[1024]; swprintf(tmp, L"Irrlicht TrueType Demo (fps:%d)", fps); Device->setWindowCaption(tmp); lastFPS = fps; } } Device->drop(); return 0; }