Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/orxonox/objects/SpaceShip.cc @ 1558

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

added support for isVisible() and isActive() to all objects.
those functions are provided by BaseObject, combined with virtual functions changedVisibility and changedActivity respectively.
use them, to make orxonox scriptable, say: to change the state of objects with 2 simple functions instead of changing all meshes and emitters and billboards of an object. don't forget to pass calls to changedVisibility and changedActivity to the parent class.

additionally there is a new function, isInitialized(), provided by BaseObject too. this returns true if the constructor of BaseObject passed the object registration. this allows you, to check whether an object was properly initialized or if the constructor returned (as this is the case while creating the class hierarchy). use isInitialized() in your destructor before deleting something.

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