mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-07 06:11:19 -04:00
71 lines
2.6 KiB
C
71 lines
2.6 KiB
C
#ifndef CC_INPUTHANDLER_H
|
|
#define CC_INPUTHANDLER_H
|
|
#include "Input.h"
|
|
CC_BEGIN_HEADER
|
|
|
|
/*
|
|
Manages base game input handling
|
|
Copyright 2014-2025 ClassiCube | Licensed under BSD-3
|
|
*/
|
|
struct IGameComponent;
|
|
struct StringsBuffer;
|
|
struct InputDevice;
|
|
extern struct IGameComponent InputHandler_Component;
|
|
|
|
|
|
/* whether to leave text input open for user to enter further input */
|
|
#define HOTKEY_FLAG_STAYS_OPEN 0x01
|
|
/* Whether the hotkey was auto defined (e.g. by server) */
|
|
#define HOTKEY_FLAG_AUTO_DEFINED 0x02
|
|
|
|
extern const cc_uint8 Hotkeys_LWJGL[256];
|
|
struct HotkeyData {
|
|
int textIndex; /* contents to copy directly into the input bar */
|
|
cc_uint8 trigger; /* Member of Key enumeration */
|
|
cc_uint8 mods; /* HotkeyModifiers bitflags */
|
|
cc_uint8 flags; /* HOTKEY_FLAG flags */
|
|
};
|
|
|
|
#define HOTKEYS_MAX_COUNT 256
|
|
extern struct HotkeyData HotkeysList[HOTKEYS_MAX_COUNT];
|
|
extern struct StringsBuffer HotkeysText;
|
|
enum HotkeyModifiers {
|
|
HOTKEY_MOD_CTRL = 1, HOTKEY_MOD_SHIFT = 2, HOTKEY_MOD_ALT = 4
|
|
};
|
|
|
|
/* Adds or updates a new hotkey. */
|
|
void Hotkeys_Add(int trigger, cc_uint8 modifiers, const cc_string* text, cc_uint8 flags);
|
|
/* Removes the given hotkey. */
|
|
cc_bool Hotkeys_Remove(int trigger, cc_uint8 modifiers);
|
|
/* Returns the first hotkey which is bound to the given key and has its modifiers pressed. */
|
|
/* NOTE: The hotkeys list is sorted, so hotkeys with most modifiers are checked first. */
|
|
int Hotkeys_FindPartial(int key);
|
|
|
|
/* Loads the given hotkey from options. (if it exists) */
|
|
void StoredHotkeys_Load(int trigger, cc_uint8 modifiers);
|
|
/* Removes the given hotkey from options. */
|
|
void StoredHotkeys_Remove(int trigger, cc_uint8 modifiers);
|
|
/* Adds the given hotkey from options. */
|
|
void StoredHotkeys_Add(int trigger, cc_uint8 modifiers, cc_bool moreInput, const cc_string* text);
|
|
|
|
cc_bool InputHandler_SetFOV(int fov);
|
|
cc_bool Input_HandleMouseWheel(float delta);
|
|
void InputHandler_Tick(float delta);
|
|
void InputHandler_OnScreensChanged(void);
|
|
|
|
|
|
typedef cc_bool (*BindTriggered)(int key, struct InputDevice* device);
|
|
typedef void (*BindReleased)(int key, struct InputDevice* device);
|
|
/* Gets whether the given input binding is currently being triggered */
|
|
CC_API cc_bool KeyBind_IsPressed(InputBind binding);
|
|
|
|
/* Callback behaviour for when the given input binding is triggered */
|
|
extern BindTriggered Bind_OnTriggered[BIND_COUNT];
|
|
/* Callback behaviour for when the given input binding is released */
|
|
extern BindReleased Bind_OnReleased[BIND_COUNT];
|
|
/* Whether the given input binding is activated by one or more devices */
|
|
extern cc_uint8 Bind_IsTriggered[BIND_COUNT];
|
|
|
|
CC_END_HEADER
|
|
#endif
|