Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 3537 was 3526, checked in by bensch, 20 years ago

orxonox/trunk: better ModelView-matrix transformations

File size: 7.5 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  return 0;
176}
[1850]177
[3214]178
[2190]179/**
[2636]180   \brief initializes the sound engine
[2190]181*/
[3226]182int Orxonox::initSound() 
[2190]183{
[3174]184  printf("> Initializing sound\n");
[3226]185  // SDL_Init(SDL_INIT_AUDIO);
[2636]186  printf("Not yet implemented\n");
187  return 0;
[2190]188}
[1900]189
[3214]190
[2190]191/**
[2636]192   \brief initializes input functions
[2190]193*/
[3226]194int Orxonox::initInput() 
[2190]195{
[2636]196  // create localinput
197  localinput = new CommandNode( configfilename);
198 
199  return 0;
[1803]200}
201
[3214]202
[2190]203/**
[2636]204   \brief initializes network system
[2190]205*/
[3226]206int Orxonox::initNetworking() 
[1897]207{
[2636]208  printf("Not yet implemented\n");
209  return 0;
[1897]210}
211
[3214]212
[2190]213/**
[2636]214   \brief initializes and loads resource files
[2190]215*/
[3226]216int Orxonox::initResources() 
[1858]217{
[2636]218  printf("Not yet implemented\n");
219  return 0;
[1858]220}
[1849]221
[3214]222
[2190]223/**
[2636]224   \brief initializes the world
[2190]225*/
[3226]226int Orxonox::initWorld() 
[1896]227{
[2636]228  //world = new World();
229 
230  // TO DO: replace this with a menu/intro
231  //world->load_debug_level();
232 
233  return 0;
[1896]234}
235
[2636]236
[2190]237/**
[2636]238   \brief starts the orxonox game or menu
239
240   here is the central orxonox state manager. There are currently two states
241   - menu
242   - game-play
243   both states manage their states themselfs again.
[2190]244*/
[2636]245void Orxonox::start()
246{
247 
248  this->gameLoader = GameLoader::getInstance();
249  this->gameLoader->loadDebugCampaign(DEBUG_CAMPAIGN_0);
250  this->gameLoader->init();
251  this->gameLoader->start();
252}
253
[3214]254
[2636]255/**
256   \brief exits Orxonox
257*/
[1875]258void Orxonox::quitGame() 
259{
[2636]260  bQuitOrxonox = true;
[1875]261}
262
263
[3214]264
[2190]265/**
[2636]266   \brief handles sprecial events from localinput
267   \param event: an event not handled by the CommandNode
[2190]268*/
[3226]269void Orxonox::eventHandler(SDL_Event* event)
[2190]270{
[2636]271  // Handle special events such as reshape, quit, focus changes
[2190]272}
[3214]273 
[1875]274
[2190]275/**
[2636]276   \brief handle keyboard commands that are not meant for WorldEntities
277   \param cmd: the command to handle
278   \return true if the command was handled by the system or false if it may be passed to the WorldEntities
[2190]279*/
[3226]280bool Orxonox::systemCommand(Command* cmd)
[2190]281{
[3220]282  /*
[2636]283  if( !strcmp( cmd->cmd, "quit"))
284    {
285      if( !cmd->bUp) this->gameLoader->stop();
286      return true;
287    }
288  return false;
[3220]289  */
290  return false;
[2190]291}
[1803]292
[1850]293
[2190]294/**
[2636]295   \brief retrieve a pointer to the local Camera
296   \return a pointer to localcamera
[2190]297*/
[3226]298Camera* Orxonox::getCamera()
[1872]299{
[2636]300  return localcamera;
[1872]301}
[1850]302
[3214]303
[2190]304/**
[2636]305   \brief retrieve a pointer to the local CommandNode
306   \return a pointer to localinput
[2190]307*/
[3226]308CommandNode* Orxonox::getLocalInput()
[1850]309{
[2636]310  return localinput;
[1803]311}
312
[3214]313
[2190]314/**
[2636]315   \brief retrieve a pointer to the local World
316   \return a pointer to world
[2190]317*/
[3226]318World* Orxonox::getWorld()
[1872]319{
[2636]320  return world;
[1872]321}
[1850]322
[3449]323/**
324   \return The reference of the SDL-screen of orxonox
325*/
[3365]326SDL_Surface* Orxonox::getScreen ()
327{
328  return this->screen;
329}
[3214]330
[3449]331/**
332   \brief main function
[3214]333
[3449]334   here the journey begins
335*/
[3226]336int main(int argc, char** argv) 
[1803]337{ 
[2636]338  printf(">>> Starting Orxonox <<<\n");
[1850]339  Orxonox *orx = Orxonox::getInstance();
[2190]340 
[3226]341  if((*orx).init(argc, argv) == -1)
[2636]342    {
343      printf("! Orxonox initialization failed\n");
344      return -1;
345    }
346 
347  orx->start();
348 
[2190]349  //delete orx;
350 
[1803]351  return 0;
352}
Note: See TracBrowser for help on using the repository browser.