Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/presentation3/src/orxonox/controllers/NewHumanController.cc @ 7073

Last change on this file since 7073 was 7073, checked in by landauf, 14 years ago

merged fps branch to presentation3

  • Property svn:eol-style set to native
File size: 23.4 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#include <bullet/BulletCollision/NarrowPhaseCollision/btManifoldPoint.h>
37
38#include "core/CoreIncludes.h"
39#include "core/ConsoleCommand.h"
40#include "worldentities/ControllableEntity.h"
41#include "worldentities/pawns/Pawn.h"
42#include "infos/PlayerInfo.h"
43#include "overlays/OrxonoxOverlay.h"
44#include "graphics/Camera.h"
45#include "sound/SoundManager.h"
46#include "tools/BulletConversions.h"
47#include "Scene.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.08f;
77        arrowsSize_ = 0.4f;
78
79        damageOverlayTime_ = 0.6f;
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.5f, overlaySize_ * 2.5f));
104            centerOverlay_->setPosition(Vector2(0.5f - overlaySize_*2.5f/2.0f, 0.5f - overlaySize_*2.5f/2.0f));
105            centerOverlay_->hide();
106
107            if (showDamageOverlay_)
108            {
109                damageOverlayTop_ = new OrxonoxOverlay(this);
110                damageOverlayTop_->setBackgroundMaterial("Orxonox/DamageOverlayTop");
111                damageOverlayTop_->setSize(Vector2(overlaySize_ * 2.5f, overlaySize_ * 2.5f));
112                damageOverlayTop_->setPosition(Vector2(0.5f - overlaySize_*2.5f/2.0f, 0.5f - overlaySize_*2.5f/2.0f));
113                damageOverlayTop_->hide();
114
115                damageOverlayRight_ = new OrxonoxOverlay(this);
116                damageOverlayRight_->setBackgroundMaterial("Orxonox/DamageOverlayRight");
117                damageOverlayRight_->setSize(Vector2(overlaySize_ * 2.5f, overlaySize_ * 2.5f));
118                damageOverlayRight_->setPosition(Vector2(0.5f - overlaySize_*2.5f/2.0f, 0.5f - overlaySize_*2.5f/2.0f));
119                damageOverlayRight_->hide();
120
121                damageOverlayBottom_ = new OrxonoxOverlay(this);
122                damageOverlayBottom_->setBackgroundMaterial("Orxonox/DamageOverlayBottom");
123                damageOverlayBottom_->setSize(Vector2(overlaySize_ * 2.5f, overlaySize_ * 2.5f));
124                damageOverlayBottom_->setPosition(Vector2(0.5f - overlaySize_*2.5f/2.0f, 0.5f - overlaySize_*2.5f/2.0f));
125                damageOverlayBottom_->hide();
126
127                damageOverlayLeft_ = new OrxonoxOverlay(this);
128                damageOverlayLeft_->setBackgroundMaterial("Orxonox/DamageOverlayLeft");
129                damageOverlayLeft_->setSize(Vector2(overlaySize_ * 2.5f, overlaySize_ * 2.5f));
130                damageOverlayLeft_->setPosition(Vector2(0.5f - overlaySize_*2.5f/2.0f, 0.5f - overlaySize_*2.5f/2.0f));
131                damageOverlayLeft_->hide();
132            }
133
134            if (showArrows_)
135            {
136                arrowsOverlay1_ = new OrxonoxOverlay(this);
137                arrowsOverlay1_->setBackgroundMaterial("Orxonox/DirectionArrows1");
138                arrowsOverlay1_->setSize(Vector2(0.02727f, 0.36f * arrowsSize_));
139                arrowsOverlay1_->setPickPoint(Vector2(0.5f, 0.5f));
140                arrowsOverlay1_->setPosition(Vector2(0.5f, 0.5f));
141                arrowsOverlay1_->hide();
142
143                arrowsOverlay2_ = new OrxonoxOverlay(this);
144                arrowsOverlay2_->setBackgroundMaterial("Orxonox/DirectionArrows2");
145                arrowsOverlay2_->setSize(Vector2(0.02727f, 0.59f * arrowsSize_));
146                arrowsOverlay2_->setPickPoint(Vector2(0.5f, 0.5f));
147                arrowsOverlay2_->setPosition(Vector2(0.5f, 0.5f));
148                arrowsOverlay2_->hide();
149
150                arrowsOverlay3_ = new OrxonoxOverlay(this);
151                arrowsOverlay3_->setBackgroundMaterial("Orxonox/DirectionArrows3");
152                arrowsOverlay3_->setSize(Vector2(0.02727f, 0.77f * arrowsSize_));
153                arrowsOverlay3_->setPickPoint(Vector2(0.5f, 0.5f));
154                arrowsOverlay3_->setPosition(Vector2(0.5f, 0.5f));
155                arrowsOverlay3_->hide();
156
157                arrowsOverlay4_ = new OrxonoxOverlay(this);
158                arrowsOverlay4_->setBackgroundMaterial("Orxonox/DirectionArrows4");
159                arrowsOverlay4_->setSize(Vector2(0.02727f, arrowsSize_));
160                arrowsOverlay4_->setPickPoint(Vector2(0.5f, 0.5f));
161                arrowsOverlay4_->setPosition(Vector2(0.5f, 0.5f));
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 (this->arrowsOverlay1_)
188                this->arrowsOverlay1_->destroy();
189            if (this->arrowsOverlay2_)
190                this->arrowsOverlay2_->destroy();
191            if (this->arrowsOverlay3_)
192                this->arrowsOverlay3_->destroy();
193            if (this->arrowsOverlay4_)
194                this->arrowsOverlay4_->destroy();
195            if (this->damageOverlayTop_)
196                this->damageOverlayTop_->destroy();
197            if (this->damageOverlayLeft_)
198                this->damageOverlayLeft_->destroy();
199            if (this->damageOverlayRight_)
200                this->damageOverlayRight_->destroy();
201            if (this->damageOverlayBottom_)
202                this->damageOverlayBottom_->destroy();
203        }
204    }
205
206    void NewHumanController::tick(float dt)
207    {
208        if (GameMode::showsGraphics())
209        {
210
211            if (this->controllableEntity_ && !this->controllableEntity_->isInMouseLook())
212            {
213                this->updateTarget();
214
215                if (!controlPaused_ )
216                {
217                    if (this->getControllableEntity() && (this->getControllableEntity()->isExactlyA(ClassByString("SpaceShip")) || this->getControllableEntity()->isExactlyA(ClassByString("Rocket"))))
218                        {this->showOverlays();}
219                       
220                    if (this->getControllableEntity() &&  this->getControllableEntity()->isExactlyA(ClassByString("FpsPlayer")))\
221                        {this->showOverlays();
222                        this->hideArrows();}
223
224                    this->crossHairOverlay_->setPosition(Vector2(static_cast<float>(this->currentYaw_)/2*-1+.5f-overlaySize_/2, static_cast<float>(this->currentPitch_)/2*-1+.5f-overlaySize_/2));
225
226                    if (this->controlMode_ == 0 || (this->controlMode_ == 1 && this->firemode_ == 1))
227                    {
228                        if (this->showOverlays_ && this->showArrows_)
229                            alignArrows();
230                    }
231                    else
232                        hideArrows();
233
234                    if (this->showDamageOverlay_ && (this->damageOverlayTT_ > 0 || this->damageOverlayTR_ > 0 || this->damageOverlayTB_ > 0 || this->damageOverlayTL_ > 0))
235                    {
236                        this->damageOverlayTT_ -= dt;
237                        this->damageOverlayTR_ -= dt;
238                        this->damageOverlayTB_ -= dt;
239                        this->damageOverlayTL_ -= dt;
240                        if (this->damageOverlayTT_ <= 0)
241                            this->damageOverlayTop_->hide();
242                        if (this->damageOverlayTR_ <= 0)
243                            this->damageOverlayRight_->hide();
244                        if (this->damageOverlayTB_ <= 0)
245                            this->damageOverlayBottom_->hide();
246                        if (this->damageOverlayTL_ <= 0)
247                            this->damageOverlayLeft_->hide();
248                    }
249                }
250            }
251            else
252                this->hideOverlays();
253
254            if (this->acceleration_ > 0)
255            {
256                if (this->accelerating_)
257                    HumanController::moveFrontBack(Vector2(1, 0));
258                else
259                    HumanController::moveFrontBack(Vector2(this->acceleration_, 0));
260                this->accelerating_ = false;
261                //HumanController::moveFrontBack(Vector2(clamp(this->acceleration_ + this->currentAcceleration_, 0.0f, 1.0f), 0));
262            }
263        }
264
265        // Reset pitch and yaw rates
266        // TODO: Reactivate this to fix the game pad problem with 0 input
267        //this->currentPitch_ = 0;
268        //this->currentYaw_ = 0;
269
270        HumanController::tick(dt);
271    }
272
273    void NewHumanController::doFire(unsigned int firemode)
274    {
275        if (!this->controllableEntity_)
276            return;
277
278        this->firemode_ = firemode;
279
280        if (firemode == 1 && this->controlMode_ == 1)
281        {
282            //unlocked steering, steer on right mouse click
283            HumanController::yaw(Vector2(this->currentYaw_, 0));
284            HumanController::pitch(Vector2(this->currentPitch_, 0));
285        }
286        else
287            HumanController::localController_s->getControllableEntity()->fire(firemode);
288
289    }
290
291    void NewHumanController::hit(Pawn* originator, btManifoldPoint& contactpoint, float damage)
292    {
293        if (this->showDamageOverlay_ && !this->controlPaused_ && this->controllableEntity_ && !this->controllableEntity_->isInMouseLook())
294        {
295            Vector3 posA;
296            if (originator)
297                posA = originator->getWorldPosition();
298            else
299                posA = multi_cast<Vector3>(contactpoint.getPositionWorldOnA());
300            //Vector3 posB = multi_cast<Vector3>(contactpoint.getPositionWorldOnB());
301            //posA and posB are almost identical
302
303            Vector3 relativeHit = this->getControllableEntity()->getWorldOrientation().UnitInverse() * (this->getControllableEntity()->getWorldPosition() - posA);
304
305            //back is z positive
306            //x is left positive
307            //y is down positive
308            relativeHit.normalise();
309
310            float threshold = 0.3f;
311            if (relativeHit.x > threshold) // Left
312            {
313                this->damageOverlayLeft_->show();
314                this->damageOverlayTL_ = this->damageOverlayTime_;
315                //this->damageOverlayLeft_->setBackgroundAlpha(0.3);
316            }
317            if (relativeHit.x < -threshold) //Right
318            {
319                this->damageOverlayRight_->show();
320                this->damageOverlayTR_ = this->damageOverlayTime_;
321                //this->damageOverlayRight_->setBackgroundAlpha(0.3);
322            }
323            if (relativeHit.y > threshold) //Top
324            {
325                this->damageOverlayBottom_->show();
326                this->damageOverlayTB_ = this->damageOverlayTime_;
327                //this->damageOverlayTop_->setBackgroundAlpha(0.3);
328            }
329            if (relativeHit.y < -threshold) //Bottom
330            {
331                this->damageOverlayTop_->show();
332                this->damageOverlayTT_ = this->damageOverlayTime_;
333                //this->damageOverlayBottom_->setBackgroundAlpha(0.3);
334            }
335        }
336    }
337
338    void NewHumanController::unfire()
339    {
340        if (NewHumanController::localController_s)
341            NewHumanController::localController_s->doUnfire();
342    }
343
344    void NewHumanController::doUnfire()
345    {
346        this->firemode_ = -1;
347        hideArrows();
348    }
349
350    void NewHumanController::updateTarget()
351    {
352        Ogre::RaySceneQuery * rsq = HumanController::localController_s->getControllableEntity()->getScene()->getSceneManager()->createRayQuery(Ogre::Ray());
353
354        Ogre::Ray mouseRay = HumanController::localController_s->getControllableEntity()->getCamera()->getOgreCamera()->getCameraToViewportRay(static_cast<float>(this->currentYaw_)/2*-1+.5f, static_cast<float>(this->currentPitch_)/2*-1+.5f);
355
356        rsq->setRay(mouseRay);
357        rsq->setSortByDistance(true);
358
359        /*
360        Distance of objects:
361        ignore everything under 200 maybe even take 1000 as min distance to shoot at
362
363        shots are regularly traced and are entities!!!!!!!!! this is the biggest problem
364        they vanish only after a distance of 10'000
365        */
366
367
368        Ogre::RaySceneQueryResult& result = rsq->execute();
369        Pawn* pawn = orxonox_cast<Pawn*>(this->getControllableEntity());
370        WorldEntity* myWe = static_cast<WorldEntity*>(this->getControllableEntity());
371
372        Ogre::RaySceneQueryResult::iterator itr;
373        for (itr = result.begin(); itr != result.end(); ++itr)
374        {
375//             CCOUT(0) << "testing object as target" << endl;
376            if (itr->movable->isInScene() && itr->movable->getMovableType() == "Entity" /*&& itr->distance > 500*/)
377            {
378                // Try to cast the user pointer
379                WorldEntity* wePtr = dynamic_cast<WorldEntity*>(Ogre::any_cast<OrxonoxClass*>(itr->movable->getUserAny()));
380               
381                // make sure we don't shoot ourselves
382                if( wePtr==myWe )
383                    continue;
384               
385                if (wePtr)
386                {
387                    // go through all parents of object and look whether they are sightable or not
388                    bool isSightable = false;
389                    WorldEntity* parent = wePtr->getParent();
390                    while (parent)
391                    {
392                        if (this->targetMask_.isExcluded(parent->getIdentifier()) || parent==myWe)
393                        {
394                            parent = parent->getParent();
395                            continue;
396                        }
397                        else
398                        {
399                            isSightable = true;
400                            break;
401                        }
402                    }
403                    if (!isSightable)
404                        continue;
405                }
406
407                if (this->getControllableEntity() && this->getControllableEntity()->getTarget() != wePtr)
408                    this->getControllableEntity()->setTarget(wePtr);
409
410                if (pawn)
411                    pawn->setAimPosition( mouseRay.getOrigin() + mouseRay.getDirection() * itr->distance );
412
413                //itr->movable->getParentSceneNode()->showBoundingBox(true);
414                //return mouseRay.getOrigin() + mouseRay.getDirection() * itr->distance; //or itr->movable->getParentSceneNode()->_getDerivedPosition()
415                return;
416            }
417        }
418
419        if (pawn)
420            pawn->setAimPosition( mouseRay.getOrigin() + mouseRay.getDirection() * 1200 );
421
422        if( this->getControllableEntity() && this->getControllableEntity()->getTarget() != 0 )
423            this->getControllableEntity()->setTarget( 0 );
424
425        //return this->controllableEntity_->getWorldPosition() + (this->controllableEntity_->getWorldOrientation() * Vector3::NEGATIVE_UNIT_Z * 2000);
426        //return this->controllableEntity_->getWorldPosition() + (this->controllableEntity_->getCamera()->getOgreCamera()->getOrientation() * Vector3::NEGATIVE_UNIT_Z);
427    }
428
429    void NewHumanController::frontback(const Vector2& value)
430    {
431        this->accelerating_ = true;
432
433        //if (this->acceleration_ == 0)
434        HumanController::frontback(value);
435    }
436
437    void NewHumanController::yaw(const Vector2& value)
438    {
439        //SUPER(NewHumanController, yaw, value);
440        if (this->controlMode_ == 0 || (this->controllableEntity_ && this->controllableEntity_->isInMouseLook()))
441            HumanController::yaw(value);
442
443        if (this->getControllableEntity() && !this->getControllableEntity()->isExactlyA(ClassByString("FpsPlayer")))
444            this->currentYaw_ = value.x;
445    }
446
447    void NewHumanController::pitch(const Vector2& value)
448    {
449        //SUPER(NewHumanController, pitch, value);
450        if (this->controlMode_ == 0 || (this->controllableEntity_ && this->controllableEntity_->isInMouseLook()))
451            HumanController::pitch(value);
452
453        if (this->getControllableEntity() && !this->getControllableEntity()->isExactlyA(ClassByString("FpsPlayer")))
454            this->currentPitch_ = value.x;
455    }
456
457    void NewHumanController::changeMode()
458    {
459        if (NewHumanController::localController_s)
460        {
461            if (NewHumanController::localController_s->controlMode_ == 0)
462            {
463                NewHumanController::localController_s->controlMode_ = 1;
464                NewHumanController::localController_s->hideArrows();
465            }
466            else
467                NewHumanController::localController_s->controlMode_ = 0;
468        }
469    }
470
471    void NewHumanController::changedControllableEntity()
472    {
473        this->controlMode_ = 0;
474        this->currentYaw_ = 0;
475        this->currentPitch_ = 0;
476        if (this->getControllableEntity() && (this->getControllableEntity()->isExactlyA(ClassByString("SpaceShip")) || this->getControllableEntity()->isExactlyA(ClassByString("Rocket"))))
477        {
478            this->showOverlays_ = true;
479            if (!this->controlPaused_)
480            {
481                this->showOverlays();
482                this->alignArrows();
483            }
484        }
485        else
486        {
487            this->showOverlays_ = false;
488            this->hideOverlays();
489        }
490    }
491
492    void NewHumanController::accelerate()
493    {
494        if (NewHumanController::localController_s)
495            NewHumanController::localController_s->acceleration_ = clamp(NewHumanController::localController_s->acceleration_ + 0.2f, 0.00f, 1.0f);
496    }
497
498    void NewHumanController::decelerate()
499    {
500        if (NewHumanController::localController_s)
501            NewHumanController::localController_s->acceleration_ = clamp(NewHumanController::localController_s->acceleration_ - 0.1f, 0.0f, 1.0f);
502    }
503
504    void NewHumanController::doResumeControl()
505    {
506        this->controlPaused_ = false;
507        if (this->showOverlays_)
508            this->showOverlays();
509    }
510
511    void NewHumanController::doPauseControl()
512    {
513        this->controlPaused_ = true;
514        this->hideOverlays();
515    }
516
517    void NewHumanController::alignArrows()
518    {
519        if (showArrows_)
520        {
521            hideArrows();
522
523            float distance = sqrt(pow(static_cast<float>(this->currentYaw_)/2*-1,2) + pow(static_cast<float>(this->currentPitch_)/2*-1,2));
524
525            if (distance > 0.04f && distance <= 0.59f * arrowsSize_ / 2.0f )
526            {
527                this->arrowsOverlay1_->setRotation(Degree(-90 + -1.0f * atan2(static_cast<float>(this->currentPitch_)/2*-1, static_cast<float>(this->currentYaw_)/2*-1) / (2.0f * Ogre::Math::PI) * 360.0f));
528                this->arrowsOverlay1_->show();
529            }
530            else if (distance > 0.59f * arrowsSize_ / 2.0f && distance <= 0.77f * arrowsSize_ / 2.0f )
531            {
532                this->arrowsOverlay2_->setRotation(Degree(-90 + -1.0f * atan2(static_cast<float>(this->currentPitch_)/2*-1, static_cast<float>(this->currentYaw_)/2*-1) / (2.0f * Ogre::Math::PI) * 360.0f));
533                this->arrowsOverlay2_->show();
534            }
535            else if (distance > 0.77f * arrowsSize_ / 2.0f && distance <= arrowsSize_ / 2.0f)
536            {
537                this->arrowsOverlay3_->setRotation(Degree(-90 + -1.0f * atan2(static_cast<float>(this->currentPitch_)/2*-1, static_cast<float>(this->currentYaw_)/2*-1) / (2.0f * Ogre::Math::PI) * 360.0f));
538                this->arrowsOverlay3_->show();
539            }
540            else if (distance > arrowsSize_ / 2.0f)
541            {
542                this->arrowsOverlay4_->setRotation(Degree(-90 + -1.0f * atan2(static_cast<float>(this->currentPitch_)/2*-1, static_cast<float>(this->currentYaw_)/2*-1) / (2.0f * Ogre::Math::PI) * 360.0f));
543                this->arrowsOverlay4_->show();
544            }
545        }
546    }
547
548    void NewHumanController::showOverlays()
549    {
550        if (!GameMode::showsGraphics())
551            return;
552        this->crossHairOverlay_->show();
553        this->centerOverlay_->show();
554
555        if (showArrows_)
556        {
557            this->arrowsOverlay1_->show();
558            this->arrowsOverlay2_->show();
559            this->arrowsOverlay3_->show();
560            this->arrowsOverlay4_->show();
561        }
562    }
563
564    void NewHumanController::hideOverlays()
565    {
566        if (!GameMode::showsGraphics())
567            return;
568        this->crossHairOverlay_->hide();
569        this->centerOverlay_->hide();
570
571        if (showDamageOverlay_)
572        {
573            this->damageOverlayTop_->hide();
574            this->damageOverlayRight_->hide();
575            this->damageOverlayBottom_->hide();
576            this->damageOverlayLeft_->hide();
577        }
578
579        this->hideArrows();
580    }
581
582    void NewHumanController::hideArrows()
583    {
584        if(!GameMode::showsGraphics())
585            return;
586        if (showArrows_)
587        {
588            this->arrowsOverlay1_->hide();
589            this->arrowsOverlay2_->hide();
590            this->arrowsOverlay3_->hide();
591            this->arrowsOverlay4_->hide();
592        }
593    }
594       
595
596   
597
598
599}
Note: See TracBrowser for help on using the repository browser.