Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/orxonox/objects/SpaceShip.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: 21.2 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 *      Benjamin Knecht
26 *
27 */
28
29#include "OrxonoxStableHeaders.h"
30#include "SpaceShip.h"
31
32#include <OgreCamera.h>
33#include <OgreRenderWindow.h>
34#include <OgreParticleSystem.h>
35#include <OgreSceneNode.h>
36
37#include "CameraHandler.h"
38#include "util/Convert.h"
39#include "util/Math.h"
40#include "core/CoreIncludes.h"
41#include "core/ConfigValueIncludes.h"
42#include "core/Debug.h"
43#include "GraphicsEngine.h"
44#include "core/input/InputManager.h"
45#include "tools/ParticleInterface.h"
46#include "RotatingProjectile.h"
47#include "ParticleProjectile.h"
48#include "core/XMLPort.h"
49#include "core/ConsoleCommand.h"
50#include "network/Client.h"
51#include "hud/HUD.h"
52
53namespace orxonox
54{
55    SetConsoleCommand(SpaceShip, setMaxSpeedTest, false).setAccessLevel(AccessLevel::Debug);
56    SetConsoleCommand(SpaceShip, whereAmI, true).setAccessLevel(AccessLevel::User);
57    SetConsoleCommand(SpaceShip, moveLongitudinal, true).setAccessLevel(AccessLevel::User).setDefaultValue(0, 1.0f).setAxisParamIndex(0).setKeybindMode(KeybindMode::OnHold);
58    SetConsoleCommand(SpaceShip, moveLateral, true).setAccessLevel(AccessLevel::User).setDefaultValue(0, 1.0f).setAxisParamIndex(0).setKeybindMode(KeybindMode::OnHold);
59    SetConsoleCommand(SpaceShip, moveYaw, true).setAccessLevel(AccessLevel::User).setDefaultValue(0, 1.0f).setAxisParamIndex(0).setKeybindMode(KeybindMode::OnHold);
60    SetConsoleCommand(SpaceShip, movePitch, true).setAccessLevel(AccessLevel::User).setDefaultValue(0, 1.0f).setAxisParamIndex(0).setKeybindMode(KeybindMode::OnHold);
61    SetConsoleCommand(SpaceShip, moveRoll, true).setAccessLevel(AccessLevel::User).setDefaultValue(0, 1.0f).setAxisParamIndex(0).setKeybindMode(KeybindMode::OnHold);
62    SetConsoleCommand(SpaceShip, fire, true).setAccessLevel(AccessLevel::User).setKeybindMode(KeybindMode::OnHold);
63    SetConsoleCommandGeneric(test1, SpaceShip, createConsoleCommand(createFunctor(&SpaceShip::setMaxSpeedTest), "setMaxSpeed"), false).setAccessLevel(AccessLevel::Debug);
64    SetConsoleCommandGeneric(test2, SpaceShip, createConsoleCommand(createFunctor(&SpaceShip::setMaxSpeedTest), "setMaxBlubber"), false).setAccessLevel(AccessLevel::Debug);
65    SetConsoleCommandGeneric(test3, SpaceShip, createConsoleCommand(createFunctor(&SpaceShip::setMaxSpeedTest), "setRofl"), false).setAccessLevel(AccessLevel::Debug);
66
67    CreateFactory(SpaceShip);
68
69    SpaceShip* SpaceShip::instance_s;
70
71
72    SpaceShip *SpaceShip::getLocalShip(){
73      Iterator<SpaceShip> it;
74      for(it = ObjectList<SpaceShip>::start(); it; ++it){
75        if( (it)->myShip_ )
76          return *it;
77      }
78      return NULL;
79    }
80
81    SpaceShip::SpaceShip()
82    {
83        RegisterObject(SpaceShip);
84
85        this->setRotationAxis(1, 0, 0);
86        this->setStatic(false);
87
88        this->zeroRadian_ = 0;
89        this->maxSideAndBackSpeed_ = 0;
90        this->maxSpeed_ = 0;
91        this->maxRotation_ = 0;
92        this->translationAcceleration_ = 0;
93        this->rotationAcceleration_ = 0;
94        this->translationDamping_ = 0;
95        this->rotationDamping_ = 0;
96        this->maxRotationRadian_ = 0;
97        this->rotationAccelerationRadian_ = 0;
98        this->rotationDampingRadian_ = 0;
99
100        this->cam_ = 0;
101        this->tt1_ = 0;
102        this->tt2_ = 0;
103
104        this->redNode_ = 0;
105        this->greenNode_ = 0;
106        this->blinkTime_ = 0;
107
108        this->timeToReload_ = 0;
109
110        this->setMouseEventCallback_ = false;
111        this->bLMousePressed_ = false;
112        this->bRMousePressed_ = false;
113        this->mouseXRotation_ = 0;
114        this->mouseYRotation_ = 0;
115        this->mouseX_ = 0;
116        this->mouseY_ = 0;
117        this->myShip_ = false;
118
119        this->registerAllVariables();
120
121        SpaceShip::instance_s = this;
122
123        this->setConfigValues();
124
125        this->initialDir_ = Vector3(1.0, 0.0, 0.0);
126        this->currentDir_ = initialDir_;
127        this->initialOrth_ = Vector3(0.0, 0.0, 1.0);
128        this->currentOrth_ = initialOrth_;
129
130        this->camName_ = this->getName() + "CamNode";
131
132        this->teamNr_ = 0;
133        this->health_ = 100;
134
135        COUT(3) << "Info: SpaceShip was loaded" << std::endl;
136    }
137
138    SpaceShip::~SpaceShip()
139    {
140        if (this->isInitialized())
141        {
142            if (this->tt1_)
143                delete this->tt1_;
144            if (this->tt2_)
145                delete this->tt2_;
146
147            if (setMouseEventCallback_)
148                InputManager::removeMouseHandler("SpaceShip");
149
150            if (this->cam_)
151                delete this->cam_;
152
153            if (!myShip_ && &HUD::getSingleton()!=NULL)
154              HUD::getSingleton().removeRadarObject(this->getNode());
155        }
156    }
157
158    bool SpaceShip::create(){
159      if(!myShip_){
160        if(network::Client::getSingleton() && objectID == network::Client::getSingleton()->getShipID())
161          myShip_=true;
162        else
163          HUD::getSingleton().addRadarObject(this->getNode(), 3);
164      }
165      if(Model::create())
166        this->init();
167      else
168        return false;
169      return true;
170    }
171
172    void SpaceShip::registerAllVariables(){
173      registerVar( &camName_, camName_.length()+1, network::STRING, 0x1 );
174      registerVar( &maxSpeed_, sizeof(maxSpeed_), network::DATA, 0x1);
175      registerVar( &maxSideAndBackSpeed_, sizeof(maxSideAndBackSpeed_), network::DATA, 0x1);
176      registerVar( &maxRotation_, sizeof(maxRotation_), network::DATA, 0x1);
177      registerVar( &translationAcceleration_, sizeof(translationAcceleration_), network::DATA, 0x1);
178      registerVar( &rotationAcceleration_, sizeof(rotationAcceleration_), network::DATA, 0x1);
179      registerVar( &rotationAccelerationRadian_, sizeof(rotationAccelerationRadian_), network::DATA, 0x1);
180      registerVar( &translationDamping_, sizeof(translationDamping_), network::DATA, 0x1);
181      registerVar( &rotationDamping_, sizeof(rotationDamping_), network::DATA, 0x1);
182      registerVar( &rotationDampingRadian_, sizeof(rotationDampingRadian_), network::DATA, 0x1);
183
184    }
185
186    void SpaceShip::init()
187    {
188        // START CREATING THRUSTER
189        this->tt1_ = new ParticleInterface("Orxonox/thruster1");
190        this->tt1_->createNewEmitter();
191        this->tt1_->getAllEmitters()->setDirection(-this->getInitialDir());
192        this->tt1_->getEmitter(0)->setPosition(Vector3(-15, 20, -1));
193        this->tt1_->getEmitter(1)->setPosition(Vector3(-15, -20, -1));
194        this->tt1_->setSpeedFactor(3.0);
195
196        Ogre::SceneNode* node2a = this->getNode()->createChildSceneNode(this->getName() + "particle2a");
197        node2a->setInheritScale(false);
198        node2a->setScale(1, 1, 1);
199        tt1_->addToSceneNode(node2a);
200
201        this->tt2_ = new ParticleInterface("Orxonox/thruster2");
202        this->tt2_->createNewEmitter();
203        this->tt2_->getAllEmitters()->setDirection(Vector3(-1, 0, 0));
204        this->tt2_->getEmitter(0)->setPosition(Vector3(-30, 40, -2));
205        this->tt2_->getEmitter(1)->setPosition(Vector3(-30, -40, -2));
206
207        Ogre::SceneNode* node2b = this->getNode()->createChildSceneNode(this->getName() + "particle2b");
208        node2b->setInheritScale(false);
209        node2b->setScale(0.5, 0.5, 0.5);
210        tt2_->addToSceneNode(node2b);
211        // END CREATING THRUSTER
212
213        // START CREATING BLINKING LIGHTS
214        this->redBillboard_.setBillboardSet("Examples/Flare", ColourValue(1.0, 0.0, 0.0), 1);
215        this->greenBillboard_.setBillboardSet("Examples/Flare", ColourValue(0.0, 1.0, 0.0), 1);
216
217        this->redNode_ = this->getNode()->createChildSceneNode(this->getName() + "red", Vector3(0.3, 4.0, -0.3));
218        this->redNode_->setInheritScale(false);
219        this->greenNode_ = this->getNode()->createChildSceneNode(this->getName() + "green", Vector3(0.3, -4.0, -0.3));
220        this->greenNode_->setInheritScale(false);
221
222        this->redNode_->attachObject(this->redBillboard_.getBillboardSet());
223        this->redNode_->setScale(0.3, 0.3, 0.3);
224
225        this->greenNode_->attachObject(this->greenBillboard_.getBillboardSet());
226        this->greenNode_->setScale(0.3, 0.3, 0.3);
227        // END CREATING BLINKING LIGHTS
228
229        if (this->isExactlyA(Class(SpaceShip)))
230        {
231            // START of testing crosshair
232            this->crosshairNear_.setBillboardSet("Orxonox/Crosshair", ColourValue(1.0, 1.0, 0.0), 1);
233            this->crosshairFar_.setBillboardSet("Orxonox/Crosshair", ColourValue(1.0, 1.0, 0.0), 1);
234
235            this->chNearNode_ = this->getNode()->createChildSceneNode(this->getName() + "near", Vector3(50.0, 0.0, 0.0));
236            this->chNearNode_->setInheritScale(false);
237            this->chFarNode_ = this->getNode()->createChildSceneNode(this->getName() + "far", Vector3(200.0, 0.0, 0.0));
238            this->chFarNode_->setInheritScale(false);
239
240            this->chNearNode_->attachObject(this->crosshairNear_.getBillboardSet());
241            this->chNearNode_->setScale(0.2, 0.2, 0.2);
242
243            this->chFarNode_->attachObject(this->crosshairFar_.getBillboardSet());
244            this->chFarNode_->setScale(0.4, 0.4, 0.4);
245        }
246
247        createCamera();
248        // END of testing crosshair
249    }
250
251    void SpaceShip::setConfigValues()
252    {
253        SetConfigValue(bInvertYAxis_, false).description("Set this to true for joystick-like mouse behaviour (mouse up = ship down).");
254        SetConfigValue(reloadTime_, 0.125).description("The reload time of the weapon in seconds");
255        SetConfigValue(testvector_, Vector3()).description("asdfblah");
256    }
257
258    void SpaceShip::changedVisibility()
259    {
260        Model::changedVisibility();
261
262        this->tt1_->setEnabled(this->isVisible());
263        this->tt2_->setEnabled(this->isVisible());
264        this->redBillboard_.setVisible(this->isVisible());
265        this->greenBillboard_.setVisible(this->isVisible());
266        this->crosshairNear_.setVisible(this->isVisible());
267        this->crosshairFar_.setVisible(this->isVisible());
268    }
269
270    void SpaceShip::changedActivity()
271    {
272        Model::changedActivity();
273
274        this->tt1_->setEnabled(this->isVisible());
275        this->tt2_->setEnabled(this->isVisible());
276        this->redBillboard_.setVisible(this->isVisible());
277        this->greenBillboard_.setVisible(this->isVisible());
278        this->crosshairNear_.setVisible(this->isVisible());
279        this->crosshairFar_.setVisible(this->isVisible());
280    }
281
282    void SpaceShip::setCamera(const std::string& camera)
283    {
284      camName_=camera;
285      // change camera attributes here, if you want to ;)
286    }
287
288    void SpaceShip::getFocus(){
289      COUT(4) << "requesting focus" << std::endl;
290      if(network::Client::getSingleton()==0 || network::Client::getSingleton()->getShipID()==objectID)
291        CameraHandler::getInstance()->requestFocus(cam_);
292
293    }
294
295    Camera* SpaceShip::getCamera(){
296        return cam_;
297    }
298
299    void SpaceShip::createCamera(){
300//       COUT(4) << "begin camera creation" << std::endl;
301      this->camNode_ = this->getNode()->createChildSceneNode(camName_);
302      COUT(4) << "position: (this)" << this->getNode()->getPosition() << std::endl;
303      this->camNode_->setPosition(Vector3(-25,0,5));
304//      Quaternion q1 = Quaternion(Radian(Degree(90)),Vector3(0,-1,0));
305//      Quaternion q2 = Quaternion(Radian(Degree(90)),Vector3(0,0,-1));
306//      camNode_->setOrientation(q1*q2);
307      COUT(4) << "position: (cam)" << this->camNode_->getPosition() << std::endl;
308      cam_ = new Camera(this->camNode_);
309
310      cam_->setTargetNode(this->getNode());
311//        cam->setPosition(Vector3(0,-350,0));
312      Quaternion q1 = Quaternion(Radian(Degree(90)),Vector3(0,-1,0));
313      Quaternion q2 = Quaternion(Radian(Degree(90)),Vector3(1,0,0));
314      this->camNode_->setOrientation(q2*q1);
315      if(network::Client::getSingleton()!=0 && network::Client::getSingleton()->getShipID()==objectID){
316        this->setBacksync(true);
317        CameraHandler::getInstance()->requestFocus(cam_);
318      }
319
320    }
321
322    void SpaceShip::setMaxSpeed(float value)
323    { this->maxSpeed_ = value; }
324    void SpaceShip::setMaxSideAndBackSpeed(float value)
325    { this->maxSideAndBackSpeed_ = value; }
326    void SpaceShip::setMaxRotation(float value)
327    { this->maxRotation_ = value; this->maxRotationRadian_ = Radian(value); }
328    void SpaceShip::setTransAcc(float value)
329    { this->translationAcceleration_ = value; }
330    void SpaceShip::setRotAcc(float value)
331    { this->rotationAcceleration_ = value; this->rotationAccelerationRadian_ = Radian(value); }
332    void SpaceShip::setTransDamp(float value)
333    { this->translationDamping_ = value; }
334    void SpaceShip::setRotDamp(float value)
335    { this->rotationDamping_ = value; this->rotationDampingRadian_ = Radian(value); }
336
337    /**
338        @brief XML loading and saving.
339        @param xmlelement The XML-element
340        @param loading Loading (true) or saving (false)
341        @return The XML-element
342    */
343    void SpaceShip::XMLPort(Element& xmlelement, XMLPort::Mode mode)
344    {
345        Model::XMLPort(xmlelement, mode);
346
347        XMLPortParamLoadOnly(SpaceShip, "camera", setCamera, xmlelement, mode);
348        XMLPortParamLoadOnly(SpaceShip, "maxSpeed", setMaxSpeed, xmlelement, mode);
349        XMLPortParamLoadOnly(SpaceShip, "maxSideAndBackSpeed", setMaxSideAndBackSpeed, xmlelement, mode);
350        XMLPortParamLoadOnly(SpaceShip, "maxRotation", setMaxRotation, xmlelement, mode);
351        XMLPortParamLoadOnly(SpaceShip, "transAcc", setTransAcc, xmlelement, mode);
352        XMLPortParamLoadOnly(SpaceShip, "rotAcc", setRotAcc, xmlelement, mode);
353        XMLPortParamLoadOnly(SpaceShip, "transDamp", setTransDamp, xmlelement, mode);
354        XMLPortParamLoadOnly(SpaceShip, "rotDamp", setRotDamp, xmlelement, mode);
355        myShip_=true; // TODO: this is only a hack
356
357        SpaceShip::create();
358        if (this->isExactlyA(Class(SpaceShip)))
359            getFocus();
360    }
361
362    int sgn(float x)
363    {
364        if (x >= 0)
365            return 1;
366        else
367            return -1;
368    }
369
370    std::string SpaceShip::whereAmI() {
371        return getConvertedValue<float, std::string>(SpaceShip::getLocalShip()->getPosition().x)
372        + "  " + getConvertedValue<float, std::string>(SpaceShip::getLocalShip()->getPosition().y)
373        + "  " + getConvertedValue<float, std::string>(SpaceShip::getLocalShip()->getPosition().z);
374    }
375
376    void SpaceShip::tick(float dt)
377    {
378        if (!this->isActive())
379            return;
380
381        currentDir_ = getOrientation()*initialDir_;
382                currentOrth_ = getOrientation()*initialOrth_;
383
384        if (this->cam_)
385            this->cam_->tick(dt);
386
387        if (this->redNode_ && this->greenNode_)
388        {
389            this->blinkTime_ += dt;
390            float redScale = 0.15 + 0.15 * sin(this->blinkTime_ * 10.0);
391            float greenScale = 0.15 - 0.15 * sin(this->blinkTime_ * 10.0);
392            this->redNode_->setScale(redScale, redScale, redScale);
393            this->greenNode_->setScale(greenScale, greenScale, greenScale);
394        }
395
396        if (this->timeToReload_ > 0)
397            this->timeToReload_ -= dt;
398        else
399            this->timeToReload_ = 0;
400
401        if (this->bLMousePressed_ && this->timeToReload_ <= 0)
402        {
403
404            BillboardProjectile* projectile = new ParticleProjectile(this);
405            projectile->setColour(this->getProjectileColour());
406            projectile->create();
407            if (projectile->classID == 0)
408            {
409              COUT(3) << "generated projectile with classid 0" <<  std::endl; // TODO: remove this output
410            }
411
412            projectile->setBacksync(true);
413            this->timeToReload_ = this->reloadTime_;
414        }
415
416
417        // #####################################
418        // ############# STEERING ##############
419        // #####################################
420
421        if (this->velocity_.x > this->maxSpeed_)
422            this->velocity_.x = this->maxSpeed_;
423        if (this->velocity_.x < -this->maxSideAndBackSpeed_)
424            this->velocity_.x = -this->maxSideAndBackSpeed_;
425        if (this->velocity_.y > this->maxSideAndBackSpeed_)
426            this->velocity_.y = this->maxSideAndBackSpeed_;
427        if (this->velocity_.y < -this->maxSideAndBackSpeed_)
428            this->velocity_.y = -this->maxSideAndBackSpeed_;
429        if (this->rotationRate_ > this->maxRotationRadian_)
430            this->rotationRate_ = this->maxRotationRadian_;
431        if (this->rotationRate_ < -this->maxRotationRadian_)
432            this->rotationRate_ = -this->maxRotationRadian_;
433
434        if (this->acceleration_.x == 0)
435        {
436            if (this->velocity_.x > 0)
437            {
438                this->velocity_.x -= (this->translationDamping_ * dt);
439                if (this->velocity_.x < 0)
440                    this->velocity_.x = 0;
441            }
442            else if (this->velocity_.x < 0)
443            {
444                this->velocity_.x += (this->translationDamping_ * dt);
445                if (this->velocity_.x > 0)
446                    this->velocity_.x = 0;
447            }
448        }
449
450        if (this->acceleration_.y == 0)
451        {
452            if (this->velocity_.y > 0)
453            {
454                this->velocity_.y -= (this->translationDamping_ * dt);
455                if (this->velocity_.y < 0)
456                    this->velocity_.y = 0;
457            }
458            else if (this->velocity_.y < 0)
459            {
460                this->velocity_.y += (this->translationDamping_ * dt);
461                if (this->velocity_.y > 0)
462                    this->velocity_.y = 0;
463            }
464        }
465
466        if (this->momentum_ == this->zeroRadian_)
467        {
468            if (this->rotationRate_ > this->zeroRadian_)
469            {
470                this->rotationRate_ -= (this->rotationDampingRadian_ * dt);
471                if (this->rotationRate_ < this->zeroRadian_)
472                    this->rotationRate_ = 0;
473            }
474            else if (this->rotationRate_ < this->zeroRadian_)
475            {
476                this->rotationRate_ += (this->rotationDampingRadian_ * dt);
477                if (this->rotationRate_ > this->zeroRadian_)
478                    this->rotationRate_ = 0;
479            }
480        }
481
482
483        WorldEntity::tick(dt);
484
485        this->roll(this->mouseXRotation_ * dt);
486        if (this->bInvertYAxis_)
487            this->yaw(Radian(-this->mouseYRotation_ * dt));
488        else
489            this->yaw(Radian(this->mouseYRotation_ * dt));
490
491        if (this->acceleration_.x > 0)
492        {
493            this->tt1_->setEnabled(true);
494            this->tt2_->setEnabled(true);
495        }
496        else
497        {
498            this->tt1_->setEnabled(false);
499            this->tt2_->setEnabled(false);
500        }
501
502        if( myShip_ )
503        {
504          COUT(5) << "steering our ship: " << objectID << std::endl;
505          this->acceleration_.x = 0;
506          this->acceleration_.y = 0;
507          this->momentum_ = 0;
508          this->mouseXRotation_ = Radian(0);
509          this->mouseYRotation_ = Radian(0);
510          this->bLMousePressed_ = false;
511        }/*else
512          COUT(4) << "not steering ship: " << objectID << " our ship: " << network::Client::getSingleton()->getShipID() << std::endl;*/
513    }
514
515    void SpaceShip::movePitch(float val)
516    {   getLocalShip()->setMovePitch(val);   }
517    void SpaceShip::moveYaw(float val)
518    {   getLocalShip()->setMoveYaw(val);   }
519    void SpaceShip::moveRoll(float val)
520    {   getLocalShip()->setMoveRoll(val);   }
521    void SpaceShip::moveLongitudinal(float val)
522    {   getLocalShip()->setMoveLongitudinal(val);   }
523    void SpaceShip::moveLateral(float val)
524    {   getLocalShip()->setMoveLateral(val);   }
525    void SpaceShip::fire()
526    {   getLocalShip()->doFire();   }
527
528    void SpaceShip::setMovePitch(float val)
529    {
530        val = -val * val * sgn(val) * this->rotationAcceleration_;
531        if (val > this->maxRotation_)
532            val = this->maxRotation_;
533        if (val < -this->maxRotation_)
534            val = -this->maxRotation_;
535        this->mouseYRotation_ = Radian(val);
536    }
537
538    void SpaceShip::setMoveYaw(float val)
539    {
540        val = -val * val * sgn(val) * this->rotationAcceleration_;
541        if (val > this->maxRotation_)
542            val = this->maxRotation_;
543        if (val < -this->maxRotation_)
544            val = -this->maxRotation_;
545        this->mouseXRotation_ = Radian(val);
546    }
547
548    void SpaceShip::setMoveRoll(float val)
549    {
550        this->momentum_ = Radian(-this->rotationAccelerationRadian_ * val);
551        //COUT(3) << "rotating val: " << val << " acceleration: " << this->rotationAccelerationRadian_.valueDegrees() << std::endl;
552    }
553
554    void SpaceShip::setMoveLongitudinal(float val)
555    {
556        this->acceleration_.x = this->translationAcceleration_ * val;
557    }
558
559    void SpaceShip::setMoveLateral(float val)
560    {
561        this->acceleration_.y = -this->translationAcceleration_ * val;
562    }
563
564    void SpaceShip::doFire()
565    {
566        this->bLMousePressed_ = true;
567    }
568}
Note: See TracBrowser for help on using the repository browser.