Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/world_entities/mount_point.cc @ 10340

Last change on this file since 10340 was 10314, checked in by patrick, 18 years ago

merged branche mount_point to trunk. this will add mount point abilities, bsp transparency fix and some other smaller stuff to this trunk

File size: 5.0 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, patrick@orxonox.net
13   co-programmer:
14*/
15#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WORLD_ENTITY
16
17
18#include "executor/executor.h"
19#include "util/loading/factory.h"
20#include "util/loading/load_param.h"
21#include "util/loading/load_param_xml.h"
22
23
24
25#include "mount_point.h"
26#include "debug.h"
27#include "state.h"
28
29
30ObjectListDefinition(MountPoint);
31
32
33/**
34 * construct
35 */
36MountPoint::MountPoint (const Vector& up, const Vector& forward, const Vector& center, const std::string& name)
37{
38  PRINTF(5)("Created mount point %s\n", name.c_str());
39
40  this->_name = name;
41  this->setAbsCoor( center);
42  this->setAbsDir( Quaternion(forward, up));
43
44  this->init();
45}
46
47
48
49/**
50 * deconstructor
51 */
52MountPoint::~MountPoint ()
53{}
54
55
56/**
57 * initializing function
58 */
59void MountPoint::init()
60{
61  this->registerObject(this, MountPoint::_objectList);
62  this->toList(OM_GROUP_00);
63
64  this->_mount = NULL;
65}
66
67
68/**
69 * loads the Settings of a MD2Creature from an XML-element.
70 * @param root the XML-element to load the MD2Creature's properties from
71 */
72void MountPoint::initMountPoint(const TiXmlElement* root)
73{
74  if( root == NULL)
75  {
76    PRINTF(1)("MountPoint - initialization failed, since I got no valid xml element\n");
77    return;
78  }
79  // now get the first element
80  const TiXmlElement* element = root->FirstChildElement("MountPoints");
81  if( element == NULL)
82  {
83    PRINTF(1)("I am in section: %s, Object Information file is missing a proper 'MountPoints' section\n", root->Value());
84//     element = root->FirstChildElement( );
85//     PRINTF(0)("first child: %s\n", element->Value());
86  }
87  else
88  {
89    element = element->FirstChildElement();
90    // parse the information for this mount point
91
92    PRINTF(4)("Loading WorldEntities\n");
93    while( element != NULL)
94    {
95      std::string name = element->Value();
96
97      PRINTF(5)("checking %s against local %s\n", name.c_str(), this->_name.c_str());
98      // check if we got the right mount point
99      if( this->_name.find(name, 0) != std::string::npos)
100      {
101        PRINTF(5)("found mount point %s\n", this->_name.c_str());
102        // load it
103        this->loadParam(element);
104      }
105
106      element = element->NextSiblingElement();
107    }
108  }
109}
110
111
112
113/**
114 * load the parameters from the xml section
115 * @param root the root element of this xml branche
116 */
117void MountPoint::loadParam(const TiXmlElement* root)
118{
119  // first check for the description
120  LoadParam(root, "Description", this, MountPoint, setDescription)
121  .describe("Sets this mount point a description");
122
123  // now check for the orx class to create
124  LoadParam(root, "OrxClass", this, MountPoint, setOrxClass)
125  .describe("Sets the class this mount points should host");
126
127  LoadParamXML(root, "Details", this, MountPoint, loadDetails);
128}
129
130
131/**
132 * load the parameters from the world entity
133 * @param root the root element of this xml branche
134 */
135void MountPoint::loadDetails(const TiXmlElement* root)
136{
137  if( this->_mount != NULL)
138  {
139    PRINTF(0)("Got detail informations\n");
140    this->_mount->loadParams( root);
141  }
142}
143
144
145/**
146 * setst the description (optional) via xml tag
147 * @param description string containing the description
148 */
149void MountPoint::setDescription(const std::string& description)
150{
151  this->_description = description;
152}
153
154
155
156/**
157 * sets the class of this mount point
158 * @param orxClass class
159 */
160void MountPoint::setOrxClass(const std::string& orxClass)
161{
162  // create the object for this mount point
163  BaseObject* obj = Factory::fabricate(orxClass);
164  // check if the object is created correctly
165  if( obj != NULL)
166  {
167    if( obj->isA( WorldEntity::staticClassID()))
168    {
169      // cast down the object to WE
170      this->_mount = dynamic_cast<WorldEntity*>(obj);
171
172      // now set the position, direction and reparent it to this node
173      this->_mount->setAbsCoor( this->getAbsCoor());
174      this->_mount->setAbsDir( this->getAbsDir());
175      this->_mount->setParent( this);
176
177      this->_mount->toList( (OM_LIST)(this->getOMListNumber()+1));
178    }
179  }
180  else
181    PRINTF(1)("Couldn't create %s for this mount point (%s)\n", orxClass.c_str(), this->_name.c_str());
182}
183
184
185
186/**
187 * tick
188 * @param time  time passed since the last tick
189 */
190void MountPoint::tick (float time)
191{
192
193}
194
195
196/**
197 * draw this entity
198 */
199void MountPoint::draw() const
200{
201}
202
203
204
205/**
206 *  function called to draw the mount point itself for debug purposes only
207 */
208void MountPoint::debugDraw() const
209{
210  // invoke the underlying pnode debug draw
211  this->debugDraw();
212}
213
214
215/**
216 * adds an entity to this mount point
217 * @param entity entity to be added
218 */
219void MountPoint::mount(WorldEntity* entity)
220{
221  this->_mount = entity;
222}
223
224
225/**
226 * removes an entity from this mount point
227 */
228void MountPoint::unmount()
229{
230  this->_mount = NULL;
231}
232
Note: See TracBrowser for help on using the repository browser.