Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

mount point loading is working

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(5)("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.