save/reset playspace center

This commit is contained in:
galister 2026-07-22 14:56:13 +09:00
parent a12d1ff8f4
commit beae8e82f5
16 changed files with 111 additions and 16 deletions

View File

@ -194,7 +194,11 @@
"COLOR_PALETTE_CUSTOM_URL": "Füge dein eigenes benutzerdefiniertes Thema hinzu!",
"COLOR_PALETTE_CUSTOM_URL2": "Klicken Sie hier, um das Web-Handbuch zu öffnen.",
"SNAP_ANGLE_DEG": "Snap-Winkel für Fensterneigung und Rollwinkel",
"SNAP_ANGLE_DEG_HELP": "Gegriffene Fenster rasten in diesem Winkel auf der Nick- und Rollachse ein."
"SNAP_ANGLE_DEG_HELP": "Gegriffene Fenster rasten in diesem Winkel auf der Nick- und Rollachse ein.",
"SAVE_PLAYSPACE_CENTER": "Playspace-Zentrum speichern",
"SAVE_PLAYSPACE_CENTER_HELP": "Nutzen Sie den aktuellen Playspace für die Zuweisung zum Zurücksetzen des Playspaces.",
"RESET_PLAYSPACE_CENTER": "Playspace-Zentrum zurücksetzen",
"RESET_PLAYSPACE_CENTER_HELP": "Zuvor festgelegtes Playspace-Zentrum zurücksetzen."
},
"HELLO": "Hallo!",
"AUDIO": {

View File

@ -167,6 +167,10 @@
"REQUIRES_RESTART": "Requires restart",
"RESET_PLAYSPACE": "Reset playspace",
"RESET_PLAYSPACE_HELP": "Clear the stage space offset.",
"SAVE_PLAYSPACE_CENTER": "Save playspace center",
"SAVE_PLAYSPACE_CENTER_HELP": "Use current playspace for reset playspace binding.",
"RESET_PLAYSPACE_CENTER": "Reset playspace center",
"RESET_PLAYSPACE_CENTER_HELP": "Clear previously set playspace center.",
"RESTART_SOFTWARE": "Restart software",
"RESTART_SOFTWARE_HELP": "Apply settings that require a restart",
"ROUND_MULTIPLIER": "UI Edge roundness",

View File

@ -194,7 +194,11 @@
"COLOR_PALETTE_CUSTOM_URL": "¡Añade tu propio tema personalizado!",
"COLOR_PALETTE_CUSTOM_URL2": "Haz clic para abrir el manual web.",
"SNAP_ANGLE_DEG": "Ángulo de ajuste de cabeceo y alabeo de la ventana",
"SNAP_ANGLE_DEG_HELP": "Las ventanas agarradas se ajustan a este ángulo en los ejes de cabeceo y balanceo."
"SNAP_ANGLE_DEG_HELP": "Las ventanas agarradas se ajustan a este ángulo en los ejes de cabeceo y balanceo.",
"SAVE_PLAYSPACE_CENTER": "Guardar centro del playspace",
"SAVE_PLAYSPACE_CENTER_HELP": "Usa el playspace actual para el comando de restablecer playspace.",
"RESET_PLAYSPACE_CENTER": "Reiniciar centro del playspace",
"RESET_PLAYSPACE_CENTER_HELP": "Borra el centro del playspace establecido previamente."
},
"HELLO": "¡Hola!",
"AUDIO": {

View File

@ -215,7 +215,11 @@
"COLOR_PALETTE_CUSTOM_URL": "Aggiungi il tuo tema personalizzato!",
"COLOR_PALETTE_CUSTOM_URL2": "Clicca per aprire il manuale web.",
"SNAP_ANGLE_DEG": "Angolo di scatto beccheggio e rollio finestra",
"SNAP_ANGLE_DEG_HELP": "Le finestre afferrate si allineano a questo angolo sugli assi di beccheggio e rollio."
"SNAP_ANGLE_DEG_HELP": "Le finestre afferrate si allineano a questo angolo sugli assi di beccheggio e rollio.",
"SAVE_PLAYSPACE_CENTER": "Salva centro playspace",
"SAVE_PLAYSPACE_CENTER_HELP": "Usa il playspace corrente per il comando di reset del playspace.",
"RESET_PLAYSPACE_CENTER": "Ripristina centro playspace",
"RESET_PLAYSPACE_CENTER_HELP": "Ripristina il centro del playspace impostato precedentemente."
},
"APPLICATION_LAUNCHER": "Lanciatore applicazioni",
"APPLICATION_STARTED": "Applicazione avviata",

