Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/new_class_id/src/story_entities/campaign.cc @ 9833

Last change on this file since 9833 was 9727, checked in by bensch, 18 years ago

orxonox/new_class_id: new Executor construct, that is much more typesafe, faster, and easier to extend…

Also changed the LoadParam process, and adapted ScriptEngine calls

Then at the end, some missing headers appeared, and appended them to all the cc-files again.

File size: 3.2 KB
RevLine 
[2636]1
2
[4597]3/*
[2636]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*/
16
[6834]17#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_STORY_ENTITY
[2636]18
19#include "campaign.h"
[3629]20
[7193]21#include "util/loading/factory.h"
22#include "util/loading/load_param.h"
[6875]23#include "state.h"
[4261]24
[6424]25#include "campaign_data.h"
[9727]26#include "debug.h"
[5651]27
[2636]28
29
[9715]30ObjectListDefinition(Campaign);
[9406]31
[6424]32/**
33 *  the constructor
34 * @param root the XML root element
35 *
36 * this constructor is always called in a XML context (loading procedure)
37 */
[4597]38Campaign::Campaign ( TiXmlElement* root)
[4010]39{
[9709]40  this->registerObject(this, Campaign::_objectList);
[4597]41
[5300]42  PRINTF(4)("Loading Campaign...\n");
[4010]43  assert( root != NULL);
[4597]44
[6874]45  this->bReturnToMenu = false;
46
[6424]47  this->campaignData = new CampaignData(root);
[4598]48  this->loadParams(root);
[4597]49
[4010]50}
[2636]51
[6424]52
53/**
54 * the campaign destructor
55 */
[4816]56Campaign::~Campaign ()
[2636]57{
[6424]58  if( this->campaignData)
59    delete this->campaignData;
[2636]60}
61
[6424]62
[4598]63/**
[6424]64 *  loads the Parameters of a Campaign
65 * @param root: The XML-element to load from
[4598]66 */
67void Campaign::loadParams(const TiXmlElement* root)
68{
[6512]69  StoryEntity::loadParams(root);
[2636]70
[6424]71  PRINTF(4)("Loaded Campaign specific stuff\n");
[4598]72}
73
[6424]74
[4598]75/**
[6424]76 *  starts the campaing with a specific ID
77 * @param storyID the id of the StoryEntity
[4598]78 */
[6424]79bool Campaign::start()
[4598]80{
[6424]81  PRINTF(2)("Starting Campaign nr. %i\n", this->getStoryID());
[5651]82
[7283]83  this->bRunning = true;
[6874]84  this->bReturnToMenu = false;
[6424]85  this->run();
[8717]86
87  return true;
[4598]88}
89
[2636]90
[6424]91/**
92 *  pauses the campaign
93 */
94bool Campaign::pause()
[2636]95{
[8717]96  return (this->bPaused = true);
[2636]97}
98
99
[6424]100/**
101 *  resumes the campaign after a pause
102 */
103bool Campaign::resume()
[2636]104{
[6424]105  PRINTF(4)("Resuming the current Campaign\n");
[8717]106  return (this->bPaused = false);
[2636]107}
108
109
[6424]110/**
111 *  stops the campaign
112 */
113bool Campaign::stop()
[2636]114{
[6424]115  PRINTF(4)("Stopping the current Campaign\n");
[7032]116  if( State::getMenuID() != -1)
[6875]117    this->bReturnToMenu = true;
118  else
[7283]119    this->bRunning = false;  // fast exit
[6424]120  if( this->currentEntity != NULL)
121  {
122    this->currentEntity->stop();
123  }
[8717]124
125  return true;
[2636]126}
127
128
[4597]129/**
[6424]130 *  runs the campaign
131 */
132void Campaign::run()
[3459]133{
[6424]134  ErrorMessage       errorCode;
[8717]135//  int                storyID = WORLD_ID_0;
[3459]136
[7283]137  for( this->currentEntity = this->campaignData->getFirstLevel(), this->bRunning = true;
138       this->currentEntity != NULL && this->bRunning;
[6424]139       this->currentEntity = this->campaignData->getNextLevel())
140  {
141    PRINTF(0)("Campaign is starting StoryEntity nr:%i\n", this->currentEntity->getStoryID());
[3459]142
[6874]143    // check if return to menu
144    if( this->bReturnToMenu)
145    {
146      this->currentEntity = this->campaignData->getLevel(WORLD_ID_MENU);
147      this->bReturnToMenu = false;
148    }
149
150    this->campaignData->setCurrentEntity(this->currentEntity);
151
[6424]152    this->currentEntity->init();
153    this->currentEntity->loadData();
154    this->currentEntity->start();
155    this->currentEntity->unloadData();
156  }
[6874]157  PRINTF(2)("There is no StoryEnity left to play, quitting game\n");
[3459]158}
159
160
[6424]161/**
162 *  this changes to the next level
163 */
164void Campaign::switchToNextLevel()
[3459]165{
[6424]166  PRINTF(4)("Switching to the next StoryEntity\n");
[3220]167  this->currentEntity->stop();
[2636]168}
169
[3225]170
Note: See TracBrowser for help on using the repository browser.