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