Знакомые по вебу формы, пересобранные вокруг того, что от них нужно игре.
GoRewardCalendar — ежедневный вход
Выбор даты в игре почти никогда не нужен. А форма календаря — нужна: для наград за вход, где важно, какой у вас день подряд, а не какое сегодня число.
var attendance := GoRewardCalendar.make(days, claimed_until)
attendance.claimed.connect(func(day: int) -> void: server.claim_day(day))
Нажимается только сегодняшняя ячейка — кнопка, которая на нажатие не отвечает, читается как сломанная. Полученное, сегодняшнее и будущее различаются сразу тремя вещами: знаком галочки, акцентной рамкой и притемнением.
GoRadar и GoDonut — характеристики с одного взгляда
var stats := GoRadar.make({"STR": 0.85, "AGI": 0.5, "INT": 0.3, "VIT": 0.7, "LUK": 0.45})
stats.set_compare(with_new_sword) # пунктирный слой поверх
var share := GoDonut.make([{"label": "Физический", "value": 620}, {"label": "Магический", "value": 340}])
card.add_child(share.legend())
Значения радара лежат в 0–1, потому что «сколько это — полностью» решает игра: сырые 120 STR рядом с 45 INT нарисовали бы неправду. Значения кольца сырые, и делит за вас оно само; после пяти долей остальное сворачивается, потому что шестая доля — ниточка, которую никто не прочтёт. Линия сравнения пунктирная, а не просто другого цвета, а легенда пишет процент словами.
GoCarousel — баннеры и выбор персонажа
banners.set_pages([promo, event, pack])
banners.autoplay_seconds = 5.0 # по умолчанию выключено
Сам он не листается, пока вы не попросите, и пять секунд — нижняя граница: баннер, который меняется каждые
три, забирает текст раньше, чем его прочтут. Касание сбрасывает таймер, а при включённом
reduce_motion он не листается сам никогда. Точки нажимаются по минимуму для пальца, хотя
нарисованная точка мала.
GoKbd — подсказки клавиш, которые не врут
hint.add_child(GoKbd.for_action(&"interact")) # читает настоящую привязку
Жёстко вписанное «Нажмите F» продолжает говорить F после того, как игрок переназначил клавиши, — самая частая
ложь в интерфейсе для ПК. for_action() читает InputMap; если действие привязано к
геймпаду, он возвращает пустоту и виджет прячется, потому что «Нет» было бы ложью само по себе.
На Android и iOS он прячется сам.