// This is a Demo of the Irrlicht Engine (c) 2006 by N.Gebhardt. // This file is not documented. #ifndef __C_DEMO_H_INCLUDED__ #define __C_DEMO_H_INCLUDED__ #define USE_IRRKLANG //#define USE_SDL_MIXER #include #ifdef _IRR_WINDOWS_ #include #endif using namespace irr; // audio support #ifdef USE_IRRKLANG #include // problem here? go to http://www.ambiera.com/irrklang and download // the irrKlang library or undefine USE_IRRKLANG at the beginning // of this file. #ifdef _IRR_WINDOWS_ #pragma comment (lib, "irrKlang.lib") #endif #endif #ifdef USE_SDL_MIXER # include # include #endif const int CAMERA_COUNT = 7; class CDemo : public IEventReceiver { public: CDemo(bool fullscreen, bool music, bool shadows, bool additive, bool vsync, video::E_DRIVER_TYPE driver); ~CDemo(); void run(); virtual bool OnEvent(SEvent event); private: void createLoadingScreen(); void loadSceneData(); void switchToNextScene(); void shoot(); void createParticleImpacts(); bool fullscreen; bool music; bool shadows; bool additive; bool vsync; video::E_DRIVER_TYPE driverType; IrrlichtDevice *device; #ifdef USE_IRRKLANG void startIrrKlang(); audio::ISoundEngine* irrKlang; audio::ISoundSource* ballSound; audio::ISoundSource* impactSound; #endif #ifdef USE_SDL_MIXER void startSound(); void playSound(Mix_Chunk *); void pollSound(); Mix_Music *stream; Mix_Chunk *ballSound; Mix_Chunk *impactSound; #endif struct SParticleImpact { u32 when; core::vector3df pos; core::vector3df outVector; }; int currentScene; video::SColor backColor; gui::IGUIStaticText* statusText; gui::IGUIInOutFader* inOutFader; scene::IQ3LevelMesh* quakeLevelMesh; scene::ISceneNode* quakeLevelNode; scene::ISceneNode* skyboxNode; scene::IAnimatedMeshSceneNode* model1; scene::IAnimatedMeshSceneNode* model2; scene::IParticleSystemSceneNode* campFire; scene::IMetaTriangleSelector* metaSelector; scene::ITriangleSelector* mapSelector; s32 sceneStartTime; s32 timeForThisScene; core::array Impacts; }; #endif