View File

@ -194,7 +194,11 @@
"COLOR_PALETTE_CUSTOM_URL": "カスタムテーマを追加しましょう!",
"COLOR_PALETTE_CUSTOM_URL2": "クリックしてウェブマニュアルを開く。",
"SNAP_ANGLE_DEG": "ウィンドウのピッチ・ロールのスナップ角度",
"SNAP_ANGLE_DEG_HELP": "掴んでいるウィンドウが、ピッチ軸とロール軸でこの角度にスナップします。"
"SNAP_ANGLE_DEG_HELP": "掴んでいるウィンドウが、ピッチ軸とロール軸でこの角度にスナップします。",
"SAVE_PLAYSPACE_CENTER": "プレイスペースの中心を保存",
"SAVE_PLAYSPACE_CENTER_HELP": "現在のプレイスペースを、プレイスペースのリセットバインディングに使用します。",
"RESET_PLAYSPACE_CENTER": "playspaceの中心をリセット",
"RESET_PLAYSPACE_CENTER_HELP": "previously set playspace center をリセットします。"
},
"HELLO": "こんにちは!",
"AUDIO": {

View File

@ -189,7 +189,11 @@
"COLOR_PALETTE_CUSTOM_URL": "Dodaj własny motyw!",
"COLOR_PALETTE_CUSTOM_URL2": "Kliknij, aby otworzyć instrukcję internetową.",
"SNAP_ANGLE_DEG": "Kąt przyciągania pochylenia i przechyłu okna",
"SNAP_ANGLE_DEG_HELP": "Chwycone okna przyciągają się do tego kąta na osi pochylenia i obrotu."
"SNAP_ANGLE_DEG_HELP": "Chwycone okna przyciągają się do tego kąta na osi pochylenia i obrotu.",
"SAVE_PLAYSPACE_CENTER": "Zapisz centrum obszaru gry",
"SAVE_PLAYSPACE_CENTER_HELP": "Użyj aktualnego obszaru gry dla przypisania resetowania obszaru gry.",
"RESET_PLAYSPACE_CENTER": "Zresetuj środek obszaru gry",
"RESET_PLAYSPACE_CENTER_HELP": "Wyczyść poprzednio ustawiony środek obszaru playspace."
},
"APPLICATION_LAUNCHER": "Uruchamiacz aplikacji",
"APPLICATIONS": "Aplikacje",

View File

@ -215,7 +215,11 @@
"COLOR_PALETTE_CUSTOM_URL": "添加自定义主题!",
"COLOR_PALETTE_CUSTOM_URL2": "点击打开网页版手册。",
"SNAP_ANGLE_DEG": "窗口俯仰与翻滚捕捉角度",
"SNAP_ANGLE_DEG_HELP": "抓取的窗口在俯仰轴和翻滚轴上将对齐到此角度。"
"SNAP_ANGLE_DEG_HELP": "抓取的窗口在俯仰轴和翻滚轴上将对齐到此角度。",
"SAVE_PLAYSPACE_CENTER": "保存 Playspace 中心",
"SAVE_PLAYSPACE_CENTER_HELP": "将当前活动空间用于重置活动空间的绑定。",
"RESET_PLAYSPACE_CENTER": "重置游玩区域中心",
"RESET_PLAYSPACE_CENTER_HELP": "清除之前设置的 Playspace 中心。"
},
"APPLICATION_LAUNCHER": "应用启动器",
"APPLICATION_STARTED": "应用已启动",

View File

