aboutsummaryrefslogtreecommitdiff
path: root/sons_of_sol/private_db/ApplicationInit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sons_of_sol/private_db/ApplicationInit.cpp')
-rw-r--r--sons_of_sol/private_db/ApplicationInit.cpp449
1 files changed, 235 insertions, 214 deletions
diff --git a/sons_of_sol/private_db/ApplicationInit.cpp b/sons_of_sol/private_db/ApplicationInit.cpp
index 7729d12..dccc99a 100644
--- a/sons_of_sol/private_db/ApplicationInit.cpp
+++ b/sons_of_sol/private_db/ApplicationInit.cpp
@@ -10,221 +10,242 @@ using namespace slox;
using namespace glox;
using namespace std;
-bool SonsOfSolApplication::initialize( int argc, char** argv ) {
- (void) argc;
- (void) argv;
- /* Use our texture factory to load textures */
- m_object_loader.setTextureFactory( &m_texture_factory );
- m_is_paused = false ;
-
- setupControls();
-
- SDL_Init( SDL_INIT_VIDEO );
- SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
- const SDL_VideoInfo* info = SDL_GetVideoInfo(); //<-- calls SDL_GetVideoInfo();
- m_screen_width = info->current_w;
- m_screen_height = info->current_h;
- m_screen = SDL_SetVideoMode( 600, 600, 0, SDL_OPENGL|SDL_RESIZABLE|SDL_DOUBLEBUF );
-
- m_perspective.setPosition( GloxPoint<>( 0, 0, 10 ) );
- m_perspective.setZFar ( FAR_DISTANCE_END );
- m_perspective.setZNear( FAR_DISTANCE_START );
- m_ship.setPerspective( m_perspective );
- m_ship.setPosition( GloxPointf( 0, 10, -3 ) );
-
-
- if( argv[1] == NULL || strcmp(argv[1],"nograb") ) {
- SDL_ShowCursor( 0 );
- SDL_WM_GrabInput(SDL_GRAB_ON);
- }
-
- if( glewInit() != GLEW_OK ) {
- cerr << "Unable to initialize GLEW" << endl ;
- exit( 122 ) ;
- }
-
- /* Add some listeners */
- this->addQuitListener( this );
- this->addKeyListener( this );
-
- this->addResizeListener( this );
-
- m_event_multiplexer.addControlMotionListener( & m_ship );
-
- if( ! m_screen ) {
- /* If the screen could not be initialized, print
+bool SonsOfSolApplication::initialize(int argc, char** argv) {
+ (void)argc;
+ (void)argv;
+ /* Use our texture factory to load textures */
+ m_object_loader.setTextureFactory(&m_texture_factory);
+ m_is_paused = false;
+
+ setupControls();
+
+ SDL_Init(SDL_INIT_VIDEO);
+ SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
+ const SDL_VideoInfo* info =
+ SDL_GetVideoInfo(); //<-- calls SDL_GetVideoInfo();
+ m_screen_width = info->current_w;
+ m_screen_height = info->current_h;
+ m_screen =
+ SDL_SetVideoMode(600, 600, 0, SDL_OPENGL | SDL_RESIZABLE | SDL_DOUBLEBUF);
+
+ m_perspective.setPosition(GloxPoint<>(0, 0, 10));
+ m_perspective.setZFar(FAR_DISTANCE_END);
+ m_perspective.setZNear(FAR_DISTANCE_START);
+ m_ship.setPerspective(m_perspective);
+ m_ship.setPosition(GloxPointf(0, 10, -3));
+
+ if (argv[1] == NULL || strcmp(argv[1], "nograb")) {
+ SDL_ShowCursor(0);
+ SDL_WM_GrabInput(SDL_GRAB_ON);
+ }
+
+ if (glewInit() != GLEW_OK) {
+ cerr << "Unable to initialize GLEW" << endl;
+ exit(122);
+ }
+
+ /* Add some listeners */
+ this->addQuitListener(this);
+ this->addKeyListener(this);
+
+ this->addResizeListener(this);
+
+ m_event_multiplexer.addControlMotionListener(&m_ship);
+
+ if (!m_screen) {
+ /* If the screen could not be initialized, print
* a useful video message */
- this->setError( "Cannot set SDL video mode\n" );
- return false;
- }
-
- SDL_WM_SetCaption( "Sons Of Sol", "" );
- reshape( m_screen->w, m_screen->h );
-
- /* Load the textures into memory */
- if( ! loadTextures() ) return false;
-
- GloxTextureRepeat texrep( &m_sky_tex, 1.8, 1.8 );
- m_sky = new GloxTexturedCube( FAR_DISTANCE_END - 100, GloxColor( 255, 255, 255 ),
- texrep, texrep, texrep, texrep, texrep, texrep );
-
- texrep = GloxTextureRepeat( &m_crate_tex, 1, 1 );
- m_crate = new GloxTexturedCube( 5.0f, GloxColor( 255, 255, 255 ),
- texrep, texrep, texrep, texrep, texrep, texrep );
-
- m_object_loader.addToPath( "objects" );
- m_object_loader.addToPath( "objects/material" );
- m_earth = new GloxTexturedSphere( FAR_DISTANCE_END / 4.0, 5.0f, m_earth_tex );
- m_moon = new GloxTexturedSphere( FAR_DISTANCE_END / 24.0, 5.0f, m_moon_tex );
- m_probe = m_object_loader.loadObjectFromFile( "probe.obj" );
-
- m_script_ttl = 130 ;
- if( ! m_probe ) {
- cerr << "Unable to load probe: " << m_object_loader.getReason() << endl;
- exit( 123 );
- }
-
- m_frigate_industrial = m_object_loader.loadObjectFromFile( "frigate_industrial.obj" );
- if( ! m_frigate_industrial ) {
- cerr << "Unable to load frigate_industrial\n" << m_object_loader.getReason() << endl;
- exit( 123 );
+ this->setError("Cannot set SDL video mode\n");
+ return false;
+ }
+
+ SDL_WM_SetCaption("Sons Of Sol", "");
+ reshape(m_screen->w, m_screen->h);
+
+ /* Load the textures into memory */
+ if (!loadTextures())
+ return false;
+
+ GloxTextureRepeat texrep(&m_sky_tex, 1.8, 1.8);
+ m_sky = new GloxTexturedCube(FAR_DISTANCE_END - 100, GloxColor(255, 255, 255),
+ texrep, texrep, texrep, texrep, texrep, texrep);
+
+ texrep = GloxTextureRepeat(&m_crate_tex, 1, 1);
+ m_crate = new GloxTexturedCube(5.0f, GloxColor(255, 255, 255), texrep, texrep,
+ texrep, texrep, texrep, texrep);
+
+ m_object_loader.addToPath("objects");
+ m_object_loader.addToPath("objects/material");
+ m_earth = new GloxTexturedSphere(FAR_DISTANCE_END / 4.0, 5.0f, m_earth_tex);
+ m_moon = new GloxTexturedSphere(FAR_DISTANCE_END / 24.0, 5.0f, m_moon_tex);
+ m_probe = m_object_loader.loadObjectFromFile("probe.obj");
+
+ m_script_ttl = 130;
+ if (!m_probe) {
+ cerr << "Unable to load probe: " << m_object_loader.getReason() << endl;
+ exit(123);
+ }
+
+ m_frigate_industrial =
+ m_object_loader.loadObjectFromFile("frigate_industrial.obj");
+ if (!m_frigate_industrial) {
+ cerr << "Unable to load frigate_industrial\n"
+ << m_object_loader.getReason() << endl;
+ exit(123);
+ }
+
+ m_other_ship = m_object_loader.loadObjectFromFile("ship.obj");
+ SloxModelObject* ship_med =
+ m_object_loader.loadObjectFromFile("ship_med.obj");
+ SloxModelObject* ship_low =
+ m_object_loader.loadObjectFromFile("ship_low.obj");
+ if (!(m_other_ship && ship_med && ship_low)) {
+ cerr << "Unable to load other ship\n"
+ << m_object_loader.getReason() << endl;
+ exit(123);
+ }
+
+ m_test_cube = m_object_loader.loadObjectFromFile("cube.obj");
+ if (!m_test_cube) {
+ cerr << "Unable to load test cube\n" << m_object_loader.getReason() << endl;
+ exit(123);
+ }
+
+ m_deathstar = m_object_loader.loadObjectFromFile("deathstar.obj");
+ if (!m_deathstar) {
+ cerr << "Unable to load deathstar\n" << m_object_loader.getReason() << endl;
+ exit(123);
+ }
+
+ m_acceleration_cannon =
+ m_object_loader.loadObjectFromFile("acceleration_cannon.obj");
+ if (!m_acceleration_cannon) {
+ cerr << "Unable to load acceleration cannon\n"
+ << m_object_loader.getReason() << endl;
+ exit(123);
+ }
+
+ AIShip::setModel(m_other_ship, ship_med, ship_low);
+
+ float xstart = 0.5 * (-FAR_DISTANCE_END / 5.0f);
+ float xend = 0.5 * (-xstart);
+ float ystart = 0.3 * (FAR_DISTANCE_END / 3.0f - FAR_DISTANCE_END / 2);
+ float yend = 0.3 * (ystart + 2 * (FAR_DISTANCE_END / 5.0f));
+ /* Add the points for the sun */
+ m_star.add(GloxPointNormalTexture(
+ GloxPoint<>(xstart, ystart, -(FAR_DISTANCE_END) / 3),
+ GloxNormal<>(0, 0, 0), GloxPoint<>(0, 0)));
+ m_star.add(
+ GloxPointNormalTexture(GloxPoint<>(xend, ystart, -(FAR_DISTANCE_END) / 3),
+ GloxNormal<>(0, 0, 0), GloxPoint<>(1, 0)));
+ m_star.add(
+ GloxPointNormalTexture(GloxPoint<>(xend, yend, -(FAR_DISTANCE_END) / 3),
+ GloxNormal<>(0, 0, 0), GloxPoint<>(1, 1)));
+ m_star.add(
+ GloxPointNormalTexture(GloxPoint<>(xstart, yend, -(FAR_DISTANCE_END) / 3),
+ GloxNormal<>(0, 0, 0), GloxPoint<>(0, 1)));
+
+ /* Move the light souce to the sun */
+ GloxLightSource* source = m_light_manager.getLightSource(0);
+ source->setPosition(GloxPointf(0, 200, -695));
+
+ m_quit = false;
+
+ /* Starting ships */
+ for (int i = 0; i < 5; ++i) {
+ AIShip::Updater* updater =
+ new EllipseUpdater(GloxPointf(0, -10, 0), GloxPointf(0, 10, 10),
+ GloxPointf(10, i * 5, 0), 0.01);
+ m_updaters.push_back(updater);
+ AIShip tmp(updater);
+ tmp.setTimeOffset(1000 * i);
+ m_aiships.push_back(tmp);
+ }
+
+ /* Frigate ships */
+ for (int j = 0; j < 360; j += 72) {
+ for (int i = 0; i < 10; ++i) {
+ float pos = 10000 + 100 * i;
+ GloxPointf center(pos, pos, pos);
+ float cos = GloxCos(j);
+ float sin = GloxSin(j);
+ AIShip::Updater* updater =
+ new EllipseUpdater(center, GloxPointf(60 * cos, -100 * sin, 2),
+ GloxPointf(50 * cos, 10 * sin, 50) * 2, 0.002);
+ m_updaters.push_back(updater);
+ AIShip tmp(updater);
+ tmp.setTimeOffset(100000 * i);
+ m_aiships.push_back(tmp);
}
-
- m_other_ship = m_object_loader.loadObjectFromFile( "ship.obj" );
- SloxModelObject* ship_med = m_object_loader.loadObjectFromFile( "ship_med.obj" ) ;
- SloxModelObject* ship_low = m_object_loader.loadObjectFromFile( "ship_low.obj" ) ;
- if( ! (m_other_ship && ship_med && ship_low) ) {
- cerr << "Unable to load other ship\n" << m_object_loader.getReason() << endl;
- exit( 123 );
- }
-
- m_test_cube = m_object_loader.loadObjectFromFile( "cube.obj" );
- if( ! m_test_cube ) {
- cerr << "Unable to load test cube\n" << m_object_loader.getReason() << endl;
- exit( 123 );
+ }
+
+ /* Deathstar ships */
+ for (int j = 0; j < 360; j += 72) {
+ for (int i = 0; i < 10; ++i) {
+ float pos = 100 * i;
+ GloxPointf center(5000 + pos, -1000 + pos, -20000 + pos);
+ float cos = GloxCos(j);
+ float sin = GloxSin(j);
+ AIShip::Updater* updater =
+ new EllipseUpdater(center, GloxPointf(60 * cos, -70 * sin, 2),
+ GloxPointf(50 * cos, 10 * sin, 40) * 2, 0.002);
+ m_updaters.push_back(updater);
+ AIShip tmp(updater);
+ tmp.setTimeOffset(10000 * i);
+ m_aiships.push_back(tmp);
}
-
- m_deathstar = m_object_loader.loadObjectFromFile( "deathstar.obj" ) ;
- if( ! m_deathstar ) {
- cerr << "Unable to load deathstar\n" << m_object_loader.getReason() << endl;
- exit( 123 );
- }
-
- m_acceleration_cannon = m_object_loader.loadObjectFromFile( "acceleration_cannon.obj" ) ;
- if( ! m_acceleration_cannon ) {
- cerr << "Unable to load acceleration cannon\n" << m_object_loader.getReason() << endl;
- exit( 123 );
- }
-
- AIShip::setModel( m_other_ship, ship_med, ship_low ) ;
-
- float xstart = 0.5*(- FAR_DISTANCE_END / 5.0f);
- float xend = 0.5*(- xstart);
- float ystart = 0.3*(FAR_DISTANCE_END / 3.0f - FAR_DISTANCE_END / 2);
- float yend = 0.3*(ystart + 2*(FAR_DISTANCE_END / 5.0f));
- /* Add the points for the sun */
- m_star.add( GloxPointNormalTexture(
- GloxPoint<>( xstart, ystart, -(FAR_DISTANCE_END) / 3 ), GloxNormal<>(0,0,0), GloxPoint<>( 0,0 ) ) );
- m_star.add( GloxPointNormalTexture(
- GloxPoint<>( xend, ystart, -(FAR_DISTANCE_END) / 3 ), GloxNormal<>(0,0,0), GloxPoint<>( 1,0 ) ) );
- m_star.add( GloxPointNormalTexture(
- GloxPoint<>( xend, yend, -(FAR_DISTANCE_END) / 3 ), GloxNormal<>(0,0,0), GloxPoint<>( 1,1 ) ) );
- m_star.add( GloxPointNormalTexture(
- GloxPoint<>( xstart, yend, -(FAR_DISTANCE_END) / 3 ), GloxNormal<>(0,0,0), GloxPoint<>( 0,1 ) ) );
-
- /* Move the light souce to the sun */
- GloxLightSource* source = m_light_manager.getLightSource( 0 );
- source->setPosition( GloxPointf( 0, 200, -695 ) );
-
- m_quit = false;
-
- /* Starting ships */
- for( int i = 0; i < 5; ++ i ) {
- AIShip::Updater* updater = new EllipseUpdater( GloxPointf(0,-10,0), GloxPointf(0,10,10), GloxPointf(10,i*5,0), 0.01 );
- m_updaters.push_back( updater );
- AIShip tmp( updater );
- tmp.setTimeOffset( 1000 * i ) ;
- m_aiships.push_back( tmp ) ;
- }
-
- /* Frigate ships */
- for ( int j = 0; j < 360; j += 72 ) {
- for( int i = 0; i < 10; ++ i ) {
- float pos = 10000 + 100 * i;
- GloxPointf center( pos, pos, pos );
- float cos = GloxCos(j) ;
- float sin = GloxSin(j) ;
- AIShip::Updater* updater =
- new EllipseUpdater( center, GloxPointf(60*cos,-100*sin,2) , GloxPointf(50*cos,10*sin,50) * 2, 0.002 );
- m_updaters.push_back( updater );
- AIShip tmp( updater );
- tmp.setTimeOffset( 100000 * i ) ;
- m_aiships.push_back( tmp ) ;
- }
- }
-
- /* Deathstar ships */
- for ( int j = 0; j < 360; j += 72 ) {
- for( int i = 0; i < 10; ++ i ) {
- float pos = 100 * i;
- GloxPointf center( 5000 + pos, -1000+pos, -20000+pos );
- float cos = GloxCos(j) ;
- float sin = GloxSin(j) ;
- AIShip::Updater* updater =
- new EllipseUpdater( center, GloxPointf(60*cos,-70*sin,2) , GloxPointf(50*cos,10*sin,40) * 2, 0.002 );
- m_updaters.push_back( updater );
- AIShip tmp( updater );
- tmp.setTimeOffset( 10000 * i ) ;
- m_aiships.push_back( tmp ) ;
- }
- }
-
- m_earth_prog = new GloxProgram() ;
-
-
- printf( "Using GLSL version %s\n", glGetString( GL_SHADING_LANGUAGE_VERSION ) );
-
- const char* earth_frag_shader = "shaders/earth.fp";
- float version = atof( (const char*) glGetString( GL_SHADING_LANGUAGE_VERSION ) );
- if( version < 1.29 ) {
- fprintf( stderr, "Using version %02f, unfortunately, I must use the fallback shader\n", version );
- earth_frag_shader = "shaders/earth_fallback.fp";
- }
-
- if( m_earth_prog->attachShaderFromFile( "shaders/earth.vp", GL_VERTEX_SHADER ) ||
- m_earth_prog->attachShaderFromFile( earth_frag_shader, GL_FRAGMENT_SHADER ) ||
- m_earth_prog->link() ) {
- cerr << "Warning Unable to load shaders: " <<
- GloxShader::getMessage() << endl;
- }
- m_earth_shader_light_pos = m_earth_prog->getUniformLocation( "lightPos" );
- m_earth_shader_camera_pos = m_earth_prog->getUniformLocation( "cameraPos" );
- m_earth_shader_time = m_earth_prog->getUniformLocation( "time" ) ;
-
- // cout << "Earth light " << m_earth_shader_light_pos << endl;
- // cout << "Earth camera " << m_earth_shader_camera_pos << endl;
-
- m_moon_prog = new GloxProgram() ;
- if( m_moon_prog->attachShaderFromFile( "shaders/moon.vp", GL_VERTEX_SHADER ) ||
- m_moon_prog->attachShaderFromFile( "shaders/moon.fp", GL_FRAGMENT_SHADER ) ||
- m_moon_prog->link() ) {
- cerr << "Warning Unable to load shaders: " <<
- GloxShader::getMessage() << endl;
- }
- m_moon_shader_light_pos = m_moon_prog->getUniformLocation( "lightPos" );
- m_moon_shader_camera_pos = m_moon_prog->getUniformLocation( "cameraPos" );
-
-
- // start the starting light
- GloxLightSource* start = m_light_manager.getLightSource( 0 );
- start->setLightModelAttribute( GL_LIGHT_MODEL_AMBIENT, GloxColor(50,50,50) );
- start->setAmbient ( GloxColor(30,30,30) );
- start->setDiffuse ( GloxColor(255,0,0) );
- start->setPosition( GloxPoint<>( 0,0,0 ) );
-
- start->setEnabled( false );
-
- glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.5);
-
- return true;
+ }
+
+ m_earth_prog = new GloxProgram();
+
+ printf("Using GLSL version %s\n", glGetString(GL_SHADING_LANGUAGE_VERSION));
+
+ const char* earth_frag_shader = "shaders/earth.fp";
+ float version = atof((const char*)glGetString(GL_SHADING_LANGUAGE_VERSION));
+ if (version < 1.29) {
+ fprintf(
+ stderr,
+ "Using version %02f, unfortunately, I must use the fallback shader\n",
+ version);
+ earth_frag_shader = "shaders/earth_fallback.fp";
+ }
+
+ if (m_earth_prog->attachShaderFromFile("shaders/earth.vp",
+ GL_VERTEX_SHADER) ||
+ m_earth_prog->attachShaderFromFile(earth_frag_shader,
+ GL_FRAGMENT_SHADER) ||
+ m_earth_prog->link()) {
+ cerr << "Warning Unable to load shaders: " << GloxShader::getMessage()
+ << endl;
+ }
+ m_earth_shader_light_pos = m_earth_prog->getUniformLocation("lightPos");
+ m_earth_shader_camera_pos = m_earth_prog->getUniformLocation("cameraPos");
+ m_earth_shader_time = m_earth_prog->getUniformLocation("time");
+
+ // cout << "Earth light " << m_earth_shader_light_pos << endl;
+ // cout << "Earth camera " << m_earth_shader_camera_pos << endl;
+
+ m_moon_prog = new GloxProgram();
+ if (m_moon_prog->attachShaderFromFile("shaders/moon.vp", GL_VERTEX_SHADER) ||
+ m_moon_prog->attachShaderFromFile("shaders/moon.fp",
+ GL_FRAGMENT_SHADER) ||
+ m_moon_prog->link()) {
+ cerr << "Warning Unable to load shaders: " << GloxShader::getMessage()
+ << endl;
+ }
+ m_moon_shader_light_pos = m_moon_prog->getUniformLocation("lightPos");
+ m_moon_shader_camera_pos = m_moon_prog->getUniformLocation("cameraPos");
+
+ // start the starting light
+ GloxLightSource* start = m_light_manager.getLightSource(0);
+ start->setLightModelAttribute(GL_LIGHT_MODEL_AMBIENT, GloxColor(50, 50, 50));
+ start->setAmbient(GloxColor(30, 30, 30));
+ start->setDiffuse(GloxColor(255, 0, 0));
+ start->setPosition(GloxPoint<>(0, 0, 0));
+
+ start->setEnabled(false);
+
+ glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.5);
+
+ return true;
}