Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/story_entities/multi_player_world_data.cc @ 9346

Last change on this file since 9346 was 9235, checked in by bensch, 18 years ago

merged the presentation back

File size: 9.0 KB
RevLine 
[6404]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### File Specific:
12   main-programmer: Patrick Boenzli
13*/
14
15#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WORLD
16
17
18#include "multi_player_world_data.h"
19
[7193]20#include "util/loading/resource_manager.h"
[6404]21#include "state.h"
22#include "class_list.h"
23#include "substring.h"
24
[7193]25#include "util/loading/game_loader.h"
[6404]26#include "cd_engine.h"
27
28#include "p_node.h"
29#include "world_entity.h"
30#include "player.h"
31#include "camera.h"
32#include "environment.h"
33#include "terrain.h"
34#include "test_entity.h"
35#include "terrain.h"
[8490]36#include "md2/md2Model.h"
[6434]37#include "world_entities/projectiles/projectile.h"
[6404]38#include "npcs/npc_test1.h"
39#include "playable.h"
40
[7193]41#include "util/loading/factory.h"
[6404]42#include "fast_factory.h"
[7193]43#include "util/loading/load_param.h"
[6404]44
45#include "network_manager.h"
46#include "network_game_manager.h"
[8068]47#include "player_stats.h"
[6404]48
49
50#include "glmenu_imagescreen.h"
51
52
[6498]53
[6404]54using namespace std;
55
56
57/**
58 * constructor of the GameWorldDataData
59 */
60MultiPlayerWorldData::MultiPlayerWorldData()
61    : GameWorldData()
[6498]62{
63  this->toggle = false;
64}
[6404]65
66
67/**
68 * destructor for the GameWorldDataData
69 */
70MultiPlayerWorldData::~MultiPlayerWorldData()
71{}
72
73
74/**
75 *  initialize the GameWorldDataData
76 */
77ErrorMessage MultiPlayerWorldData::init()
78{
79  /* call underlying function */
[8717]80  return GameWorldData::init();
[6404]81}
82
83
84/**
85 *  loads the GUI data
86 * @param root reference to the xml root element
87 */
[7370]88ErrorMessage MultiPlayerWorldData::loadGUI(const TiXmlElement* root)
[6404]89{
90  /* call underlying function */
[8717]91  return GameWorldData::loadGUI(root);
[6404]92}
93
94
95/**
96 *  unloads the GUI data
97 */
98ErrorMessage MultiPlayerWorldData::unloadGUI()
99{
100  /* call underlying function */
[8717]101  return GameWorldData::unloadGUI();
[6404]102}
103
104
105/**
106 *  overloads the GameWorld::loadWorldEntities(...) class since the network WorldEntity loading is different
107 * @param root reference to the xml root parameter
108 */
[7370]109ErrorMessage MultiPlayerWorldData::loadWorldEntities(const TiXmlElement* root)
[6404]110{
[9235]111  const TiXmlElement* element = NULL;
112 
113  if( NetworkManager::getInstance()->isGameServer() )
[6404]114  {
[9235]115    /* load the spawning points */
116    element = root->FirstChildElement("SpawningPoints");
117    if( element == NULL)
[6404]118    {
[9235]119      PRINTF(1)("NetworkWorld is missing 'SpawningPoints'\n");
120    }
121    else
122    {
123      element = element->FirstChildElement();
124      // load Players/Objects/Whatever
125      PRINTF(4)("Loading Spawning Points\n");
126      while( element != NULL)
127      {
128        BaseObject* created = Factory::fabricate(element);
129        if( created != NULL )
130          printf("Created a Spawning Point %s: %s\n", created->getClassName(), created->getName());
[6404]131
[9235]132        element = element->NextSiblingElement();
133        glmis->step();
134      }
135      PRINTF(4)("Done loading Spawning Points\n");
[6404]136    }
137  }
138
139  /* load the WorldEntities */
140  element = root->FirstChildElement("WorldEntities");
141  if( element == NULL)
[6409]142  {
[6404]143    PRINTF(1)("NetworkWorld is missing 'WorldEntities'\n");
[6409]144  }
[6404]145  else
146  {
147    element = element->FirstChildElement();
148
[7071]149    if( NetworkManager::getInstance()->isGameServer() )
[6404]150    {
[7071]151      while( element != NULL)
[6404]152      {
153        /* pass the entity to the NetworkGameManager to be created */
[8068]154        BaseObject* created = Factory::fabricate(element);
[6404]155        if( created != NULL )
[6412]156          PRINTF(1)("Created a %s: %s (0x%8x) from %s\n", created->getClassName(), created->getName(), created->getLeafClassID(), element->Value());
[6404]157        else
158          PRINTF(1)("NetworkWorld: could not create this entity\n");
159
160        if( element->Value() != NULL && !strcmp( element->Value(), "SkyBox"))
161          this->sky = dynamic_cast<WorldEntity*>(created);
162        if( element->Value() != NULL && !strcmp( element->Value(), "Terrain"))
163        {
164          this->terrain = dynamic_cast<Terrain*>(created);
165          CDEngine::getInstance()->setTerrain(terrain);
166        }
[7071]167
168        element = element->NextSiblingElement();
169
170
171        glmis->step();
172        PRINTF(4)("Done loading NetworkWorldEntities\n");
[6404]173      }
[7071]174    }
175    else
176    {
177      while( element != NULL)
178      {
179        PRINTF(0)("load: %s\n", element->Value());
180        if( !strcmp(element->Value(), "Terrain") || !strcmp(element->Value(), "Building")  )
181        {
[6404]182
[7071]183          /* pass the entity to the NetworkGameManager to be created */
184          BaseObject* created = Factory::fabricate(element);
[6498]185
[7071]186          if( created != NULL )
187            PRINTF(1)("Created a %s: %s (0x%8x) from %s\n", created->getClassName(), created->getName(), created->getLeafClassID(), element->Value());
188          else
189            PRINTF(1)("NetworkWorld: could not create this entity\n");
190
191          if( element->Value() != NULL && !strcmp( element->Value(), "SkyBox"))
192            this->sky = dynamic_cast<WorldEntity*>(created);
193          if( element->Value() != NULL && !strcmp( element->Value(), "Terrain"))
194          {
195            this->terrain = dynamic_cast<Terrain*>(created);
196            CDEngine::getInstance()->setTerrain(terrain);
197          }
198
199          glmis->step();
200          PRINTF(4)("Done loading NetworkWorldEntities\n");
201        }
202        element = element->NextSiblingElement();
203      }
[6404]204    }
205
[7071]206
[6498]207    if( NetworkManager::getInstance()->isGameServer())
208    {
209      this->localPlayer = new Player();
[6404]210
[8068]211#if 0
[6498]212      Playable* playable;
213      const std::list<BaseObject*>* playableList = ClassList::getList(CL_PLAYABLE);
214      assert( playableList != NULL);
215
216      if (playableList != NULL)
217      {
218        playable = dynamic_cast<Playable*>(playableList->front());
[6985]219        this->localPlayer->setPlayable(playable);
[7078]220        playable->toList(OM_GROUP_00);
[7074]221        playable->setAbsCoor(213.37, 57.71, -47.98);
[7346]222        playable->setPlayDirection(Quaternion(M_PI, Vector(0.0, 1.0, 0.0)));
[6498]223      }
[8068]224#endif
[6498]225    }
226    else
[6404]227    {
[6498]228      /* create a Player */
229      this->localPlayer = new Player();
[6404]230    }
231
232
233    /* init the pnode tree */
234    PNode::getNullParent()->init();
235  }
[7954]236    // Fill the EntityLists. Tick then Draw:
237  this->tickLists.push_back(OM_DEAD_TICK);
238  this->tickLists.push_back(OM_ENVIRON);
239  this->tickLists.push_back(OM_COMMON);
[9008]240  this->tickLists.push_back(OM_PLAYERS);
241  this->tickLists.push_back(OM_PLAYERS_PROJ);
[7954]242  this->tickLists.push_back(OM_GROUP_00);
243  this->tickLists.push_back(OM_GROUP_00_PROJ);
244  this->tickLists.push_back(OM_GROUP_01);
245  this->tickLists.push_back(OM_GROUP_01_PROJ);
246
247  this->drawLists.push_back(OM_ENVIRON_NOTICK);
248  this->drawLists.push_back(OM_ENVIRON);
249  this->drawLists.push_back(OM_COMMON);
[9008]250  this->drawLists.push_back(OM_PLAYERS);
251  this->drawLists.push_back(OM_PLAYERS_PROJ);
[7954]252  this->drawLists.push_back(OM_GROUP_00);
253  this->drawLists.push_back(OM_GROUP_00_PROJ);
254  this->drawLists.push_back(OM_GROUP_01);
255  this->drawLists.push_back(OM_GROUP_01_PROJ);
[8717]256
[7082]257  State::setPlayer(this->localPlayer);
[8717]258
259  return ErrorMessage();
[6404]260}
261
262
263/**
264 *  unloads the world entities from the xml file
265 */
266ErrorMessage MultiPlayerWorldData::unloadWorldEntities()
267{
268  /* call underlying function */
[8717]269  return GameWorldData::unloadWorldEntities();
[6404]270}
271
272
273/**
274 *  loads the scene data
275 * @param root reference to the xml root element
276 */
[7370]277ErrorMessage MultiPlayerWorldData::loadScene(const TiXmlElement* root)
[6404]278{
279  /* call underlying function */
280  GameWorldData::loadScene(root);
[8717]281
[8068]282  // create server playable
283  if ( NetworkManager::getInstance()->isGameServer() )
284  {
285    NetworkGameManager::getInstance()->signalNewPlayer( 0 );
286    State::getPlayer()->setPlayable( PlayerStats::getStats( 0 )->getPlayable() );
287  }
[8717]288
289  return ErrorMessage();
[6404]290}
291
292
293/**
294 *  unloads the scene data
295 */
296ErrorMessage MultiPlayerWorldData::unloadScene()
297{
298  /* call underlying function */
[8717]299  return GameWorldData::unloadScene();
[6404]300}
301
[6498]302
303/**
304 * some debug output
305 */
306void MultiPlayerWorldData::debug()
307{
308  PRINT(0)("==================================================\n");
309  Playable* playable;
310  const std::list<BaseObject*>* playableList = ClassList::getList(CL_PLAYABLE);
311  assert(playableList != NULL);
312  std::list<BaseObject*>::const_iterator entity;
313
314
315
316  for (entity = playableList->begin(); entity != playableList->end(); entity++)
317  {
318    Playable* p = dynamic_cast<Playable*>(*entity);
319    PRINTF(0)("Got a playable, class: %s, name: %s, uid: %i\n", (*entity)->getClassName(), (*entity)->getName(), p->getUniqueID());
320  }
321
322
323  if( this->toggle)
324  {
325    playable = dynamic_cast<Playable*>(playableList->front());
[6985]326    this->localPlayer->setPlayable(playable);
[6498]327    this->toggle = !this->toggle;
328  }
329  else
330  {
331    playable = dynamic_cast<Playable*>(playableList->back());
[6985]332    this->localPlayer->setPlayable(playable);
[6498]333    this->toggle = !this->toggle;
334  }
335
336
[6985]337  Playable* pl = this->localPlayer->getPlayable();
[6634]338  PRINTF(0)("The current regisered playable is hid: %i\n", pl->getUniqueID());
[6498]339
[6634]340
[7014]341  PNode* cam = State::getCameraTargetNode();
[6498]342  PRINT(0)("Camera has target - class: %s, name: %s, uid: %i\n", cam->getClassName(), cam->getName(), cam->getUniqueID());
343
344  PRINT(0)("==================================================\n");
345
346}
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
Note: See TracBrowser for help on using the repository browser.