Требования
- Уверенное пользование jass.
- Мемхак анрайза. (>1.3)
- pjass для работы мемхака. (Закинуть в JNGP/jasshelper)
- Уверенное пользование jass.
- Мемхак анрайза. (>1.3)
- pjass для работы мемхака. (Закинуть в JNGP/jasshelper)
Координаты курсора
Для того, чтобы перенести фрейм курсором, понятное дело, нужно получить его координаты.
Посмотрим на существующий функционал MouseAPI.
Для того, чтобы перенести фрейм курсором, понятное дело, нужно получить его координаты.
Посмотрим на существующий функционал MouseAPI.
function GetCursorX takes nothing returns integer
function GetCursorY takes nothing returns integer
--
function GetCursorXRelative takes nothing returns integer
function GetCursorYRelative takes nothing returns integer
Не относительные геттеры (первые два) показывают координаты экрана.
Относительные же показывают относительно окна Варкрафта.
Абсолютный ноль GetCursor - левый верхний угол экрана.
Абсолютный ноль GetCursorYRelative - левый верхний угол окна.
В полноэкранном режиме, разницы не будет.
Относительные же показывают относительно окна Варкрафта.
Абсолютный ноль GetCursor - левый верхний угол экрана.
Абсолютный ноль GetCursorYRelative - левый верхний угол окна.
В полноэкранном режиме, разницы не будет.
Поэтому, правильней взять - GetCursorRelative. Фреймовые координаты тоже относительные, поэтому это было очевидно еще с самого начала.
Фреймовые координаты
Опытным путем выяснилось, что максимум X = 0.8 и максимум Y = 0.6. Все сходится, соотношение 4 на 3 же.
Опытным путем выяснилось, что максимум X = 0.8 и максимум Y = 0.6. Все сходится, соотношение 4 на 3 же.
Конвертация
Здесь уже пригодится GameWindowAPI.
Здесь уже пригодится GameWindowAPI.
function GetWindowWidth takes nothing returns real
function GetWindowHeight takes nothing returns real
Решение назревает само собой:
Для X нужно координаты курсора умножить на 0.8 и поделить на ширину окна.
Для Y нужно координаты курсора умножить на 0.6 и поделить на высоту окна.
За нас, это уже сделал анрайз и добавил две функции в тот же апи.
Для X нужно координаты курсора умножить на 0.8 и поделить на ширину окна.
Для Y нужно координаты курсора умножить на 0.6 и поделить на высоту окна.
За нас, это уже сделал анрайз и добавил две функции в тот же апи.
function FromPixelX takes integer i returns real
function FromPixelY takes integer i returns real
Уже близко, но все еще чего-то не хватает.
Требуется инвертировать значения Y. Отнять от 0.6 наше значение
Получается вот такой код:
Требуется инвертировать значения Y. Отнять от 0.6 наше значение
Получается вот такой код:
local real frameX = FromPixelX(GetCursorXRelative())
local real frameY = .6 - FromPixelY(GetCursorYRelative())
Использование
Чуть-чуть подшаманив над моей вчерашней наработкой, можно получить что-то такое:
Чуть-чуть подшаманив над моей вчерашней наработкой, можно получить что-то такое: