view src/KeyboardEventHandler.h @ 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

#ifndef KEYBOARD_HANDLER_H
#define KEYBOARD_HANDLER_H
#include <iostream>
#include <osgGA/GUIEventHandler>

class Player;

/*!
    @header KeyboardHandler
    @abstract   Keyboard入力のコールバック関数を司るクラス
    @discussion Keyboardの入力とPlayer(インターフェース)を実装したクラスの関数のポインタをハッシュで保持
*/

class KeyboardEventHandler : public osgGA::GUIEventHandler {
	public:

		/*! @typedef functionType @abstract Playerの仮想関数へのポインタ */
		typedef void (Player::*functionType)();

		/*!
			@enum		keyStatusType
			@abstract   Key入力の状態
			@constant   KEY_UP ボタンを入力
			@constant   KEY_UP ボタンを解放
		*/
		enum keyStatusType {
			KEY_UP, KEY_DOWN 
		};

		/*!
		 @function			addFunction
		 @abstract			コールバック関数の登録
		 @param whatKey		キー入力の値(ascii)
		 @param newFunction 登録する関数のポインタ
 		 @param target		関数を実行するインスタンス
		*/
		bool addFunction(int whatKey, functionType newFunction, Player *player);
		bool addFunction(int whatKey, keyStatusType keyPressStatus, functionType newFunction, Player *player);
		virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter&);
		virtual void accept(osgGA::GUIEventHandlerVisitor& v)   { v.visit(*this); };

	protected:
		/*!
		 @struct		functionStatusType
		 @abstract   Playerの関数登録の引数
		 @field      target 関数を呼び出すPlayerのインスタンス
		*/
		struct functionStatusType {
			functionStatusType() {keyState = KEY_UP; keyFunction = NULL;}
			functionType keyFunction;
			keyStatusType keyState;
			Player* target;
		};

		/*! @typedef keyFunctionMap @abstract コールバック関数とキー入力のハッシュ */
		typedef std::map<int, functionStatusType> keyFunctionMap;

		/*! @var keyFunctionMap ボタン押し時のコールバック関数のハッシュ */
		keyFunctionMap keyFuncMap;

		/*! @var keyFunctionMap ボタン押し時のコールバック関数のハッシュ */
		keyFunctionMap keyUPFuncMap;
};

#endif