/
Mr.Stalin
/
FOnline-Engine
Обзор
Документация
Войти
/
Mr.Stalin
/
FOnline-Engine
Код
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Source/Scripting/AngelScript/CoreScripts/Input.fos
199 строк
4 KB
cvet
Generic fixes (#153)
02 май 2026, 23:06
Не верифицирован
02 май 2026, 23:06
eec4c07
Код
Авторство
О чём код?
namespace Input { #if CLIENT funcdef bool KeyDownCallback(KeyCode key, string text); funcdef void KeyUpCallback(KeyCode key); bool[] KeyPressed = {}; bool[] MousePressed = {}; KeyDownCallback[] KeyDownCallbacks = {}; KeyUpCallback[] KeyUpCallbacks = {}; void AddKeyDownCallback(KeyDownCallback callback) { KeyDownCallbacks.insertLast(callback); } void AddKeyUpCallback(KeyUpCallback callback) { KeyUpCallbacks.insertLast(callback); } bool IsKeyPressed(KeyCode key) { return KeyPressed[key]; } bool IsMousePressed(MouseButton button) { return MousePressed[button]; } GamepadState GetGamepadState() { return Game.GetGamepadState(); } bool IsCtrlDown() { return KeyPressed[KeyCode::Rcontrol] || KeyPressed[KeyCode::Lcontrol]; } bool IsAltDown() { return KeyPressed[KeyCode::Lmenu] || KeyPressed[KeyCode::Rmenu]; } bool IsShiftDown() { return KeyPressed[KeyCode::Lshift] || KeyPressed[KeyCode::Rshift]; } bool[] GetKeyPressed() { return KeyPressed; } bool[] GetMousePressed() { return MousePressed; } [[ModuleInit]] void InitInput() { Game.OnMouseDown.Subscribe(OnMouseDown); Game.OnMouseUp.Subscribe(OnMouseUp); Game.OnMouseMove.Subscribe(OnMouseMove); Game.OnKeyDown.Subscribe(OnKeyDown); Game.OnKeyUp.Subscribe(OnKeyUp); Game.OnInputLost.Subscribe(OnInputLost); KeyPressed.resize(0x100); MousePressed.resize(MouseButton::Ext4 + 1); } void ReleaseKeys() { for (int i = 0; i < KeyPressed.length(); i++) { if (KeyPressed[i]) { KeyUp(KeyCode(i)); } } } void ReleaseMouse() { for (int i = 0; i < MousePressed.length(); i++) { if (MousePressed[i]) { MouseUp(MouseButton(i)); } } } [[Event]] void OnMouseDown(MouseButton button) { MouseDown(button); } [[Event]] void OnMouseUp(MouseButton button) { MouseUp(button); } [[Event]] void OnMouseMove(ipos offset) { MouseMove(offset); } [[Event]] void OnKeyDown(KeyCode key, string text) { KeyDown(key, text); } [[Event]] void OnKeyUp(KeyCode key) { KeyUp(key); } [[Event]] void OnInputLost() { InputLost(); } void MouseDown(MouseButton button) // Engine callback { if (Game.IsConnecting()) { return; } MousePressed[button] = true; Gui::EngineCallback_MouseDown(button); } void MouseUp(MouseButton button) // Engine callback { if (MousePressed[button]) { Gui::EngineCallback_MouseUp(button); } MousePressed[button] = false; } void MouseMove(ipos offset) // Engine callback { Gui::EngineCallback_MouseMove(offset); } void KeyDown(KeyCode key, string text) // Engine callback { // Avoid repeating if (KeyPressed[key]) { if (key != KeyCode::Text && key != KeyCode::Space && key != KeyCode::Back && key != KeyCode::Delete && key != KeyCode::Left && key != KeyCode::Right) { return; } } KeyPressed[key] = true; // Handlers bool handled = false; for (int i = 0; !handled && i < KeyDownCallbacks.length(); i++) { handled = KeyDownCallbacks[i](key, text); } if (!handled) { Gui::EngineCallback_KeyDown(key, text); } } void KeyUp(KeyCode key) // Engine callback { // Avoid repeating if (!KeyPressed[key]) { return; } KeyPressed[key] = false; // Handlers for (int i = 0; i < KeyUpCallbacks.length(); i++) { KeyUpCallbacks[i](key); } Gui::EngineCallback_KeyUp(key); } // Called on mouse/keyboard input lost (alt-tab, minimize, lost focus). void InputLost() // Engine callback { // Reset states ReleaseKeys(); ReleaseMouse(); // Gui:: handler Gui::EngineCallback_InputLost(); } #endif }