SL-6109 Teleport and autopilot should not work in some cases
Hides teleport_to and walk_to also optimizes couple things.meow-7.2.2
parent
f08c8ef208
commit
7717097f7c
|
|
@ -1021,6 +1021,7 @@ bool LLAppViewer::init()
|
|||
LL_INFOS("InitInfo") << "Converting legacy mouse bindings to new format" << LL_ENDL;
|
||||
// Load settings from file
|
||||
LLKeyConflictHandler third_person_view(LLKeyConflictHandler::MODE_THIRD_PERSON);
|
||||
LLKeyConflictHandler sitting_view(LLKeyConflictHandler::MODE_SITTING);
|
||||
|
||||
// Since we are only modifying keybindings if personal file doesn't exist yet,
|
||||
// it should be safe to just overwrite the value
|
||||
|
|
@ -1050,6 +1051,14 @@ bool LLAppViewer::init()
|
|||
MASK_NONE,
|
||||
value);
|
||||
|
||||
// sitting also supports teleport
|
||||
sitting_view.registerControl("teleport_to",
|
||||
0,
|
||||
value ? EMouseClickType::CLICK_DOUBLELEFT : EMouseClickType::CLICK_NONE,
|
||||
KEY_NONE,
|
||||
MASK_NONE,
|
||||
value);
|
||||
|
||||
std::string key_string = gSavedSettings.getString("PushToTalkButton");
|
||||
EMouseClickType mouse = EMouseClickType::CLICK_NONE;
|
||||
KEY key = KEY_NONE;
|
||||
|
|
@ -1073,6 +1082,7 @@ bool LLAppViewer::init()
|
|||
value = gSavedSettings.getBOOL("PushToTalkToggle");
|
||||
std::string control_name = value ? "toggle_voice" : "voice_follow_key";
|
||||
third_person_view.registerControl(control_name, 0, mouse, key, MASK_NONE, true);
|
||||
sitting_view.registerControl(control_name, 0, mouse, key, MASK_NONE, true);
|
||||
|
||||
if (third_person_view.hasUnsavedChanges())
|
||||
{
|
||||
|
|
@ -1080,12 +1090,18 @@ bool LLAppViewer::init()
|
|||
third_person_view.saveToSettings();
|
||||
}
|
||||
|
||||
// in case of voice we need to repeat this in other modes (teleports and
|
||||
// autopilot are not entirely practical when sitting or editing)
|
||||
if (sitting_view.hasUnsavedChanges())
|
||||
{
|
||||
// calls loadBindingsXML()
|
||||
sitting_view.saveToSettings();
|
||||
}
|
||||
|
||||
// in case of voice we need to repeat this in other modes
|
||||
|
||||
for (U32 i = 0; i < LLKeyConflictHandler::MODE_COUNT - 1; ++i)
|
||||
{
|
||||
if (i != LLKeyConflictHandler::MODE_THIRD_PERSON)
|
||||
// edit and first person modes; MODE_SAVED_SETTINGS not in use at the moment
|
||||
if (i != LLKeyConflictHandler::MODE_THIRD_PERSON && i != LLKeyConflictHandler::MODE_SITTING)
|
||||
{
|
||||
LLKeyConflictHandler handler((LLKeyConflictHandler::ESourceMode)i);
|
||||
|
||||
|
|
|
|||
|
|
@ -2801,20 +2801,34 @@ bool LLPanelPreferenceControls::addControlTableRows(const std::string &filename)
|
|||
std::string control = row_it->value.getValue().asString();
|
||||
if (!control.empty() && control != "menu_separator")
|
||||
{
|
||||
// At the moment viewer is hardcoded to assume that there are 4 collumns
|
||||
LLScrollListItem::Params item_params(*row_it);
|
||||
bool show = true;
|
||||
bool enabled = mConflictHandler[mEditingMode].canAssignControl(control);
|
||||
item_params.enabled.setValue(enabled);
|
||||
cell_params.column = "lst_ctrl1";
|
||||
cell_params.value = mConflictHandler[mEditingMode].getControlString(control, 0);
|
||||
item_params.columns.add(cell_params);
|
||||
cell_params.column = "lst_ctrl2";
|
||||
cell_params.value = mConflictHandler[mEditingMode].getControlString(control, 1);
|
||||
item_params.columns.add(cell_params);
|
||||
cell_params.column = "lst_ctrl3";
|
||||
cell_params.value = mConflictHandler[mEditingMode].getControlString(control, 2);
|
||||
item_params.columns.add(cell_params);
|
||||
pControlsTable->addRow(item_params, EAddPosition::ADD_BOTTOM);
|
||||
if (!enabled)
|
||||
{
|
||||
// If empty: this is a placeholder to make sure user won't assign
|
||||
// value by accident, don't show it
|
||||
// If not empty: predefined control combination user should see
|
||||
// to know that combination is reserved
|
||||
show = !mConflictHandler[mEditingMode].isControlEmpty(control);
|
||||
// example: teleport_to and walk_to in first person view, and
|
||||
// sitting related functions, see generatePlaceholders()
|
||||
}
|
||||
|
||||
if (show)
|
||||
{
|
||||
// At the moment viewer is hardcoded to assume that columns are named as lst_ctrl%d
|
||||
LLScrollListItem::Params item_params(*row_it);
|
||||
item_params.enabled.setValue(enabled);
|
||||
|
||||
S32 num_columns = pControlsTable->getNumColumns();
|
||||
for (S32 col = 1; col < num_columns; col++)
|
||||
{
|
||||
cell_params.column = llformat("lst_ctrl%d", col);
|
||||
cell_params.value = mConflictHandler[mEditingMode].getControlString(control, col - 1);
|
||||
item_params.columns.add(cell_params);
|
||||
}
|
||||
pControlsTable->addRow(item_params, EAddPosition::ADD_BOTTOM);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -2825,7 +2839,8 @@ bool LLPanelPreferenceControls::addControlTableRows(const std::string &filename)
|
|||
// type = "icon"
|
||||
// color = "0 0 0 0.7"
|
||||
// halign = "center"
|
||||
// value = "menu_separator" />
|
||||
// value = "menu_separator"
|
||||
// column = "lst_action" / >
|
||||
//</rows>
|
||||
pControlsTable->addRow(*row_it, EAddPosition::ADD_BOTTOM);
|
||||
}
|
||||
|
|
@ -2835,7 +2850,16 @@ bool LLPanelPreferenceControls::addControlTableRows(const std::string &filename)
|
|||
|
||||
void LLPanelPreferenceControls::addControlTableSeparator()
|
||||
{
|
||||
pControlsTable->addSeparator(EAddPosition::ADD_BOTTOM);
|
||||
LLScrollListItem::Params separator_params;
|
||||
separator_params.enabled(false);
|
||||
LLScrollListCell::Params column_params;
|
||||
column_params.type = "icon";
|
||||
column_params.value = "menu_separator";
|
||||
column_params.column = "lst_action";
|
||||
column_params.color = LLColor4(0.f, 0.f, 0.f, 0.7f);
|
||||
column_params.font_halign = LLFontGL::HCENTER;
|
||||
separator_params.columns.add(column_params);
|
||||
pControlsTable->addRow(separator_params, EAddPosition::ADD_BOTTOM);
|
||||
}
|
||||
|
||||
void LLPanelPreferenceControls::populateControlTable()
|
||||
|
|
@ -2843,7 +2867,7 @@ void LLPanelPreferenceControls::populateControlTable()
|
|||
pControlsTable->clearRows();
|
||||
pControlsTable->clearColumns();
|
||||
|
||||
// add columns
|
||||
// Add columns
|
||||
std::string filename;
|
||||
switch ((LLKeyConflictHandler::ESourceMode)mEditingMode)
|
||||
{
|
||||
|
|
@ -2861,9 +2885,11 @@ void LLPanelPreferenceControls::populateControlTable()
|
|||
}
|
||||
addControlTableColumns(filename);
|
||||
|
||||
|
||||
// Add rows.
|
||||
// Each file represents individual visual group (movement/camera/media...)
|
||||
if (mEditingMode == LLKeyConflictHandler::MODE_FIRST_PERSON)
|
||||
{
|
||||
// Don't display whole camera and editing groups
|
||||
addControlTableRows("control_table_contents_movement.xml");
|
||||
addControlTableSeparator();
|
||||
addControlTableRows("control_table_contents_media.xml");
|
||||
|
|
@ -2872,14 +2898,11 @@ void LLPanelPreferenceControls::populateControlTable()
|
|||
else if (mEditingMode < LLKeyConflictHandler::MODE_SAVED_SETTINGS)
|
||||
{
|
||||
// In case of 'sitting' mode, movements still apply due to vehicles
|
||||
// but walk_to is not supported and will be hidden by addControlTableRows
|
||||
addControlTableRows("control_table_contents_movement.xml");
|
||||
addControlTableSeparator();
|
||||
|
||||
addControlTableRows("control_table_contents_camera.xml");
|
||||
if (mEditingMode == LLKeyConflictHandler::MODE_SITTING)
|
||||
{
|
||||
addControlTableRows("control_table_contents_camera_sitting.xml");
|
||||
}
|
||||
addControlTableSeparator();
|
||||
|
||||
addControlTableRows("control_table_contents_editing.xml");
|
||||
|
|
@ -2903,12 +2926,14 @@ void LLPanelPreferenceControls::updateTable()
|
|||
std::string control = list[i]->getValue();
|
||||
if (!control.empty())
|
||||
{
|
||||
LLScrollListCell* cell = list[i]->getColumn(1);
|
||||
cell->setValue(mConflictHandler[mEditingMode].getControlString(control, 0));
|
||||
cell = list[i]->getColumn(2);
|
||||
cell->setValue(mConflictHandler[mEditingMode].getControlString(control, 1));
|
||||
cell = list[i]->getColumn(3);
|
||||
cell->setValue(mConflictHandler[mEditingMode].getControlString(control, 2));
|
||||
LLScrollListCell* cell = NULL;
|
||||
|
||||
S32 num_columns = pControlsTable->getNumColumns();
|
||||
for (S32 col = 1; col < num_columns; col++)
|
||||
{
|
||||
cell = list[i]->getColumn(col);
|
||||
cell->setValue(mConflictHandler[mEditingMode].getControlString(control, col - 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
pControlsTable->deselectAllItems();
|
||||
|
|
|
|||
|
|
@ -243,6 +243,15 @@ LLKeyData LLKeyConflictHandler::getControl(const std::string &control_name, U32
|
|||
return mControlsMap[control_name].getKeyData(index);
|
||||
}
|
||||
|
||||
bool LLKeyConflictHandler::isControlEmpty(const std::string &control_name)
|
||||
{
|
||||
if (control_name.empty())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return mControlsMap[control_name].mKeyBind.isEmpty();
|
||||
}
|
||||
|
||||
// static
|
||||
std::string LLKeyConflictHandler::getStringFromKeyData(const LLKeyData& keydata)
|
||||
{
|
||||
|
|
@ -885,10 +894,27 @@ void LLKeyConflictHandler::generatePlaceholders(ESourceMode load_mode)
|
|||
registerTemporaryControl("edit_avatar_spin_under");
|
||||
registerTemporaryControl("edit_avatar_move_forward");
|
||||
registerTemporaryControl("edit_avatar_move_backward");
|
||||
|
||||
// no autopilot or teleport
|
||||
registerTemporaryControl("walk_to");
|
||||
registerTemporaryControl("teleport_to");
|
||||
}
|
||||
|
||||
if (load_mode != MODE_SITTING)
|
||||
if (load_mode == MODE_EDIT_AVATAR)
|
||||
{
|
||||
// no autopilot or teleport
|
||||
registerTemporaryControl("walk_to");
|
||||
registerTemporaryControl("teleport_to");
|
||||
}
|
||||
|
||||
if (load_mode == MODE_SITTING)
|
||||
{
|
||||
// no autopilot
|
||||
registerTemporaryControl("walk_to");
|
||||
}
|
||||
else
|
||||
{
|
||||
// sitting related functions should only be avaliable in sitting mode
|
||||
registerTemporaryControl("move_forward_sitting");
|
||||
registerTemporaryControl("move_backward_sitting");
|
||||
registerTemporaryControl("spin_over_sitting");
|
||||
|
|
|
|||
|
|
@ -98,6 +98,7 @@ public:
|
|||
bool clearControl(const std::string &control_name, U32 data_index);
|
||||
|
||||
LLKeyData getControl(const std::string &control_name, U32 data_index);
|
||||
bool isControlEmpty(const std::string &control_name);
|
||||
|
||||
// localized string
|
||||
static std::string getStringFromKeyData(const LLKeyData& keydata);
|
||||
|
|
|
|||
|
|
@ -175,4 +175,66 @@
|
|||
tool_tip="Camera spin around clockwise"
|
||||
value="Clockwise" />
|
||||
</rows>
|
||||
<rows
|
||||
name="move_forward_sitting"
|
||||
value="move_forward_sitting">
|
||||
<columns
|
||||
column="lst_action"
|
||||
font="SansSerif"
|
||||
halign="left"
|
||||
name="lst_action"
|
||||
value="Camera Forward Sitting" />
|
||||
</rows>
|
||||
<rows
|
||||
name="move_backward_sitting"
|
||||
value="move_backward_sitting">
|
||||
<columns
|
||||
column="lst_action"
|
||||
font="SansSerif"
|
||||
halign="left"
|
||||
name="lst_action"
|
||||
value="Camera Backward Sitting" />
|
||||
</rows>
|
||||
<rows
|
||||
name="spin_over_sitting"
|
||||
value="spin_over_sitting">
|
||||
<columns
|
||||
column="lst_action"
|
||||
font="SansSerif"
|
||||
halign="left"
|
||||
name="lst_action"
|
||||
value="Camera Spin Over Sitting" />
|
||||
</rows>
|
||||
<rows
|
||||
name="spin_under_sitting"
|
||||
value="spin_under_sitting">
|
||||
<columns
|
||||
column="lst_action"
|
||||
font="SansSerif"
|
||||
halign="left"
|
||||
name="lst_action"
|
||||
value="Camera Spin Under Sitting" />
|
||||
</rows>
|
||||
<rows
|
||||
name="spin_around_ccw_sitting"
|
||||
value="spin_around_ccw_sitting">
|
||||
<columns
|
||||
column="lst_action"
|
||||
font="SansSerif"
|
||||
halign="left"
|
||||
name="lst_action"
|
||||
tool_tip="Camera spin around counterclockwise sitting"
|
||||
value="Counterclockwise Sitting" />
|
||||
</rows>
|
||||
<rows
|
||||
name="spin_around_cw_sitting"
|
||||
value="spin_around_cw_sitting">
|
||||
<columns
|
||||
column="lst_action"
|
||||
font="SansSerif"
|
||||
halign="left"
|
||||
name="lst_action"
|
||||
tool_tip="Camera spin around clockwise sitting"
|
||||
value="Clockwise Sitting" />
|
||||
</rows>
|
||||
</contents>
|
||||
|
|
|
|||
|
|
@ -1,65 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<contents>
|
||||
<rows
|
||||
name="move_forward_sitting"
|
||||
value="move_forward_sitting">
|
||||
<columns
|
||||
column="lst_action"
|
||||
font="SansSerif"
|
||||
halign="left"
|
||||
name="lst_action"
|
||||
value="Camera Forward Sitting" />
|
||||
</rows>
|
||||
<rows
|
||||
name="move_backward_sitting"
|
||||
value="move_backward_sitting">
|
||||
<columns
|
||||
column="lst_action"
|
||||
font="SansSerif"
|
||||
halign="left"
|
||||
name="lst_action"
|
||||
value="Camera Backward Sitting" />
|
||||
</rows>
|
||||
<rows
|
||||
name="spin_over_sitting"
|
||||
value="spin_over_sitting">
|
||||
<columns
|
||||
column="lst_action"
|
||||
font="SansSerif"
|
||||
halign="left"
|
||||
name="lst_action"
|
||||
value="Camera Spin Over Sitting" />
|
||||
</rows>
|
||||
<rows
|
||||
name="spin_under_sitting"
|
||||
value="spin_under_sitting">
|
||||
<columns
|
||||
column="lst_action"
|
||||
font="SansSerif"
|
||||
halign="left"
|
||||
name="lst_action"
|
||||
value="Camera Spin Under Sitting" />
|
||||
</rows>
|
||||
<rows
|
||||
name="spin_around_ccw_sitting"
|
||||
value="spin_around_ccw_sitting">
|
||||
<columns
|
||||
column="lst_action"
|
||||
font="SansSerif"
|
||||
halign="left"
|
||||
name="lst_action"
|
||||
tool_tip="Camera spin around counterclockwise sitting"
|
||||
value="Counterclockwise Sitting" />
|
||||
</rows>
|
||||
<rows
|
||||
name="spin_around_cw_sitting"
|
||||
value="spin_around_cw_sitting">
|
||||
<columns
|
||||
column="lst_action"
|
||||
font="SansSerif"
|
||||
halign="left"
|
||||
name="lst_action"
|
||||
tool_tip="Camera spin around clockwise sitting"
|
||||
value="Clockwise Sitting" />
|
||||
</rows>
|
||||
</contents>
|
||||
Loading…
Reference in New Issue