Magic_Game/core/e2devent.h

153 lines
2.1 KiB
C++

#pragma once
#include "e2dcommon.h"
namespace e2d
{
// 按键消息
class KeyEvent
{
public:
// 按键消息类型
enum class Type : int
{
Down = 0x0100, // 按下
Up // 抬起
};
public:
explicit KeyEvent(
HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam
);
// 获取按键键值
KeyCode getCode() const;
// 获取按键次数
int getCount() const;
// 获取事件类型
KeyEvent::Type getType() const;
// VK 键值转换
static KeyCode convertKeyCode(
WPARAM wParam
);
protected:
int _count;
KeyCode _code;
KeyEvent::Type _type;
};
// 鼠标消息
class MouseEvent
{
public:
// 鼠标消息类型
enum class Type : int
{
Move = 0x0200, // 鼠标移动
LeftDown, // 鼠标左键按下
LeftUp, // 鼠标左键抬起
LeftDoubleClick, // 鼠标左键双击
RightDown, // 鼠标右键按下
RightUp, // 鼠标右键抬起
RightDoubleClick, // 鼠标右键双击
MiddleDown, // 鼠标中键按下
MiddleUp, // 鼠标中键抬起
MiddleDoubleClick, // 鼠标中键双击
Wheel // 滑动滚轮
};
public:
explicit MouseEvent(
HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam
);
// 获取鼠标横坐标
float getX() const;
// 获取鼠标纵坐标
float getY() const;
// 获取鼠标坐标
Point getPos() const;
// 获取事件类型
MouseEvent::Type getType() const;
float getWheelDelta() const;
// 鼠标左键是否按下
bool isLButtonDown() const;
// 鼠标右键是否按下
bool isRButtonDown() const;
// 鼠标中键是否按下
bool isMButtonDown() const;
// Shift 键是否按下
bool isShiftDown() const;
// Ctrl 键是否按下
bool isCtrlDown() const;
protected:
UINT _message;
WPARAM _wParam;
LPARAM _lParam;
Point _pos;
MouseEvent::Type _type;
};
// 碰撞事件
class Collision
{
public:
Collision();
explicit Collision(
Node* node,
Collider::Relation relation
);
~Collision();
// 获取发生碰撞节点
Node* getNode() const;
// 获取交集关系
Collider::Relation getRelation() const;
protected:
Node * _node;
Collider::Relation _relation;
};
// 消息处理
class EventHandler
{
public:
// 处理按键消息
virtual void handle(KeyEvent e) { }
// 处理鼠标消息
virtual void handle(MouseEvent e) { }
// 处理碰撞消息
virtual void handle(Collision collision) { }
};
}