Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/orxonox/trunk/src/game_loader.cc @ 3655

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

orxonox/trunk: some changes in the storyentity framework: added a preLoad() function, since there is some stuff to be initialized before load(). written some comments to level loading doxygen stuff. now the worldinterface works

File size: 4.5 KB
Line 
1
2
3/*
4   orxonox - the future of 3D-vertical-scrollers
5
6   Copyright (C) 2004 orx
7
8   This program is free software; you can redistribute it and/or modify
9   it under the terms of the GNU General Public License as published by
10   the Free Software Foundation; either version 2, or (at your option)
11   any later version.
12
13   ### File Specific:
14   main-programmer: Patrick Boenzli
15   co-programmer: ...
16*/
17
18
19#include "game_loader.h"
20#include "campaign.h"
21#include "world.h"
22#include "player.h"
23#include "orxonox.h"
24#include "camera.h"
25#include "command_node.h"
26#include "vector.h"
27
28#include <string.h>
29
30
31using namespace std;
32
33
34GameLoader* GameLoader::singletonRef = 0;
35
36
37GameLoader::GameLoader () {}
38
39
40GameLoader::~GameLoader () {}
41
42
43/**
44   \brief this class is a singleton class
45   \returns an instance of itself
46
47   if you are unsure about singleton classes, check the theory out on the internet :)
48*/
49GameLoader* GameLoader::getInstance()
50{
51  if(singletonRef == NULL)
52    singletonRef = new GameLoader();
53  return singletonRef;
54}
55
56
57ErrorMessage GameLoader::init()
58{
59  if(this->currentCampaign != NULL)
60    this->currentCampaign->init();
61}
62
63
64/**
65   \brief reads a campaign definition file into a campaign class
66   \param filename to be loaded
67   \returns the loaded campaign
68
69   this will interprete the map/campaign files and recursivly load a tree of worlds/campaigns
70*/
71ErrorMessage GameLoader::loadCampaign(char* name)
72{
73  ErrorMessage errorCode;
74 
75  this->currentCampaign = this->fileToCampaign(name);
76}
77
78
79/**
80   \brief loads a debug campaign for test purposes only.
81   \param the identifier of the campaign.
82   \returns error message if not able to do so.
83*/
84ErrorMessage GameLoader::loadDebugCampaign(Uint32 campaignID)
85{
86  switch(campaignID)
87    {
88      /*
89         Debug Level 0: Debug level used to test the base frame work.
90         As you can see, all storyentity data is allocated before game
91         start. the storyentity will load themselfs shortly before start
92         through the StoryEntity::init() funtion.
93      */
94    case DEBUG_CAMPAIGN_0:
95      {
96        Campaign* debugCampaign = new Campaign();
97
98        World* world0 = new World(DEBUG_WORLD_0);
99        world0->setNextStoryID(WORLD_ID_1);
100        debugCampaign->addEntity(world0, WORLD_ID_0);
101
102        World* world1 = new World(DEBUG_WORLD_1);
103        world1->setNextStoryID(WORLD_ID_GAMEEND);
104        debugCampaign->addEntity(world1, WORLD_ID_1);
105
106        this->currentCampaign = debugCampaign;
107        break;
108      }
109    }
110}
111
112ErrorMessage GameLoader::start()
113{
114  if(this->currentCampaign != NULL)
115    this->currentCampaign->start();
116}
117
118
119ErrorMessage GameLoader::stop()
120{
121  if(this->currentCampaign != NULL)
122    this->currentCampaign->stop();
123  this->currentCampaign = NULL;
124}
125
126
127ErrorMessage GameLoader::pause()
128{
129  this->isPaused = true;
130  if(this->currentCampaign != NULL)
131    this->currentCampaign->pause();
132}
133
134
135ErrorMessage GameLoader::resume()
136{
137  this->isPaused = false;
138  if(this->currentCampaign != NULL)
139    this->currentCampaign->resume();
140}
141
142/**
143   \brief release the mem
144 */
145ErrorMessage GameLoader::destroy()
146{}
147
148
149/**
150   \brief reads a campaign definition file into a campaign class
151   \param filename to be loaded
152   \returns the loaded campaign
153
154   this will interprete the map/campaign files and recursivly load a tree of worlds/campaigns
155*/
156Campaign* GameLoader::fileToCampaign(char *name)
157{
158  /* do not entirely load the campaign. just the current world
159     before start of each world, it has to be initialized so it
160     can load everything it needs into memory then.
161  */
162}
163
164
165/**
166   \brief handle keyboard commands
167   \param cmd: the command to handle
168   \returns true if the command was handled by the system
169*/
170bool GameLoader::worldCommand (Command* cmd)
171{
172  if( !strcmp( cmd->cmd, "up_world"))
173    {
174      if( !cmd->bUp) 
175        {
176          this->nextLevel();
177        }
178      return true;
179    }
180  else if( !strcmp( cmd->cmd, "down_world"))
181    {
182      if( !cmd->bUp)
183        {
184          this->previousLevel();
185        }
186      return true;
187    }
188  else if( !strcmp( cmd->cmd, "pause"))
189    {
190      if( !cmd->bUp)
191        {
192          if(this->isPaused)
193            this->resume();
194          else
195            this->pause();
196        }
197      return true;
198    }
199  else if( !strcmp( cmd->cmd, "quit"))
200    {
201      if( !cmd->bUp) this->stop();
202      return true;
203    }
204  return false;
205}
206
207
208/*
209  \brief this changes to the next level
210*/
211void GameLoader::nextLevel()
212{
213  if(this->currentCampaign != NULL)
214    this->currentCampaign->nextLevel();
215}
216
217
218/*
219  \brief change to the previous level - not implemented
220
221  this propably useless
222*/
223void GameLoader::previousLevel()
224{
225  if(this->currentCampaign != NULL)
226    this->currentCampaign->previousLevel();
227}
Note: See TracBrowser for help on using the repository browser.