Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/orxonox/trunk/src/orxonox.cc @ 3513

Last change on this file since 3513 was 3449, checked in by bensch, 20 years ago

orxonox/trunk: documented orxonox.cc/h world.cc/h vector.cc/h

File size: 7.6 KB
RevLine 
[1850]1/*
2   orxonox - the future of 3D-vertical-scrollers
3
4   Copyright (C) 2004 orx
5
6   This program is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 2, or (at your option)
9   any later version.
10
11   This program is distributed in the hope that it will be useful,
12   but WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   GNU General Public License for more details.
15
16   You should have received a copy of the GNU General Public License
17   along with this program; if not, write to the Free Software Foundation,
18   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
19
[1855]20
21   ### File Specific:
22   main-programmer: Patrick Boenzli
[2190]23   co-programmer: Christian Meyer
[1850]24*/
25
[2190]26#include "orxonox.h"
[2036]27#include "world.h"
[2190]28#include "camera.h"
[2036]29#include "data_tank.h"
[2190]30#include "command_node.h"
[2636]31#include "game_loader.h"
[2190]32#include <string.h>
[3398]33int verbose;
[2036]34
[1803]35using namespace std;
36
[2190]37/**
[2636]38   \brief create a new Orxonox
[2190]39*/
40Orxonox::Orxonox ()
[1872]41{
42  pause = false;
43}
[1803]44
[2190]45/**
[2636]46   \brief remove Orxonox from memory
[2190]47*/
[1875]48Orxonox::~Orxonox () 
[2190]49{
[3226]50  Orxonox::singletonRef = NULL;
[2636]51  if( world != NULL) delete world;
52  if( localinput != NULL) delete world;
53  if( localcamera != NULL) delete localcamera;
54  if( resources != NULL) delete resources;
[2190]55}
[1850]56
57
[3449]58/** \brief this is a singleton class to prevent duplicates */
[3226]59Orxonox* Orxonox::singletonRef = 0;
[1872]60
[3449]61/**
62   \returns reference or new Object of Orxonox if not existent.
63*/
[1850]64Orxonox* Orxonox::getInstance (void)
[1803]65{
[3226]66  if (singletonRef == NULL)
67    singletonRef = new Orxonox();
68  return singletonRef;
[1850]69}
70
[2190]71/**
[2636]72   \brief this finds the config file
73   
74   Since the config file varies from user to user and since one may want to specify different config files
75   for certain occasions or platforms this function finds the right config file for every occasion and stores
76   it's path and name into configfilename
[2190]77*/
[3226]78void Orxonox::getConfigFile (int argc, char** argv)
[1850]79{
[2636]80  strcpy (configfilename, "orxonox.conf");
[1803]81}
82
[2190]83/**
[2636]84   \brief initialize Orxonox with command line
[2190]85*/
86int Orxonox::init (int argc, char** argv)
[1803]87{
[2636]88  // parse command line
89  // config file
90 
[3226]91  getConfigFile (argc, argv);
[3174]92  SDL_Init (SDL_INIT_TIMER);
[2636]93  // initialize everything
[3226]94  if( initVideo() == -1) return -1;
95  if( initSound() == -1) return -1;
[2190]96  printf("> Initializing input\n");
[3226]97  if( initInput() == -1) return -1;
[2190]98  printf("> Initializing networking\n");
[3226]99  if( initNetworking () == -1) return -1;
[2190]100  printf("> Initializing resources\n");
[3226]101  if( initResources () == -1) return -1;
[2636]102  //printf("> Initializing world\n");
103  //if( init_world () == -1) return -1; PB: world will be initialized when started
104 
105  return 0;
[1850]106}
[1849]107
[2190]108/**
[2636]109   \brief initializes SDL and OpenGL
[2190]110*/
[3226]111int Orxonox::initVideo() 
[2190]112{
[3174]113  printf("> Initializing video\n");
[3226]114  if (SDL_Init(SDL_INIT_VIDEO) == -1)
[3174]115    {
116      printf ("could not initialize SDL Video\n");
117      return -1;
118    }
[2190]119  // Set video mode
120  // TO DO: parse arguments for settings
[3365]121  //SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
122  //SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5);
123  //SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
124  //SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
[2190]125 
[3365]126
127  SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );   
128  SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16);   
129  SDL_GL_SetAttribute( SDL_GL_STENCIL_SIZE, 0); 
130  SDL_GL_SetAttribute( SDL_GL_ACCUM_RED_SIZE, 0);
131  SDL_GL_SetAttribute( SDL_GL_ACCUM_GREEN_SIZE, 0);
132  SDL_GL_SetAttribute( SDL_GL_ACCUM_BLUE_SIZE, 0);
133  SDL_GL_SetAttribute( SDL_GL_ACCUM_ALPHA_SIZE, 0);
134
135
136
[2190]137  int bpp = 16;
138  int width = 640;
139  int height = 480;
[3365]140  //Uint32 flags = SDL_HWSURFACE | SDL_OPENGL | SDL_GL_DOUBLEBUFFER; /* \todo: SDL_OPENGL doen't permit to load images*/
141  //Uint32 flags = SDL_HWSURFACE | SDL_GL_DOUBLEBUFFER;
142
143  Uint32 videoFlags = SDL_OPENGL | SDL_HWPALETTE | SDL_RESIZABLE;
144
145  /* query SDL for information about our video hardware */
146  const SDL_VideoInfo* videoInfo = SDL_GetVideoInfo ();
[2190]147 
[3365]148  if( videoInfo == NULL)
149    {
150      printf ("Orxonox::initVideo() - Failed getting Video Info :%s\n", SDL_GetError()); 
151      SDL_Quit ();
152    }
153  if( videoInfo->hw_available)
154    videoFlags |= SDL_HWSURFACE;
155  else 
156    videoFlags |= SDL_SWSURFACE;
157  /*
158  if(VideoInfo -> blit_hw)                           
159    VideoFlags |= SDL_HWACCEL;
160  */
161 
162  if((this->screen = SDL_SetVideoMode (width, height, bpp, videoFlags)) == NULL)
[2190]163  {
[3365]164    printf("Could not SDL_SetVideoMode(%d, %d, %d, %d): %s\n", width, height, bpp, videoFlags, SDL_GetError());
[2190]165    SDL_Quit();
166    return -1;
167  }
168 
169  // Set window labeling
[3365]170  SDL_WM_SetCaption ("Orxonox " PACKAGE_VERSION, "Orxonox " PACKAGE_VERSION);
[2190]171 
172  // TO DO: Create a cool icon and use it here
173  // SDL_WM_SetIcon(SDL_Surface *icon, Uint8 *mask); 
[1850]174
[2190]175  // OpenGL stuff
[3365]176  glClearColor (0.0, 0.0, 0.0, 0.0);
177  glEnable (GL_DEPTH_TEST);
[2817]178   
[2190]179  return 0;
180}
[1850]181
[3214]182
[2190]183/**
[2636]184   \brief initializes the sound engine
[2190]185*/
[3226]186int Orxonox::initSound() 
[2190]187{
[3174]188  printf("> Initializing sound\n");
[3226]189  // SDL_Init(SDL_INIT_AUDIO);
[2636]190  printf("Not yet implemented\n");
191  return 0;
[2190]192}
[1900]193
[3214]194
[2190]195/**
[2636]196   \brief initializes input functions
[2190]197*/
[3226]198int Orxonox::initInput() 
[2190]199{
[2636]200  // create localinput
201  localinput = new CommandNode( configfilename);
202 
203  return 0;
[1803]204}
205
[3214]206
[2190]207/**
[2636]208   \brief initializes network system
[2190]209*/
[3226]210int Orxonox::initNetworking() 
[1897]211{
[2636]212  printf("Not yet implemented\n");
213  return 0;
[1897]214}
215
[3214]216
[2190]217/**
[2636]218   \brief initializes and loads resource files
[2190]219*/
[3226]220int Orxonox::initResources() 
[1858]221{
[2636]222  printf("Not yet implemented\n");
223  return 0;
[1858]224}
[1849]225
[3214]226
[2190]227/**
[2636]228   \brief initializes the world
[2190]229*/
[3226]230int Orxonox::initWorld() 
[1896]231{
[2636]232  //world = new World();
233 
234  // TO DO: replace this with a menu/intro
235  //world->load_debug_level();
236 
237  return 0;
[1896]238}
239
[2636]240
[2190]241/**
[2636]242   \brief starts the orxonox game or menu
243
244   here is the central orxonox state manager. There are currently two states
245   - menu
246   - game-play
247   both states manage their states themselfs again.
[2190]248*/
[2636]249void Orxonox::start()
250{
251 
252  this->gameLoader = GameLoader::getInstance();
253  this->gameLoader->loadDebugCampaign(DEBUG_CAMPAIGN_0);
254  this->gameLoader->init();
255  this->gameLoader->start();
256}
257
[3214]258
[2636]259/**
260   \brief exits Orxonox
261*/
[1875]262void Orxonox::quitGame() 
263{
[2636]264  bQuitOrxonox = true;
[1875]265}
266
267
[3214]268
[2190]269/**
[2636]270   \brief handles sprecial events from localinput
271   \param event: an event not handled by the CommandNode
[2190]272*/
[3226]273void Orxonox::eventHandler(SDL_Event* event)
[2190]274{
[2636]275  // Handle special events such as reshape, quit, focus changes
[2190]276}
[3214]277 
[1875]278
[2190]279/**
[2636]280   \brief handle keyboard commands that are not meant for WorldEntities
281   \param cmd: the command to handle
282   \return true if the command was handled by the system or false if it may be passed to the WorldEntities
[2190]283*/
[3226]284bool Orxonox::systemCommand(Command* cmd)
[2190]285{
[3220]286  /*
[2636]287  if( !strcmp( cmd->cmd, "quit"))
288    {
289      if( !cmd->bUp) this->gameLoader->stop();
290      return true;
291    }
292  return false;
[3220]293  */
294  return false;
[2190]295}
[1803]296
[1850]297
[2190]298/**
[2636]299   \brief retrieve a pointer to the local Camera
300   \return a pointer to localcamera
[2190]301*/
[3226]302Camera* Orxonox::getCamera()
[1872]303{
[2636]304  return localcamera;
[1872]305}
[1850]306
[3214]307
[2190]308/**
[2636]309   \brief retrieve a pointer to the local CommandNode
310   \return a pointer to localinput
[2190]311*/
[3226]312CommandNode* Orxonox::getLocalInput()
[1850]313{
[2636]314  return localinput;
[1803]315}
316
[3214]317
[2190]318/**
[2636]319   \brief retrieve a pointer to the local World
320   \return a pointer to world
[2190]321*/
[3226]322World* Orxonox::getWorld()
[1872]323{
[2636]324  return world;
[1872]325}
[1850]326
[3449]327/**
328   \return The reference of the SDL-screen of orxonox
329*/
[3365]330SDL_Surface* Orxonox::getScreen ()
331{
332  return this->screen;
333}
[3214]334
[3449]335/**
336   \brief main function
[3214]337
[3449]338   here the journey begins
339*/
[3226]340int main(int argc, char** argv) 
[1803]341{ 
[2636]342  printf(">>> Starting Orxonox <<<\n");
[1850]343  Orxonox *orx = Orxonox::getInstance();
[2190]344 
[3226]345  if((*orx).init(argc, argv) == -1)
[2636]346    {
347      printf("! Orxonox initialization failed\n");
348      return -1;
349    }
350 
351  orx->start();
352 
[2190]353  //delete orx;
354 
[1803]355  return 0;
356}
Note: See TracBrowser for help on using the repository browser.