|
From: <xs...@us...> - 2006-05-21 19:22:37
|
Revision: 57 Author: xsdwx Date: 2006-05-21 12:22:25 -0700 (Sun, 21 May 2006) ViewCVS: http://svn.sourceforge.net/perceptioncrash/?rev=57&view=rev Log Message: ----------- Added InputController.hpp and InputController.cpp from last revision (sorry) Added Paths: ----------- trunk/perceptioncrash/src/InputController.cpp trunk/perceptioncrash/src/InputController.hpp Added: trunk/perceptioncrash/src/InputController.cpp =================================================================== --- trunk/perceptioncrash/src/InputController.cpp (rev 0) +++ trunk/perceptioncrash/src/InputController.cpp 2006-05-21 19:22:25 UTC (rev 57) @@ -0,0 +1,79 @@ +#include "InputController.hpp" +#include "InputManager.hpp" + +InputController::~InputController() +{ + std::map<std::string, InputControllerButton*>::iterator i; + for (i = mButtons.begin(); i != mButtons.end(); ++i) + { + delete i->second; + } +} + +void +InputController::update() +{ + Ogre::InputReader* inpReader = InputManager::getSingleton().getInputDevice(); + inpReader->capture(); + + std::map<std::string, InputControllerButton*>::iterator i; + for (i = mButtons.begin(); i != mButtons.end(); ++i) + { + if ( i->second->getButtonType() == BT_KEYBOARD ) + { + i->second->setDown( inpReader->isKeyDown(static_cast<Ogre::KeyCode>(i->second->getButton())) ); + } + else if ( i->second->getButtonType() == BT_MOUSE ) + { + i->second->setDown( inpReader->getMouseButton(i->second->getButton()) ); + } + } +} +InputControllerButton* +InputController::registerButton(std::string name, int button, int type) +{ + if ( mButtons.find(name) == mButtons.end() ) + { + return mButtons[name] = new InputControllerButton(button, type); + } + + return 0; +} + +void +InputController::unregisterButton(std::string name) +{ + std::map<std::string, InputControllerButton*>::iterator i = mButtons.find(name); + if ( i != mButtons.end() ) + { + delete i->second; + mButtons.erase(i); + } +} + +InputControllerButton* +InputController::getButton(std::string name) +{ + std::map<std::string, InputControllerButton*>::iterator i = mButtons.find(name); + if ( i != mButtons.end() ) + { + return i->second; + } + + return 0; +} + +InputControllerButton* +InputController::getButton(int button) +{ + std::map<std::string, InputControllerButton*>::iterator i; + for (i = mButtons.begin(); i != mButtons.end(); ++i) + { + if ( i->second->getButton() == button ) + { + return i->second; + } + } + + return 0; +} Added: trunk/perceptioncrash/src/InputController.hpp =================================================================== --- trunk/perceptioncrash/src/InputController.hpp (rev 0) +++ trunk/perceptioncrash/src/InputController.hpp 2006-05-21 19:22:25 UTC (rev 57) @@ -0,0 +1,54 @@ +#ifndef PC_INPUT_CONTROLLER_HPP +#define PC_INPUT_CONTROLLER_HPP + +#include <map> +#include <string> + +enum BUTTON_TYPE +{ + BT_KEYBOARD = 0, + BT_MOUSE +}; + +class InputControllerButton +{ + public: + InputControllerButton(int button, int type) + : mDown(false), mButton(button), mButtonType(type) { } + + bool isDown() const + { return mDown; } + void setDown(bool value) + { mDown = value; } + + int getButton() const + { return mButton; } + int getButtonType() const + { return mButtonType; } + + private: + bool mDown; + + int mButton; + int mButtonType; +}; + +class InputController +{ + public: + InputController() { } + ~InputController(); + + void update(); + + InputControllerButton* registerButton(std::string name, int button, int type = 0); + void unregisterButton(std::string name); + + InputControllerButton* getButton(std::string name); + InputControllerButton* getButton(int button); + + private: + std::map<std::string, InputControllerButton*> mButtons; +}; + +#endif /* PC_INPUT_CONTROLLER_HPP */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |