Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/orxonox/objects/WorldEntity.cc @ 1559

Last change on this file since 1559 was 1559, checked in by landauf, 16 years ago

used isInitialized() in destructors where needed and changed constructors back to normal variable initialization instead of the "myclass() : variable(value), …" pattern. in my opinion this is much more comfortable and I hope everyone agrees ;)

  • Property svn:eol-style set to native
File size: 7.5 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *                    > www.orxonox.net <
4 *
5 *
6 *   License notice:
7 *
8 *   This program is free software; you can redistribute it and/or
9 *   modify it under the terms of the GNU General Public License
10 *   as published by the Free Software Foundation; either version 2
11 *   of the License, or (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 *
22 *   Author:
23 *      Fabian 'x3n' Landau
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29#include "OrxonoxStableHeaders.h"
30#include "WorldEntity.h"
31
32#include <string>
33#include <sstream>
34
35#include "tinyxml/tinyxml.h"
36#include "util/SubString.h"
37#include "core/CoreIncludes.h"
38#include "GraphicsEngine.h"
39#include "core/XMLPort.h"
40
41namespace orxonox
42{
43    CreateFactory(WorldEntity);
44
45    unsigned int WorldEntity::worldEntityCounter_s = 0;
46
47    WorldEntity::WorldEntity()
48    {
49        RegisterObject(WorldEntity);
50
51        if (GraphicsEngine::getSingleton().getSceneManager())
52        {
53            std::ostringstream name;
54            name << (WorldEntity::worldEntityCounter_s++);
55            this->setName("WorldEntity" + name.str());
56            this->node_ = GraphicsEngine::getSingleton().getSceneManager()->getRootSceneNode()->createChildSceneNode(this->getName());
57
58            registerAllVariables();
59        }
60        else
61        {
62            this->node_ = 0;
63        }
64
65        this->bStatic_ = true;
66        this->velocity_ = Vector3(0, 0, 0);
67        this->acceleration_ = Vector3(0, 0, 0);
68        this->rotationAxis_ = Vector3(0, 1, 0);
69        this->rotationRate_ = 0;
70        this->momentum_ = 0;
71    }
72
73
74    WorldEntity::~WorldEntity()
75    {
76        if (this->isInitialized())
77        {
78            this->getNode()->removeAndDestroyAllChildren();
79            GraphicsEngine::getSingleton().getSceneManager()->destroySceneNode(this->getName());
80        }
81    }
82
83    void WorldEntity::tick(float dt)
84    {
85        if (!this->bStatic_ && this->isActive())
86        {
87//             COUT(4) << "acceleration: " << this->acceleration_ << " velocity: " << this->velocity_ << std::endl;
88            this->velocity_ += (dt * this->acceleration_);
89            this->translate(dt * this->velocity_, Ogre::Node::TS_LOCAL);
90
91            this->rotationRate_ += (dt * this->momentum_);
92            this->rotate(this->rotationAxis_, dt * this->rotationRate_);
93            //COUT(3) << "rotationrate: " << this->rotationRate_.valueDegrees() << " momentum: " << this->momentum_.valueDegrees() << std::endl;
94        }
95    }
96
97    void WorldEntity::loadParams(TiXmlElement* xmlElem)
98    {
99
100        BaseObject::loadParams(xmlElem);
101        create();
102    }
103
104
105    void WorldEntity::setYawPitchRoll(const Degree& yaw, const Degree& pitch, const Degree& roll)
106    {
107        this->yaw(yaw);
108        this->pitch(pitch);
109        this->roll(roll);
110    }
111
112    /**
113        @brief XML loading and saving.
114        @param xmlelement The XML-element
115        @param loading Loading (true) or saving (false)
116        @return The XML-element
117    */
118    void WorldEntity::XMLPort(Element& xmlelement, XMLPort::Mode mode)
119    {
120        BaseObject::XMLPort(xmlelement, mode);
121
122        XMLPortParam(WorldEntity, "position", setPositionLoader2, getPosition, xmlelement, mode);
123        XMLPortParamLoadOnly(WorldEntity, "direction", setDirectionLoader, xmlelement, mode);
124        XMLPortParamLoadOnly(WorldEntity, "yawpitchroll", setYawPitchRoll, xmlelement, mode);
125        XMLPortParam(WorldEntity, "scale", setTotalScale, getScale, xmlelement, mode);
126        XMLPortParam(WorldEntity, "rotationAxis", setRotationAxisLoader, getRotationAxis, xmlelement, mode);
127        XMLPortParam(WorldEntity, "rotationRate", setRotationRate, getRotationRate, xmlelement, mode);
128
129        XMLPortObject(WorldEntity, WorldEntity, "attached", attachWorldEntity, getAttachedWorldEntity, xmlelement, mode, false, true);
130
131        WorldEntity::create();
132    }
133
134
135    void WorldEntity::registerAllVariables()
136    {
137      // register inheritec variables from BaseObject
138      registerVar( (void*) &(this->bActive_), sizeof(this->bActive_), network::DATA, 0x3);
139      registerVar( (void*) &(this->bVisible_), sizeof(this->bVisible_), network::DATA, 0x3);
140      // register coordinates
141      registerVar( (void*) &(this->getPosition().x), sizeof(this->getPosition().x), network::DATA, 0x3);
142      registerVar( (void*) &(this->getPosition().y), sizeof(this->getPosition().y), network::DATA, 0x3);
143      registerVar( (void*) &(this->getPosition().z), sizeof(this->getPosition().z), network::DATA, 0x3);
144      // register orientation
145      registerVar( (void*) &(this->getOrientation().w), sizeof(this->getOrientation().w), network::DATA, 0x3);
146      registerVar( (void*) &(this->getOrientation().x), sizeof(this->getOrientation().x), network::DATA, 0x3);
147      registerVar( (void*) &(this->getOrientation().y), sizeof(this->getOrientation().y), network::DATA, 0x3);
148      registerVar( (void*) &(this->getOrientation().z), sizeof(this->getOrientation().z), network::DATA, 0x3);
149      // register velocity_
150      registerVar( (void*) &(this->getVelocity().x), sizeof(this->getVelocity().x), network::DATA, 0x3);
151      registerVar( (void*) &(this->getVelocity().y), sizeof(this->getVelocity().y), network::DATA, 0x3);
152      registerVar( (void*) &(this->getVelocity().z), sizeof(this->getVelocity().z), network::DATA, 0x3);
153      // register rotationAxis/rate
154      registerVar( (void*) &(this->getRotationRate()), sizeof(this->getRotationRate()), network::DATA, 0x3);
155      registerVar( (void*) &(this->getRotationAxis().x), sizeof(this->getRotationAxis().x), network::DATA, 0x3);
156      registerVar( (void*) &(this->getRotationAxis().y), sizeof(this->getRotationAxis().y), network::DATA, 0x3);
157      registerVar( (void*) &(this->getRotationAxis().z), sizeof(this->getRotationAxis().z), network::DATA, 0x3);
158      // register scale of node
159      registerVar( (void*) &(this->getScale().x), sizeof(this->getScale().x), network::DATA, 0x3);
160      registerVar( (void*) &(this->getScale().y), sizeof(this->getScale().y), network::DATA, 0x3);
161      registerVar( (void*) &(this->getScale().z), sizeof(this->getScale().z), network::DATA, 0x3);
162      //register staticity
163      registerVar( (void*) &(this->bStatic_), sizeof(this->bStatic_), network::DATA, 0x3);
164      //register acceleration & momentum
165//       registerVar( (void*) &(this->getAcceleration().x), sizeof(this->getAcceleration().x), network::DATA, 0x2);
166//       registerVar( (void*) &(this->getAcceleration().y), sizeof(this->getAcceleration().y), network::DATA, 0x2);
167//       registerVar( (void*) &(this->getAcceleration().z), sizeof(this->getAcceleration().z), network::DATA, 0x2);
168//       registerVar( (void*) &(this->getMomentum()), sizeof(this->getMomentum()), network::DATA, 0x2); // only backsync
169    }
170
171    void WorldEntity::attachWorldEntity(WorldEntity* entity)
172    {
173        this->attachedWorldEntities_.push_back(entity);
174    }
175
176    const WorldEntity* WorldEntity::getAttachedWorldEntity(unsigned int index) const
177    {
178        if (index < this->attachedWorldEntities_.size())
179            return this->attachedWorldEntities_[index];
180        else
181            return 0;
182    }
183}
Note: See TracBrowser for help on using the repository browser.