Compare commits

..

2 Commits

Author SHA1 Message Date
sindoring 1898518ade Кнопка выхода в режиме лаунчера — MoonWell 0.3.2 (#16)
В режиме автоматического входа из лаунчера остаётся доступна штатная локализованная кнопка «Выход». Она использует существующий AccountLogin_Exit / QuitGame и не возвращает поля входа или прочие скрытые элементы. Выбор реалма, PIN, ошибки, камера и протокол авторизации не изменены. Версия приложения MoonWell — 0.3.2; библиотеки Benilla остаются 0.3.1.

Проверено на Windows x64:
- Полный scripts/gates.sh: ALL GATES GREEN — форматирование, Clippy, reference, workspace и doctests, прогон без Data, документация, render-pass lint, player Clippy/tests, оба запуска движка.
- Расширенный login_skin проверяет видимость выхода при загрузке, выборе реалма, PIN и ошибках и передачу GlueCall::QuitGame.
- Dev-клиент с настоящим GlueXML: видны спиннер, статус и «Выход». Прямое нажатие и отдельный клик через поток событий окна завершили процесс с кодом 0; журнал подтвердил login: QuitGame. Учётные данные не использовались, авторизации на сервере не было.
- Release-сборка без dev прошла. В пакете 25 файлов; изменился только MoonWell.exe, остальные 24 совпадают с предыдущим релизом.

Ограничения: 37 проверок workspace и 32 проверки player-конфигурации пропущены из-за отсутствующих внешних аддонов/роликов. Звук выключен, вход в игровой мир не проверялся.
2026-11-08 20:04:06 +03:00
sindoring 02dd646b78 Экран входа MoonWell и синхронизация с Benilla 0.3.1 (#15)
Новый экран входа MoonWell: отдельная 3D-сцена лунного колодца, вода с отражением и рябью, падающие листья, лесное окружение, освещающий сцену висп и музыка Song of the Falling Stars. Автоматический вход из лаунчера показывает локализованные этапы со спиннером и выдерживает время показа сцены. Сохранены ручной вход, ruRU, выбор реалма, переключение интерфейса и исходный протокол авторизации.

Интегрированы 17 изменений Benilla от d9c64230 до e5651f0d, включая порядок прозрачных моделей, анимацию idle, вход в мир, шрифты nameplate и Lua. Сохранены графические расширения MoonWell. Версия workspace — 0.3.1.

Снимок upstream: e5651f0ddd. Изменения применены трёхсторонним слиянием от ранее синхронизированного снимка d9c64230: предыдущая синхронизация попала в main через squash, поэтому обычный merge-base был устаревшим.

Проверено на Windows x64:
- Полный scripts/gates.sh: ALL GATES GREEN — форматирование, Clippy, reference, workspace-тесты и doctests, повторный прогон без Data, документация, каталог сообщений, render-pass lint, Clippy и тесты без dev, оба запуска движка.
- cargo check -p moonwell --locked и release-сборка без dev прошли.
- Обычный запуск release-клиента: сцена и ruRU отрисовываются, применены 4/4 патча шейдеров; журнал подтверждает совпадение касания листа и ряби, включение света виспа. Скриншот сохранён.
- Пакет содержит прежние 25 файлов; изменён только MoonWell.exe. Dry-run S3 подтверждает повторное использование остальных 24 файлов. Производственный auth endpoint доступен по TCP без авторизации.

Ограничения: в workspace-прогоне пропущены 37 проверок внешних аддонов/роликов, в прогоне без dev — 32 проверки внешних аддонов. Тестовая учётная запись не задана, live login/logout не выполнялся. Запуск проверялся без звука. Нативный ввод через инструмент автоматизации в этой сессии не подтвердился также у предыдущего релиза; интерактивная проверка не засчитывается.
2026-11-08 18:55:41 +03:00
5 changed files with 20 additions and 6 deletions
Generated
+1 -1
View File
@@ -4706,7 +4706,7 @@ checksum = "e53debba6bda7a793e5f99b8dacf19e626084f525f7829104ba9898f367d85ff"
[[package]]
name = "moonwell"
version = "0.3.1"
version = "0.3.2"
dependencies = [
"benilla-app",
"benilla-assets",
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "moonwell"
version.workspace = true
version = "0.3.2"
edition.workspace = true
license.workspace = true
description = "The MoonWell launcher: platform branding on top of benilla"
+2 -1
View File
@@ -183,7 +183,8 @@ between it and the framing crowns. All additions remain owned by the disposable
Automatic launcher login (`WOW_USER` and `WOW_PASS`) uses `login_scene/interface.lua`: the
stock account controls and branding are hidden; a twelve-dot spinner repeats the installed,
localized login status. Realm selection, automatic locale selection, PIN, queue and refusal
localized login status. The stock localized Exit button stays available, using its QuitGame handler.
Realm selection, automatic locale selection, PIN, queue and refusal
dialogs retain their stock handlers. Manual login keeps its fields, with Blizzard branding hidden.
`interface.rs::MINIMUM_SCENE_SECONDS=6` and `STAGE_SECONDS=0.85` pace the visible login stages;
the optional `benilla_app::login_backdrop::LoginPresentation` holds successful glue transitions
@@ -53,10 +53,12 @@ function MoonWellLoginPaint(automatic, busy, seconds)
if automatic and AccountLoginUI then
for _, region in ipairs({AccountLoginUI:GetRegions()}) do region:Hide() end
for _, child in ipairs({AccountLoginUI:GetChildren()}) do
if child ~= VirtualKeypadFrame then
if child ~= VirtualKeypadFrame and child ~= AccountLoginExitButton then
child:Hide()
end
end
-- The stock exit keeps its localized label and QuitGame handler during launcher login.
if AccountLoginExitButton then AccountLoginExitButton:Show() end
AccountLoginAccountEdit:ClearFocus()
AccountLoginPasswordEdit:ClearFocus()
end
+13 -2
View File
@@ -1,8 +1,8 @@
//! Exercise the actual launcher Lua with Benilla's Lua 5.0 host, without a GPU or credentials.
use benilla_ui::script::UiScript;
use benilla_ui::script::{GlueCall, UiScript};
#[test]
fn skin_keeps_manual_login_realm_pin_and_errors_usable() {
let s = UiScript::new_glue().unwrap();
let mut s = UiScript::new_glue().unwrap();
s.run(r#"
local font=CreateFont('GlueFontNormalLarge'); font:SetFont('Fonts\\FRIZQT__.TTF',16)
GlueParent=CreateFrame('Frame','GlueParent'); GlueParent:SetWidth(1024); GlueParent:SetHeight(768)
@@ -11,6 +11,8 @@ fn skin_keeps_manual_login_realm_pin_and_errors_usable() {
AccountLoginAccountEdit=CreateFrame('EditBox','AccountLoginAccountEdit',AccountLoginUI)
LanguageDropDown=CreateFrame('Frame','LanguageDropDown',AccountLoginUI)
AccountLoginPasswordEdit=CreateFrame('EditBox','AccountLoginPasswordEdit',AccountLoginUI)
AccountLoginExitButton=CreateFrame('Button','AccountLoginExitButton',AccountLoginUI)
AccountLoginExitButton:SetScript('OnClick',function() QuitGame() end)
VirtualKeypadFrame=CreateFrame('Frame','VirtualKeypadFrame',AccountLoginUI); VirtualKeypadFrame:Hide()
RealmList=CreateFrame('Frame','RealmList',GlueParent); RealmList:Hide()
RealmWizard=CreateFrame('Frame','RealmWizard',GlueParent); RealmWizard:Hide()
@@ -35,6 +37,12 @@ fn skin_keeps_manual_login_realm_pin_and_errors_usable() {
assert!(s.frame_visible("MoonWellLoginStatus"));
assert!(!s.frame_visible("AccountLoginAccountEdit"));
assert!(!s.frame_visible("LanguageDropDown"));
assert!(s.frame_visible("AccountLoginExitButton"));
s.run("AccountLoginExitButton:Click()").unwrap();
assert!(matches!(
s.take_glue_calls().as_slice(),
[GlueCall::QuitGame]
));
assert_eq!(
s.eval::<f64>("return GlueDialogBackground:GetAlpha()")
.unwrap(),
@@ -44,6 +52,7 @@ fn skin_keeps_manual_login_realm_pin_and_errors_usable() {
.unwrap();
assert!(!s.frame_visible("MoonWellLoginStatus"));
assert!(s.frame_visible("RealmList"));
assert!(s.frame_visible("AccountLoginExitButton"));
assert_eq!(
s.eval::<f64>("return GlueDialogBackground:GetAlpha()")
.unwrap(),
@@ -53,12 +62,14 @@ fn skin_keeps_manual_login_realm_pin_and_errors_usable() {
.unwrap();
assert!(!s.frame_visible("MoonWellLoginStatus"));
assert!(s.frame_visible("VirtualKeypadFrame"));
assert!(s.frame_visible("AccountLoginExitButton"));
assert!(s
.eval::<bool>("return AccountLogin:IsKeyboardEnabled() == 1")
.unwrap());
s.run("VirtualKeypadFrame:Hide(); MoonWellLoginPaint(true,false,4)")
.unwrap();
assert!(!s.frame_visible("MoonWellLoginStatus"));
assert!(s.frame_visible("AccountLoginExitButton"));
assert_eq!(
s.eval::<f64>("return GlueDialogBackground:GetAlpha()")
.unwrap(),