Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/mount_points/src/world_entities/mount_point.cc @ 10302

Last change on this file since 10302 was 10302, checked in by patrick, 17 years ago

even more performance saved now, since the obb tree doesn't get build every time

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