EngineExhaustNode::EngineExhaustNode(ISceneNode* parent, ISceneManager *mgr, s32 id, float radius, float psize, bool light): ISceneNode(parent, mgr, id), mParticleSize(psize), mExhaustVelocity(-0.02, 0, 0), mRadius(radius) { // engine light if(light) { scene::ILightSceneNode* light = mgr->addLightSceneNode(this, core::vector3df(0,0,40), SColorf(0.6, 0.4, 0.1), 30); light->setLightType( video::ELT_POINT ); } // create particle system to set up affectors, then delete again /// \todo fix this auto fire = SceneManager->addParticleSystemSceneNode(false, 0, 0); //Emitter mFadeOutAffector = fire->createFadeOutParticleAffector(SColor(0,0,0,0), mParticleLifetime ); mScaleAffector = fire->createScaleParticleAffector(dimension2df(4.0 * psize , 4.0 * psize )); fire->remove(); // texture loading mFireTexture = SceneManager->getVideoDriver()->getTexture("gfx/fire.png"); if(mFireTexture) mFireTexture->grab(); setName("engine"); }
void EngineExhaustNode::addNozzle( irr::core::vector3df offset ) { auto fire = SceneManager->addParticleSystemSceneNode(false, this, 0); fire->setParticleBehavior( EPB_EMITTER_VECTOR_IGNORE_ROTATION | EPB_EMITTER_FRAME_INTERPOLATION); fire->setParticlesAreGlobal(true); //Emitter auto emitter = fire->createSphereEmitter( offset, mRadius, vector3df(0,0,-1), 20, 20, SColor(255,255,255,255), SColor(255,255,255,255), mParticleLifetime - 100, mParticleLifetime, 5, dimension2df(mParticleSize, mParticleSize), dimension2df( mParticleSize * 1.5, mParticleSize * 1.5)); fire->setEmitter(emitter); fire->addAffector(mFadeOutAffector); fire->addAffector(mScaleAffector); fire->setMaterialFlag(EMF_LIGHTING, false); fire->setMaterialTexture(0, mFireTexture); fire->setMaterialType(EMT_TRANSPARENT_ADD_COLOR); //fire->setMaterialType( EMT_TRANSPARENT_ALPHA_CHANNEL ); mFireEmitters.push_back( fire ); }
// Constructor _Player::_Player(const SpawnStruct &Object) : _Object(), Sound(NULL), Camera(NULL), Light(NULL), JumpTimer(0.0f), TorqueFactor(4.0f) { // Graphics Node = irrScene->addSphereSceneNode(Object.Template->Radius, 24); Node->setMaterialTexture(0, irrDriver->getTexture("textures/player_outer0.png")); Node->setMaterialType(EMT_TRANSPARENT_ADD_COLOR); Node->setMaterialFlag(EMF_LIGHTING, false); Node->setMaterialType(EMT_ONETEXTURE_BLEND); Node->getMaterial(0).MaterialTypeParam = pack_textureBlendFunc(EBF_ONE, EBF_ONE); // Emit Light if(Object.Template->EmitLight) { Light = irrScene->addLightSceneNode(0, vector3df(Object.Position[0], Object.Position[1], Object.Position[2]), video::SColorf(1.0f, 1.0f, 1.0f), 15.0f); Light->getLightData().Attenuation.set(0.5f, 0.05f, 0.05f); Light->getLightData().DiffuseColor.set(1.0f, 0.75f, 0.75f, 1.0f); } // Add glow ISceneNode *InnerNode; InnerNode = irrScene->addBillboardSceneNode(Node, dimension2df(1.5f, 1.5f)); InnerNode->setMaterialFlag(EMF_LIGHTING, false); InnerNode->setMaterialFlag(EMF_ZBUFFER, false); InnerNode->setMaterialTexture(0, irrDriver->getTexture("textures/player_glow0.png")); InnerNode->setMaterialType(EMT_ONETEXTURE_BLEND); InnerNode->getMaterial(0).MaterialTypeParam = pack_textureBlendFunc(EBF_ONE, EBF_ONE); if(Physics.IsEnabled()) { // Create shape btSphereShape *Shape = new btSphereShape(Object.Template->Radius); // Set up physics CreateRigidBody(Object, Shape); RigidBody->setSleepingThresholds(0.1f, 0.1f); // Audio Sound = new _AudioSource(Audio.GetBuffer("player.ogg"), true, 0.0, 0.50f); Sound->SetPosition(Object.Position[0], Object.Position[1], Object.Position[2]); Sound->Play(); } SetProperties(Object); Hookable = false; if(CollisionCallback == "") CollisionCallback = "OnHitPlayer"; }
void Entity::addBoxEmitter(vector3df boxDim, vector3df dir, vector2df pps, vector2df size, vector2df life, f32 angle) { if(type != PARTICLE_SYS_TYPE) return; vector3df globPos = pSys->getAbsolutePosition(); boxDim /= 2; pSys->setEmitter(pSys->createBoxEmitter(aabbox3df(globPos.X - boxDim.X, globPos.Y - boxDim.Y, globPos.Z - boxDim.Z, globPos.X + boxDim.X, globPos.Y + boxDim.Y, globPos.Z + boxDim.Z), dir, pps.X, pps.Y, SColor(255, 0, 0, 0), SColor(255, 255, 255, 255), life.X, life.Y, angle, dimension2df(size.X, size.X), dimension2df(size.Y, size.Y))); }
static void run(){ IrrlichtDevice *device = createDevice( video::EDT_OPENGL, dimension2d<u32>(1024, 768), 32, false, false, true, 0); IVideoDriver* driver = device->getVideoDriver(); ISceneManager* smgr = device->getSceneManager(); smgr->addCameraSceneNodeFPS(); const s32 randLength = 1024; srand(device->getTimer()->getRealTime()); //Creating the grid for unit measure, etc u32 tileNumber = 128; IAnimatedMesh* groundMesh = smgr->addHillPlaneMesh("", dimension2d<float>(8,8),dimension2d<u32>(tileNumber,tileNumber),0,0.0f,dimension2df(0,0),dimension2df(tileNumber,tileNumber)); IAnimatedMeshSceneNode * groundNode = smgr->addAnimatedMeshSceneNode(groundMesh); groundNode->setMaterialTexture(0,driver->getTexture(resPath("../../media/grid2.png"))); groundNode->setMaterialFlag(EMF_LIGHTING,false); groundNode->setPosition(vector3df(0,-2,0)); //obstacles for stuff EntityGroup obstacles; for(int i = 0; i < 20; i++) { ISceneNode* s = smgr->addSphereSceneNode(20); IrrlichtBaseEntity * e = new IrrlichtBaseEntity(s); s->setPosition(vector3df(rand()%randLength - (randLength/2),0,rand()%randLength - (randLength/2))); obstacles.push_back(e); } //Nodes for vehicles ISceneNode * cube = smgr->addCubeSceneNode(4); ISceneNode * cube2 = smgr->addCubeSceneNode(4); cube->setMaterialFlag(EMF_LIGHTING,false); cube->setMaterialTexture(0,driver->getTexture(resPath("../../media/v1-solid.png"))); cube2->setMaterialFlag(EMF_LIGHTING,false); cube2->setMaterialTexture(0,driver->getTexture(resPath("../../media/v2-solid.png"))); //Creating the actual vehicles IrrlichtMobileEntity * Entity1 = new IrrlichtMobileEntity(cube ,vector3df(0,0,0), 1, 60, 150); IrrlichtMobileEntity * Entity2 = new IrrlichtMobileEntity(cube2,vector3df(0,0,300), 1, 60, 150); //Creating the steering conrollers, constructor also sets steering on entity SimpleSteeringController* Entity1Steering = new SimpleSteeringController(Entity1); SimpleSteeringController * Entity2Steering = new SimpleSteeringController(Entity2); //Setting up other params for behaviors Entity1Steering->SetObstacles(obstacles); Entity1Steering->SetHideTarget(Entity2); Entity1Steering->SetBehaviorFlag(EBF_HIDE,true); Entity1Steering->SetBehaviorFlag(EBF_AVOID,true); Entity2Steering->SetObstacles(obstacles); Entity2Steering->SetPursuitTarget(Entity1); Entity2Steering->SetBehaviorFlag(EBF_PURSUIT,true); Entity2Steering->SetBehaviorFlag(EBF_AVOID,true); //vars for tracking time between frames. This allows framerate independent motion state updates. u32 then = device->getTimer()->getTime(); float timeUpdate = 0; while(device->run()) { const u32 now = device->getTimer()->getTime(); const float frameDeltaTime = (float)(now - then) / 1000.f; // Time in seconds then = now; timeUpdate += frameDeltaTime; if(timeUpdate > 1) { core::stringw str = L"desteer v0.0.1 FPS: "; str += (s32)driver->getFPS(); device->setWindowCaption(str.c_str()); timeUpdate = 0; } //Do behavior updates before the rendering. Entity1->Update(frameDeltaTime); Entity2->Update(frameDeltaTime); driver->beginScene(true, true, SColor(255,100,101,140)); smgr->drawAll(); driver->endScene(); } //Clean up irrlicht. device->drop(); }