SpaceShooter::SpaceShooter() { Renderer::Get().Initialize(); // Create the player's view. Quaternion viewRotation( Vector3::Right, Pi / 2.f ); mCamera = ViewPtr( new View( Vector3( 0.f, 60.f, 0.f ), viewRotation, 1.04719755f, 1920.0f / 1080.0f, 0.1f, 100.f, false ) ); Renderer::Get().SetCamera( mCamera ); // Create the background. MaterialPtr backgroundMaterial = MaterialPtr( new Material( L"Resources\\Shaders\\tangent.hlsl", L"Resources\\Textures\\starfield.dds" ) ); RawMeshPtr backgroundMesh = RawMeshPtr( new RawMesh() ); GenerateQuadVerticies( *backgroundMesh.get(), 90.f, 45.f ); MeshPrimitivePtr background = MeshPrimitivePtr( new MeshPrimitive( backgroundMesh, backgroundMaterial, GetTangentSpaceVertexSource() ) ); mBackground = GameObjectPtr( new GameObject( background ) ); Matrix4 backgroundOffset; backgroundOffset.CreateFromQuaternion( Quaternion( Vector3::Right, Pi / 2.f ) ); mBackground->SetOffset( backgroundOffset ); mBackground->SetTranslation( Vector3( 0.f, -10.f, 0.f ) ); mBackground->Attach(); // Load the player's ship. MaterialPtr playerShipMaterial = MaterialPtr( new Material( L"Resources\\Shaders\\tangent.hlsl", L"Resources\\Textures\\frigate.dds" ) ); RawMeshPtr shipMesh = RawMeshPtr( new RawMesh() ); LoadMeshFromObjFile( "Resources\\Meshes\\frigate_normal.obj", *shipMesh.get() ); CalculateTangents( *shipMesh.get() ); MeshPrimitivePtr player = MeshPrimitivePtr( new MeshPrimitive( shipMesh, playerShipMaterial, GetTangentSpaceVertexSource() ) ); mPlayerObject = PlayerShipPtr( new PlayerShip( player ) ); mPlayerObject->SetScale( 0.3f ); mPlayerObject->SetBounds( 6.5f ); Matrix4 playerOffset; playerOffset.CreateFromQuaternion( Quaternion( Vector3::Up, Pi / 2.f ) ); mPlayerObject->SetOffset( playerOffset ); mPlayerObject->SetFrictionFactor( 0.5f ); mPlayerObject->Attach(); // Load asteroids MaterialPtr asteroidMaterial = MaterialPtr( new Material( L"Resources\\Shaders\\tangent.hlsl", L"Resources\\Textures\\asteroid.dds" ) ); RawMeshPtr asteroidMesh = RawMeshPtr( new RawMesh() ); LoadMeshFromObjFile( "Resources\\Meshes\\asteroid1.obj", *asteroidMesh.get() ); CalculateTangents( *asteroidMesh.get() ); for ( int i = 0; i < 5; i++ ) { MeshPrimitivePtr asteroid = MeshPrimitivePtr( new MeshPrimitive( asteroidMesh, asteroidMaterial, GetTangentSpaceVertexSource() ) ); GameObjectPtr newAsteroid = GameObjectPtr( new Asteroid( asteroid ) ); newAsteroid->SetScale( 1.f ); newAsteroid->SetBounds( 4.f ); newAsteroid->SetTranslation( Vector3( RandomFloat( -40.f, 40.f ), 0.f, RandomFloat( -40.f, 40.f ) ) ); mAsteroids.push_back( newAsteroid ); newAsteroid->Attach(); } // Load the player's jet particles. playerJetParticles = ParticleSystemPtr( new ParticleSystem() ); ParticleSystemLoader loader; loader.LoadFromFile( "Resources\\ParticleSystems\\jet_fuel.part", playerJetParticles ); playerJetParticles->SetEmitterState( false ); // turn the particles off to start with Renderer::Get().AddTranslucentPrimitive( playerJetParticles ); }
ClientGame::ClientGame(RenderWindowPtr win, GameStateData gamestate_data, ClientPtr client) { this->client = client; this->window = win; physics = b2WorldPtr(new b2World(b2Vec2(0.0f, 0.0f), true)); game_bounds = gamestate_data.game_bounds; ship_cam = ShipCameraPtr(new ShipCamera()); free_cam = FreeCameraPtr(new FreeCamera(0, 0)); cam = ship_cam; asteroid_data.load("asteroids.dat"); asteroid_explosions.push_back("sounds/explosion1.wav"); asteroid_explosions.push_back("sounds/explosion2.wav"); asteroid_explosions.push_back("sounds/explosion3.wav"); musics.push_back("sounds/stitchesinthecorpse_mymountaininstrumentalversion.ogg"); musics.push_back("sounds/alone_to_die.ogg"); stars.resize(256); for(int i = 0; i < stars.size(); i++) stars[i].set(float(rand())/RAND_MAX * game_bounds.getWidth(), float(rand())/RAND_MAX * game_bounds.getHeight()); particle_system = ParticleSystemPtr(new ParticleSystem()); if(sf::PostFX::CanUsePostFX()) { if(glow_fx.LoadFromFile("glow.sfx")) { has_shaders = true; //glow_fx.SetTexture("framebuffer", NULL); } else { warning("failed to load glow.sfx\n"); has_shaders = false; } int w = window->GetWidth(); int h = window->GetHeight(); initFBO(&main_fb, &main_fb_texture, w, h); initFBO(&framebuffers[0], &framebuffer_textures[0], w, h); initFBO(&framebuffers[1], &framebuffer_textures[1], w, h); } else { has_shaders = false; } draw_names = false; draw_scores = false; draw_glow = true; }
void ParticleEffect::load(const ParticleEffectTypePtr& effectType) { if(!effectType) stdext::throw_exception("effect type not found"); for(const OTMLNodePtr& childNode : effectType->getNode()->children()) { if(childNode->tag() == "System") { ParticleSystemPtr system = ParticleSystemPtr(new ParticleSystem); system->load(childNode); m_systems.push_back(system); } } }
bool ParticleManager::load(const std::string& filename) { try { OTMLDocumentPtr doc = OTMLDocument::parse(filename); for(const OTMLNodePtr& node : doc->children()) { if(node->tag() == "ParticleSystem") { ParticleSystemPtr particleSystem = ParticleSystemPtr(new ParticleSystem); particleSystem->load(node); m_systems.push_back(particleSystem); } } return true; } catch(Exception& e) { logError("could not load particles: ", e.what()); return false; } }