Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/orxonox/branches/ll2trunktemp/src/game_loader.cc @ 3940

Last change on this file since 3940 was 3940, checked in by chris, 19 years ago

orxonox/branches/ll2trunktemp: I tried… Not working…

File size: 5.6 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_2);
104        debugCampaign->addEntity(world1, WORLD_ID_1);
105
106        World* world2 = new World(DEBUG_WORLD_2);
107        world2->setNextStoryID(WORLD_ID_GAMEEND);
108        debugCampaign->addEntity(world2, WORLD_ID_2);
109
110        this->currentCampaign = debugCampaign;
111        break;
112      }
113    }
114}
115
116ErrorMessage GameLoader::start()
117{
118  if(this->currentCampaign != NULL)
119    this->currentCampaign->start();
120}
121
122
123ErrorMessage GameLoader::stop()
124{
125  if(this->currentCampaign != NULL)
126    this->currentCampaign->stop();
127  this->currentCampaign = NULL;
128}
129
130
131ErrorMessage GameLoader::pause()
132{
133  this->isPaused = true;
134  if(this->currentCampaign != NULL)
135    this->currentCampaign->pause();
136}
137
138
139ErrorMessage GameLoader::resume()
140{
141  this->isPaused = false;
142  if(this->currentCampaign != NULL)
143    this->currentCampaign->resume();
144}
145
146/**
147   \brief release the mem
148 */
149ErrorMessage GameLoader::destroy()
150{}
151
152
153/**
154   \brief reads a campaign definition file into a campaign class
155   \param filename to be loaded
156   \returns the loaded campaign
157
158   this will interprete the map/campaign files and recursivly load a tree of worlds/campaigns
159*/
160Campaign* GameLoader::fileToCampaign(char *name)
161{
162  /* do not entirely load the campaign. just the current world
163     before start of each world, it has to be initialized so it
164     can load everything it needs into memory then.
165  */
166}
167
168
169/**
170   \brief handle keyboard commands
171   \param cmd: the command to handle
172   \returns true if the command was handled by the system
173*/
174bool GameLoader::worldCommand (Command* cmd)
175{
176  if( !strcmp( cmd->cmd, "up_world"))
177    {
178      if( !cmd->bUp) 
179        {
180          this->nextLevel();
181        }
182      return true;
183    }
184  else if( !strcmp( cmd->cmd, "down_world"))
185    {
186      if( !cmd->bUp)
187        {
188          this->previousLevel();
189        }
190      return true;
191    }
192  else if( !strcmp( cmd->cmd, "pause"))
193    {
194      if( !cmd->bUp)
195        {
196          if(this->isPaused)
197            this->resume();
198          else
199            this->pause();
200        }
201      return true;
202    }
203  else if( !strcmp( cmd->cmd, "quit"))
204    {
205      if( !cmd->bUp) this->stop();
206      return true;
207    }
208  return false;
209}
210
211
212/*
213  \brief this changes to the next level
214*/
215void GameLoader::nextLevel()
216{
217  if(this->currentCampaign != NULL)
218    this->currentCampaign->nextLevel();
219}
220
221
222/*
223  \brief change to the previous level - not implemented
224
225  this propably useless
226*/
227void GameLoader::previousLevel()
228{
229  if(this->currentCampaign != NULL)
230    this->currentCampaign->previousLevel();
231}
232
233/**
234   \brief add a Factory to the Factory Q
235   \param factory a Factory to be registered
236*/
237void GameLoader::registerFactory( Factory* factory)
238{
239        assert( factory != NULL);
240       
241        PRINTF0("Registered factory for '%s'\n", factory->getClassname());
242       
243        if( first == NULL) first = factory;
244        else first->registerFactory( factory);
245}
246
247/**
248   \brief load a StoryEntity
249   \param element a XMLElement containing all the needed info
250*/
251BaseObject* GameLoader::fabricate( TiXmlElement* element)
252{
253        assert( element != NULL);
254       
255        if( first == NULL)
256        {
257                PRINTF0("GameLoader does not know any factories, fabricate() failed\n");
258                return NULL;
259        }
260       
261        if( element->Value() != NULL)
262        {
263                PRINTF0("Attempting fabrication of a '%s'\n", element->Value());
264                BaseObject* b = first->fabricate( element);
265                if( b == NULL) PRINTF0("Failed to fabricate a '%s'\n", element->Value());
266                else PRINTF0("Successfully fabricated a '%s'\n", element->Value());
267                return b;
268        }
269       
270        PRINTF0("Fabricate failed, TiXmlElement did not contain a value\n");
271       
272        return NULL;
273}
Note: See TracBrowser for help on using the repository browser.