Mercurial > hg > Members > e075743
diff src/KeyboardEventHandler.cpp @ 10:5727d511a13a
add src in Martial Project Xcode.
author | tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp |
---|---|
date | Wed, 03 Feb 2010 03:39:04 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/KeyboardEventHandler.cpp Wed Feb 03 03:39:04 2010 +0900 @@ -0,0 +1,57 @@ +#include "KeyboardEventHandler.h" + +bool KeyboardEventHandler::addFunction (int whatKey, keyStatusType keyPressStatus, functionType newFunction, Player *target) { + keyFunctionMap &FuncMap = (keyPressStatus == KEY_DOWN) ? keyFuncMap : keyUPFuncMap; + + if (FuncMap.end() != FuncMap.find(whatKey)) { + std::cout << "duplicate key '" << whatKey << "' ignored." << std::endl; + return false; + } + else { + FuncMap[whatKey].keyFunction = newFunction; + FuncMap[whatKey].target = target; + return true; + } +} + +bool KeyboardEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& aa) { + bool newKeyDownEvent = false; + bool newKeyUpEvent = false; + Player *target; + functionType ft; + + switch(ea.getEventType()) { + case(osgGA::GUIEventAdapter::KEYDOWN): { + keyFunctionMap::iterator itr = keyFuncMap.find(ea.getKey()); + if (itr != keyFuncMap.end()) { + if ( (*itr).second.keyState == KEY_UP ) { + (*itr).second.keyState = KEY_DOWN; + newKeyDownEvent = true; + } + if (newKeyDownEvent) { + target = (*itr).second.target; + ft = (*itr).second.keyFunction; + (target->*ft)(); + } + return true; + } + return false; + } + case(osgGA::GUIEventAdapter::KEYUP): { + keyFunctionMap::iterator itr = keyFuncMap.find(ea.getKey()); + if (itr != keyFuncMap.end()) { + (*itr).second.keyState = KEY_UP; + } + itr = keyUPFuncMap.find(ea.getKey()); + if (itr != keyUPFuncMap.end()) { + target = (*itr).second.target; + ft = (*itr).second.keyFunction; + (target->*ft)(); + return true; + } + return false; + } + default: + return false; + } +}