@events.mouseможно отменить8 методовКнопку мыши нажали или отпустили. Приходит и в игре, и в открытых экранах.
Общее событие мыши: раньше из скрипта был виден только клик внутри контейнера, и всё остальное было недоступно.
Координаты курсора приходят в тех же единицах, в которых рисует render_2d, поэтому попадание в свою нарисованную кнопку считается обычным сравнением чисел.
| Метод | Возвращает | Зачем |
|---|---|---|
getButton() | int | 0 левая, 1 правая, 2 колесо, дальше боковые |
getName() | str | Подпись кнопки так, как её показывает клиент |
isLeft() / isRight() / isMiddle() | bool | Какая кнопка |
isPress() / isRelease() | bool | Нажали или отпустили |
getX() / getY() | float | Где курсор, в единицах render_2d |
isShift() / isCtrl() / isAlt() | bool | Был ли зажат модификатор |
isScreenOpen() | bool | Открыт ли сейчас экран |
cancel() | - | Не дать клику дойти до игры |
mod = Module("ClickPanel", "Other")
BOX = (10.0, 60.0, 90.0, 20.0) # x, y, ширина, высота
count = 0
@events.render_2d
def draw(event):
if not mod.isEnabled():
return
ctx = event.getContext()
ctx.drawRoundedRect(BOX[0], BOX[1], BOX[2], BOX[3], border(4), theme.accent())
ctx.drawText(font("medium", 7), "нажатий: %d" % count, BOX[0] + 8, BOX[1] + 7, theme.on_accent())
@events.mouse
def on_mouse(event):
global count
if not mod.isEnabled() or not event.isPress() or not event.isLeft():
return
x, y = event.getX(), event.getY()
if BOX[0] <= x <= BOX[0] + BOX[2] and BOX[1] <= y <= BOX[1] + BOX[3]:
count += 1
# клик забрали себе: по игре он не пройдёт
event.cancel()Общий список всех событий и правила подписки лежат на странице События.