Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/orxonox/branches/parenting/src/orxonox.cc @ 3336

Last change on this file since 3336 was 3336, checked in by patrick, 20 years ago

orxonox/branches/parenting: enhanced graphics initialisation. minor change

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