Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/presentationHS15/src/modules/weapons/weaponmodes/HsW01.cc @ 11056

Last change on this file since 11056 was 10961, checked in by maxima, 10 years ago

Merged presentation and fabiens branch. Had to modify hoverHUD and invaderHUD, because the text of the healthbar wasn't correctly displayed and the weapon settings of the hovership.

  • Property svn:eol-style set to native
File size: 4.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 *      Hagen Seifert
24 *   Co-authors:
25 *      simonmie
26 *
27 */
28
29/**
30    @file HsW01.h
31    @brief Implementation of the HsW01 class.
32*/
33
34#include "HsW01.h"
35
36#include "core/CoreIncludes.h"
37#include "core/XMLPort.h"
38#include "core/command/Executor.h"
39
40#include "graphics/Model.h"
41#include "weaponsystem/Weapon.h"
42#include "weaponsystem/WeaponPack.h"
43#include "weaponsystem/WeaponSystem.h"
44#include "worldentities/WorldEntity.h"
45#include "worldentities/pawns/Pawn.h"
46
47#include "weapons/projectiles/Projectile.h"
48#include "weapons/MuzzleFlash.h"
49
50namespace orxonox
51{
52    RegisterClass(HsW01);
53
54    HsW01::HsW01(Context* context) : WeaponMode(context)
55    {
56        RegisterObject(HsW01);
57
58        this->reloadTime_ = 0.25f;
59        this->damage_ = 0.0f; //default 15
60        this->speed_ = 750.0f;
61        this->delay_ = 0.0f;
62        this->setMunitionName("LaserMunition");
63        this->mesh_ = "laserbeam.mesh";
64        this->sound_ = "sounds/Weapon_HsW01.ogg";
65
66
67        this->delayTimer_.setTimer(this->delay_, false, createExecutor(createFunctor(&HsW01::shot, this)));
68        this->delayTimer_.stopTimer();
69
70        this->setDefaultSound(this->sound_);
71
72        hudImageString_ = "Orxonox/WSHUD_WM_HsW01";
73    }
74
75    HsW01::~HsW01()
76    {
77    }
78
79    void HsW01::XMLPort(Element& xmlelement, XMLPort::Mode mode)
80    {
81        SUPER(HsW01, XMLPort, xmlelement, mode);
82
83        XMLPortParam(HsW01, "delay", setDelay, getDelay, xmlelement, mode);
84        XMLPortParam(HsW01, "material", setMaterial, getMaterial, xmlelement, mode);
85        XMLPortParam(HsW01, "projectileMesh", setMesh, getMesh, xmlelement, mode);
86        XMLPortParam(HsW01, "sound", setSound, getSound, xmlelement, mode);
87    }
88
89    /**
90    @brief
91        Set the firing delay.
92    @param delay
93        The firing delay in seconds.
94    */
95    void HsW01::setDelay(float delay)
96    {
97        this->delay_ = delay;
98        this->delayTimer_.setInterval(this->delay_);
99    }
100
101    void HsW01::fire()
102    {
103        this->delayTimer_.startTimer();
104    }
105
106    /**
107    @brief
108        Fires the weapon. Creates a projectile and fires it.
109    */
110    void HsW01::shot()
111    {
112        assert( this->getWeapon() && this->getWeapon()->getWeaponPack() && this->getWeapon()->getWeaponPack()->getWeaponSystem() && this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn() );
113
114        // Create the projectile.
115        Projectile* projectile = new Projectile(this->getContext());
116        Model* model = new Model(projectile->getContext());
117        model->setMeshSource(mesh_);
118        model->setCastShadows(false);
119        projectile->attach(model);
120        model->setScale(5);
121
122        this->computeMuzzleParameters(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn()->getAimPosition());
123        projectile->setOrientation(this->getMuzzleOrientation());
124        projectile->setPosition(this->getMuzzlePosition());
125        projectile->setVelocity(this->getMuzzleDirection() * this->speed_);
126
127        projectile->setShooter(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn());
128        projectile->setDamage(this->getDamage());
129        projectile->setShieldDamage(this->getShieldDamage());
130        projectile->setHealthDamage(this->getHealthDamage());
131
132        // Display the muzzle flash.
133        this->HsW01::muzzleflash();
134    }
135
136    /**
137    @brief
138        Displays the muzzle flash.
139    */
140    void HsW01::muzzleflash()
141    {
142        MuzzleFlash *muzzleFlash = new MuzzleFlash(this->getContext());
143        this->getWeapon()->attach(muzzleFlash);
144        muzzleFlash->setPosition(this->getMuzzleOffset());
145        muzzleFlash->setMaterial(this->material_);
146    }
147}
Note: See TracBrowser for help on using the repository browser.