diff options
Diffstat (limited to 'sons_of_sol/private_db/ApplicationDisplay.cpp')
| -rw-r--r-- | sons_of_sol/private_db/ApplicationDisplay.cpp | 246 |
1 files changed, 114 insertions, 132 deletions
diff --git a/sons_of_sol/private_db/ApplicationDisplay.cpp b/sons_of_sol/private_db/ApplicationDisplay.cpp index c9e773e..bf94b33 100644 --- a/sons_of_sol/private_db/ApplicationDisplay.cpp +++ b/sons_of_sol/private_db/ApplicationDisplay.cpp @@ -11,146 +11,128 @@ using namespace slox; using namespace std; float randJitter() { - return ((rand() & 0xFF) - 128.0) / (256.0 * 10) ; + return ((rand() & 0xFF) - 128.0) / (256.0 * 10); } void SonsOfSolApplication::display() { - if ( m_script_ttl >= 0 ) { - GloxLightSource* golight = m_light_manager.getLightSource( 0 ); - golight->setPosition( m_ship.getPosition() ); - - if( m_script_ttl > 90 ) { - m_ship.setPosition( m_ship.getPosition() - GloxPointf( randJitter(),0.25,randJitter() ) ); - } else if( m_script_ttl > 80 ) { - float coef = 11 - (m_script_ttl - 80); - m_ship.setPosition( GloxPointf( randJitter()/coef,randJitter()/coef,randJitter()/coef-3 ) ); - } else if( m_script_ttl == 80 ) { - m_ship.setPosition( GloxPointf( 0,0,-3 ) ); - } - - golight->setEnabled( true ); - if ( m_script_ttl == 70 ) { - m_ship.setDForwardTo( 30 ); - golight->setLightModelAttribute( GL_LIGHT_MODEL_AMBIENT, GloxColor(50,50,50) ); - golight->setAmbient ( GloxColor(50,50,50) ); - golight->setDiffuse ( GloxColor(0,255,0) ); - } - if ( m_script_ttl == 0 ) { - this->addKeyListener( & m_event_multiplexer ); - this->addMouseMotionListener( & m_event_multiplexer ); - m_ship.setDForwardTo( 20 ) ; - enableLighting(); - } - // cout << m_script_ttl << endl ; - m_script_ttl -= 1 ; + if (m_script_ttl >= 0) { + GloxLightSource* golight = m_light_manager.getLightSource(0); + golight->setPosition(m_ship.getPosition()); + + if (m_script_ttl > 90) { + m_ship.setPosition(m_ship.getPosition() - + GloxPointf(randJitter(), 0.25, randJitter())); + } else if (m_script_ttl > 80) { + float coef = 11 - (m_script_ttl - 80); + m_ship.setPosition(GloxPointf(randJitter() / coef, randJitter() / coef, + randJitter() / coef - 3)); + } else if (m_script_ttl == 80) { + m_ship.setPosition(GloxPointf(0, 0, -3)); } - /* Translate to the this perspective */ - m_ship.drawHUD(); + golight->setEnabled(true); + if (m_script_ttl == 70) { + m_ship.setDForwardTo(30); + golight->setLightModelAttribute(GL_LIGHT_MODEL_AMBIENT, + GloxColor(50, 50, 50)); + golight->setAmbient(GloxColor(50, 50, 50)); + golight->setDiffuse(GloxColor(0, 255, 0)); + } + if (m_script_ttl == 0) { + this->addKeyListener(&m_event_multiplexer); + this->addMouseMotionListener(&m_event_multiplexer); + m_ship.setDForwardTo(20); + enableLighting(); + } + // cout << m_script_ttl << endl ; + m_script_ttl -= 1; + } - m_ship.getPerspective().setZNear( FAR_DISTANCE_START ); - m_ship.getPerspective().setZFar( FAR_DISTANCE_END ); - m_ship.getPerspective().render(); + /* Translate to the this perspective */ + m_ship.drawHUD(); - /* We don't want lighting for the skybox */ - GloxDisableFor( GL_LIGHTING, - /* Draw some stuff relative to the + m_ship.getPerspective().setZNear(FAR_DISTANCE_START); + m_ship.getPerspective().setZFar(FAR_DISTANCE_END); + m_ship.getPerspective().render(); + + /* We don't want lighting for the skybox */ + GloxDisableFor( + GL_LIGHTING, + /* Draw some stuff relative to the * ship so the ship cannot break out * of the skybox */ - GloxWithTranslation( m_ship.getPosition(), - /* Draw the background sky */ - m_sky->draw(); - /* Draw the star texture */ - GloxEnableFor( GL_TEXTURE_2D, - m_star_tex.bind(); - GloxWith( GL_QUADS, m_star.plot() ); - ); - ) - - - - /* Draw the earth with its + GloxWithTranslation(m_ship.getPosition(), + /* Draw the background sky */ + m_sky->draw(); + /* Draw the star texture */ + GloxEnableFor(GL_TEXTURE_2D, m_star_tex.bind(); + GloxWith(GL_QUADS, m_star.plot()););) + + /* Draw the earth with its * shaders */ - m_earth_prog->render() ; - m_earth_prog->setUniformVector3( m_earth_shader_light_pos, - m_light_manager.getLightSource(0)->getPosition() ) ; - m_earth_prog->setUniformFloat( m_earth_shader_time, SDL_GetTicks() / 300000.0 ) ; - - //GloxPoint<> pos( GloxCos( ticks ) * FAR_DISTANCE_END/4.0, 0, GloxSin( ticks ) * FAR_DISTANCE_END/4.0 ); - GloxPoint<> pos( -250000, 0, 0 ); - m_earth_prog->setUniformVector3( m_earth_shader_camera_pos, - pos ); - // cout << "Pos : " << pos.toString() << " " << (pos.getZ() / pos.getX()) << endl; - // cout << "Ship Position: " << m_ship.getPosition().toString() << (m_ship.getPosition().getZ() / m_ship.getPosition().getX()) << endl ; - GloxWithTranslation( m_ship.getPosition() + GloxPoint<>( 700,-FAR_DISTANCE_END / 2,0 ), - GloxRotation( -90, 0, 0, 1 ).render(); - GloxEnableFor( GL_BLEND, - m_earth->draw(); - ) - ) - - /* Draw the moon with its shaders */ - m_moon_prog->render() ; - m_moon_prog->setUniformVector3( m_moon_shader_light_pos, - m_light_manager.getLightSource( 0 )->getPosition() ) ; - - m_moon_prog->setUniformVector3( m_moon_shader_camera_pos, - m_ship.getPosition() ) ; - - GloxWithTranslation( m_ship.getPosition() + GloxPoint<>( 700,FAR_DISTANCE_END / 3.0f, 0 ), - GloxRotation( -90, 0, 0, 1 ).render(); - m_moon->draw() - ) - - GloxProgram::unloadPrograms() ; - ); - - - - m_light_manager.getLightSource( 1 )->setEnabled( true ); - m_light_manager.render(); - - GloxScale( 6, - m_acceleration_cannon->draw() ) ; - - for( vector<AIShip>::iterator itr = m_aiships.begin() ; itr != m_aiships.end() ; ++ itr ) { - // cout << itr->getPosition().toString() << endl ; - itr->draw( (itr->getPosition() - m_ship.getPosition()).getMagnitude() ); - } - - glPushMatrix(); - - // m_crate->draw(); - GloxWithTranslation( GloxPoint<>( 0,10,0 ), - m_probe->draw() ); - GloxWithTranslation( GloxPoint<>( 0,-10,0 ), - m_test_cube->draw() ); - - GloxWithTranslation( GloxPoint<>( 10000,10000,10000 ), - GloxScale( 1000, - glPushMatrix(); - glRotatef( 90, 1.2, 1.3, 1.4 ); - m_frigate_industrial->draw(); - glPopMatrix(); - ); - ); - - GloxWithTranslation( GloxPoint<>( 5000,-1000,-20000 ), - GloxScale( 100, - glPushMatrix(); - glRotatef( 90, 0.3, 1, 0 ); - m_deathstar->draw(); - glPopMatrix(); - ); - ); - - GloxDisableFor( GL_LIGHTING, - GloxEnableFor(GL_BLEND, - glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - m_ship.drawProjectiles(); - ) - ) - - - glPopMatrix(); + m_earth_prog->render(); + m_earth_prog->setUniformVector3( + m_earth_shader_light_pos, + m_light_manager.getLightSource(0)->getPosition()); + m_earth_prog->setUniformFloat(m_earth_shader_time, + SDL_GetTicks() / 300000.0); + + //GloxPoint<> pos( GloxCos( ticks ) * FAR_DISTANCE_END/4.0, 0, GloxSin( ticks ) * FAR_DISTANCE_END/4.0 ); + GloxPoint<> pos(-250000, 0, 0); + m_earth_prog->setUniformVector3(m_earth_shader_camera_pos, pos); + // cout << "Pos : " << pos.toString() << " " << (pos.getZ() / pos.getX()) << endl; + // cout << "Ship Position: " << m_ship.getPosition().toString() << (m_ship.getPosition().getZ() / m_ship.getPosition().getX()) << endl ; + GloxWithTranslation( + m_ship.getPosition() + GloxPoint<>(700, -FAR_DISTANCE_END / 2, 0), + GloxRotation(-90, 0, 0, 1).render(); + GloxEnableFor(GL_BLEND, m_earth->draw();)) + + /* Draw the moon with its shaders */ + m_moon_prog->render(); + m_moon_prog->setUniformVector3( + m_moon_shader_light_pos, + m_light_manager.getLightSource(0)->getPosition()); + + m_moon_prog->setUniformVector3(m_moon_shader_camera_pos, + m_ship.getPosition()); + + GloxWithTranslation( + m_ship.getPosition() + GloxPoint<>(700, FAR_DISTANCE_END / 3.0f, 0), + GloxRotation(-90, 0, 0, 1).render(); + m_moon->draw()) + + GloxProgram::unloadPrograms();); + + m_light_manager.getLightSource(1)->setEnabled(true); + m_light_manager.render(); + + GloxScale(6, m_acceleration_cannon->draw()); + + for (vector<AIShip>::iterator itr = m_aiships.begin(); itr != m_aiships.end(); + ++itr) { + // cout << itr->getPosition().toString() << endl ; + itr->draw((itr->getPosition() - m_ship.getPosition()).getMagnitude()); + } + + glPushMatrix(); + + // m_crate->draw(); + GloxWithTranslation(GloxPoint<>(0, 10, 0), m_probe->draw()); + GloxWithTranslation(GloxPoint<>(0, -10, 0), m_test_cube->draw()); + + GloxWithTranslation( + GloxPoint<>(10000, 10000, 10000), + GloxScale(1000, glPushMatrix(); glRotatef(90, 1.2, 1.3, 1.4); + m_frigate_industrial->draw(); glPopMatrix(););); + + GloxWithTranslation(GloxPoint<>(5000, -1000, -20000), + GloxScale(100, glPushMatrix(); glRotatef(90, 0.3, 1, 0); + m_deathstar->draw(); glPopMatrix(););); + + GloxDisableFor( + GL_LIGHTING, + GloxEnableFor(GL_BLEND, glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + m_ship.drawProjectiles();)) + + glPopMatrix(); } |