Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/Waypoints_HS17/src/orxonox/worldentities/Arrow.cc @ 11634

Last change on this file since 11634 was 11559, checked in by jostoffe, 7 years ago

Pfeil wird angezeigt und fliegt mit dem Raumschiff mit, aber er ist noch nicht an der richtigen Position. Dazu muss ich noch die richtige Formel finden anhand der momentanen Ausrichtung des Raumschiffes

File size: 6.9 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 *      Oli Scheuss
24 *   Co-authors:
25 *      Damian 'Mozork' Frick
26 *
27 */
28
29#include "Arrow.h"
30
31#include "core/CoreIncludes.h"
32#include "BulletDynamics/Dynamics/btRigidBody.h"
33
34namespace orxonox
35{
36    //TODO: Put your code in here:
37    // Create the factory for the drone.
38    RegisterClass(Arrow);
39    /**
40    @brief
41        Constructor. Registers the object and initializes some default values.
42    @param creator
43        The creator of this object.
44    */
45    Arrow::Arrow(Context* context) : ControllableEntity(context)
46    {
47        //TODO: Put your code in here:
48        // Register the drone class to the core.
49        RegisterObject(Arrow);
50
51        //this->myController_ = NULL;
52
53        this->localLinearAcceleration_.setValue(0, 0, 0);
54        this->localAngularAcceleration_.setValue(0, 0, 0);
55        this->primaryThrust_  = 100;
56        this->auxiliaryThrust_ = 100;
57        this->rotationThrust_ = 10;
58
59        this->setCollisionType(CollisionType::Dynamic);
60
61        //this->myController_ = new ArrowController(this); // Creates a new controller and passes our this pointer to it as creator.
62    }
63
64    /**
65    @brief
66        Destructor. Destroys controller, if present.
67    */
68    Arrow::~Arrow()
69    {
70        // Deletes the controller if the object was initialized and the pointer to the controller is not NULL.
71       // if( this->isInitialized() && this->myController_ != NULL )
72            //delete this->myController_;
73    }
74
75    /**
76    @brief
77        Method for creating a Arrow through XML.
78    */
79    void Arrow::XMLPort(Element& xmlelement, XMLPort::Mode mode)
80    {
81        // This calls the XMLPort function of the parent class
82        SUPER(Arrow, XMLPort, xmlelement, mode);
83
84        XMLPortParam(Arrow, "primaryThrust", setPrimaryThrust, getPrimaryThrust, xmlelement, mode);
85        //TODO: Put your code in here:
86        XMLPortParam(Arrow, "auxiliaryThrust", setAuxiliaryThrust, getAuxiliaryThrust, xmlelement, mode);
87        XMLPortParam(Arrow, "rotationThrust", setRotationThrust, getRotationThrust, xmlelement, mode);
88        // Make sure you add the variables auxiliaryThrust_ and rotationThrust_ to XMLPort.
89        // Variables can be added by the following command
90        // XMLPortParam(Classname, "xml-attribute-name (i.e. variablename)", setFunctionName, getFunctionName, xmlelement, mode);
91        // Also make sure that you also create the get- and set-functions in Arrow.h. As you can see, the get- and set-functions for the variable primaryThrust_ has already been specified there, so you can get your inspiration from there.
92       
93
94    }
95
96    /**
97    @brief
98        Defines which actions the Arrow has to take in each tick.
99    @param dt
100        The length of the tick.
101    */
102    void Arrow::tick(float dt)
103    {
104        SUPER(Arrow, tick, dt);
105
106        this->localLinearAcceleration_.setX(this->localLinearAcceleration_.x() * getMass() * this->auxiliaryThrust_);
107        this->localLinearAcceleration_.setY(this->localLinearAcceleration_.y() * getMass() * this->auxiliaryThrust_);
108        if (this->localLinearAcceleration_.z() > 0)
109            this->localLinearAcceleration_.setZ(this->localLinearAcceleration_.z() * getMass() * this->auxiliaryThrust_);
110        else
111            this->localLinearAcceleration_.setZ(this->localLinearAcceleration_.z() * getMass() * this->primaryThrust_);
112        this->physicalBody_->applyCentralForce(physicalBody_->getWorldTransform().getBasis() * this->localLinearAcceleration_);
113        this->localLinearAcceleration_.setValue(0, 0, 0);
114
115        this->localAngularAcceleration_ *= this->getLocalInertia() * this->rotationThrust_;
116        this->physicalBody_->applyTorque(physicalBody_->getWorldTransform().getBasis() * this->localAngularAcceleration_);
117        this->localAngularAcceleration_.setValue(0, 0, 0);
118    }
119
120    /**
121    @brief
122        Moves the Arrow in the negative z-direction (Front/Back) by an amount specified by the first component of the input 2-dim vector.
123    @param value
124        The vector determining the amount of the movement.
125    */
126    void Arrow::moveFrontBack(const Vector2& value)
127    {
128        this->localLinearAcceleration_.setZ(this->localLinearAcceleration_.z() - value.x);
129    }
130
131    /**
132    @brief
133        Moves the Arrow in the x-direction (Right/Left) by an amount specified by the first component of the input 2-dim vector.
134    @param value
135        The vector determining the amount of the movement.
136    */
137    void Arrow::moveRightLeft(const Vector2& value)
138    {
139        this->localLinearAcceleration_.setX(this->localLinearAcceleration_.x() + value.x);
140    }
141
142    /**
143    @brief
144        Moves the Arrow in the y-direction (Up/Down) by an amount specified by the first component of the input 2-dim vector.
145    @param value
146        The vector determining the amount of the movement.
147    */
148    void Arrow::moveUpDown(const Vector2& value)
149    {
150        this->localLinearAcceleration_.setY(this->localLinearAcceleration_.y() + value.x);
151    }
152
153    /**
154    @brief
155        Rotates the Arrow around the y-axis by the amount specified by the first component of the input 2-dim vector.
156    @param value
157        The vector determining the amount of the angular movement.
158    */
159    void Arrow::rotateYaw(const Vector2& value)
160    {
161        this->localAngularAcceleration_.setY(this->localAngularAcceleration_.y() - value.x);
162    }
163
164    /**
165    @brief
166        Rotates the Arrow around the x-axis by the amount specified by the first component of the input 2-dim vector.
167    @param value
168        The vector determining the amount of the angular movement.
169    */
170    void Arrow::rotatePitch(const Vector2& value)
171    {
172        this->localAngularAcceleration_.setX(this->localAngularAcceleration_.x() + value.x);
173    }
174
175    /**
176    @brief
177        Rotates the Arrow around the z-axis by the amount specified by the first component of the input 2-dim vector.
178    @param value
179        The vector determining the amount of the angular movement.
180    */
181    void Arrow::rotateRoll(const Vector2& value)
182    {
183        this->localAngularAcceleration_.setZ(this->localAngularAcceleration_.z() + value.x);
184    }
185
186
187}
Note: See TracBrowser for help on using the repository browser.