Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 4445 was 4445, checked in by patrick, 19 years ago

orxonox/trunk: cleaned up the orxonox class: removed all unused variables and functions

File size: 8.4 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   co-programmer: Benjamin Grauer: injected ResourceManager/GraphicsEngine/GUI
25*/
26
27#include "orxonox.h"
28
29#include "gui.h"
30
31#include "world.h"
32#include "ini_parser.h"
33#include "game_loader.h"
34#include "graphics_engine.h"
35#include "resource_manager.h"
36#include "object_manager.h"
37#include "text_engine.h"
38#include "factory.h"
39#include "benchmark.h"
40#include "event_handler.h"
41#include "event.h"
42
43#include <string.h>
44
45int verbose = 4;
46
47using namespace std;
48
49/**
50   \brief create a new Orxonox
51
52   In this funcitons only global values are set. The game will not be started here.
53*/
54Orxonox::Orxonox ()
55{
56  this->setClassID(CL_ORXONOX, "Orxonox");
57
58  this->resourceManager = NULL;
59  this->objectManager = NULL;
60  this->eventHandler = NULL;
61
62  this->argc = 0;
63  this->argv = NULL;
64}
65
66/**
67   \brief remove Orxonox from memory
68*/
69Orxonox::~Orxonox () 
70{
71  int i =0;
72  Orxonox::singletonRef = NULL;
73  delete GraphicsEngine::getInstance(); // deleting the Graphics
74  delete ResourceManager::getInstance(); // deletes the Resource Manager
75  delete ObjectManager::getInstance();
76  delete TextEngine::getInstance();
77  delete EventHandler::getInstance();
78}
79
80/** \brief this is a singleton class to prevent duplicates */
81Orxonox* Orxonox::singletonRef = 0;
82
83/**
84   \returns reference or new Object of Orxonox if not existent.
85*/
86Orxonox* Orxonox::getInstance (void)
87{
88  if (singletonRef == NULL)
89    singletonRef = new Orxonox();
90  return singletonRef;
91}
92
93/**
94   \brief this finds the config file
95   
96   Since the config file varies from user to user and since one may want to specify different config files
97   for certain occasions or platforms this function finds the right config file for every occasion and stores
98   it's path and name into configfilename
99*/
100void Orxonox::getConfigFile (int argc, char** argv)
101{
102  strcpy (configfilename, "~/.orxonox/orxonox.conf");
103}
104
105/**
106   \brief initialize Orxonox with command line
107*/
108int Orxonox::init (int argc, char** argv)
109{
110  this->argc = argc;
111  this->argv = argv;
112  // parse command line
113  // config file
114 
115  getConfigFile (argc, argv);
116  SDL_Init (SDL_INIT_TIMER);
117  // initialize everything
118  printf("> Initializing resources\n");
119  if( initResources () == -1) return -1;
120
121  if( initVideo() == -1) return -1;
122  if( initSound() == -1) return -1;
123  printf("> Initializing input\n");
124  if( initInput() == -1) return -1;
125  printf("> Initializing networking\n");
126  if( initNetworking () == -1) return -1;
127  //printf("> Initializing world\n");
128  //if( init_world () == -1) return -1; PB: world will be initialized when started
129 
130  return 0;
131}
132
133/**
134   \brief initializes SDL and OpenGL
135*/
136int Orxonox::initVideo() 
137{
138  PRINTF(3)("> Initializing video\n");
139 
140  GraphicsEngine::getInstance();
141   
142  return 0;
143}
144
145
146/**
147   \brief initializes the sound engine
148*/
149int Orxonox::initSound() 
150{
151  printf("> Initializing sound\n");
152  // SDL_Init(SDL_INIT_AUDIO);
153  printf("Not yet implemented\n");
154  return 0;
155}
156
157
158/**
159   \brief initializes input functions
160*/
161int Orxonox::initInput() 
162{
163  this->eventHandler = EventHandler::getInstance();
164  this->eventHandler->init();
165 
166  return 0;
167}
168
169
170/**
171   \brief initializes network system
172*/
173int Orxonox::initNetworking() 
174{
175  printf("Not yet implemented\n");
176  return 0;
177}
178
179
180/**
181   \brief initializes and loads resource files
182*/
183int Orxonox::initResources() 
184{
185  PRINT(3)("initializing ResourceManager\n");
186  resourceManager = ResourceManager::getInstance();
187
188  // create parser
189  IniParser parser (DEFAULT_CONFIG_FILE);
190  if( parser.getSection (CONFIG_SECTION_DATA) == -1)
191    {
192      PRINTF(1)("Could not find Section %s in %s\n", CONFIG_SECTION_DATA, DEFAULT_CONFIG_FILE);
193      return -1;
194    }
195  char namebuf[256];
196  char valuebuf[256];
197  memset (namebuf, 0, 256);
198  memset (valuebuf, 0, 256);
199 
200  while( parser.nextVar (namebuf, valuebuf) != -1)
201    {
202      if (!strcmp(namebuf, CONFIG_NAME_DATADIR))
203        {
204          //  printf("Not yet implemented\n");
205          if (!resourceManager->setDataDir(valuebuf))
206            {
207              PRINTF(1)("Data Could not be located\n");
208              exit(-1);
209            }
210        }
211     
212      memset (namebuf, 0, 256);
213      memset (valuebuf, 0, 256);
214    }
215 
216  if (!resourceManager->checkDataDir(DEFAULT_DATA_DIR_CHECKFILE))
217    {
218      PRINTF(1)("The DataDirectory %s could not be verified\nPlease Change in File %s Section %s Entry %s to a suitable value\n",
219                resourceManager->getDataDir(),
220                DEFAULT_CONFIG_FILE,
221                CONFIG_SECTION_DATA,
222                CONFIG_NAME_DATADIR);
223      exit(-1);
224    }
225
226
227  PRINT(3)("initializing TextEngine\n");
228  TextEngine::getInstance();
229
230  PRINT(3)("initializing ObjectManager\n");
231  this->objectManager = ObjectManager::getInstance();
232
233  return 0;
234}
235
236
237
238
239/**
240   \brief starts the orxonox game or menu
241
242   here is the central orxonox state manager. There are currently two states
243   - menu
244   - game-play
245   both states manage their states themselfs again.
246*/
247void Orxonox::start()
248{
249 
250  this->gameLoader = GameLoader::getInstance();
251  this->gameLoader->loadCampaign("worlds/DefaultCampaign.oxc");
252  //  this->gameLoader->loadDebugCampaign(DEBUG_CAMPAIGN_0);
253  this->gameLoader->init();
254  this->gameLoader->start();
255}
256
257
258/**
259   \brief exits Orxonox
260*/
261void Orxonox::quitGame() 
262{
263  bQuitOrxonox = true;
264}
265
266
267
268/**
269   \brief handles sprecial events from localinput
270   \param event: an event not handled by the CommandNode
271*/
272void Orxonox::graphicsHandler(SDL_Event* event)
273{
274  // Handle special events such as reshape, quit, focus changes
275  switch (event->type)
276    {
277    case SDL_VIDEORESIZE:
278      GraphicsEngine* tmpGEngine = GraphicsEngine::getInstance();
279      tmpGEngine->resolutionChanged(&event->resize);
280      break;
281    }
282}
283 
284
285/**
286  \brief processes the events for orxonox main class
287  \param the event to handle
288*/
289void Orxonox::process(const Event &event)
290{}
291
292
293
294bool showGui = false;
295
296/**
297   \brief main function
298
299   here the journey begins
300*/
301int main(int argc, char** argv) 
302{ 
303
304  // here the pre-arguments are loaded, these are needed to go either to orxonx itself, Help, or Benchmark.
305  int i;
306  for(i = 1; i < argc; ++i)
307    {
308      if(! strcmp( "--help", argv[i]) || !strcmp("-h", argv[i])) return startHelp(argc, argv);
309      else if(!strcmp( "--benchmark", argv[i]) || !strcmp("-b", argv[i])) return startBenchmarks();
310      else if(!strcmp( "--gui", argv[i]) || !strcmp("-g", argv[i])) showGui = true;
311      //      else PRINTF(2)("Orxonox does not understand the arguments %s\n", argv[i]);
312    }
313
314  return startOrxonox(argc, argv);
315}
316
317
318
319int startHelp(int argc, char** argv)
320{
321  PRINT(0)("orxonox: starts the orxonox game - rules\n");
322  PRINT(0)("usage: orxonox [arg [arg...]]\n\n");
323  PRINT(0)("valid options:\n");
324  {
325    Gui* gui = new Gui(argc, argv);
326    gui->printHelp();
327    delete gui;
328  }
329  PRINT(0)(" -b|--benchmark:\t\tstarts the orxonox benchmark\n");
330  PRINT(0)(" -h|--help:\t\t\tshows this help\n");
331}
332
333
334int startOrxonox(int argc, char** argv)
335{
336  // checking for existence of the configuration-files
337  if (showGui ||
338      !ResourceManager::isFile("~/.orxonox/orxonox.conf") ||
339      ResourceManager::isFile("~/.orxonox/orxonox.lock"))
340    {
341      if (ResourceManager::isFile("~/.orxonox/orxonox.lock"))
342        ResourceManager::deleteFile("~/.orxonox/orxonox.lock");
343     
344      // starting the GUI
345      Gui* gui = new Gui(argc, argv);
346      gui->startGui();
347
348      if (! gui->startOrxonox)
349        return 0;
350     
351      delete gui;
352    }
353 
354  PRINT(0)(">>> Starting Orxonox <<<\n");
355
356  ResourceManager::touchFile("~/.orxonox/orxonox.lock");
357
358  Orxonox *orx = Orxonox::getInstance();
359 
360  if((*orx).init(argc, argv) == -1)
361    {
362      PRINTF(1)("! Orxonox initialization failed\n");
363      return -1;
364    }
365 
366  orx->start();
367 
368  delete orx;
369  ResourceManager::deleteFile("~/.orxonox/orxonox.lock");
370 
371}
Note: See TracBrowser for help on using the repository browser.