Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/presentation2/src/orxonox/controllers/NewHumanController.cc @ 6376

Last change on this file since 6376 was 6376, checked in by rgrieder, 15 years ago

Removed some more debug output.

  • Property svn:eol-style set to native
File size: 24.3 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 *      Michael Wirth
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29#include "NewHumanController.h"
30
31#include <cmath>
32#include <OgreRay.h>
33#include <OgreSceneQuery.h>
34#include <OgreCamera.h>
35#include <OgreSceneManager.h>
36
37#include "core/CoreIncludes.h"
38#include "core/ConsoleCommand.h"
39#include "worldentities/ControllableEntity.h"
40#include "worldentities/pawns/Pawn.h"
41#include "infos/PlayerInfo.h"
42#include "overlays/OrxonoxOverlay.h"
43#include "graphics/Camera.h"
44#include "sound/SoundManager.h"
45#include "Scene.h"
46#include "tools/BulletConversions.h"
47#include "bullet/BulletCollision/NarrowPhaseCollision/btManifoldPoint.h"
48
49namespace orxonox
50{
51    SetConsoleCommand(NewHumanController, changeMode,          false).keybindMode(KeybindMode::OnPress);
52    SetConsoleCommand(NewHumanController, accelerate,          false).keybindMode(KeybindMode::OnPress);
53    SetConsoleCommand(NewHumanController, decelerate,          false).keybindMode(KeybindMode::OnPress);
54    SetConsoleCommand(NewHumanController, unfire,              true).keybindMode(KeybindMode::OnRelease);
55
56    CreateUnloadableFactory(NewHumanController);
57
58    NewHumanController* NewHumanController::localController_s = 0;
59
60    NewHumanController::NewHumanController(BaseObject* creator)
61        : HumanController(creator)
62        , crossHairOverlay_(NULL)
63        , centerOverlay_(NULL)
64        , damageOverlayTop_(NULL)
65        , damageOverlayRight_(NULL)
66        , damageOverlayBottom_(NULL)
67        , damageOverlayLeft_(NULL)
68        , damageOverlayTT_(0)
69        , arrowsOverlay1_(NULL)
70        , arrowsOverlay2_(NULL)
71        , arrowsOverlay3_(NULL)
72        , arrowsOverlay4_(NULL)
73    {
74        RegisterObject(NewHumanController);
75
76        overlaySize_ = 0.08;
77        arrowsSize_ = 0.4;
78
79        damageOverlayTime_ = 0.6;
80
81        controlMode_ = 0;
82        acceleration_ = 0;
83        accelerating_ = false;
84        firemode_ = -1;
85
86        showArrows_ = true;
87        showOverlays_ = false;
88        showDamageOverlay_ = true;
89
90        //currentPitch_ = 1;
91        //currentYaw_ = 1;
92
93        if (GameMode::showsGraphics())
94        {
95            crossHairOverlay_ = new OrxonoxOverlay(this);
96            crossHairOverlay_->setBackgroundMaterial("Orxonox/Crosshair3");
97            crossHairOverlay_->setSize(Vector2(overlaySize_, overlaySize_));
98            crossHairOverlay_->hide();
99            //crossHairOverlay_->setAspectCorrection(true); not working
100
101            centerOverlay_ = new OrxonoxOverlay(this);
102            centerOverlay_->setBackgroundMaterial("Orxonox/CenterOverlay");
103            centerOverlay_->setSize(Vector2(overlaySize_ * 2.5, overlaySize_ * 2.5));
104            centerOverlay_->setPosition(Vector2(0.5 - overlaySize_*2.5/2.0, 0.5 - overlaySize_*2.5/2.0));\
105            centerOverlay_->hide();
106
107            if ( showDamageOverlay_ )
108            {
109                damageOverlayTop_ = new OrxonoxOverlay(this);
110                damageOverlayTop_->setBackgroundMaterial("Orxonox/DamageOverlayTop");
111                damageOverlayTop_->setSize(Vector2(overlaySize_ * 2.5, overlaySize_ * 2.5));
112                damageOverlayTop_->setPosition(Vector2(0.5 - overlaySize_*2.5/2.0, 0.5 - overlaySize_*2.5/2.0));\
113                damageOverlayTop_->hide();
114
115                damageOverlayRight_ = new OrxonoxOverlay(this);
116                damageOverlayRight_->setBackgroundMaterial("Orxonox/DamageOverlayRight");
117                damageOverlayRight_->setSize(Vector2(overlaySize_ * 2.5, overlaySize_ * 2.5));
118                damageOverlayRight_->setPosition(Vector2(0.5 - overlaySize_*2.5/2.0, 0.5 - overlaySize_*2.5/2.0));\
119                damageOverlayRight_->hide();
120
121                damageOverlayBottom_ = new OrxonoxOverlay(this);
122                damageOverlayBottom_->setBackgroundMaterial("Orxonox/DamageOverlayBottom");
123                damageOverlayBottom_->setSize(Vector2(overlaySize_ * 2.5, overlaySize_ * 2.5));
124                damageOverlayBottom_->setPosition(Vector2(0.5 - overlaySize_*2.5/2.0, 0.5 - overlaySize_*2.5/2.0));\
125                damageOverlayBottom_->hide();
126
127                damageOverlayLeft_ = new OrxonoxOverlay(this);
128                damageOverlayLeft_->setBackgroundMaterial("Orxonox/DamageOverlayLeft");
129                damageOverlayLeft_->setSize(Vector2(overlaySize_ * 2.5, overlaySize_ * 2.5));
130                damageOverlayLeft_->setPosition(Vector2(0.5 - overlaySize_*2.5/2.0, 0.5 - overlaySize_*2.5/2.0));\
131                damageOverlayLeft_->hide();
132            }
133
134            if ( showArrows_ )
135            {
136                arrowsOverlay1_ = new OrxonoxOverlay(this);
137                arrowsOverlay1_->setBackgroundMaterial("Orxonox/DirectionArrows1");
138                arrowsOverlay1_->setSize(Vector2(0.02727, 0.36 * arrowsSize_));
139                arrowsOverlay1_->setPickPoint(Vector2(0.5, 0.5));
140                arrowsOverlay1_->setPosition(Vector2(0.5, 0.5));
141                arrowsOverlay1_->hide();
142   
143                arrowsOverlay2_ = new OrxonoxOverlay(this);
144                arrowsOverlay2_->setBackgroundMaterial("Orxonox/DirectionArrows2");
145                arrowsOverlay2_->setSize(Vector2(0.02727, 0.59 * arrowsSize_));
146                arrowsOverlay2_->setPickPoint(Vector2(0.5, 0.5));
147                arrowsOverlay2_->setPosition(Vector2(0.5, 0.5));
148                arrowsOverlay2_->hide();
149   
150                arrowsOverlay3_ = new OrxonoxOverlay(this);
151                arrowsOverlay3_->setBackgroundMaterial("Orxonox/DirectionArrows3");
152                arrowsOverlay3_->setSize(Vector2(0.02727, 0.77 * arrowsSize_));
153                arrowsOverlay3_->setPickPoint(Vector2(0.5, 0.5));
154                arrowsOverlay3_->setPosition(Vector2(0.5, 0.5));
155                arrowsOverlay3_->hide();
156   
157                arrowsOverlay4_ = new OrxonoxOverlay(this);
158                arrowsOverlay4_->setBackgroundMaterial("Orxonox/DirectionArrows4");
159                arrowsOverlay4_->setSize(Vector2(0.02727, arrowsSize_));
160                arrowsOverlay4_->setPickPoint(Vector2(0.5, 0.5));
161                arrowsOverlay4_->setPosition(Vector2(0.5, 0.5));
162                arrowsOverlay4_->hide();
163            }
164        }
165
166        // HACK: Define which objects are targetable when considering the creator of an orxonox::Model
167        this->targetMask_.exclude(ClassByString("BaseObject"));
168        this->targetMask_.include(ClassByString("WorldEntity"));
169        this->targetMask_.exclude(ClassByString("Projectile"));
170
171        NewHumanController::localController_s = this;
172
173        controlPaused_ = false;
174
175//HumanController::localController_s->getControllableEntity()->getCamera()->setDrag(true);
176    }
177
178    NewHumanController::~NewHumanController()
179    {
180        if (this->isInitialized())
181        {
182            if (this->crossHairOverlay_)
183                this->crossHairOverlay_->destroy();
184            if (this->centerOverlay_)
185                this->centerOverlay_->destroy();
186
187            if (showArrows_)
188            {
189                if (this->arrowsOverlay1_)
190                    this->arrowsOverlay1_->destroy();
191                if (this->arrowsOverlay2_)
192                    this->arrowsOverlay2_->destroy();
193                if (this->arrowsOverlay3_)
194                    this->arrowsOverlay3_->destroy();
195                if (this->arrowsOverlay4_)
196                    this->arrowsOverlay4_->destroy();
197            }
198        }
199    }
200
201    void NewHumanController::tick(float dt)
202    {
203        if (GameMode::showsGraphics())
204        {
205
206            if( this->controllableEntity_ && !this->controllableEntity_->isInMouseLook() )
207            {
208                this->updateTarget();
209
210                if ( !controlPaused_ ) {
211                    if (this->getControllableEntity() && (this->getControllableEntity()->getIdentifier()->getName() == "SpaceShip" || this->getControllableEntity()->getIdentifier()->getName() == "Rocket"))
212                        this->showOverlays();
213
214                    this->crossHairOverlay_->setPosition(Vector2(static_cast<float>(this->currentYaw_)/2*-1+.5-overlaySize_/2, static_cast<float>(this->currentPitch_)/2*-1+.5-overlaySize_/2));
215
216                    if ( this->controlMode_ == 0 || ( this->controlMode_ == 1 && this->firemode_ == 1 ) )
217                    {
218                        if ( this->showOverlays_ && this->showArrows_)
219                            alignArrows();
220                    }
221                    else
222                        hideArrows();
223
224                    if ( this->showDamageOverlay_ && ( this->damageOverlayTT_ > 0 || this->damageOverlayTR_ > 0 || this->damageOverlayTB_ > 0 || this->damageOverlayTL_ > 0 ) ) {
225                        this->damageOverlayTT_ -= dt;
226                        this->damageOverlayTR_ -= dt;
227                        this->damageOverlayTB_ -= dt;
228                        this->damageOverlayTL_ -= dt;
229                        if ( this->damageOverlayTT_ <= 0 )
230                            this->damageOverlayTop_->hide();
231                        if ( this->damageOverlayTR_ <= 0 )
232                            this->damageOverlayRight_->hide();
233                        if ( this->damageOverlayTB_ <= 0 )
234                            this->damageOverlayBottom_->hide();
235                        if ( this->damageOverlayTL_ <= 0 )
236                            this->damageOverlayLeft_->hide();
237                    }
238                }
239            }
240            else
241                this->hideOverlays();
242
243            if ( this->acceleration_ > 0 )
244            {
245/*
246if (this->controllableEntity_ && this->controllableEntity_->getEngine()) {
247    std::cout << this->controllableEntity_->getEngine()->getAccelerationFront() << endl;
248}
249*/
250                if ( this->accelerating_ )
251                    HumanController::moveFrontBack(Vector2(1, 0));
252                else
253                    HumanController::moveFrontBack(Vector2(this->acceleration_, 0)); 
254                this->accelerating_ = false;
255                //HumanController::moveFrontBack(Vector2(clamp(this->acceleration_ + this->currentAcceleration_, 0.0f, 1.0f), 0));
256            }
257        }
258
259        // Reset pitch and yaw rates
260        // TODO: Reactivate this to fix the game pad problem with 0 input
261        //this->currentPitch_ = 0;
262        //this->currentYaw_ = 0;
263
264        HumanController::tick(dt);
265    }
266
267    /*void NewHumanController::tick(float dt)
268    {
269        if (GameMode::playsSound() && NewHumanController::localController_s && NewHumanController::localController_s->controllableEntity_)
270        {
271            // Update sound listener
272            Camera* camera = NewHumanController::localController_s->controllableEntity_->getCamera();
273            if (camera)
274            {
275                SoundManager::getInstance().setListenerPosition(camera->getWorldPosition());
276                SoundManager::getInstance().setListenerOrientation(camera->getWorldOrientation());
277            }
278            else
279                COUT(3) << "NewHumanController, Warning: Using a ControllableEntity without Camera" << std::endl;
280        }
281    }*/
282   
283    void NewHumanController::doFire(unsigned int firemode)
284    {
285        if ( !this->controllableEntity_ )
286            return;
287        //if (HumanController::localController_s && HumanController::localController_s->controllableEntity_) {
288
289/*
290        // Get results, create a node/entity on the position
291        for ( itr = result.begin(); itr != result.end(); itr++ )
292        {
293            if (itr->movable && itr->movable->getName() == "Head")
294            {
295                soundMgr->StopSound( &jaguarSoundChannel );
296                soundMgr->PlaySound( jaguarSound, headNode, &jaguarSoundChannel );
297                break;
298            } // if
299        }
300*/
301
302        this->firemode_ = firemode;
303
304        if (firemode == 1 && this->controlMode_ == 1)
305        {
306            //unlocked steering, steer on right mouse click
307            HumanController::yaw(Vector2(this->currentYaw_, 0));
308            HumanController::pitch(Vector2(this->currentPitch_, 0));
309        }
310        else
311            HumanController::localController_s->getControllableEntity()->fire(firemode);
312
313    }
314
315    void NewHumanController::hit(Pawn* originator, btManifoldPoint& contactpoint, float damage) {
316        if ( this->showDamageOverlay_ && !this->controlPaused_ && this->controllableEntity_ && !this->controllableEntity_->isInMouseLook() ) {
317            Vector3 posA;
318            if ( originator )
319                posA = originator->getWorldPosition();
320            else
321                posA = multi_cast<Vector3>(contactpoint.getPositionWorldOnA());
322            //Vector3 posB = multi_cast<Vector3>(contactpoint.getPositionWorldOnB());
323            //posA and posB are almost identical
324
325            Vector3 relativeHit = this->getControllableEntity()->getWorldOrientation().UnitInverse() * (this->getControllableEntity()->getWorldPosition() - posA);
326
327            //back is z positive
328            //x is left positive
329            //y is down positive
330            relativeHit.normalise();
331//            COUT(0) << relativeHit << endl;
332
333            float threshold = 0.3;
334            // && abs(relativeHit.y) < 0.5
335            if ( relativeHit.x > threshold) // Left
336            {
337                this->damageOverlayLeft_->show();
338                this->damageOverlayTL_ = this->damageOverlayTime_;
339                //this->damageOverlayLeft_->setBackgroundAlpha(0.3);
340            }
341            if ( relativeHit.x < -threshold) //Right
342            {
343                this->damageOverlayRight_->show();
344                this->damageOverlayTR_ = this->damageOverlayTime_;
345                //this->damageOverlayRight_->setBackgroundAlpha(0.3);
346            }
347            if ( relativeHit.y > threshold) //Top
348            {
349                this->damageOverlayBottom_->show();
350                this->damageOverlayTB_ = this->damageOverlayTime_;
351                //this->damageOverlayTop_->setBackgroundAlpha(0.3);
352            }
353            if ( relativeHit.y < -threshold) //Bottom
354            {
355                this->damageOverlayTop_->show();
356                this->damageOverlayTT_ = this->damageOverlayTime_;
357                //this->damageOverlayBottom_->setBackgroundAlpha(0.3);
358            }
359
360        }
361    }
362
363    void NewHumanController::unfire()
364    {
365        if (NewHumanController::localController_s)
366            NewHumanController::localController_s->doUnfire();
367    }
368
369    void NewHumanController::doUnfire()
370    {
371        this->firemode_ = -1;
372        hideArrows();
373    }
374
375    void NewHumanController::updateTarget()
376    {
377        Ogre::RaySceneQuery * rsq = HumanController::localController_s->getControllableEntity()->getScene()->getSceneManager()->createRayQuery(Ogre::Ray());
378
379        Ogre::Ray mouseRay = HumanController::localController_s->getControllableEntity()->getCamera()->getOgreCamera()->getCameraToViewportRay(static_cast<float>(this->currentYaw_)/2*-1+.5, static_cast<float>(this->currentPitch_)/2*-1+.5);
380
381        rsq->setRay(mouseRay);
382        rsq->setSortByDistance(true);
383
384        /*
385        Distance of objects:
386        ignore everything under 200 maybe even take 1000 as min distance to shoot at
387
388        shots are regularly traced and are entities!!!!!!!!! this is the biggest problem
389        they vanish only after a distance of 10'000
390        */
391
392
393        Ogre::RaySceneQueryResult& result = rsq->execute();
394        Pawn* pawn = orxonox_cast<Pawn*>(this->getControllableEntity());
395
396        Ogre::RaySceneQueryResult::iterator itr;
397        for (itr = result.begin(); itr != result.end(); ++itr)
398        {
399            if (itr->movable->isInScene() && itr->movable->getMovableType() == "Entity" && itr->distance > 500)
400            {
401                // Try to cast the user pointer
402                WorldEntity* wePtr = dynamic_cast<WorldEntity*>(itr->movable->getUserObject());
403                if (wePtr)
404                {
405                    // go through all parents of object and look wheter they are Sightable or not
406                    bool isSightable = false;
407                    WorldEntity* parent = wePtr->getParent();
408                    while( parent )
409                    {
410                        if (this->targetMask_.isExcluded(parent->getIdentifier()))
411                        {
412                            parent = parent->getParent();
413                            continue;
414                        }
415                        else
416                        {
417                            isSightable = true;
418                            break;
419                        }
420                    }
421                    if ( !isSightable )
422                        continue;
423                }
424
425                if ( this->getControllableEntity() && this->getControllableEntity()->getTarget() != wePtr )
426                {
427                    this->getControllableEntity()->setTarget(wePtr);
428                }
429
430                if( pawn )
431                {
432                    pawn->setAimPosition( mouseRay.getOrigin() + mouseRay.getDirection() * itr->distance );
433                }
434
435                //itr->movable->getParentSceneNode()->showBoundingBox(true);
436                //std::cout << itr->movable->getParentSceneNode()->_getDerivedPosition() << endl;
437                //return mouseRay.getOrigin() + mouseRay.getDirection() * itr->distance; //or itr->movable->getParentSceneNode()->_getDerivedPosition()
438                return;
439            }
440
441        }
442        if ( pawn )
443        {
444            pawn->setAimPosition( mouseRay.getOrigin() + mouseRay.getDirection() * 1200 );
445        }
446
447        if( this->getControllableEntity() && this->getControllableEntity()->getTarget() != 0 )
448            this->getControllableEntity()->setTarget( 0 );
449   
450
451        //return this->controllableEntity_->getWorldPosition() + (this->controllableEntity_->getWorldOrientation() * Vector3::NEGATIVE_UNIT_Z * 2000);
452        //return this->controllableEntity_->getWorldPosition() + (this->controllableEntity_->getCamera()->getOgreCamera()->getOrientation() * Vector3::NEGATIVE_UNIT_Z);
453    }
454
455    void NewHumanController::frontback(const Vector2& value)
456    {
457        this->accelerating_ = true;
458
459        //if (this->acceleration_ == 0)
460            HumanController::frontback(value);
461    }
462
463    void NewHumanController::yaw(const Vector2& value)
464    {
465//         SUPER(NewHumanController, yaw, value);
466        if (this->controlMode_ == 0 || ( this->controllableEntity_ && this->controllableEntity_->isInMouseLook() ) )
467            HumanController::yaw(value);
468
469        this->currentYaw_ = value.x;
470    }
471
472    void NewHumanController::pitch(const Vector2& value)
473    {
474//         SUPER(NewHumanController, pitch, value);
475        if (this->controlMode_ == 0 || ( this->controllableEntity_ && this->controllableEntity_->isInMouseLook() ) )
476            HumanController::pitch(value);
477
478        this->currentPitch_ = value.x;
479    }
480
481    void NewHumanController::changeMode()
482    {
483        if (NewHumanController::localController_s)
484        {
485            if (NewHumanController::localController_s->controlMode_ == 0)
486            {
487                NewHumanController::localController_s->controlMode_ = 1;
488                NewHumanController::localController_s->hideArrows();
489            }
490            else
491                NewHumanController::localController_s->controlMode_ = 0;
492        }
493    }
494
495    void NewHumanController::changedControllableEntity()
496    {
497/*
498        if( this->getControllableEntity() )
499            CCOUT(0) << "changed controllable entity to: " << this->getControllableEntity()->getIdentifier()->getName() << endl;
500        else
501            CCOUT(0) << "changed controllable entity to: " << this->getControllableEntity() << endl;
502*/
503        this->controlMode_ = 0;
504        this->currentYaw_ = 0;
505        this->currentPitch_ = 0;
506        if (this->getControllableEntity() && ( this->getControllableEntity()->getIdentifier()->getName() == "SpaceShip" || this->getControllableEntity()->getIdentifier()->getName() == "Rocket" ))
507        {
508            this->showOverlays_ = true;
509            if( !this->controlPaused_ )
510            {
511                this->showOverlays();
512                this->alignArrows();
513            }
514        }
515        else
516        {
517            this->showOverlays_ = false;
518            this->hideOverlays();
519        }
520    }
521
522    void NewHumanController::accelerate()
523    {
524        if ( NewHumanController::localController_s )
525        {
526            NewHumanController::localController_s->acceleration_ = clamp(NewHumanController::localController_s->acceleration_ + 0.2f, 0.00f, 1.0f);
527        }
528    }
529
530    void NewHumanController::decelerate()
531    {
532        if ( NewHumanController::localController_s )
533        {
534            NewHumanController::localController_s->acceleration_ = clamp(NewHumanController::localController_s->acceleration_ - 0.1f, 0.0f, 1.0f);
535        }
536    }
537
538    void NewHumanController::doResumeControl() {
539        this->controlPaused_ = false;
540        if( this->showOverlays_ ) {
541            this->showOverlays();
542        }
543    }
544
545    void NewHumanController::doPauseControl() {
546        this->controlPaused_ = true;
547//        COUT(0) << "pause control" << endl;
548        this->hideOverlays();
549    }
550
551    void NewHumanController::alignArrows() {
552        if (showArrows_) {
553            hideArrows();
554   
555            float distance = sqrt(pow(static_cast<float>(this->currentYaw_)/2*-1,2) + pow(static_cast<float>(this->currentPitch_)/2*-1,2));
556   
557            if ( distance > 0.04 && distance <= 0.59 * arrowsSize_ / 2.0 ) {
558                this->arrowsOverlay1_->setRotation(Degree(-90 + -1.0 * atan2(static_cast<float>(this->currentPitch_)/2*-1, static_cast<float>(this->currentYaw_)/2*-1) / (2.0f * Ogre::Math::PI) * 360.0f));
559   
560                this->arrowsOverlay1_->show();
561            }
562            else if ( distance > 0.59 * arrowsSize_ / 2.0 && distance <= 0.77 * arrowsSize_ / 2.0 ) {
563                this->arrowsOverlay2_->setRotation(Degree(-90 + -1.0 * atan2(static_cast<float>(this->currentPitch_)/2*-1, static_cast<float>(this->currentYaw_)/2*-1) / (2.0f * Ogre::Math::PI) * 360.0f));
564   
565                this->arrowsOverlay2_->show();
566            }
567            else if ( distance > 0.77 * arrowsSize_ / 2.0 && distance <= arrowsSize_ / 2.0 ) {
568                this->arrowsOverlay3_->setRotation(Degree(-90 + -1.0 * atan2(static_cast<float>(this->currentPitch_)/2*-1, static_cast<float>(this->currentYaw_)/2*-1) / (2.0f * Ogre::Math::PI) * 360.0f));
569   
570                this->arrowsOverlay3_->show();
571            }
572            else if ( distance > arrowsSize_ / 2.0 ) {
573                this->arrowsOverlay4_->setRotation(Degree(-90 + -1.0 * atan2(static_cast<float>(this->currentPitch_)/2*-1, static_cast<float>(this->currentYaw_)/2*-1) / (2.0f * Ogre::Math::PI) * 360.0f));
574   
575                this->arrowsOverlay4_->show();
576            }
577        }
578    }
579
580    void NewHumanController::showOverlays() {
581        if( !GameMode::showsGraphics() )
582            return;
583        this->crossHairOverlay_->show();
584        this->centerOverlay_->show();
585
586        if (showArrows_) {
587            this->arrowsOverlay1_->show();
588            this->arrowsOverlay2_->show();
589            this->arrowsOverlay3_->show();
590            this->arrowsOverlay4_->show();
591        }
592    }
593
594    void NewHumanController::hideOverlays() {
595        if( !GameMode::showsGraphics() )
596            return;
597        this->crossHairOverlay_->hide();
598        this->centerOverlay_->hide();
599
600        if ( showDamageOverlay_ ) {
601            this->damageOverlayTop_->hide();
602            this->damageOverlayRight_->hide();
603            this->damageOverlayBottom_->hide();
604            this->damageOverlayLeft_->hide();
605        }
606
607        this->hideArrows();
608    }
609
610    void NewHumanController::hideArrows() {
611        if( !GameMode::showsGraphics() )
612            return;
613        if (showArrows_) {
614            this->arrowsOverlay1_->hide();
615            this->arrowsOverlay2_->hide();
616            this->arrowsOverlay3_->hide();
617            this->arrowsOverlay4_->hide();
618        }
619    }
620}
Note: See TracBrowser for help on using the repository browser.