Search the Community

Showing results for tags 'KeyHandler'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • RAGE Multiplayer
    • Announcements
    • Discussion
    • Suggestions
  • Scripting
    • Scripting
    • Resources
  • Community
    • Support
    • Servers
    • Media Gallery
  • Non-English
    • Русский - Russian
    • Français - French
    • Deutsch - German
    • Espanol - Spanish
    • Română - Romanian
    • Portuguesa - Portuguese
    • Polski - Polish

Categories

  • Scripts
  • Gamemodes
  • Libraries
  • Plugins
  • Maps
  • Tools

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


About Me


Facebook


Youtube


Skype


Web


VK

Found 1 result

  1. Всем привет! Рассмотрим пример как сделать свой простенький KeyHandler Для этого давайте создадим папку Inputs и в ней два файла. Можно скачать по ссылке на Git Создадим класс для кнопки: namespace YourNamespace.Inputs { //создадим список enum с кодами кнопок enum KeyCodes { released = -1, F1 = 112, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, Key_0 = 48, Key_1, Key_2, Key_3, Key_4, Key_5, Key_6, Key_7, Key_8, Key_9, A = 65, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z } //объявим делегат для функций обратного вызова public delegate void KeyActions(); //Сам класс class KeyModel { //тут будет храниться код кнопки из нашего списка public KeyCodes KeyCode; //тут функция которая будет выполнятся по нажатии кнопки public KeyActions OnPress; //тут функция которая будет выполнятся при отпускании кнопки public KeyActions OnRelease; //объявим конструктор класса public KeyModel(KeyCodes keyCode, KeyActions onPress, KeyActions onRelease) { KeyCode = keyCode; OnPress = onPress; OnRelease = onRelease; } } } И непосредственно сам обработчик событий using RAGE; using System.Collections.Generic; namespace YourNamespace.Inputs { //сам класс унаследованный от RAGE.Events.Script class Key: Events.Script { //конструктор класса Key() { //подпишемся на событие Tick для вызова обработчика кждый кадр Events.Tick += Handler; } //объявим некоторые переменные //тут создадим экземпляр ненажатой кнопки private static KeyModel Releazed = new KeyModel(KeyCodes.released, null, null); //тут будем хранить текущее состояние кнопок, на начальном этапе присвоим ссылку на Releazed(Ни одна из кнопок не нажата) private static KeyModel Pressed = Releazed; //создадим список где будем хранить все наши конфигурации кнопок private static List<KeyModel> InputList = new List<KeyModel>(); //сам метод обработчика, вызывается каждый кадр private static void Handler(List<Events.TickNametagData> nametags) { //проверяем не занят ли обработчик другим действием, если нет вызываем метод CheckPressed if (Pressed.KeyCode == KeyCodes.released) CheckPressed(); //если он занят в данный момент - ждем когда будет отпущена предыдущая кнопка else if (!Input.IsDown((int)Pressed.KeyCode)) { //проверяем назначен ли метод на событие отпускания кнопки, если есть - выполняем if (Pressed.OnRelease != null) Pressed.OnRelease.Invoke(); //сообщаем обработчику что он свободен Pressed = Releazed; }; } //метод для проверки нажата ли какая либо клавиша из списка private static void CheckPressed() { //проходим по всему списку InputList.ForEach(i => { //если нажата какая-то клавиша то if (Input.IsDown((int)i.KeyCode)) { //назначаем ее обработчику сообщая ему что он занят в данный момент Pressed = i; //проверяем назначен ли метод на событие нажатия кнопки, если есть - выполняем if (i.OnPress != null) i.OnPress.Invoke(); //выходим из метода return; } }); } //метод для добавления кнопки в список принимает теже параметры что и класс KeyModel public static void Bind(KeyCodes keyCode, KeyActions onPress, KeyActions onRelease = null) { //проверяем не назначены ли уже события для эой кнопки if (InputList.Exists(i => i.KeyCode == keyCode)) { //если назначены получаем объект данной кнопки KeyModel Input = InputList.Find(i => i.KeyCode == keyCode); //и подписываемся на его события Input.OnPress += onPress; Input.OnRelease += onRelease; } //если нет то просто создаем новый объект else InputList.Add(new KeyModel(keyCode, onPress, onRelease)); } // метод удаления кнопки из списка public static void Unbind(KeyCodes keyCode) { //тут просто находим объект с данным кодом в списке и удаляем if (InputList.Exists(i => i.KeyCode == keyCode)) { KeyModel Input = InputList.Find(i => i.KeyCode == keyCode); InputList.Remove(Input); } } } } Ну и конечно же пример добавляем или удаляем кнопку из списка при помощи методов Key.Bind() и Key.Unbind() предварительно подключив пространство имен YourNamespace.Inputs using RAGE; using YourNamespace.Inputs; namespace YourNamespace { //к примеру при старте клиента class ResourceStart: Events.Script { public ResourceStart(){ //назначим обработчик для кнопки Е с методами при нажатии (OnKeyPress) и отпуске(OnKeyRelease) кнопки Key.Bind(KeyCodes.E, OnKeyPress, OnKeyRelease); } //это метод который будет вызван при нажатии public static void OnKeyPress(){ Chat.Output("check on click"); } //это метод который будет вызван при отпускании public static void OnKeyRelease(){ Chat.Output("check on release"); } } } Надеюсь кому-то было полезным всем пока