Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/core5/src/orxonox/controllers/HumanController.cc @ 5899

Last change on this file since 5899 was 5896, checked in by rgrieder, 15 years ago

Added some basic sound classes: WorldSound (to be used for 3D sound, is a WorldEntity) and AmbientSound (BaseObject, just add it somewhere and it will play with playOnLoad=true).
Also moved the sound listener device updating to the HumanController. We might want to modify this again so that the listener is at the camera position again, not at the space ship.

  • Property svn:eol-style set to native
File size: 9.6 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 "HumanController.h"
30
31#include "core/CoreIncludes.h"
32#include "core/ConsoleCommand.h"
33#include "worldentities/ControllableEntity.h"
34#include "worldentities/pawns/Pawn.h"
35#include "gametypes/Gametype.h"
36#include "infos/PlayerInfo.h"
37#include "overlays/Map.h"
38#include "sound/SoundManager.h"
39#include "Radar.h"
40#include "Scene.h"
41
42namespace orxonox
43{
44    SetConsoleCommand(HumanController, moveFrontBack, true).setAsInputCommand();
45    SetConsoleCommand(HumanController, moveRightLeft, true).setAsInputCommand();
46    SetConsoleCommand(HumanController, moveUpDown,    true).setAsInputCommand();
47    SetConsoleCommand(HumanController, rotateYaw,     true).setAsInputCommand();
48    SetConsoleCommand(HumanController, rotatePitch,   true).setAsInputCommand();
49    SetConsoleCommand(HumanController, rotateRoll,    true).setAsInputCommand();
50    SetConsoleCommand(HumanController, fire,          true).keybindMode(KeybindMode::OnHold);
51    SetConsoleCommand(HumanController, reload,        true);
52    SetConsoleCommand(HumanController, boost,         true).keybindMode(KeybindMode::OnHold);
53    SetConsoleCommand(HumanController, greet,         true);
54    SetConsoleCommand(HumanController, switchCamera,  true);
55    SetConsoleCommand(HumanController, mouseLook,     true);
56    SetConsoleCommand(HumanController, suicide,       true);
57    SetConsoleCommand(HumanController, addBots,       true).defaultValues(1);
58    SetConsoleCommand(HumanController, killBots,      true).defaultValues(0);
59    SetConsoleCommand(HumanController, dropItems,     true);
60    SetConsoleCommand(HumanController, useItem,       true);
61    SetConsoleCommand(HumanController, cycleNavigationFocus,   true);
62    SetConsoleCommand(HumanController, releaseNavigationFocus, true);
63
64    CreateUnloadableFactory(HumanController);
65
66    HumanController* HumanController::localController_s = 0;
67
68    HumanController::HumanController(BaseObject* creator) : Controller(creator)
69    {
70        RegisterObject(HumanController);
71
72        HumanController::localController_s = this;
73    }
74
75    HumanController::~HumanController()
76    {
77        HumanController::localController_s = 0;
78    }
79
80    void HumanController::tick(float dt)
81    {
82        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
83        {
84            if (GameMode::playsSound())
85            {
86                // Update sound listener
87                SoundManager::getInstance().setListenerPosition(HumanController::localController_s->controllableEntity_->getPosition());
88                SoundManager::getInstance().setListenerOrientation(HumanController::localController_s->controllableEntity_->getOrientation());
89            }
90        }
91    }
92
93    void HumanController::moveFrontBack(const Vector2& value)
94    {
95        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
96            HumanController::localController_s->controllableEntity_->moveFrontBack(value);
97    }
98
99    void HumanController::moveRightLeft(const Vector2& value)
100    {
101        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
102            HumanController::localController_s->controllableEntity_->moveRightLeft(value);
103    }
104
105    void HumanController::moveUpDown(const Vector2& value)
106    {
107        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
108            HumanController::localController_s->controllableEntity_->moveUpDown(value);
109    }
110
111    void HumanController::rotateYaw(const Vector2& value)
112    {
113        //Hack to enable mouselook in map
114        if ( Map::getSingletonPtr() && Map::getSingletonPtr()->getVisibility() && HumanController::localController_s->controllableEntity_->isInMouseLook() )
115        {
116            Map::getSingletonPtr()->rotateYaw(value);
117            return;
118        }
119        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
120            HumanController::localController_s->controllableEntity_->rotateYaw(value);
121    }
122
123    void HumanController::rotatePitch(const Vector2& value)
124    {
125        //Hack to enable mouselook in map
126        if ( Map::getSingletonPtr() && Map::getSingletonPtr()->getVisibility() && HumanController::localController_s->controllableEntity_->isInMouseLook() )
127        {
128            Map::getSingletonPtr()->rotatePitch(value);
129            return;
130        }
131        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
132            HumanController::localController_s->controllableEntity_->rotatePitch(value);
133    }
134
135    void HumanController::rotateRoll(const Vector2& value)
136    {
137        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
138            HumanController::localController_s->controllableEntity_->rotateRoll(value);
139    }
140
141    void HumanController::fire(unsigned int firemode)
142    {
143        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
144            HumanController::localController_s->controllableEntity_->fire(firemode);
145    }
146
147    void HumanController::reload()
148    {
149        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
150            HumanController::localController_s->controllableEntity_->reload();
151    }
152
153    void HumanController::boost()
154    {
155        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
156            HumanController::localController_s->controllableEntity_->boost();
157    }
158
159    void HumanController::greet()
160    {
161        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
162            HumanController::localController_s->controllableEntity_->greet();
163    }
164
165    void HumanController::switchCamera()
166    {
167        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
168            HumanController::localController_s->controllableEntity_->switchCamera();
169    }
170
171    void HumanController::mouseLook()
172    {
173        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
174            HumanController::localController_s->controllableEntity_->mouseLook();
175    }
176
177    void HumanController::suicide()
178    {
179        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
180        {
181            Pawn* pawn = orxonox_cast<Pawn*>(HumanController::localController_s->controllableEntity_);
182            if (pawn)
183                pawn->kill();
184            else if (HumanController::localController_s->player_)
185                HumanController::localController_s->player_->stopControl();
186        }
187    }
188
189    void HumanController::useItem()
190    {
191        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
192            HumanController::localController_s->controllableEntity_->useItem();
193    }
194
195    void HumanController::addBots(unsigned int amount)
196    {
197        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_ && HumanController::localController_s->controllableEntity_->getGametype())
198            HumanController::localController_s->controllableEntity_->getGametype()->addBots(amount);
199    }
200
201    void HumanController::killBots(unsigned int amount)
202    {
203        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_ && HumanController::localController_s->controllableEntity_->getGametype())
204            HumanController::localController_s->controllableEntity_->getGametype()->killBots(amount);
205    }
206
207    void HumanController::dropItems()
208    {
209        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
210            HumanController::localController_s->controllableEntity_->dropItems();
211    }
212
213    Pawn* HumanController::getLocalControllerEntityAsPawn()
214    {
215        if (HumanController::localController_s)
216            return orxonox_cast<Pawn*>(HumanController::localController_s->getControllableEntity());
217        else
218            return NULL;
219    }
220
221    void HumanController::cycleNavigationFocus()
222    {
223        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
224            HumanController::localController_s->controllableEntity_->getScene()->getRadar()->cycleFocus();
225    }
226
227    void HumanController::releaseNavigationFocus()
228    {
229        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
230            HumanController::localController_s->controllableEntity_->getScene()->getRadar()->releaseFocus();
231    }
232}
Note: See TracBrowser for help on using the repository browser.