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;
	}
}