@ -336,6 +336,36 @@ pub fn options_danger_button(
Ok(())
}
pub fn options_button(
mp: &mut MacroParams,
parent: WidgetID,
translation: &str,
icon: &str,
task: Task,
) -> anyhow::Result<()> {
let id = mp.idx.to_string();
mp.idx += 1;
let mut params = TemplateParams::new();
params.insert("id", &id);
params.insert("translation", translation);
params.insert("icon", icon);
mp.parser_state
.instantiate_template(mp.doc_params, "ButtonText", mp.layout, parent, params)?;
let btn = mp.parser_state.fetch_component_as::<ComponentButton>(&id)?;
btn.on_click(Rc::new({
let tasks = mp.tasks.clone();
move |_common, _e| {
tasks.push(task.clone());
Ok(())
}
}));
Ok(())
}
pub fn options_autostart_app(
mp: &mut MacroParams,
parent: WidgetID,

View File

@ -78,7 +78,9 @@ pub(crate) enum Task {
OpenContextMenu(Vec2, Vec<context_menu::Cell>),
RemoveAutostartApp(Rc<str>),
ResetPlayspace,
ResetPlayspaceCenter,
RestartSoftware,
SavePlayspaceCenter,
SetTab(TabNameEnum),
SettingUpdated(SettingType),
UpdateBool(SettingType, bool),
@ -200,6 +202,16 @@ impl<T> Tab<T> for TabSettings<T> {
std::fs::remove_dir_all(&path)?;
std::fs::create_dir(&path)?;
}
Task::SavePlayspaceCenter => {
frontend.interface.playspace_task(data, DashPlayspaceTask::SaveCenter)?;
return Ok(());
}
Task::ResetPlayspaceCenter => {
frontend
.interface
.playspace_task(data, DashPlayspaceTask::ResetCenter)?;
return Ok(());
}
Task::ResetPlayspace => {
frontend.interface.playspace_task(data, DashPlayspaceTask::Reset)?;
return Ok(());

View File

@ -8,7 +8,7 @@ use wgui::{
use crate::{
tab::settings::{
SettingType, SettingsMountParams, SettingsTab,
macros::{options_category, options_checkbox, options_slider_f32},
macros::{options_button, options_category, options_checkbox, options_slider_f32},
},
util::wgui_simple,
};
@ -56,6 +56,31 @@ impl State {
if !par.feats.openxr || par.feats.monado {
// monado or openvr
options_button(
par.mp,
c,
"APP_SETTINGS.RESET_PLAYSPACE",
"dashboard/refresh.svg",
super::Task::ResetPlayspace,
)?;
options_button(
par.mp,
c,
"APP_SETTINGS.SAVE_PLAYSPACE_CENTER",
"dashboard/recenter.svg",
super::Task::SavePlayspaceCenter,
)?;
options_button(
par.mp,
c,
"APP_SETTINGS.RESET_PLAYSPACE_CENTER",
"dashboard/trash.svg",
super::Task::ResetPlayspaceCenter,
)?;
options_checkbox(par.mp, id_common_options_parent, SettingType::SpaceDragUnlocked)?;
options_slider_f32(

View File

@ -15,13 +15,6 @@ impl State {
"APP_SETTINGS.TROUBLESHOOTING",
"dashboard/cpu.svg",
)?;
options_danger_button(
par.mp,
c,
"APP_SETTINGS.RESET_PLAYSPACE",
"dashboard/recenter.svg",
Task::ResetPlayspace,
)?;
options_danger_button(
par.mp,
c,

View File

@ -58,6 +58,9 @@ impl PlayspaceMover {
PlayspaceTask::SaveCenter => {
self.save_center(chaperone_mgr);
}
PlayspaceTask::ResetCenter => {
self.playspace_state.openvr_space_center = Affine3A::IDENTITY;
}
}
}

View File

@ -65,6 +65,9 @@ impl PlayspaceMover {
PlayspaceTask::SaveCenter => {
self.save_center(&mut monado.ipc);
}
PlayspaceTask::ResetCenter => {
self.playspace_state.openxr_space_center = Affine3A::IDENTITY;
}
}
}

View File

@ -63,8 +63,8 @@ pub enum PlayspaceTask {
Recenter,
Reset,
FixFloor,
#[cfg(feature = "openvr")]
SaveCenter,
ResetCenter,
}
#[derive(Debug, Clone)]

View File

@ -513,8 +513,8 @@ impl DashInterface<AppState> for DashInterfaceLive {
DashPlayspaceTask::FixFloor => PlayspaceTask::FixFloor,
DashPlayspaceTask::Recenter => PlayspaceTask::Recenter,
DashPlayspaceTask::Reset => PlayspaceTask::Reset,
#[cfg(feature = "openvr")]
DashPlayspaceTask::SaveCenter => PlayspaceTask::SaveCenter,
DashPlayspaceTask::ResetCenter => PlayspaceTask::ResetCenter,
};
app.tasks.enqueue(TaskType::Playspace(task));
Ok(())

View File

@ -42,6 +42,7 @@ pub enum DashPlayspaceTask {
Recenter,
Reset,
SaveCenter,
ResetCenter,
}
#[derive(Clone, Copy)]