void clExplosion::AttachToScene( const clPtr<clSceneNode>& Scene ) { if ( !m_Node ) { m_Node = make_intrusive<clParticleSystemNode>(); const vec4 Pal[] = { vec4( 0.2f, 0.30f, 0.8f, 1.0f ), vec4( 0.7f, 0.25f, 0.3f, 1.0f ), vec4( 0.1f, 0.80f, 0.2f, 1.0f ) }; vec4 Color = Pal[ Math::RandomInRange( 0, 3 ) ]; auto Emitter = make_intrusive<clParticleEmitter_Explosion>(); Emitter->FCenter = vec3( 0.0f ); Emitter->FSizeMin = 0.02f; Emitter->FSizeMax = 0.05f; Emitter->FLifetimeMin = 0.1f; Emitter->FLifetimeMax = 1.0f; Emitter->FMaxParticles = 10000; Emitter->FEmissionRate = 300; Emitter->FRadialVelocityMin = 1.0f; Emitter->FRadialVelocityMax = 2.0f; Emitter->FColorMin = Color; Emitter->FColorMax = Color; Emitter->FAcceleration = 10.0f * m_ParticleAccel; //vec3( 0.0f, 0.0f, -3.0f ); m_Node->AddEmitter( Emitter ); } Scene->Add( m_Node ); }
void clSpaceShip::AttachToScene( const clPtr<clSceneNode>& Scene ) { if ( !m_Node ) { auto Geometry = LoadOBJSceneNode( g_FS->CreateReader( "ship.obj" ) ); sMaterial Material; Material.m_Ambient = vec4( 0.0f, 0.0f, 0.4f, 1.0f ); Material.m_Diffuse = vec4( 0.0f, 0.0f, 0.6f, 1.0f ); m_Node = make_intrusive<clMaterialNode>(); m_Node->SetMaterial( Material ); m_Node->Add( Geometry ); } Scene->Add( m_Node ); }
void clRocket::AttachToScene( const clPtr<clSceneNode>& Scene ) { if ( !m_Node ) { auto VA = clGeomServ::CreateAxisAlignedBox( vec3( -0.02f ), vec3( +0.02f ) ); auto Geometry = make_intrusive<clGeometryNode>(); Geometry->SetVertexAttribs( VA ); sMaterial Material; Material.m_Ambient = vec4( 0.8f, 0.0f, 0.0f, 1.0f ); Material.m_Diffuse = vec4( 0.2f, 0.0f, 0.0f, 1.0f ); m_Node = make_intrusive<clMaterialNode>(); m_Node->SetMaterial( Material ); m_Node->Add( Geometry ); } Scene->Add( m_Node ); Update( 0.0f ); }