diff options
| author | yum <yum.food.vr@gmail.com> | 2023-09-09 19:43:19 -0700 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2023-09-09 19:43:19 -0700 |
| commit | e1802e402bf0ef63c2861bd7c5c7a13b3aecd87f (patch) | |
| tree | 12098e555b019aa1a53bc844354dabf2121261bd | |
| parent | 36b01e90779698a4a1b2cd369754e82c28968665 (diff) | |
Add `lock at spawn` option
I find it kind of annoying when people wave around a big chatbox so I
added the option to have the chatbox be locked in worldspace whenever
it's visible. This defaults to on and can be disabled.
| -rw-r--r-- | GUI/GUI/GUI/Config.cpp | 3 | ||||
| -rw-r--r-- | GUI/GUI/GUI/Config.h | 1 | ||||
| -rw-r--r-- | GUI/GUI/GUI/Frame.cpp | 17 | ||||
| -rw-r--r-- | GUI/GUI/GUI/Frame.h | 1 | ||||
| -rw-r--r-- | Scripts/transcribe_v2.py | 21 |
5 files changed, 36 insertions, 7 deletions
diff --git a/GUI/GUI/GUI/Config.cpp b/GUI/GUI/GUI/Config.cpp index db4b184..8d5cdbf 100644 --- a/GUI/GUI/GUI/Config.cpp +++ b/GUI/GUI/GUI/Config.cpp @@ -83,6 +83,7 @@ AppConfig::AppConfig(wxTextCtrl* out) enable_debug_mode(false),
reset_on_toggle(true),
enable_previews(true),
+ enable_lock_at_spawn(true),
gpu_idx(0),
keybind("ctrl+x"),
@@ -124,6 +125,7 @@ bool AppConfig::Serialize(const std::filesystem::path& path) { cm.Set("enable_debug_mode", enable_debug_mode);
cm.Set("reset_on_toggle", reset_on_toggle);
cm.Set("enable_previews", enable_previews);
+ cm.Set("enable_lock_at_spawn", enable_lock_at_spawn);
cm.Set("gpu_idx", gpu_idx);
cm.Set("keybind", keybind);
@@ -178,6 +180,7 @@ bool AppConfig::Deserialize(const std::filesystem::path& path) { cm.Get("enable_debug_mode", c.enable_debug_mode);
cm.Get("reset_on_toggle", c.reset_on_toggle);
cm.Get("enable_previews", c.enable_previews);
+ cm.Get("enable_lock_at_spawn", c.enable_lock_at_spawn);
cm.Get("gpu_idx", c.gpu_idx);
cm.Get("keybind", c.keybind);
diff --git a/GUI/GUI/GUI/Config.h b/GUI/GUI/GUI/Config.h index 4137c59..6e82f14 100644 --- a/GUI/GUI/GUI/Config.h +++ b/GUI/GUI/GUI/Config.h @@ -69,6 +69,7 @@ public: bool enable_debug_mode;
bool reset_on_toggle;
bool enable_previews;
+ bool enable_lock_at_spawn;
int gpu_idx;
std::string keybind;
diff --git a/GUI/GUI/GUI/Frame.cpp b/GUI/GUI/GUI/Frame.cpp index 2823437..a124ff1 100644 --- a/GUI/GUI/GUI/Frame.cpp +++ b/GUI/GUI/GUI/Frame.cpp @@ -71,6 +71,7 @@ namespace { ID_PY_APP_ENABLE_DEBUG_MODE,
ID_PY_APP_RESET_ON_TOGGLE,
ID_PY_APP_ENABLE_PREVIEWS,
+ ID_PY_APP_ENABLE_LOCK_AT_SPAWN,
ID_PY_APP_ROWS,
ID_PY_APP_COLS,
ID_PY_APP_GPU_IDX,
@@ -954,6 +955,15 @@ Frame::Frame() );
py_app_enable_previews_ = py_app_enable_previews;
+ auto* py_app_enable_lock_at_spawn = new wxCheckBox(py_config_panel,
+ ID_PY_APP_ENABLE_LOCK_AT_SPAWN, "Lock chatbox at spawn");
+ py_app_enable_lock_at_spawn->SetValue(app_c_->enable_lock_at_spawn);
+ py_app_enable_lock_at_spawn->SetToolTip(
+ "If checked, the custom chatbox will be locked in world "
+ "space when spawned. This minimizes the visual "
+ "disruption for other players.");
+ py_app_enable_lock_at_spawn_ = py_app_enable_lock_at_spawn;
+
// Hack: Add newlines before and after the button text to make
// the buttons bigger, and easier to click from inside VR.
auto* py_app_start_button = new wxButton(py_config_panel,
@@ -971,6 +981,8 @@ Frame::Frame() /*flags=*/wxEXPAND);
sizer->Add(py_app_enable_previews, /*proportion=*/0,
/*flags=*/wxEXPAND);
+ sizer->Add(py_app_enable_lock_at_spawn, /*proportion=*/0,
+ /*flags=*/wxEXPAND);
sizer->Add(py_app_enable_browser_src, /*proportion=*/0,
/*flags=*/wxEXPAND);
sizer->Add(py_app_enable_local_beep, /*proportion=*/0,
@@ -1555,6 +1567,9 @@ void Frame::ApplyConfigToInputFields() auto* py_app_enable_previews = static_cast<wxCheckBox*>(FindWindowById(ID_PY_APP_ENABLE_PREVIEWS));
py_app_enable_previews->SetValue(app_c_->enable_previews);
+ auto* py_app_enable_lock_at_spawn = static_cast<wxCheckBox*>(FindWindowById(ID_PY_APP_ENABLE_LOCK_AT_SPAWN));
+ py_app_enable_lock_at_spawn->SetValue(app_c_->enable_lock_at_spawn);
+
// Unity panel
auto* unity_assets_path = static_cast<wxDirPickerCtrl*>(FindWindowById(ID_UNITY_ASSETS_FILE_PICKER));
unity_assets_path->SetPath(app_c_->assets_path);
@@ -2262,6 +2277,7 @@ void Frame::OnAppStart(wxCommandEvent& event) { const bool enable_debug_mode = py_app_enable_debug_mode_->GetValue();
const bool reset_on_toggle = py_app_reset_on_toggle_->GetValue();
const bool enable_previews = py_app_enable_previews_->GetValue();
+ const bool enable_lock_at_spawn = py_app_enable_lock_at_spawn_->GetValue();
ASSIGN_OR_RETURN_VOID(int, rows, stoiInRange(transcribe_out_, py_app_rows_->GetValue().ToStdString(), "rows", 1, 10));
ASSIGN_OR_RETURN_VOID(int, cols, stoiInRange(transcribe_out_, py_app_cols_->GetValue().ToStdString(), "cols", 1, 120));
@@ -2295,6 +2311,7 @@ void Frame::OnAppStart(wxCommandEvent& event) { app_c_->enable_debug_mode = enable_debug_mode;
app_c_->reset_on_toggle = reset_on_toggle;
app_c_->enable_previews = enable_previews;
+ app_c_->enable_lock_at_spawn = enable_lock_at_spawn;
app_c_->gpu_idx = gpu_idx;
app_c_->keybind = keybind;
app_c_->Serialize(AppConfig::kConfigPath);
diff --git a/GUI/GUI/GUI/Frame.h b/GUI/GUI/GUI/Frame.h index 7baf77f..d33db06 100644 --- a/GUI/GUI/GUI/Frame.h +++ b/GUI/GUI/GUI/Frame.h @@ -73,6 +73,7 @@ private: wxCheckBox* py_app_enable_debug_mode_;
wxCheckBox* py_app_reset_on_toggle_;
wxCheckBox* py_app_enable_previews_;
+ wxCheckBox* py_app_enable_lock_at_spawn_;
wxCheckBox* unity_clear_osc_;
wxCheckBox* unity_enable_phonemes_;
diff --git a/Scripts/transcribe_v2.py b/Scripts/transcribe_v2.py index 5f43e3a..4305a07 100644 --- a/Scripts/transcribe_v2.py +++ b/Scripts/transcribe_v2.py @@ -713,9 +713,6 @@ def vrInputThread(ctrl: ThreadControl): if now - last_rising > 1.5: # Long press: treat as the end of transcription. state = PAUSE_STATE - if not ctrl.cfg["use_builtin"]: - ctrl.pager.getSyncWindow() - ctrl.pager.lockWorld(True) ctrl.stream.pause(True) @@ -749,12 +746,17 @@ def vrInputThread(ctrl: ThreadControl): ctrl.stream.getSamples() ctrl.collector.dropAudio() ctrl.pager.clear() + if ctrl.cfg["enable_lock_at_spawn"]: + # Give the board 0.5 seconds to disappear before unlocking from + # world space. + time.sleep(0.5) + ctrl.pager.lockWorld(False) else: # Short hold if state == RECORD_STATE: print("PAUSED", file=sys.stderr) state = PAUSE_STATE - if not ctrl.cfg["use_builtin"]: + if not ctrl.cfg["use_builtin"] and not ctrl.cfg["enable_lock_at_spawn"]: ctrl.pager.getSyncWindow() ctrl.pager.lockWorld(True) @@ -769,7 +771,7 @@ def vrInputThread(ctrl: ThreadControl): if not ctrl.cfg["use_builtin"]: ctrl.pager.getSyncWindow() ctrl.pager.toggleBoard(True) - ctrl.pager.lockWorld(False) + ctrl.pager.lockWorld(ctrl.cfg["enable_lock_at_spawn"]) ctrl.pager.ellipsis(True) if ctrl.cfg["reset_on_toggle"]: if ctrl.cfg["enable_debug_mode"]: @@ -835,13 +837,18 @@ def kbInputThread(ctrl: ThreadControl): ctrl.stream.getSamples() ctrl.collector.dropAudio() ctrl.pager.clear() + if ctrl.cfg["enable_lock_at_spawn"]: + # Give the board 0.5 seconds to disappear before unlocking from + # world space. + time.sleep(0.5) + ctrl.pager.lockWorld(False) continue # Short hold if state == RECORD_STATE: print("PAUSED", file=sys.stderr) state = PAUSE_STATE - if not ctrl.cfg["use_builtin"]: + if not ctrl.cfg["use_builtin"] and not ctrl.cfg["enable_lock_at_spawn"]: ctrl.pager.getSyncWindow() ctrl.pager.lockWorld(True) @@ -856,7 +863,7 @@ def kbInputThread(ctrl: ThreadControl): if not ctrl.cfg["use_builtin"]: ctrl.pager.getSyncWindow() ctrl.pager.toggleBoard(True) - ctrl.pager.lockWorld(False) + ctrl.pager.lockWorld(ctrl.cfg["enable_lock_at_spawn"]) ctrl.pager.ellipsis(True) if ctrl.cfg["reset_on_toggle"]: if ctrl.cfg["enable_debug_mode"]: |
