Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/lastmanstanding/src/modules/notifications/dispatchers/CommandNotification.cc @ 7636

Last change on this file since 7636 was 7474, checked in by dafrick, 14 years ago

Synchronizing Notifications.
In the course of that, notifications are not longer sent by creating a Notification and the calling notification.send() bur by letting the NotificationManager handle all this: NotificationManager::getInstance().sendNotification(message)
This made QuestNotification obsolete, thus it was removde.

Also did some work on synchronizing the Script class. It should work properly most of the time, but the current solution is unreliable and unsatisfactory. So this will change as soon as I know how.

  • Property svn:eol-style set to native
File size: 4.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 *      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    void CommandNotification::registerVariables(void)
83    {
84        registerVariable(this->command_, VariableDirection::ToClient);
85        registerVariable(this->preMessage_, VariableDirection::ToClient);
86        registerVariable(this->postMessage_, VariableDirection::ToClient);
87    }
88
89    /**
90    @brief
91        Composes the Notification of the preMessage the name of the key the command is mapped to and the postMessage.
92    @return
93        Returns the message to be sent in the Notification.
94    */
95    const std::string& CommandNotification::createNotificationMessage(void)
96    {
97        std::stringstream stream;
98        stream << this->getPreMessage();
99        stream << this->bindingNiceifyer(KeyBinderManager::getInstance().getCurrent()->getBinding(this->getCommand()));
100        stream << this->getPostMessage();
101        return *(new std::string(stream.str()));
102    }
103
104    /**
105    @brief
106        Transforms the input binding into a human readable form.
107    @param binding
108        The binding to be transformed
109    @return
110        Returns a human readable version of the input binding.
111    */
112    const std::string& CommandNotification::bindingNiceifyer(const std::string& binding)
113    {
114        SubString string = SubString(binding, ".");
115        std::string name;
116        std::string group;
117        switch(string.size())
118        {
119            case 0:
120                return binding;
121            case 1:
122                return binding;
123            case 2:
124                group = string[0];
125            default:
126                name = string.subSet(1, string.size()).join(".");
127        }
128
129        std::stringstream stream;
130        if(group.compare("Keys") == 0)
131            stream << "Key " << name.substr(3);
132        else if(group.compare("MouseButtons") == 0)
133            stream << "Mouse " << name;
134        else if(group.compare("JoyStickButtons") == 0)
135            stream << "Joystick " << name;
136        else if(group.compare("JoyStickAxes") == 0)
137            stream << "Joystick Axis" << name.substr(5, 6) << name.substr(name.find("Axis")+6);
138        else if(group.compare("MouseAxes") == 0)
139            stream << "Mouse " << name.substr(1,3) << " " << name.substr(0, 1) << "-Axis";
140        else
141            return binding;
142
143        return *(new std::string(stream.str()));
144    }
145   
146}
Note: See TracBrowser for help on using the repository browser.