Esempio n. 1
0
	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 );
	}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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);
        }
    }
}
Esempio n. 4
0
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;
    }
}