Mercurial > hg > Members > e075743
view 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 source
#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; } }