summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2023-09-09 19:43:19 -0700
committeryum <yum.food.vr@gmail.com>2023-09-09 19:43:19 -0700
commite1802e402bf0ef63c2861bd7c5c7a13b3aecd87f (patch)
tree12098e555b019aa1a53bc844354dabf2121261bd
parent36b01e90779698a4a1b2cd369754e82c28968665 (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.cpp3
-rw-r--r--GUI/GUI/GUI/Config.h1
-rw-r--r--GUI/GUI/GUI/Frame.cpp17
-rw-r--r--GUI/GUI/GUI/Frame.h1
-rw-r--r--Scripts/transcribe_v2.py21
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"]: