Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/core3/src/orxonox/objects/SpaceShip.cc @ 1591

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

Again some heavy changes in ObjectList and Iterator:
there are now two types of iterators:

Iterator<ClassName> can iterate through any objectlist, either given by ObjectList<AnyClassName>::begin() or anyidentifier→getObjects()→begin(). Important note Iterator<ClassName> uses dynamic_cast.
And yes, it's possible to do this: Iterator<WorldEntity> it = ObjectList<SpaceShip>::begin()

ObjectList<ClassName>::iterator is the second iterator - it uses the ObjectList in a templated manner and therefore doesn't need dynamic_cast. But the only thing you can do is iterating through exactly the right ObjectList: ObjectList<ClassName>::iterator it = ObjectList<ClassName>::begin(). Anything else fails.

Those changes bring, at my system, something around +12% FPS compared with trunk and +25% FPS compared with the last revision of core3. Although I have to admit the FPS gain is only that high because iterating through objects is the main thing we're doing ingame right now. It would look totally different with physics, sound, AI, scripts, triggers and so on.

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