Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/modules/notifications/dispatchers/CommandNotification.cc @ 9550

Last change on this file since 9550 was 9550, checked in by landauf, 11 years ago

merged testing branch back to trunk. unbelievable it took me 13 months to finish this chore…

  • Property svn:eol-style set to native
File size: 4.7 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 *      Damian 'Mozork' Frick
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29/**
30    @file CommandNotification.cc
31    @brief Implementation of the CommandNotification class.
32*/
33
34#include "CommandNotification.h"
35
36#include "core/CoreIncludes.h"
37#include "core/XMLPort.h"
38#include "core/input/KeyBinderManager.h"
39#include "core/input/KeyBinder.h"
40#include "util/SubString.h"
41
42#include <sstream>
43
44namespace orxonox {
45
46    CreateFactory(CommandNotification);
47
48    /**
49    @brief
50        Default Constructor. Registers the object and initializes variables.
51    */
52    CommandNotification::CommandNotification(BaseObject* creator) : NotificationDispatcher(creator)
53    {
54        RegisterObject(CommandNotification);
55
56        this->setSender("commandNotification");
57        this->registerVariables();
58    }
59
60    /**
61    @brief
62        Destructor.
63    */
64    CommandNotification::~CommandNotification()
65    {
66
67    }
68
69    /**
70    @brief
71        Method for creating a NotificationDispatcher object through XML.
72    */
73    void CommandNotification::XMLPort(Element& xmlelement, XMLPort::Mode mode)
74    {
75        SUPER(CommandNotification, XMLPort, xmlelement, mode);
76
77        XMLPortParam(CommandNotification, "command", setCommand, getCommand, xmlelement, mode);
78        XMLPortParam(CommandNotification, "preMessage", setPreMessage, getPreMessage, xmlelement, mode);
79        XMLPortParam(CommandNotification, "postMessage", setPostMessage, getPostMessage, xmlelement, mode);
80    }
81
82    /**
83    @brief
84        Register some variables for synchronisation.
85    */
86    void CommandNotification::registerVariables(void)
87    {
88        registerVariable(this->command_, VariableDirection::ToClient);
89        registerVariable(this->preMessage_, VariableDirection::ToClient);
90        registerVariable(this->postMessage_, VariableDirection::ToClient);
91    }
92
93    /**
94    @brief
95        Composes the Notification of the preMessage the name of the key the command is mapped to and the postMessage.
96    @return
97        Returns the message to be sent in the Notification.
98    */
99    const std::string& CommandNotification::createNotificationMessage(void)
100    {
101        std::stringstream stream;
102        stream << this->getPreMessage();
103        stream << this->bindingNiceifyer(KeyBinderManager::getInstance().getCurrent()->getBinding(this->getCommand()));
104        stream << this->getPostMessage();
105        return *(new std::string(stream.str()));
106    }
107
108    /**
109    @brief
110        Transforms the input binding into a human readable form.
111    @param binding
112        The binding to be transformed
113    @return
114        Returns a human readable version of the input binding.
115    */
116    //TODO: Move to KeyBinderManager...
117    const std::string& CommandNotification::bindingNiceifyer(const std::string& binding)
118    {
119        SubString substring = SubString(binding, ".");
120        std::string name;
121        std::string group;
122        switch(substring.size())
123        {
124            case 0:
125                return binding;
126            case 1:
127                return binding;
128            case 2:
129                group = substring[0];
130            default:
131                name = substring.subSet(1).join(".");
132        }
133
134        std::stringstream stream;
135        if(group.compare("Keys") == 0)
136            stream << "Key " << name.substr(3);
137        else if(group.compare("MouseButtons") == 0)
138            stream << "Mouse " << name;
139        else if(group.compare("JoyStickButtons") == 0)
140            stream << "Joystick " << name;
141        else if(group.compare("JoyStickAxes") == 0)
142            stream << "Joystick Axis" << name.substr(5, 6) << name.substr(name.find("Axis")+6);
143        else if(group.compare("MouseAxes") == 0)
144            stream << "Mouse " << name.substr(1,3) << " " << name.substr(0, 1) << "-Axis";
145        else
146            return binding;
147
148        return *(new std::string(stream.str()));
149    }
150
151}
Note: See TracBrowser for help on using the repository browser.