Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/terrain/src/story_entities/multi_player_world_data.cc @ 9135

Last change on this file since 9135 was 9008, checked in by bensch, 18 years ago

orxonox/trunk: merged the network bak to the trunk
merged with command:
svn merge -r8804:HEAD https://svn.orxonox.net/orxonox/branches/multi_player_map .

conflicts all resolved in favour of the branche

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