njin
Engine 2D gọn nhẹ để tự tay làm game theo ý mình. Vibe coding cũng ổn luôn
Loading...
Searching...
No Matches
njin_bindings.h
1#pragma once
2#include "_types.h"
3#include "njin_input.h"
4#include "njin_json.h"
5#include <initializer_list>
6#include <vector>
7
8namespace njin {
9struct context;
10
13
18 enum kind_t : u8 {
23 };
25 i32 code = 0;
26
28 bool operator==(const input_source &o) const { return kind == o.kind && code == o.code; }
29};
30
35const char *input_source_name(input_source source);
36
40const char *key_name(key_code key);
41
47bool input_any_pressed(const context &ctx, input_source &out);
48
53std::vector<input_source> action_sources(const context &ctx, action_handle action);
54
60void action_bind(context &ctx, action_handle action, input_source source);
61
66void action_unbind(context &ctx, action_handle action, input_source source);
67
74void action_rebind(context &ctx, action_handle action, input_source source);
75
87
102inline action_handle action_define(context &ctx, const char *name, std::initializer_list<binding> sources) {
103 const action_handle handle = action_register(ctx, name);
104 for (const binding &b : sources)
105 action_bind(ctx, handle, b.source);
106 return handle;
107}
108
114
129inline axis_handle axis_define(context &ctx, const char *name, std::initializer_list<axis_keys> keys,
130 std::initializer_list<gamepad_axis> pads = {}) {
131 const axis_handle handle = axis_register(ctx, name);
132 for (const axis_keys &k : keys)
133 axis_bind_keys(ctx, handle, k.negative, k.positive);
134 for (const gamepad_axis a : pads)
135 axis_bind_pad(ctx, handle, a);
136 return handle;
137}
138
144json_value input_bindings_save(const context &ctx);
145
152bool input_bindings_load(context &ctx, const json_value &json);
153
160void pad_rumble(context &ctx, i32 pad, f32 low, f32 high, f32 seconds);
162} // namespace njin
void action_bind(context &ctx, action_handle action, input_source source)
Gắn một nguồn vào action (như action_bind_key(), action_bind_mouse(), action_bind_pad() tùy loại).
action_handle action_define(context &ctx, const char *name, std::initializer_list< binding > sources)
Đăng ký một action và gắn mọi nguồn của nó trong một lời gọi.
Definition njin_bindings.h:102
void axis_bind_keys(context &ctx, axis_handle handle, key_code negative, key_code positive)
Gắn một cặp phím vào axis, đóng vai một cần analog.
const char * key_name(key_code key)
Tên hiển thị của một phím.
void pad_rumble(context &ctx, i32 pad, f32 low, f32 high, f32 seconds)
Rung tay cầm.
std::vector< input_source > action_sources(const context &ctx, action_handle action)
Các nguồn đang gắn vào một action, theo thứ tự: phím, chuột, tay cầm.
axis_handle axis_register(context &ctx, const char *name)
Đăng ký một axis có tên.
bool input_bindings_load(context &ctx, const json_value &json)
Nạp phím từ JSON của input_bindings_save().
void action_unbind(context &ctx, action_handle action, input_source source)
Gỡ một nguồn khỏi action.
gamepad_button
Nút tay cầm, dùng với pad_pressed(), action_bind_pad() và các hàm liên quan.
Definition _types.h:489
gamepad_axis
Trục analog của tay cầm, dùng với pad_axis() và axis_bind_pad().
Definition _types.h:512
json_value input_bindings_save(const context &ctx)
Mọi phím đã gắn (action và axis) dạng JSON, để lưu vào file cài đặt: {"actions": {"jump": ["key:space...
mouse_button
Nút chuột, dùng với mouse_pressed(), action_bind_mouse() và các hàm liên quan.
Definition _types.h:474
bool input_any_pressed(const context &ctx, input_source &out)
Nguồn vừa được nhấn ở frame này, nếu có: dùng cho màn hình "bấm phím mới".
void action_rebind(context &ctx, action_handle action, input_source source)
Gắn source vào action thay cho nguồn cùng loại đang có (phím thay phím, nút tay cầm thay nút tay cầm)...
const char * input_source_name(input_source source)
Tên hiển thị của một nguồn, bằng tiếng Anh ngắn như trên bàn phím: "Space", "A", "Left Shift",...
axis_handle axis_define(context &ctx, const char *name, std::initializer_list< axis_keys > keys, std::initializer_list< gamepad_axis > pads={})
Đăng ký một axis và gắn mọi cặp phím và trục tay cầm của nó trong một lời gọi.
Definition njin_bindings.h:129
action_handle action_register(context &ctx, const char *name)
Đăng ký một action có tên.
void axis_bind_pad(context &ctx, axis_handle handle, gamepad_axis axis)
Gắn một trục tay cầm vào axis.
key_code
Mã phím bàn phím, dùng với key_pressed(), action_bind_key() và các hàm liên quan.
Definition _types.h:340
std::uint8_t u8
Số nguyên không dấu 8 bit.
Definition _types.h:20
std::int32_t i32
Số nguyên có dấu 32 bit.
Definition _types.h:14
float f32
Số thực 32 bit.
Definition _types.h:28
@ button
Nút bấm.
Definition njin_ui_layout.h:21
Định danh của một action nhập liệu, tạo bởi action_register().
Definition _types.h:85
Định danh của một axis nhập liệu, tạo bởi axis_register().
Definition _types.h:93
Một cặp phím của axis: phím cho chiều âm và phím cho chiều dương.
Definition njin_bindings.h:110
key_code negative
Phím cho chiều âm (trái, lên).
Definition njin_bindings.h:111
key_code positive
Phím cho chiều dương (phải, xuống).
Definition njin_bindings.h:112
Một nguồn viết gọn cho action_define(): truyền thẳng một phím, một nút chuột hoặc một nút tay cầm,...
Definition njin_bindings.h:78
binding(gamepad_button button)
Definition njin_bindings.h:85
binding(key_code key)
Definition njin_bindings.h:81
binding(mouse_button button)
Definition njin_bindings.h:83
input_source source
Nguồn đã đổi sang njin::input_source.
Definition njin_bindings.h:79
Một nguồn nhập liệu: một phím, một nút chuột, hoặc một nút tay cầm.
Definition njin_bindings.h:16
i32 code
Mã theo loại.
Definition njin_bindings.h:25
kind_t
Loại nguồn.
Definition njin_bindings.h:18
@ none
Không có.
Definition njin_bindings.h:19
@ pad
Nút tay cầm, code là njin::gamepad_button.
Definition njin_bindings.h:22
@ mouse
Nút chuột, code là njin::mouse_button.
Definition njin_bindings.h:21
@ key
Phím, code là njin::key_code.
Definition njin_bindings.h:20
bool operator==(const input_source &o) const
So sánh hai nguồn.
Definition njin_bindings.h:28
kind_t kind
Loại.
Definition njin_bindings.h:24
Một giá trị JSON: null, bool, số, chuỗi, mảng hoặc object.
Definition njin_json.h:33