#ifndef HGL_IO_KEYBOARD_EVENT_INCLUDE #define HGL_IO_KEYBOARD_EVENT_INCLUDE #include namespace hgl { namespace io { /** * 按键枚举定义 */ enum class KeyboardButton { NONE=0, //主键盘区 Esc, ///key)))return EventProcResult::Break;break; case KeyboardEventID::Released: if(OnReleased (KeyboardButton(((KeyboardEventData *)&data)->key)))return EventProcResult::Break;break; case KeyboardEventID::Char: if(OnChar ( ((KeyboardEventData *)&data)->ch ) )return EventProcResult::Break;break; } return EventProcResult::Continue; } virtual bool OnPressed(const KeyboardButton &kb){return(false);} virtual bool OnReleased(const KeyboardButton &kb){return(false);} virtual bool OnChar(const wchar_t &){return(false);} };//class KeyboardEvent class KeyboardStateEvent:public KeyboardEvent { protected: double cur_time; bool press_states[size_t(KeyboardButton::RANGE_SIZE)]; double pressed_time[size_t(KeyboardButton::RANGE_SIZE)]; public: KeyboardStateEvent():KeyboardEvent() { cur_time=0; hgl_zero(press_states); hgl_zero(pressed_time); } virtual ~KeyboardStateEvent()=default; virtual bool OnPressed(const KeyboardButton &kb) override { if(!RangeCheck(kb))return(false); press_states[(size_t)kb]=true; pressed_time[(size_t)kb]=cur_time; return(true); } virtual bool OnReleased(const KeyboardButton &kb) override { if(!RangeCheck(kb))return(false); press_states[(size_t)kb]=false; pressed_time[(size_t)kb]=0; return(true); } public: /** * 某按键是否按下状态 */ const bool HasPressed(const KeyboardButton &kb)const { if(!RangeCheck(kb))return(false); return press_states[size_t(kb)]; } /** * 设定当前时间 */ void SetCurTime(const double &ct) { cur_time=ct; } /** * 获取按键按下的时间 */ const double GetPressedTime(const KeyboardButton &kb)const { if(!RangeCheck(kb))return(0); return pressed_time[size_t(kb)]; } const bool ShiftPressed()const { return press_states[size_t(KeyboardButton::LeftShift)] ||press_states[size_t(KeyboardButton::RightShift)]; } const bool CtrlPressed()const { return press_states[size_t(KeyboardButton::LeftCtrl)] ||press_states[size_t(KeyboardButton::RightCtrl)]; } const bool AltPressed()const { return press_states[size_t(KeyboardButton::LeftAlt)] ||press_states[size_t(KeyboardButton::RightAlt)]; } };//class KeyboardStateEvent }//namespace io }//namespace hgl #endif//HGL_IO_KEYBOARD_EVENT_INCLUDE