Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/towerdefenseFabien/src/modules/weapons/IceGunFreezer.cc @ 10606

Last change on this file since 10606 was 10606, checked in by fvultier, 9 years ago

The most expensive tower fires now a new weapon: The Ice gun; a weapon that slows down a hit SpaceShip. This weapon may be used outside the tower defense minigame.

File size: 3.0 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        The controlling happens here. This method defines what the controller has to do each tick.
66    @param dt
67        The duration of the tick.
68    */
69    void IceGunFreezer::tick(float dt)
70    {
71        SUPER(IceGunFreezer, tick, dt);
72
73
74    }
75
76    /**
77    @brief
78        Sets the freeze time variable to the passed value.
79    */
80    void IceGunFreezer::setFreezeTime(float freezeTime)
81    {
82        freezeTime_ = freezeTime;
83    }
84
85    /**
86    @brief
87        Sets the freeze factor variable to the passed value.
88    */
89    void IceGunFreezer::setFreezeFactor(float freezeFactor)
90    {
91        freezeFactor_ = freezeFactor;
92    }   
93
94    void IceGunFreezer::startFreezing()
95    {
96        WorldEntity* parent = this->getParent();
97
98        if (parent != NULL && parent->isA(Class(SpaceShip)))
99        {
100            freezedSpaceShip_ = orxonox_cast<SpaceShip*>(parent);
101            freezedSpaceShip_->addSpeedFactor(freezeFactor_);
102        }
103
104        // Start timer even if the victim is not a SpaceShip to avoid that the IceGunFreezer gets never destroyed if it collided against a Pawn
105        this->freezeTimer_.setTimer(this->freezeTime_, false, createExecutor(createFunctor(&IceGunFreezer::stopFreezing, this)));
106    }
107
108    void IceGunFreezer::stopFreezing()
109    {
110        if (freezedSpaceShip_ != NULL && freezeFactor_ != 0.0)
111        {
112            freezedSpaceShip_->addSpeedFactor(1/freezeFactor_);
113        }
114
115        this->destroy();
116    }   
117}
Note: See TracBrowser for help on using the repository browser.