Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/modules/weapons/IceGunFreezer.cc @ 11317

Last change on this file since 11317 was 11071, checked in by landauf, 9 years ago

merged branch cpp11_v3 back to trunk

  • Property svn:eol-style set to native
File size: 3.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*     Fabien Vultier
24*   Co-authors:
25*      ...
26*
27*/
28
29/**
30    @file IceGunFreezer.h
31    @brief Implementation of the IceGunFreezer class.
32*/
33
34#include "core/CoreIncludes.h"
35#include "core/command/Executor.h"
36
37#include "IceGunFreezer.h"
38
39namespace orxonox
40{
41    RegisterClass(IceGunFreezer);
42
43    /**
44    @brief
45        Constructor.
46    */
47    IceGunFreezer::IceGunFreezer(Context* context) : StaticEntity(context)
48    {
49        RegisterObject(IceGunFreezer);
50
51        model = new Model(this->getContext());
52        model->setMeshSource("IceStar.mesh");
53        model->setScale(4.0);
54        this->attach(model);
55        model->setPosition(Vector3(0,0,0));
56    }
57
58    IceGunFreezer::~IceGunFreezer()
59    {
60
61    }
62
63    /**
64    @brief
65        Sets the freeze time variable to the passed value.
66    */
67    void IceGunFreezer::setFreezeTime(float freezeTime)
68    {
69        freezeTime_ = freezeTime;
70    }
71
72    /**
73    @brief
74        Sets the freeze factor variable to the passed value.
75    */
76    void IceGunFreezer::setFreezeFactor(float freezeFactor)
77    {
78        freezeFactor_ = freezeFactor;
79    }   
80
81    /**
82    @brief
83        Try to slow down the WorldEntity where this is attached to. It is only possible to slow down a SpaceShip.
84    */
85    void IceGunFreezer::startFreezing()
86    {
87        WorldEntity* parent = this->getParent();
88
89        // Check if the freezer is attached to a parent and check if the parent is a SpaceShip
90        if (parent != nullptr && parent->isA(Class(SpaceShip)))
91        {
92            freezedSpaceShip_ = orxonox_cast<SpaceShip*>(parent);
93            //Slow down the SpaceShip
94            freezedSpaceShip_->addSpeedFactor(freezeFactor_);
95        }
96
97        // Start timer even if the victim is not a SpaceShip to avoid that the IceGunFreezer gets never destroyed if it collided against a Pawn
98        this->freezeTimer_.setTimer(this->freezeTime_, false, createExecutor(createFunctor(&IceGunFreezer::stopFreezing, this)));
99    }
100
101    /**
102    @brief
103        This method is called by the timer. It gives back the original engine strength to the hit SpaceShip.
104    */
105    void IceGunFreezer::stopFreezing()
106    {
107        if (freezedSpaceShip_ != nullptr && freezeFactor_ != 0.0)
108        {
109            freezedSpaceShip_->addSpeedFactor(1/freezeFactor_);
110        }
111
112        this->destroy();
113    }   
114}
Note: See TracBrowser for help on using the repository browser.