Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 3398 was 3398, checked in by bensch, 19 years ago

orxonox/trunk: Made the Model-class externalizable
meaning:

  1. There is now a possibility to initialize a Model without adding default vertex info
  2. Then you can add your vertices
  3. Then you can add any other model-specific stuff, like normals/texcoords/Faces
  4. For the time-being Materials have to be handled externaly, but this will change.

PATRICK: if you read this, you should be able, to implement this into the loading-screen, look at src/importer/framework.cc→main and then the big table.

with this aproach the Developer is farther away from OpenGL and closer to logic.

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