Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/weapons/src/orxonox/objects/controllers/HumanController.cc @ 2923

Last change on this file since 2923 was 2918, checked in by landauf, 16 years ago

Added many new features in the Munition class:

  • there are now 3 modes: a) every weapon has it's own magazine b) all weapons use the same magazin c) no magazines, just a big munition pool
  • the Munition class handles the reloading of the magazine

Split the Weapon class into Weapon and WeaponMode. WeaponMode creates the fire of the Weapon. A weapon can own several WeaponModes (for example primary and secondary fire). But it's also possible to have a weapon with several muzzles which all fire at the same time (there's a WeaponMode for each muzzle).

Renamed LaserGun to LaserFire and Fusion to FusionFire. They inherit now from WeaponMode.

Changed the code in the Weapon class to use the new Munition functionality.

Added ReplenishingMunition, a subclass of Munition that replenishes itself (used for LaserGunMunition).

Added a reload command to reload magazines.

  • Property svn:eol-style set to native
File size: 7.5 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 *      Fabian 'x3n' Landau
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29#include "OrxonoxStableHeaders.h"
30#include "HumanController.h"
31
32#include "core/CoreIncludes.h"
33#include "core/ConsoleCommand.h"
34#include "objects/worldentities/ControllableEntity.h"
35#include "objects/worldentities/pawns/Pawn.h"
36#include "objects/gametypes/Gametype.h"
37#include "objects/infos/PlayerInfo.h"
38
39namespace orxonox
40{
41    SetConsoleCommand(HumanController, moveFrontBack, true).setAsInputCommand();
42    SetConsoleCommand(HumanController, moveRightLeft, true).setAsInputCommand();
43    SetConsoleCommand(HumanController, moveUpDown,    true).setAsInputCommand();
44    SetConsoleCommand(HumanController, rotateYaw,     true).setAsInputCommand();
45    SetConsoleCommand(HumanController, rotatePitch,   true).setAsInputCommand();
46    SetConsoleCommand(HumanController, rotateRoll,    true).setAsInputCommand();
47    SetConsoleCommand(HumanController, fire,          true).keybindMode(KeybindMode::OnHold);
48    SetConsoleCommand(HumanController, reload,        true);
49    SetConsoleCommand(HumanController, boost,         true).keybindMode(KeybindMode::OnHold);
50    SetConsoleCommand(HumanController, greet,         true);
51    SetConsoleCommand(HumanController, use,           true);
52    SetConsoleCommand(HumanController, switchCamera,  true);
53    SetConsoleCommand(HumanController, mouseLook,     true);
54    SetConsoleCommand(HumanController, suicide,       true);
55    SetConsoleCommand(HumanController, addBots,       true).defaultValues(1);
56    SetConsoleCommand(HumanController, killBots,      true).defaultValues(0);
57    SetConsoleCommand(HumanController, dropItems,     true);
58
59    CreateUnloadableFactory(HumanController);
60
61    HumanController* HumanController::localController_s = 0;
62
63    HumanController::HumanController(BaseObject* creator) : Controller(creator)
64    {
65        RegisterObject(HumanController);
66
67        HumanController::localController_s = this;
68    }
69
70    HumanController::~HumanController()
71    {
72        HumanController::localController_s = 0;
73    }
74
75    void HumanController::moveFrontBack(const Vector2& value)
76    {
77        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
78            HumanController::localController_s->controllableEntity_->moveFrontBack(value);
79    }
80
81    void HumanController::moveRightLeft(const Vector2& value)
82    {
83        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
84            HumanController::localController_s->controllableEntity_->moveRightLeft(value);
85    }
86
87    void HumanController::moveUpDown(const Vector2& value)
88    {
89        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
90            HumanController::localController_s->controllableEntity_->moveUpDown(value);
91    }
92
93    void HumanController::rotateYaw(const Vector2& value)
94    {
95        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
96            HumanController::localController_s->controllableEntity_->rotateYaw(value);
97    }
98
99    void HumanController::rotatePitch(const Vector2& value)
100    {
101        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
102            HumanController::localController_s->controllableEntity_->rotatePitch(value);
103    }
104
105    void HumanController::rotateRoll(const Vector2& value)
106    {
107        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
108            HumanController::localController_s->controllableEntity_->rotateRoll(value);
109    }
110
111    void HumanController::fire(unsigned int firemode)
112    {
113        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
114            HumanController::localController_s->controllableEntity_->fire(firemode);
115    }
116
117    void HumanController::reload()
118    {
119        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
120            HumanController::localController_s->controllableEntity_->reload();
121    }
122
123    void HumanController::boost()
124    {
125        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
126            HumanController::localController_s->controllableEntity_->boost();
127    }
128
129    void HumanController::greet()
130    {
131        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
132            HumanController::localController_s->controllableEntity_->greet();
133    }
134
135    void HumanController::use()
136    {
137        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
138            HumanController::localController_s->controllableEntity_->use();
139    }
140
141    void HumanController::switchCamera()
142    {
143        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
144            HumanController::localController_s->controllableEntity_->switchCamera();
145    }
146
147    void HumanController::mouseLook()
148    {
149        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
150            HumanController::localController_s->controllableEntity_->mouseLook();
151    }
152
153    void HumanController::suicide()
154    {
155        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
156        {
157            Pawn* pawn = dynamic_cast<Pawn*>(HumanController::localController_s->controllableEntity_);
158            if (pawn)
159                pawn->kill();
160            else if (HumanController::localController_s->player_)
161                HumanController::localController_s->player_->stopControl(HumanController::localController_s->controllableEntity_);
162        }
163    }
164
165    void HumanController::addBots(unsigned int amount)
166    {
167        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_ && HumanController::localController_s->controllableEntity_->getGametype())
168            HumanController::localController_s->controllableEntity_->getGametype()->addBots(amount);
169    }
170
171    void HumanController::killBots(unsigned int amount)
172    {
173        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_ && HumanController::localController_s->controllableEntity_->getGametype())
174            HumanController::localController_s->controllableEntity_->getGametype()->killBots(amount);
175    }
176
177    void HumanController::dropItems()
178    {
179        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
180            HumanController::localController_s->controllableEntity_->dropItems();
181    }
182}
Note: See TracBrowser for help on using the repository browser.