ShitEngine
基于 C++20 与 SDL3 的轻量级 2D 游戏引擎
载入中...
搜索中...
未找到
Input.h
浏览该文件的文档.
1#pragma once
2#include <unordered_map>
3#include <variant>
4
5#include "../Core/Core.h"
6#include "../Math.h"
7#include "KeyCode.h"
8
9namespace Shit {
21 class SHIT_API Input {
22 public:
23 bool isKeyDown(const KeyCode code);
24 bool isKeyPressed(const KeyCode code);
25 bool isKeyReleased(const KeyCode code);
26
27 bool isMouseButtonDown(const MouseButton code);
31
32 void update();
33
34 void handleEvent(const SDL_Event& event);
35
36 // --- 静态API ---
37 static Input& GetInstance();
38 inline static bool IsKeyDown(const KeyCode code) { return GetInstance().isKeyDown(code); }
39 inline static bool IsKeyPressed(const KeyCode code) { return GetInstance().isKeyPressed(code); }
40 inline static bool IsKeyReleased(const KeyCode code) { return GetInstance().isKeyReleased(code); }
41 inline static bool IsMouseButtonDown(const MouseButton code) { return GetInstance().isMouseButtonDown(code); }
42 inline static bool IsMouseButtonPressed(const MouseButton code) { return GetInstance().isMouseButtonPressed(code); }
43 inline static bool IsMouseButtonReleased(const MouseButton code) { return GetInstance().isMouseButtonReleased(code); }
44 inline static void HandleEvent(const SDL_Event& event) { GetInstance().handleEvent(event); }
45 inline static void Update() { GetInstance().update(); }
46 inline static Vector2 GetMousePosition() { return GetInstance().getMousePosition(); }
47 private:
48 // 按键状态
49 std::array<bool, static_cast<int>(KeyCode::Count)> m_currentKeys;
50 std::array<bool, static_cast<int>(KeyCode::Count)> m_previousKeys;
51
52 // 鼠标按键状态
53 std::array<bool, static_cast<int>(MouseButton::Count)> m_currentMouseButtons;
54 std::array<bool, static_cast<int>(MouseButton::Count)> m_previousMouseButtons;
55
56 // 鼠标滚动增量
57 Vector2 m_mouseScroll;
58
59 Input();
60 ~Input();
61
62 Input(const Input&) = delete;
63 Input& operator=(const Input&) = delete;
64 Input(Input&&) = delete;
65 Input& operator=(Input&&) = delete;
66 };
67}
#define SHIT_API
定义 Core.h:12
输入管理类(单例)
定义 Input.h:21
static bool IsKeyDown(const KeyCode code)
定义 Input.h:38
static Input & GetInstance()
bool isMouseButtonPressed(const MouseButton code)
鼠标按键持续按住
static bool IsKeyPressed(const KeyCode code)
定义 Input.h:39
static void Update()
定义 Input.h:45
bool isMouseButtonDown(const MouseButton code)
鼠标按键刚按下
static bool IsKeyReleased(const KeyCode code)
定义 Input.h:40
static bool IsMouseButtonDown(const MouseButton code)
定义 Input.h:41
bool isKeyDown(const KeyCode code)
按键刚按下(仅一帧为 true)
bool isMouseButtonReleased(const MouseButton code)
鼠标按键刚松开
bool isKeyPressed(const KeyCode code)
按键被持续按住
bool isKeyReleased(const KeyCode code)
按键刚松开
static Vector2 GetMousePosition()
定义 Input.h:46
void handleEvent(const SDL_Event &event)
处理 SDL 输入事件
void update()
帧末更新,把当前帧状态移入上一帧
static bool IsMouseButtonReleased(const MouseButton code)
定义 Input.h:43
Vector2 getMousePosition()
鼠标当前位置
static bool IsMouseButtonPressed(const MouseButton code)
定义 Input.h:42
static void HandleEvent(const SDL_Event &event)
定义 Input.h:44
定义 AudioPlayer.h:9
MouseButton
定义 KeyCode.h:170
@ Count
定义 KeyCode.h:176
KeyCode
定义 KeyCode.h:8
@ Count
定义 KeyCode.h:166
glm::vec2 Vector2
定义 Math.h:5