ShitEngine
基于 C++20 与 SDL3 的轻量级 2D 游戏引擎
Toggle main menu visibility
载入中...
搜索中...
未找到
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
9
namespace
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);
28
bool
isMouseButtonPressed
(
const
MouseButton
code);
29
bool
isMouseButtonReleased
(
const
MouseButton
code);
30
Vector2
getMousePosition
();
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
}
Core.h
SHIT_API
#define SHIT_API
定义
Core.h:12
KeyCode.h
Math.h
Shit::Input
输入管理类(单例)
定义
Input.h:21
Shit::Input::IsKeyDown
static bool IsKeyDown(const KeyCode code)
定义
Input.h:38
Shit::Input::GetInstance
static Input & GetInstance()
Shit::Input::isMouseButtonPressed
bool isMouseButtonPressed(const MouseButton code)
鼠标按键持续按住
Shit::Input::IsKeyPressed
static bool IsKeyPressed(const KeyCode code)
定义
Input.h:39
Shit::Input::Update
static void Update()
定义
Input.h:45
Shit::Input::isMouseButtonDown
bool isMouseButtonDown(const MouseButton code)
鼠标按键刚按下
Shit::Input::IsKeyReleased
static bool IsKeyReleased(const KeyCode code)
定义
Input.h:40
Shit::Input::IsMouseButtonDown
static bool IsMouseButtonDown(const MouseButton code)
定义
Input.h:41
Shit::Input::isKeyDown
bool isKeyDown(const KeyCode code)
按键刚按下(仅一帧为 true)
Shit::Input::isMouseButtonReleased
bool isMouseButtonReleased(const MouseButton code)
鼠标按键刚松开
Shit::Input::isKeyPressed
bool isKeyPressed(const KeyCode code)
按键被持续按住
Shit::Input::isKeyReleased
bool isKeyReleased(const KeyCode code)
按键刚松开
Shit::Input::GetMousePosition
static Vector2 GetMousePosition()
定义
Input.h:46
Shit::Input::handleEvent
void handleEvent(const SDL_Event &event)
处理 SDL 输入事件
Shit::Input::update
void update()
帧末更新,把当前帧状态移入上一帧
Shit::Input::IsMouseButtonReleased
static bool IsMouseButtonReleased(const MouseButton code)
定义
Input.h:43
Shit::Input::getMousePosition
Vector2 getMousePosition()
鼠标当前位置
Shit::Input::IsMouseButtonPressed
static bool IsMouseButtonPressed(const MouseButton code)
定义
Input.h:42
Shit::Input::HandleEvent
static void HandleEvent(const SDL_Event &event)
定义
Input.h:44
Shit
定义
AudioPlayer.h:9
Shit::MouseButton
MouseButton
定义
KeyCode.h:170
Shit::MouseButton::Count
@ Count
定义
KeyCode.h:176
Shit::KeyCode
KeyCode
定义
KeyCode.h:8
Shit::KeyCode::Count
@ Count
定义
KeyCode.h:166
Shit::Vector2
glm::vec2 Vector2
定义
Math.h:5
ShitEngine
Input
Input.h
制作者
1.17.0