This commit is contained in:
Shyotl
2015-07-23 01:48:45 -05:00
34 changed files with 3051 additions and 1000 deletions

View File

@@ -91,6 +91,7 @@ set(llui_SOURCE_FILES
llviewborder.cpp
llviewmodel.cpp
llviewquery.cpp
llxuiparser.cpp
)
set(llui_HEADER_FILES
@@ -172,6 +173,7 @@ set(llui_HEADER_FILES
llviewborder.h
llviewmodel.h
llviewquery.h
llxuiparser.h
)
set_source_files_properties(${llui_HEADER_FILES}

View File

@@ -867,10 +867,10 @@ void LLLineEditor::removeChar()
// Remove a word (set of characters up to next space/punctuation) from the text
void LLLineEditor::removeWord(bool prev)
{
const U32 pos(getCursor());
if (prev ? pos > 0 : static_cast<S32>(pos) < getLength())
const S32& pos(mCursorPos);
if (prev ? pos > 0 : pos < getLength())
{
U32 new_pos(prev ? prevWordPos(pos) : nextWordPos(pos));
S32 new_pos(prev ? prevWordPos(pos) : nextWordPos(pos));
if (new_pos == pos) // Other character we don't jump over
new_pos = prev ? prevWordPos(new_pos-1) : nextWordPos(new_pos+1);

View File

@@ -1817,10 +1817,10 @@ void LLTextEditor::removeChar()
// Remove a word (set of characters up to next space/punctuation) from the text
void LLTextEditor::removeWord(bool prev)
{
const U32 pos(mCursorPos);
if (prev ? pos > 0 : static_cast<S32>(pos) < getLength())
const S32& pos(mCursorPos);
if (prev ? pos > 0 : pos < getLength())
{
U32 new_pos(prev ? prevWordPos(pos) : nextWordPos(pos));
S32 new_pos(prev ? prevWordPos(pos) : nextWordPos(pos));
if (new_pos == pos) // Other character we don't jump over
new_pos = prev ? prevWordPos(new_pos-1) : nextWordPos(new_pos+1);
@@ -2368,6 +2368,13 @@ BOOL LLTextEditor::handleControlKey(const KEY key, const MASK mask)
}
break;
case KEY_DELETE:
if (getEnabled())
removeWord(false);
else
handled = false;
break;
default:
handled = FALSE;
break;
@@ -2485,17 +2492,6 @@ BOOL LLTextEditor::handleSpecialKey(const KEY key, const MASK mask, BOOL* return
}
break;
case KEY_DELETE:
if (getEnabled() && mask == MASK_CONTROL)
{
removeWord(false);
}
else
{
handled = false;
}
break;
case KEY_RETURN:
if (mask == MASK_NONE)
{

1785
indra/llui/llxuiparser.cpp Normal file

File diff suppressed because it is too large Load Diff

254
indra/llui/llxuiparser.h Normal file
View File

@@ -0,0 +1,254 @@
/**
* @file llxuiparser.h
* @brief Utility functions for handling XUI structures in XML
*
* $LicenseInfo:firstyear=2003&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2010, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#ifndef LLXUIPARSER_H
#define LLXUIPARSER_H
#include "llinitparam.h"
#include "llregistry.h"
#include "llxmlnode.h"
#include <boost/function.hpp>
#include <iosfwd>
#include <stack>
#include <set>
class LLView;
// lookup widget type by name
class LLWidgetTypeRegistry
: public LLRegistrySingleton<std::string, const std::type_info*, LLWidgetTypeRegistry>
{};
// global static instance for registering all widget types
typedef boost::function<LLView* (LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node)> LLWidgetCreatorFunc;
typedef LLRegistry<std::string, LLWidgetCreatorFunc> widget_registry_t;
class LLChildRegistryRegistry
: public LLRegistrySingleton<const std::type_info*, widget_registry_t, LLChildRegistryRegistry>
{};
class LLXSDWriter : public LLInitParam::Parser
{
LOG_CLASS(LLXSDWriter);
public:
void writeXSD(const std::string& name, LLXMLNodePtr node, const LLInitParam::BaseBlock& block, const std::string& xml_namespace);
/*virtual*/ std::string getCurrentElementName() { return LLStringUtil::null; }
LLXSDWriter();
~LLXSDWriter();
protected:
void writeAttribute(const std::string& type, const Parser::name_stack_t&, S32 min_count, S32 max_count, const std::vector<std::string>* possible_values);
void addAttributeToSchema(LLXMLNodePtr nodep, const std::string& attribute_name, const std::string& type, bool mandatory, const std::vector<std::string>* possible_values);
LLXMLNodePtr mAttributeNode;
LLXMLNodePtr mElementNode;
LLXMLNodePtr mSchemaNode;
typedef std::set<std::string> string_set_t;
typedef std::map<LLXMLNodePtr, string_set_t> attributes_map_t;
attributes_map_t mAttributesWritten;
};
// NOTE: DOES NOT WORK YET
// should support child widgets for XUI
class LLXUIXSDWriter : public LLXSDWriter
{
public:
void writeXSD(const std::string& name, const std::string& path, const LLInitParam::BaseBlock& block);
};
class LLXUIParserImpl;
class LLXUIParser : public LLInitParam::Parser
{
LOG_CLASS(LLXUIParser);
public:
LLXUIParser();
typedef LLInitParam::Parser::name_stack_t name_stack_t;
/*virtual*/ std::string getCurrentElementName();
/*virtual*/ void parserWarning(const std::string& message);
/*virtual*/ void parserError(const std::string& message);
void readXUI(LLXMLNodePtr node, LLInitParam::BaseBlock& block, const std::string& filename = LLStringUtil::null, bool silent=false);
template<typename BLOCK>
void writeXUI(LLXMLNodePtr node,
const BLOCK& block,
const LLInitParam::predicate_rule_t rules = LLInitParam::default_parse_rules(),
const LLInitParam::BaseBlock* diff_block = NULL)
{
if (!diff_block
&& !rules.isAmbivalent(LLInitParam::HAS_DEFAULT_VALUE))
{
diff_block = &LLInitParam::defaultValue<BLOCK>();
}
writeXUIImpl(node, block, rules, diff_block);
}
private:
LLXUIParser(const LLXUIParser& other); // no-copy
void writeXUIImpl(LLXMLNodePtr node,
const LLInitParam::BaseBlock& block,
const LLInitParam::predicate_rule_t rules,
const LLInitParam::BaseBlock* diff_block);
bool readXUIImpl(LLXMLNodePtr node, LLInitParam::BaseBlock& block);
bool readAttributes(LLXMLNodePtr nodep, LLInitParam::BaseBlock& block);
//reader helper functions
static bool readFlag(Parser& parser, void* val_ptr);
static bool readBoolValue(Parser& parser, void* val_ptr);
static bool readStringValue(Parser& parser, void* val_ptr);
static bool readU8Value(Parser& parser, void* val_ptr);
static bool readS8Value(Parser& parser, void* val_ptr);
static bool readU16Value(Parser& parser, void* val_ptr);
static bool readS16Value(Parser& parser, void* val_ptr);
static bool readU32Value(Parser& parser, void* val_ptr);
static bool readS32Value(Parser& parser, void* val_ptr);
static bool readF32Value(Parser& parser, void* val_ptr);
static bool readF64Value(Parser& parser, void* val_ptr);
static bool readVector3Value(Parser& parser, void* val_ptr);
static bool readColor4Value(Parser& parser, void* val_ptr);
static bool readUIColorValue(Parser& parser, void* val_ptr);
static bool readUUIDValue(Parser& parser, void* val_ptr);
static bool readSDValue(Parser& parser, void* val_ptr);
//writer helper functions
static bool writeFlag(Parser& parser, const void* val_ptr, name_stack_t&);
static bool writeBoolValue(Parser& parser, const void* val_ptr, name_stack_t&);
static bool writeStringValue(Parser& parser, const void* val_ptr, name_stack_t&);
static bool writeU8Value(Parser& parser, const void* val_ptr, name_stack_t&);
static bool writeS8Value(Parser& parser, const void* val_ptr, name_stack_t&);
static bool writeU16Value(Parser& parser, const void* val_ptr, name_stack_t&);
static bool writeS16Value(Parser& parser, const void* val_ptr, name_stack_t&);
static bool writeU32Value(Parser& parser, const void* val_ptr, name_stack_t&);
static bool writeS32Value(Parser& parser, const void* val_ptr, name_stack_t&);
static bool writeF32Value(Parser& parser, const void* val_ptr, name_stack_t&);
static bool writeF64Value(Parser& parser, const void* val_ptr, name_stack_t&);
static bool writeVector3Value(Parser& parser, const void* val_ptr, name_stack_t&);
static bool writeColor4Value(Parser& parser, const void* val_ptr, name_stack_t&);
static bool writeUIColorValue(Parser& parser, const void* val_ptr, name_stack_t&);
static bool writeUUIDValue(Parser& parser, const void* val_ptr, name_stack_t&);
static bool writeSDValue(Parser& parser, const void* val_ptr, name_stack_t&);
LLXMLNodePtr getNode(name_stack_t& stack);
private:
Parser::name_stack_t mNameStack;
LLXMLNodePtr mCurReadNode;
// Root of the widget XML sub-tree, for example, "line_editor"
LLXMLNodePtr mWriteRootNode;
typedef std::map<std::string, LLXMLNodePtr> out_nodes_t;
out_nodes_t mOutNodes;
LLXMLNodePtr mLastWrittenChild;
S32 mCurReadDepth;
std::string mCurFileName;
std::string mRootNodeName;
};
// LLSimpleXUIParser is a streamlined SAX-based XUI parser that does not support localization
// or parsing of a tree of independent param blocks, such as child widgets.
// Use this for reading non-localized files that only need a single param block as a result.
//
// NOTE: In order to support nested block parsing, we need callbacks for start element that
// push new blocks contexts on the mScope stack.
// NOTE: To support localization without building a DOM, we need to enforce consistent
// ordering of child elements from base file to localized diff file. Then we can use a pair
// of coroutines to perform matching of xml nodes during parsing. Not sure if the overhead
// of coroutines would offset the gain from SAX parsing
class LLSimpleXUIParserImpl;
class LLSimpleXUIParser : public LLInitParam::Parser
{
LOG_CLASS(LLSimpleXUIParser);
public:
typedef LLInitParam::Parser::name_stack_t name_stack_t;
typedef LLInitParam::BaseBlock* (*element_start_callback_t)(LLSimpleXUIParser&, const char* block_name);
LLSimpleXUIParser(element_start_callback_t element_cb = NULL);
virtual ~LLSimpleXUIParser();
/*virtual*/ std::string getCurrentElementName();
/*virtual*/ void parserWarning(const std::string& message);
/*virtual*/ void parserError(const std::string& message);
bool readXUI(const std::string& filename, LLInitParam::BaseBlock& block, bool silent=false);
private:
//reader helper functions
static bool readFlag(Parser&, void* val_ptr);
static bool readBoolValue(Parser&, void* val_ptr);
static bool readStringValue(Parser&, void* val_ptr);
static bool readU8Value(Parser&, void* val_ptr);
static bool readS8Value(Parser&, void* val_ptr);
static bool readU16Value(Parser&, void* val_ptr);
static bool readS16Value(Parser&, void* val_ptr);
static bool readU32Value(Parser&, void* val_ptr);
static bool readS32Value(Parser&, void* val_ptr);
static bool readF32Value(Parser&, void* val_ptr);
static bool readF64Value(Parser&, void* val_ptr);
static bool readColor4Value(Parser&, void* val_ptr);
static bool readUIColorValue(Parser&, void* val_ptr);
static bool readUUIDValue(Parser&, void* val_ptr);
static bool readSDValue(Parser&, void* val_ptr);
private:
static void startElementHandler(void *userData, const char *name, const char **atts);
static void endElementHandler(void *userData, const char *name);
static void characterDataHandler(void *userData, const char *s, int len);
void startElement(const char *name, const char **atts);
void endElement(const char *name);
void characterData(const char *s, int len);
bool readAttributes(const char **atts);
bool processText();
Parser::name_stack_t mNameStack;
struct XML_ParserStruct* mParser;
LLXMLNodePtr mLastWrittenChild;
S32 mCurReadDepth;
std::string mCurFileName;
std::string mTextContents;
const char* mCurAttributeValueBegin;
std::vector<S32> mTokenSizeStack;
std::vector<std::string> mScope;
std::vector<bool> mEmptyLeafNode;
element_start_callback_t mElementCB;
std::vector<std::pair<LLInitParam::BaseBlock*, S32> > mOutputStack;
};
#endif //LLXUIPARSER_H

View File

@@ -259,7 +259,7 @@ BOOL LLXMLNode::removeChild(LLXMLNode *target_child)
return FALSE;
}
void LLXMLNode::addChild(LLXMLNodePtr new_child, LLXMLNodePtr after_child)
void LLXMLNode::addChild(LLXMLNodePtr& new_child, LLXMLNodePtr after_child)
{
if (new_child->mParent != NULL)
{
@@ -343,8 +343,9 @@ LLXMLNodePtr LLXMLNode::createChild(const char* name, BOOL is_attribute)
// virtual
LLXMLNodePtr LLXMLNode::createChild(LLStringTableEntry* name, BOOL is_attribute)
{
LLXMLNode* ret = new LLXMLNode(name, is_attribute);
LLXMLNodePtr ret(new LLXMLNode(name, is_attribute));
ret->mID.clear();
addChild(ret);
return ret;
}
@@ -358,11 +359,12 @@ BOOL LLXMLNode::deleteChild(LLXMLNode *child)
return FALSE;
}
void LLXMLNode::setParent(LLXMLNodePtr new_parent)
void LLXMLNode::setParent(LLXMLNodePtr& new_parent)
{
if (new_parent.notNull())
{
new_parent->addChild(this);
LLXMLNodePtr this_ptr(this);
new_parent->addChild(this_ptr);
}
else
{
@@ -968,6 +970,12 @@ bool LLXMLNode::getLayeredXMLNode(LLXMLNodePtr& root,
return true;
}
// static
void LLXMLNode::writeHeaderToFile(LLFILE *out_file)
{
fprintf(out_file, "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>\n");
}
void LLXMLNode::writeToFile(LLFILE *out_file, const std::string& indent, bool use_type_decorations)
{
if (isFullyDefault())
@@ -1233,7 +1241,8 @@ void LLXMLNode::scrubToTree(LLXMLNode *tree)
std::vector<LLXMLNodePtr>::iterator itor3;
for (itor3=to_delete_list.begin(); itor3!=to_delete_list.end(); ++itor3)
{
(*itor3)->setParent(NULL);
LLXMLNodePtr ptr;
(*itor3)->setParent(ptr);
}
}
}
@@ -1384,7 +1393,7 @@ BOOL LLXMLNode::getAttributeU8(const char* name, U8& value )
BOOL LLXMLNode::getAttributeS8(const char* name, S8& value )
{
LLXMLNodePtr node;
S32 val;
S32 val = 0;
if (!(getAttribute(name, node) && node->getIntValue(1, &val)))
{
return false;
@@ -1396,7 +1405,7 @@ BOOL LLXMLNode::getAttributeS8(const char* name, S8& value )
BOOL LLXMLNode::getAttributeU16(const char* name, U16& value )
{
LLXMLNodePtr node;
U32 val;
U32 val = 0;
if (!(getAttribute(name, node) && node->getUnsignedValue(1, &val)))
{
return false;
@@ -1408,7 +1417,7 @@ BOOL LLXMLNode::getAttributeU16(const char* name, U16& value )
BOOL LLXMLNode::getAttributeS16(const char* name, S16& value )
{
LLXMLNodePtr node;
S32 val;
S32 val = 0;
if (!(getAttribute(name, node) && node->getIntValue(1, &val)))
{
return false;
@@ -2781,7 +2790,8 @@ void LLXMLNode::setName(LLStringTableEntry* name)
mName = name;
if (old_parent)
{
old_parent->addChild(this);
LLXMLNodePtr this_ptr(this);
old_parent->addChild(this_ptr);
}
}

View File

@@ -50,7 +50,6 @@
#include "llstringtable.h"
#include "llfile.h"
class LLVector3;
class LLVector3d;
class LLQuaternion;
@@ -133,8 +132,8 @@ public:
BOOL isNull();
BOOL deleteChild(LLXMLNode* child);
void addChild(LLXMLNodePtr new_child, LLXMLNodePtr after_child = LLXMLNodePtr(NULL));
void setParent(LLXMLNodePtr new_parent); // reparent if necessary
void addChild(LLXMLNodePtr& new_child, LLXMLNodePtr after_child = LLXMLNodePtr(NULL));
void setParent(LLXMLNodePtr& new_parent); // reparent if necessary
// Serialization
static bool parseFile(
@@ -157,6 +156,11 @@ public:
static bool getLayeredXMLNode(LLXMLNodePtr& root, const std::vector<std::string>& paths);
// Write standard XML file header:
// <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
static void writeHeaderToFile(LLFILE *out_file);
// Write XML to file with one attribute per line.
// XML escapes values as they are written.
void writeToFile(LLFILE *out_file, const std::string& indent = std::string(), bool use_type_decorations=true);
@@ -325,7 +329,11 @@ public:
protected:
LLStringTableEntry *mName; // The name of this node
std::string mValue; // The value of this node (use getters/setters only)
// The value of this node (use getters/setters only)
// Values are not XML-escaped in memory
// They may contain " (quot) ' (apos) & (amp) < (lt) > (gt)
std::string mValue;
LLXMLNodePtr mDefault; // Mirror node in the default tree

View File

@@ -1,387 +0,0 @@
# keys.ini
#
# keyboard binding initialization
#
# comments must have # in the first column
# blank lines OK
#
# Format:
# mode key mask function
#
# mode must be one of FIRST_PERSON, THIRD_PERSON, EDIT, EDIT_AVATAR, or CONVERSATION
# key must be upper case, or SPACE, HOME, END, PGUP, PGDN, LEFT, RIGHT, UP, DOWN,
# or one of ,.;'[]
# mask must be NONE, SHIFT, ALT, ALT_SHIFT.
# Control is reserved for user commands.
# function must be a function named in llkeyboard.cpp
FIRST_PERSON A NONE slide_left
FIRST_PERSON D NONE slide_right
FIRST_PERSON W NONE push_forward
FIRST_PERSON S NONE push_backward
FIRST_PERSON E NONE jump
FIRST_PERSON C NONE push_down
FIRST_PERSON F NONE toggle_fly
FIRST_PERSON LEFT NONE slide_left
FIRST_PERSON RIGHT NONE slide_right
FIRST_PERSON UP NONE push_forward
FIRST_PERSON DOWN NONE push_backward
FIRST_PERSON PGUP NONE jump
FIRST_PERSON PGDN NONE push_down
FIRST_PERSON HOME NONE toggle_fly
FIRST_PERSON PAD_LEFT NONE slide_left
FIRST_PERSON PAD_RIGHT NONE slide_right
FIRST_PERSON PAD_UP NONE push_forward
FIRST_PERSON PAD_DOWN NONE push_backward
FIRST_PERSON PAD_PGUP NONE jump
FIRST_PERSON PAD_PGDN NONE push_down
FIRST_PERSON PAD_HOME NONE toggle_fly
FIRST_PERSON PAD_CENTER NONE stop_moving
FIRST_PERSON PAD_ENTER NONE start_chat
FIRST_PERSON PAD_DIVIDE NONE start_gesture
FIRST_PERSON A SHIFT slide_left
FIRST_PERSON D SHIFT slide_right
FIRST_PERSON W SHIFT push_forward
FIRST_PERSON S SHIFT push_backward
FIRST_PERSON E SHIFT jump
FIRST_PERSON C SHIFT toggle_down
FIRST_PERSON F SHIFT toggle_fly
FIRST_PERSON SPACE NONE stop_moving
FIRST_PERSON ENTER NONE start_chat
FIRST_PERSON DIVIDE NONE start_gesture
FIRST_PERSON / NONE start_gesture
FIRST_PERSON LEFT SHIFT slide_left
FIRST_PERSON RIGHT SHIFT slide_right
FIRST_PERSON UP SHIFT push_forward
FIRST_PERSON DOWN SHIFT push_backward
FIRST_PERSON PGUP SHIFT jump
FIRST_PERSON PGDN SHIFT toggle_down
FIRST_PERSON PAD_LEFT SHIFT slide_left
FIRST_PERSON PAD_RIGHT SHIFT slide_right
FIRST_PERSON PAD_UP SHIFT push_forward
FIRST_PERSON PAD_DOWN SHIFT push_backward
FIRST_PERSON PAD_PGUP SHIFT jump
FIRST_PERSON PAD_PGDN SHIFT toggle_down
FIRST_PERSON PAD_HOME SHIFT toggle_fly
FIRST_PERSON PAD_ENTER SHIFT start_chat
FIRST_PERSON PAD_DIVIDE SHIFT start_gesture
THIRD_PERSON A NONE turn_left
THIRD_PERSON D NONE turn_right
THIRD_PERSON A SHIFT slide_left
THIRD_PERSON D SHIFT slide_right
THIRD_PERSON W NONE push_forward
THIRD_PERSON S NONE push_backward
THIRD_PERSON W SHIFT push_forward
THIRD_PERSON S SHIFT push_backward
THIRD_PERSON E NONE jump
THIRD_PERSON C NONE push_down
THIRD_PERSON E SHIFT jump
THIRD_PERSON C SHIFT toggle_down
THIRD_PERSON F NONE toggle_fly
THIRD_PERSON F SHIFT toggle_fly
THIRD_PERSON SPACE NONE stop_moving
THIRD_PERSON ENTER NONE start_chat
THIRD_PERSON DIVIDE NONE start_gesture
THIRD_PERSON / NONE start_gesture
THIRD_PERSON LEFT NONE turn_left
THIRD_PERSON LEFT SHIFT slide_left
THIRD_PERSON RIGHT NONE turn_right
THIRD_PERSON RIGHT SHIFT slide_right
THIRD_PERSON UP NONE push_forward
THIRD_PERSON DOWN NONE push_backward
THIRD_PERSON UP SHIFT push_forward
THIRD_PERSON DOWN SHIFT push_backward
THIRD_PERSON PGUP NONE jump
THIRD_PERSON PGDN NONE push_down
THIRD_PERSON PGUP SHIFT jump
THIRD_PERSON PGDN SHIFT toggle_down
THIRD_PERSON HOME SHIFT toggle_fly
THIRD_PERSON HOME NONE toggle_fly
THIRD_PERSON PAD_LEFT NONE turn_left
THIRD_PERSON PAD_LEFT SHIFT slide_left
THIRD_PERSON PAD_RIGHT NONE turn_right
THIRD_PERSON PAD_RIGHT SHIFT slide_right
THIRD_PERSON PAD_UP NONE push_forward
THIRD_PERSON PAD_DOWN NONE push_backward
THIRD_PERSON PAD_UP SHIFT push_forward
THIRD_PERSON PAD_DOWN SHIFT push_backward
THIRD_PERSON PAD_PGUP NONE jump
THIRD_PERSON PAD_PGDN NONE push_down
THIRD_PERSON PAD_PGUP SHIFT jump
THIRD_PERSON PAD_PGDN SHIFT toggle_down
THIRD_PERSON PAD_HOME NONE toggle_fly
THIRD_PERSON PAD_HOME SHIFT toggle_fly
THIRD_PERSON PAD_CENTER NONE stop_moving
THIRD_PERSON PAD_CENTER SHIFT stop_moving
THIRD_PERSON PAD_ENTER NONE start_chat
THIRD_PERSON PAD_ENTER SHIFT start_chat
THIRD_PERSON PAD_DIVIDE NONE start_gesture
THIRD_PERSON PAD_DIVIDE SHIFT start_gesture
# Camera controls in third person on Alt
THIRD_PERSON LEFT ALT spin_around_cw
THIRD_PERSON RIGHT ALT spin_around_ccw
THIRD_PERSON UP ALT move_forward
THIRD_PERSON DOWN ALT move_backward
THIRD_PERSON PGUP ALT spin_over
THIRD_PERSON PGDN ALT spin_under
THIRD_PERSON A ALT spin_around_cw
THIRD_PERSON D ALT spin_around_ccw
THIRD_PERSON W ALT move_forward
THIRD_PERSON S ALT move_backward
THIRD_PERSON E ALT spin_over
THIRD_PERSON C ALT spin_under
THIRD_PERSON PAD_LEFT ALT spin_around_cw
THIRD_PERSON PAD_RIGHT ALT spin_around_ccw
THIRD_PERSON PAD_UP ALT move_forward
THIRD_PERSON PAD_DOWN ALT move_backward
THIRD_PERSON PAD_PGUP ALT spin_over
THIRD_PERSON PAD_PGDN ALT spin_under
THIRD_PERSON PAD_ENTER ALT start_chat
THIRD_PERSON PAD_DIVIDE ALT start_gesture
# mimic alt zoom behavior with keyboard only
THIRD_PERSON A CTL_ALT spin_around_cw
THIRD_PERSON D CTL_ALT spin_around_ccw
THIRD_PERSON W CTL_ALT spin_over
THIRD_PERSON S CTL_ALT spin_under
THIRD_PERSON E CTL_ALT spin_over
THIRD_PERSON C CTL_ALT spin_under
THIRD_PERSON LEFT CTL_ALT spin_around_cw
THIRD_PERSON RIGHT CTL_ALT spin_around_ccw
THIRD_PERSON UP CTL_ALT spin_over
THIRD_PERSON DOWN CTL_ALT spin_under
THIRD_PERSON PGUP CTL_ALT spin_over
THIRD_PERSON PGDN CTL_ALT spin_under
THIRD_PERSON PAD_LEFT CTL_ALT spin_around_cw
THIRD_PERSON PAD_RIGHT CTL_ALT spin_around_ccw
THIRD_PERSON PAD_UP CTL_ALT spin_over
THIRD_PERSON PAD_DOWN CTL_ALT spin_under
THIRD_PERSON PAD_PGUP CTL_ALT spin_over
THIRD_PERSON PAD_PGDN CTL_ALT spin_under
THIRD_PERSON PAD_ENTER CTL_ALT start_chat
THIRD_PERSON PAD_DIVIDE CTL_ALT start_gesture
# Therefore pan on Alt-Shift
THIRD_PERSON A CTL_ALT_SHIFT pan_left
THIRD_PERSON D CTL_ALT_SHIFT pan_right
THIRD_PERSON W CTL_ALT_SHIFT pan_up
THIRD_PERSON S CTL_ALT_SHIFT pan_down
THIRD_PERSON E CTL_ALT_SHIFT pan_in
THIRD_PERSON C CTL_ALT_SHIFT pan_out
THIRD_PERSON LEFT CTL_ALT_SHIFT pan_left
THIRD_PERSON RIGHT CTL_ALT_SHIFT pan_right
THIRD_PERSON UP CTL_ALT_SHIFT pan_up
THIRD_PERSON DOWN CTL_ALT_SHIFT pan_down
THIRD_PERSON PGUP CTL_ALT_SHIFT pan_in
THIRD_PERSON PGDN CTL_ALT_SHIFT pan_out
THIRD_PERSON PAD_LEFT CTL_ALT_SHIFT pan_left
THIRD_PERSON PAD_RIGHT CTL_ALT_SHIFT pan_right
THIRD_PERSON PAD_UP CTL_ALT_SHIFT pan_up
THIRD_PERSON PAD_DOWN CTL_ALT_SHIFT pan_down
THIRD_PERSON PAD_PGUP CTL_ALT_SHIFT pan_in
THIRD_PERSON PAD_PGDN CTL_ALT_SHIFT pan_out
THIRD_PERSON PAD_ENTER CTL_ALT_SHIFT start_chat
THIRD_PERSON PAD_DIVIDE CTL_ALT_SHIFT start_gesture
# Basic editing camera control
EDIT A NONE spin_around_cw
EDIT D NONE spin_around_ccw
EDIT W NONE move_forward
EDIT S NONE move_backward
EDIT E NONE spin_over
EDIT C NONE spin_under
EDIT ENTER NONE start_chat
EDIT DIVIDE NONE start_gesture
EDIT / NONE start_gesture
EDIT PAD_ENTER NONE start_chat
EDIT PAD_DIVIDE NONE start_gesture
EDIT LEFT NONE spin_around_cw
EDIT RIGHT NONE spin_around_ccw
EDIT UP NONE move_forward
EDIT DOWN NONE move_backward
EDIT PGUP NONE spin_over
EDIT PGDN NONE spin_under
EDIT A SHIFT pan_left
EDIT D SHIFT pan_right
EDIT W SHIFT pan_up
EDIT S SHIFT pan_down
EDIT LEFT SHIFT pan_left
EDIT RIGHT SHIFT pan_right
EDIT UP SHIFT pan_up
EDIT DOWN SHIFT pan_down
# Walking works with ALT held down.
EDIT A ALT slide_left
EDIT D ALT slide_right
EDIT W ALT push_forward
EDIT S ALT push_backward
EDIT E ALT jump
EDIT C ALT push_down
EDIT LEFT ALT slide_left
EDIT RIGHT ALT slide_right
EDIT UP ALT push_forward
EDIT DOWN ALT push_backward
EDIT PGUP ALT jump
EDIT PGDN ALT push_down
EDIT HOME ALT toggle_fly
EDIT PAD_LEFT ALT slide_left
EDIT PAD_RIGHT ALT slide_right
EDIT PAD_UP ALT push_forward
EDIT PAD_DOWN ALT push_backward
EDIT PAD_PGUP ALT jump
EDIT PAD_PGDN ALT push_down
EDIT PAD_ENTER ALT start_chat
EDIT PAD_DIVIDE ALT start_gesture
SITTING A ALT spin_around_cw
SITTING D ALT spin_around_ccw
SITTING W ALT move_forward
SITTING S ALT move_backward
SITTING E ALT spin_over_sitting
SITTING C ALT spin_under_sitting
SITTING LEFT ALT spin_around_cw
SITTING RIGHT ALT spin_around_ccw
SITTING UP ALT move_forward
SITTING DOWN ALT move_backward
SITTING PGUP ALT spin_over
SITTING PGDN ALT spin_under
SITTING A CTL_ALT spin_around_cw
SITTING D CTL_ALT spin_around_ccw
SITTING W CTL_ALT spin_over
SITTING S CTL_ALT spin_under
SITTING E CTL_ALT spin_over
SITTING C CTL_ALT spin_under
SITTING LEFT CTL_ALT spin_around_cw
SITTING RIGHT CTL_ALT spin_around_ccw
SITTING UP CTL_ALT spin_over
SITTING DOWN CTL_ALT spin_under
SITTING PGUP CTL_ALT spin_over
SITTING PGDN CTL_ALT spin_under
SITTING A NONE spin_around_cw_sitting
SITTING D NONE spin_around_ccw_sitting
SITTING W NONE move_forward_sitting
SITTING S NONE move_backward_sitting
SITTING E NONE spin_over_sitting
SITTING C NONE spin_under_sitting
SITTING LEFT NONE spin_around_cw_sitting
SITTING RIGHT NONE spin_around_ccw_sitting
SITTING UP NONE move_forward_sitting
SITTING DOWN NONE move_backward_sitting
SITTING PGUP NONE spin_over_sitting
SITTING PGDN NONE spin_under_sitting
SITTING PAD_LEFT NONE spin_around_cw_sitting
SITTING PAD_RIGHT NONE spin_around_ccw_sitting
SITTING PAD_UP NONE move_forward_sitting
SITTING PAD_DOWN NONE move_backward_sitting
SITTING PAD_PGUP NONE spin_over_sitting
SITTING PAD_PGDN NONE spin_under_sitting
SITTING PAD_CENTER NONE stop_moving
SITTING PAD_ENTER NONE start_chat
SITTING PAD_DIVIDE NONE start_gesture
# these are for passing controls when sitting on vehicles
SITTING A SHIFT slide_left
SITTING D SHIFT slide_right
SITTING W SHIFT move_forward_sitting
SITTING S SHIFT move_backward_sitting
SITTING E SHIFT spin_over_sitting
SITTING C SHIFT spin_under_sitting
SITTING LEFT SHIFT slide_left
SITTING RIGHT SHIFT slide_right
SITTING UP SHIFT move_forward_sitting
SITTING DOWN SHIFT move_backward_sitting
SITTING PGUP SHIFT spin_over_sitting
SITTING PGDN SHIFT spin_under_sitting
SITTING PAD_LEFT SHIFT slide_left
SITTING PAD_RIGHT SHIFT slide_right
SITTING PAD_UP SHIFT move_forward_sitting
SITTING PAD_DOWN SHIFT move_backward_sitting
SITTING PAD_PGUP SHIFT spin_over_sitting
SITTING PAD_PGDN SHIFT spin_under_sitting
SITTING PAD_ENTER SHIFT start_chat
SITTING PAD_DIVIDE SHIFT start_gesture
# pan on Alt-Shift
SITTING A CTL_ALT_SHIFT pan_left
SITTING D CTL_ALT_SHIFT pan_right
SITTING W CTL_ALT_SHIFT pan_up
SITTING S CTL_ALT_SHIFT pan_down
SITTING E CTL_ALT_SHIFT pan_in
SITTING C CTL_ALT_SHIFT pan_out
SITTING LEFT CTL_ALT_SHIFT pan_left
SITTING RIGHT CTL_ALT_SHIFT pan_right
SITTING UP CTL_ALT_SHIFT pan_up
SITTING DOWN CTL_ALT_SHIFT pan_down
SITTING PGUP CTL_ALT_SHIFT pan_in
SITTING PGDN CTL_ALT_SHIFT pan_out
SITTING PAD_LEFT CTL_ALT_SHIFT pan_left
SITTING PAD_RIGHT CTL_ALT_SHIFT pan_right
SITTING PAD_UP CTL_ALT_SHIFT pan_up
SITTING PAD_DOWN CTL_ALT_SHIFT pan_down
SITTING PAD_PGUP CTL_ALT_SHIFT pan_in
SITTING PAD_PGDN CTL_ALT_SHIFT pan_out
SITTING PAD_ENTER CTL_ALT_SHIFT start_chat
SITTING PAD_DIVIDE CTL_ALT_SHIFT start_gesture
SITTING ENTER NONE start_chat
SITTING DIVIDE NONE start_gesture
SITTING / NONE start_gesture
# Avatar editing camera controls
EDIT_AVATAR A NONE edit_avatar_spin_cw
EDIT_AVATAR D NONE edit_avatar_spin_ccw
EDIT_AVATAR W NONE edit_avatar_move_forward
EDIT_AVATAR S NONE edit_avatar_move_backward
EDIT_AVATAR E NONE edit_avatar_spin_over
EDIT_AVATAR C NONE edit_avatar_spin_under
EDIT_AVATAR LEFT NONE edit_avatar_spin_cw
EDIT_AVATAR RIGHT NONE edit_avatar_spin_ccw
EDIT_AVATAR UP NONE edit_avatar_move_forward
EDIT_AVATAR DOWN NONE edit_avatar_move_backward
EDIT_AVATAR PGUP NONE edit_avatar_spin_over
EDIT_AVATAR PGDN NONE edit_avatar_spin_under
EDIT_AVATAR ENTER NONE start_chat
EDIT_AVATAR DIVIDE NONE start_gesture
EDIT_AVATAR / NONE start_gesture
EDIT_AVATAR PAD_LEFT NONE edit_avatar_spin_cw
EDIT_AVATAR PAD_RIGHT NONE edit_avatar_spin_ccw
EDIT_AVATAR PAD_UP NONE edit_avatar_move_forward
EDIT_AVATAR PAD_DOWN NONE edit_avatar_move_backward
EDIT_AVATAR PAD_PGUP NONE edit_avatar_spin_over
EDIT_AVATAR PAD_PGDN NONE edit_avatar_spin_under
EDIT_AVATAR PAD_ENTER NONE start_chat
EDIT_AVATAR PAD_DIVIDE NONE start_gesture

View File

@@ -0,0 +1,380 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<keys>
<first_person>
<binding key="A" mask="NONE" command="slide_left"/>
<binding key="D" mask="NONE" command="slide_right"/>
<binding key="W" mask="NONE" command="push_forward"/>
<binding key="S" mask="NONE" command="push_backward"/>
<binding key="E" mask="NONE" command="jump"/>
<binding key="C" mask="NONE" command="push_down"/>
<binding key="F" mask="NONE" command="toggle_fly"/>
<binding key="LEFT" mask="NONE" command="slide_left"/>
<binding key="RIGHT" mask="NONE" command="slide_right"/>
<binding key="UP" mask="NONE" command="push_forward"/>
<binding key="DOWN" mask="NONE" command="push_backward"/>
<binding key="PGUP" mask="NONE" command="jump"/>
<binding key="PGDN" mask="NONE" command="push_down"/>
<binding key="HOME" mask="NONE" command="toggle_fly"/>
<binding key="PAD_LEFT" mask="NONE" command="slide_left"/>
<binding key="PAD_RIGHT" mask="NONE" command="slide_right"/>
<binding key="PAD_UP" mask="NONE" command="push_forward"/>
<binding key="PAD_DOWN" mask="NONE" command="push_backward"/>
<binding key="PAD_PGUP" mask="NONE" command="jump"/>
<binding key="PAD_PGDN" mask="NONE" command="push_down"/>
<binding key="PAD_HOME" mask="NONE" command="toggle_fly"/>
<binding key="PAD_CENTER" mask="NONE" command="stop_moving"/>
<binding key="PAD_ENTER" mask="NONE" command="start_chat"/>
<binding key="PAD_DIVIDE" mask="NONE" command="start_gesture"/>
<binding key="A" mask="SHIFT" command="slide_left"/>
<binding key="D" mask="SHIFT" command="slide_right"/>
<binding key="W" mask="SHIFT" command="push_forward"/>
<binding key="S" mask="SHIFT" command="push_backward"/>
<binding key="E" mask="SHIFT" command="jump"/>
<binding key="C" mask="SHIFT" command="toggle_down"/>
<binding key="F" mask="SHIFT" command="toggle_fly"/>
<binding key="SPACE" mask="NONE" command="stop_moving"/>
<binding key="ENTER" mask="NONE" command="start_chat"/>
<binding key="DIVIDE" mask="NONE" command="start_gesture"/>
<binding key="/" mask="NONE" command="start_gesture"/>
<binding key="LEFT" mask="SHIFT" command="slide_left"/>
<binding key="RIGHT" mask="SHIFT" command="slide_right"/>
<binding key="UP" mask="SHIFT" command="push_forward"/>
<binding key="DOWN" mask="SHIFT" command="push_backward"/>
<binding key="PGUP" mask="SHIFT" command="jump"/>
<binding key="PGDN" mask="SHIFT" command="toggle_down"/>
<binding key="PAD_LEFT" mask="SHIFT" command="slide_left"/>
<binding key="PAD_RIGHT" mask="SHIFT" command="slide_right"/>
<binding key="PAD_UP" mask="SHIFT" command="push_forward"/>
<binding key="PAD_DOWN" mask="SHIFT" command="push_backward"/>
<binding key="PAD_PGUP" mask="SHIFT" command="jump"/>
<binding key="PAD_PGDN" mask="SHIFT" command="toggle_down"/>
<binding key="PAD_HOME" mask="SHIFT" command="toggle_fly"/>
<binding key="PAD_ENTER" mask="SHIFT" command="start_chat"/>
<binding key="PAD_DIVIDE" mask="SHIFT" command="start_gesture"/>
</first_person>
<third_person>
<binding key="A" mask="NONE" command="turn_left"/>
<binding key="D" mask="NONE" command="turn_right"/>
<binding key="A" mask="SHIFT" command="slide_left"/>
<binding key="D" mask="SHIFT" command="slide_right"/>
<binding key="W" mask="NONE" command="push_forward"/>
<binding key="S" mask="NONE" command="push_backward"/>
<binding key="W" mask="SHIFT" command="push_forward"/>
<binding key="S" mask="SHIFT" command="push_backward"/>
<binding key="E" mask="NONE" command="jump"/>
<binding key="C" mask="NONE" command="push_down"/>
<binding key="E" mask="SHIFT" command="jump"/>
<binding key="C" mask="SHIFT" command="toggle_down"/>
<binding key="F" mask="NONE" command="toggle_fly"/>
<binding key="F" mask="SHIFT" command="toggle_fly"/>
<binding key="SPACE" mask="NONE" command="stop_moving"/>
<binding key="ENTER" mask="NONE" command="start_chat"/>
<binding key="DIVIDE" mask="NONE" command="start_gesture"/>
<binding key="/" mask="NONE" command="start_gesture"/>
<binding key="LEFT" mask="NONE" command="turn_left"/>
<binding key="LEFT" mask="SHIFT" command="slide_left"/>
<binding key="RIGHT" mask="NONE" command="turn_right"/>
<binding key="RIGHT" mask="SHIFT" command="slide_right"/>
<binding key="UP" mask="NONE" command="push_forward"/>
<binding key="DOWN" mask="NONE" command="push_backward"/>
<binding key="UP" mask="SHIFT" command="push_forward"/>
<binding key="DOWN" mask="SHIFT" command="push_backward"/>
<binding key="PGUP" mask="NONE" command="jump"/>
<binding key="PGDN" mask="NONE" command="push_down"/>
<binding key="PGUP" mask="SHIFT" command="jump"/>
<binding key="PGDN" mask="SHIFT" command="toggle_down"/>
<binding key="HOME" mask="SHIFT" command="toggle_fly"/>
<binding key="HOME" mask="NONE" command="toggle_fly"/>
<binding key="PAD_LEFT" mask="NONE" command="turn_left"/>
<binding key="PAD_LEFT" mask="SHIFT" command="slide_left"/>
<binding key="PAD_RIGHT" mask="NONE" command="turn_right"/>
<binding key="PAD_RIGHT" mask="SHIFT" command="slide_right"/>
<binding key="PAD_UP" mask="NONE" command="push_forward"/>
<binding key="PAD_DOWN" mask="NONE" command="push_backward"/>
<binding key="PAD_UP" mask="SHIFT" command="push_forward"/>
<binding key="PAD_DOWN" mask="SHIFT" command="push_backward"/>
<binding key="PAD_PGUP" mask="NONE" command="jump"/>
<binding key="PAD_PGDN" mask="NONE" command="push_down"/>
<binding key="PAD_PGUP" mask="SHIFT" command="jump"/>
<binding key="PAD_PGDN" mask="SHIFT" command="toggle_down"/>
<binding key="PAD_HOME" mask="NONE" command="toggle_fly"/>
<binding key="PAD_HOME" mask="SHIFT" command="toggle_fly"/>
<binding key="PAD_CENTER" mask="NONE" command="stop_moving"/>
<binding key="PAD_CENTER" mask="SHIFT" command="stop_moving"/>
<binding key="PAD_ENTER" mask="NONE" command="start_chat"/>
<binding key="PAD_ENTER" mask="SHIFT" command="start_chat"/>
<binding key="PAD_DIVIDE" mask="NONE" command="start_gesture"/>
<binding key="PAD_DIVIDE" mask="SHIFT" command="start_gesture"/>
<!--Camera controls in third person on Alt-->
<binding key="LEFT" mask="ALT" command="spin_around_cw"/>
<binding key="RIGHT" mask="ALT" command="spin_around_ccw"/>
<binding key="UP" mask="ALT" command="move_forward"/>
<binding key="DOWN" mask="ALT" command="move_backward"/>
<binding key="PGUP" mask="ALT" command="spin_over"/>
<binding key="PGDN" mask="ALT" command="spin_under"/>
<binding key="A" mask="ALT" command="spin_around_cw"/>
<binding key="D" mask="ALT" command="spin_around_ccw"/>
<binding key="W" mask="ALT" command="move_forward"/>
<binding key="S" mask="ALT" command="move_backward"/>
<binding key="E" mask="ALT" command="spin_over"/>
<binding key="C" mask="ALT" command="spin_under"/>
<binding key="PAD_LEFT" mask="ALT" command="spin_around_cw"/>
<binding key="PAD_RIGHT" mask="ALT" command="spin_around_ccw"/>
<binding key="PAD_UP" mask="ALT" command="move_forward"/>
<binding key="PAD_DOWN" mask="ALT" command="move_backward"/>
<binding key="PAD_PGUP" mask="ALT" command="spin_over"/>
<binding key="PAD_PGDN" mask="ALT" command="spin_under"/>
<binding key="PAD_ENTER" mask="ALT" command="start_chat"/>
<binding key="PAD_DIVIDE" mask="ALT" command="start_gesture"/>
<!--mimic alt zoom behavior with keyboard only-->
<binding key="A" mask="CTL_ALT" command="spin_around_cw"/>
<binding key="D" mask="CTL_ALT" command="spin_around_ccw"/>
<binding key="W" mask="CTL_ALT" command="spin_over"/>
<binding key="S" mask="CTL_ALT" command="spin_under"/>
<binding key="E" mask="CTL_ALT" command="spin_over"/>
<binding key="C" mask="CTL_ALT" command="spin_under"/>
<binding key="LEFT" mask="CTL_ALT" command="spin_around_cw"/>
<binding key="RIGHT" mask="CTL_ALT" command="spin_around_ccw"/>
<binding key="UP" mask="CTL_ALT" command="spin_over"/>
<binding key="DOWN" mask="CTL_ALT" command="spin_under"/>
<binding key="PGUP" mask="CTL_ALT" command="spin_over"/>
<binding key="PGDN" mask="CTL_ALT" command="spin_under"/>
<binding key="PAD_LEFT" mask="CTL_ALT" command="spin_around_cw"/>
<binding key="PAD_RIGHT" mask="CTL_ALT" command="spin_around_ccw"/>
<binding key="PAD_UP" mask="CTL_ALT" command="spin_over"/>
<binding key="PAD_DOWN" mask="CTL_ALT" command="spin_under"/>
<binding key="PAD_PGUP" mask="CTL_ALT" command="spin_over"/>
<binding key="PAD_PGDN" mask="CTL_ALT" command="spin_under"/>
<binding key="PAD_ENTER" mask="CTL_ALT" command="start_chat"/>
<binding key="PAD_DIVIDE" mask="CTL_ALT" command="start_gesture"/>
<!--Therefore pan on Alt-Shift-->
<binding key="A" mask="CTL_ALT_SHIFT" command="pan_left"/>
<binding key="D" mask="CTL_ALT_SHIFT" command="pan_right"/>
<binding key="W" mask="CTL_ALT_SHIFT" command="pan_up"/>
<binding key="S" mask="CTL_ALT_SHIFT" command="pan_down"/>
<binding key="E" mask="CTL_ALT_SHIFT" command="pan_in"/>
<binding key="C" mask="CTL_ALT_SHIFT" command="pan_out"/>
<binding key="LEFT" mask="CTL_ALT_SHIFT" command="pan_left"/>
<binding key="RIGHT" mask="CTL_ALT_SHIFT" command="pan_right"/>
<binding key="UP" mask="CTL_ALT_SHIFT" command="pan_up"/>
<binding key="DOWN" mask="CTL_ALT_SHIFT" command="pan_down"/>
<binding key="PGUP" mask="CTL_ALT_SHIFT" command="pan_in"/>
<binding key="PGDN" mask="CTL_ALT_SHIFT" command="pan_out"/>
<binding key="PAD_LEFT" mask="CTL_ALT_SHIFT" command="pan_left"/>
<binding key="PAD_RIGHT" mask="CTL_ALT_SHIFT" command="pan_right"/>
<binding key="PAD_UP" mask="CTL_ALT_SHIFT" command="pan_up"/>
<binding key="PAD_DOWN" mask="CTL_ALT_SHIFT" command="pan_down"/>
<binding key="PAD_PGUP" mask="CTL_ALT_SHIFT" command="pan_in"/>
<binding key="PAD_PGDN" mask="CTL_ALT_SHIFT" command="pan_out"/>
<binding key="PAD_ENTER" mask="CTL_ALT_SHIFT" command="start_chat"/>
<binding key="PAD_DIVIDE" mask="CTL_ALT_SHIFT" command="start_gesture"/>
</third_person>
<!-- Basic editing camera control -->
<edit>
<binding key="A" mask="NONE" command="spin_around_cw"/>
<binding key="D" mask="NONE" command="spin_around_ccw"/>
<binding key="W" mask="NONE" command="move_forward"/>
<binding key="S" mask="NONE" command="move_backward"/>
<binding key="E" mask="NONE" command="spin_over"/>
<binding key="C" mask="NONE" command="spin_under"/>
<binding key="ENTER" mask="NONE" command="start_chat"/>
<binding key="DIVIDE" mask="NONE" command="start_gesture"/>
<binding key="/" mask="NONE" command="start_gesture"/>
<binding key="PAD_ENTER" mask="NONE" command="start_chat"/>
<binding key="PAD_DIVIDE" mask="NONE" command="start_gesture"/>
<binding key="LEFT" mask="NONE" command="spin_around_cw"/>
<binding key="RIGHT" mask="NONE" command="spin_around_ccw"/>
<binding key="UP" mask="NONE" command="move_forward"/>
<binding key="DOWN" mask="NONE" command="move_backward"/>
<binding key="PGUP" mask="NONE" command="spin_over"/>
<binding key="PGDN" mask="NONE" command="spin_under"/>
<binding key="A" mask="SHIFT" command="pan_left"/>
<binding key="D" mask="SHIFT" command="pan_right"/>
<binding key="W" mask="SHIFT" command="pan_up"/>
<binding key="S" mask="SHIFT" command="pan_down"/>
<binding key="LEFT" mask="SHIFT" command="pan_left"/>
<binding key="RIGHT" mask="SHIFT" command="pan_right"/>
<binding key="UP" mask="SHIFT" command="pan_up"/>
<binding key="DOWN" mask="SHIFT" command="pan_down"/>
<!--Walking works with ALT held down.-->
<binding key="A" mask="ALT" command="slide_left"/>
<binding key="D" mask="ALT" command="slide_right"/>
<binding key="W" mask="ALT" command="push_forward"/>
<binding key="S" mask="ALT" command="push_backward"/>
<binding key="E" mask="ALT" command="jump"/>
<binding key="C" mask="ALT" command="push_down"/>
<binding key="LEFT" mask="ALT" command="slide_left"/>
<binding key="RIGHT" mask="ALT" command="slide_right"/>
<binding key="UP" mask="ALT" command="push_forward"/>
<binding key="DOWN" mask="ALT" command="push_backward"/>
<binding key="PGUP" mask="ALT" command="jump"/>
<binding key="PGDN" mask="ALT" command="push_down"/>
<binding key="HOME" mask="ALT" command="toggle_fly"/>
<binding key="PAD_LEFT" mask="ALT" command="slide_left"/>
<binding key="PAD_RIGHT" mask="ALT" command="slide_right"/>
<binding key="PAD_UP" mask="ALT" command="push_forward"/>
<binding key="PAD_DOWN" mask="ALT" command="push_backward"/>
<binding key="PAD_PGUP" mask="ALT" command="jump"/>
<binding key="PAD_PGDN" mask="ALT" command="push_down"/>
<binding key="PAD_ENTER" mask="ALT" command="start_chat"/>
<binding key="PAD_DIVIDE" mask="ALT" command="start_gesture"/>
</edit>
<sitting>
<binding key="A" mask="ALT" command="spin_around_cw"/>
<binding key="D" mask="ALT" command="spin_around_ccw"/>
<binding key="W" mask="ALT" command="move_forward"/>
<binding key="S" mask="ALT" command="move_backward"/>
<binding key="E" mask="ALT" command="spin_over_sitting"/>
<binding key="C" mask="ALT" command="spin_under_sitting"/>
<binding key="LEFT" mask="ALT" command="spin_around_cw"/>
<binding key="RIGHT" mask="ALT" command="spin_around_ccw"/>
<binding key="UP" mask="ALT" command="move_forward"/>
<binding key="DOWN" mask="ALT" command="move_backward"/>
<binding key="PGUP" mask="ALT" command="spin_over"/>
<binding key="PGDN" mask="ALT" command="spin_under"/>
<binding key="A" mask="CTL_ALT" command="spin_around_cw"/>
<binding key="D" mask="CTL_ALT" command="spin_around_ccw"/>
<binding key="W" mask="CTL_ALT" command="spin_over"/>
<binding key="S" mask="CTL_ALT" command="spin_under"/>
<binding key="E" mask="CTL_ALT" command="spin_over"/>
<binding key="C" mask="CTL_ALT" command="spin_under"/>
<binding key="LEFT" mask="CTL_ALT" command="spin_around_cw"/>
<binding key="RIGHT" mask="CTL_ALT" command="spin_around_ccw"/>
<binding key="UP" mask="CTL_ALT" command="spin_over"/>
<binding key="DOWN" mask="CTL_ALT" command="spin_under"/>
<binding key="PGUP" mask="CTL_ALT" command="spin_over"/>
<binding key="PGDN" mask="CTL_ALT" command="spin_under"/>
<binding key="A" mask="NONE" command="spin_around_cw_sitting"/>
<binding key="D" mask="NONE" command="spin_around_ccw_sitting"/>
<binding key="W" mask="NONE" command="move_forward_sitting"/>
<binding key="S" mask="NONE" command="move_backward_sitting"/>
<binding key="E" mask="NONE" command="spin_over_sitting"/>
<binding key="C" mask="NONE" command="spin_under_sitting"/>
<binding key="LEFT" mask="NONE" command="spin_around_cw_sitting"/>
<binding key="RIGHT" mask="NONE" command="spin_around_ccw_sitting"/>
<binding key="UP" mask="NONE" command="move_forward_sitting"/>
<binding key="DOWN" mask="NONE" command="move_backward_sitting"/>
<binding key="PGUP" mask="NONE" command="spin_over_sitting"/>
<binding key="PGDN" mask="NONE" command="spin_under_sitting"/>
<binding key="PAD_LEFT" mask="NONE" command="spin_around_cw_sitting"/>
<binding key="PAD_RIGHT" mask="NONE" command="spin_around_ccw_sitting"/>
<binding key="PAD_UP" mask="NONE" command="move_forward_sitting"/>
<binding key="PAD_DOWN" mask="NONE" command="move_backward_sitting"/>
<binding key="PAD_PGUP" mask="NONE" command="spin_over_sitting"/>
<binding key="PAD_PGDN" mask="NONE" command="spin_under_sitting"/>
<binding key="PAD_CENTER" mask="NONE" command="stop_moving"/>
<binding key="PAD_ENTER" mask="NONE" command="start_chat"/>
<binding key="PAD_DIVIDE" mask="NONE" command="start_gesture"/>
<!--these are for passing controls when sitting on vehicles-->
<binding key="A" mask="SHIFT" command="slide_left"/>
<binding key="D" mask="SHIFT" command="slide_right"/>
<binding key="W" mask="SHIFT" command="move_forward_sitting"/>
<binding key="S" mask="SHIFT" command="move_backward_sitting"/>
<binding key="E" mask="SHIFT" command="spin_over_sitting"/>
<binding key="C" mask="SHIFT" command="spin_under_sitting"/>
<binding key="LEFT" mask="SHIFT" command="slide_left"/>
<binding key="RIGHT" mask="SHIFT" command="slide_right"/>
<binding key="UP" mask="SHIFT" command="move_forward_sitting"/>
<binding key="DOWN" mask="SHIFT" command="move_backward_sitting"/>
<binding key="PGUP" mask="SHIFT" command="spin_over_sitting"/>
<binding key="PGDN" mask="SHIFT" command="spin_under_sitting"/>
<binding key="PAD_LEFT" mask="SHIFT" command="slide_left"/>
<binding key="PAD_RIGHT" mask="SHIFT" command="slide_right"/>
<binding key="PAD_UP" mask="SHIFT" command="move_forward_sitting"/>
<binding key="PAD_DOWN" mask="SHIFT" command="move_backward_sitting"/>
<binding key="PAD_PGUP" mask="SHIFT" command="spin_over_sitting"/>
<binding key="PAD_PGDN" mask="SHIFT" command="spin_under_sitting"/>
<binding key="PAD_ENTER" mask="SHIFT" command="start_chat"/>
<binding key="PAD_DIVIDE" mask="SHIFT" command="start_gesture"/>
<!--pan on Alt-Shift-->
<binding key="A" mask="CTL_ALT_SHIFT" command="pan_left"/>
<binding key="D" mask="CTL_ALT_SHIFT" command="pan_right"/>
<binding key="W" mask="CTL_ALT_SHIFT" command="pan_up"/>
<binding key="S" mask="CTL_ALT_SHIFT" command="pan_down"/>
<binding key="E" mask="CTL_ALT_SHIFT" command="pan_in"/>
<binding key="C" mask="CTL_ALT_SHIFT" command="pan_out"/>
<binding key="LEFT" mask="CTL_ALT_SHIFT" command="pan_left"/>
<binding key="RIGHT" mask="CTL_ALT_SHIFT" command="pan_right"/>
<binding key="UP" mask="CTL_ALT_SHIFT" command="pan_up"/>
<binding key="DOWN" mask="CTL_ALT_SHIFT" command="pan_down"/>
<binding key="PGUP" mask="CTL_ALT_SHIFT" command="pan_in"/>
<binding key="PGDN" mask="CTL_ALT_SHIFT" command="pan_out"/>
<binding key="PAD_LEFT" mask="CTL_ALT_SHIFT" command="pan_left"/>
<binding key="PAD_RIGHT" mask="CTL_ALT_SHIFT" command="pan_right"/>
<binding key="PAD_UP" mask="CTL_ALT_SHIFT" command="pan_up"/>
<binding key="PAD_DOWN" mask="CTL_ALT_SHIFT" command="pan_down"/>
<binding key="PAD_PGUP" mask="CTL_ALT_SHIFT" command="pan_in"/>
<binding key="PAD_PGDN" mask="CTL_ALT_SHIFT" command="pan_out"/>
<binding key="PAD_ENTER" mask="CTL_ALT_SHIFT" command="start_chat"/>
<binding key="PAD_DIVIDE" mask="CTL_ALT_SHIFT" command="start_gesture"/>
<binding key="ENTER" mask="NONE" command="start_chat"/>
<binding key="DIVIDE" mask="NONE" command="start_gesture"/>
<binding key="/" mask="NONE" command="start_gesture"/>
</sitting>
<edit_avatar>
<!--Avatar editing camera controls-->
<binding key="A" mask="NONE" command="edit_avatar_spin_cw"/>
<binding key="D" mask="NONE" command="edit_avatar_spin_ccw"/>
<binding key="W" mask="NONE" command="edit_avatar_move_forward"/>
<binding key="S" mask="NONE" command="edit_avatar_move_backward"/>
<binding key="E" mask="NONE" command="edit_avatar_spin_over"/>
<binding key="C" mask="NONE" command="edit_avatar_spin_under"/>
<binding key="LEFT" mask="NONE" command="edit_avatar_spin_cw"/>
<binding key="RIGHT" mask="NONE" command="edit_avatar_spin_ccw"/>
<binding key="UP" mask="NONE" command="edit_avatar_move_forward"/>
<binding key="DOWN" mask="NONE" command="edit_avatar_move_backward"/>
<binding key="PGUP" mask="NONE" command="edit_avatar_spin_over"/>
<binding key="PGDN" mask="NONE" command="edit_avatar_spin_under"/>
<binding key="ENTER" mask="NONE" command="start_chat"/>
<binding key="DIVIDE" mask="NONE" command="start_gesture"/>
<binding key="/" mask="NONE" command="start_gesture"/>
<binding key="PAD_LEFT" mask="NONE" command="edit_avatar_spin_cw"/>
<binding key="PAD_RIGHT" mask="NONE" command="edit_avatar_spin_ccw"/>
<binding key="PAD_UP" mask="NONE" command="edit_avatar_move_forward"/>
<binding key="PAD_DOWN" mask="NONE" command="edit_avatar_move_backward"/>
<binding key="PAD_PGUP" mask="NONE" command="edit_avatar_spin_over"/>
<binding key="PAD_PGDN" mask="NONE" command="edit_avatar_spin_under"/>
<binding key="PAD_ENTER" mask="NONE" command="start_chat"/>
<binding key="PAD_DIVIDE" mask="NONE" command="start_gesture"/>
</edit_avatar>
</keys>

View File

@@ -1,387 +0,0 @@
# keys.ini
#
# keyboard binding initialization
#
# comments must have # in the first column
# blank lines OK
#
# Format:
# mode key mask function
#
# mode must be one of FIRST_PERSON, THIRD_PERSON, EDIT, EDIT_AVATAR, or CONVERSATION
# key must be upper case, or SPACE, HOME, END, PGUP, PGDN, LEFT, RIGHT, UP, DOWN,
# or one of ,.;'[]
# mask must be NONE, SHIFT, ALT, ALT_SHIFT.
# Control is reserved for user commands.
# function must be a function named in llkeyboard.cpp
FIRST_PERSON Q NONE slide_left
FIRST_PERSON D NONE slide_right
FIRST_PERSON Z NONE push_forward
FIRST_PERSON S NONE push_backward
FIRST_PERSON E NONE jump
FIRST_PERSON C NONE push_down
FIRST_PERSON F NONE toggle_fly
FIRST_PERSON LEFT NONE slide_left
FIRST_PERSON RIGHT NONE slide_right
FIRST_PERSON UP NONE push_forward
FIRST_PERSON DOWN NONE push_backward
FIRST_PERSON PGUP NONE jump
FIRST_PERSON PGDN NONE push_down
FIRST_PERSON HOME NONE toggle_fly
FIRST_PERSON PAD_LEFT NONE slide_left
FIRST_PERSON PAD_RIGHT NONE slide_right
FIRST_PERSON PAD_UP NONE push_forward
FIRST_PERSON PAD_DOWN NONE push_backward
FIRST_PERSON PAD_PGUP NONE jump
FIRST_PERSON PAD_PGDN NONE push_down
FIRST_PERSON PAD_HOME NONE toggle_fly
FIRST_PERSON PAD_CENTER NONE stop_moving
FIRST_PERSON PAD_ENTER NONE start_chat
FIRST_PERSON PAD_DIVIDE NONE start_gesture
FIRST_PERSON Q SHIFT slide_left
FIRST_PERSON D SHIFT slide_right
FIRST_PERSON Z SHIFT push_forward
FIRST_PERSON S SHIFT push_backward
FIRST_PERSON E SHIFT jump
FIRST_PERSON C SHIFT toggle_down
FIRST_PERSON F SHIFT toggle_fly
FIRST_PERSON SPACE NONE stop_moving
FIRST_PERSON ENTER NONE start_chat
FIRST_PERSON DIVIDE NONE start_gesture
FIRST_PERSON / NONE start_gesture
FIRST_PERSON LEFT SHIFT slide_left
FIRST_PERSON RIGHT SHIFT slide_right
FIRST_PERSON UP SHIFT push_forward
FIRST_PERSON DOWN SHIFT push_backward
FIRST_PERSON PGUP SHIFT jump
FIRST_PERSON PGDN SHIFT toggle_down
FIRST_PERSON PAD_LEFT SHIFT slide_left
FIRST_PERSON PAD_RIGHT SHIFT slide_right
FIRST_PERSON PAD_UP SHIFT push_forward
FIRST_PERSON PAD_DOWN SHIFT push_backward
FIRST_PERSON PAD_PGUP SHIFT jump
FIRST_PERSON PAD_PGDN SHIFT toggle_down
FIRST_PERSON PAD_HOME SHIFT toggle_fly
FIRST_PERSON PAD_ENTER SHIFT start_chat
FIRST_PERSON PAD_DIVIDE SHIFT start_gesture
THIRD_PERSON Q NONE turn_left
THIRD_PERSON D NONE turn_right
THIRD_PERSON Q SHIFT slide_left
THIRD_PERSON D SHIFT slide_right
THIRD_PERSON Z NONE push_forward
THIRD_PERSON S NONE push_backward
THIRD_PERSON Z SHIFT push_forward
THIRD_PERSON S SHIFT push_backward
THIRD_PERSON E NONE jump
THIRD_PERSON C NONE push_down
THIRD_PERSON E SHIFT jump
THIRD_PERSON C SHIFT toggle_down
THIRD_PERSON F NONE toggle_fly
THIRD_PERSON F SHIFT toggle_fly
THIRD_PERSON SPACE NONE stop_moving
THIRD_PERSON ENTER NONE start_chat
THIRD_PERSON DIVIDE NONE start_gesture
THIRD_PERSON / NONE start_gesture
THIRD_PERSON LEFT NONE turn_left
THIRD_PERSON LEFT SHIFT slide_left
THIRD_PERSON RIGHT NONE turn_right
THIRD_PERSON RIGHT SHIFT slide_right
THIRD_PERSON UP NONE push_forward
THIRD_PERSON DOWN NONE push_backward
THIRD_PERSON UP SHIFT push_forward
THIRD_PERSON DOWN SHIFT push_backward
THIRD_PERSON PGUP NONE jump
THIRD_PERSON PGDN NONE push_down
THIRD_PERSON PGUP SHIFT jump
THIRD_PERSON PGDN SHIFT toggle_down
THIRD_PERSON HOME SHIFT toggle_fly
THIRD_PERSON HOME NONE toggle_fly
THIRD_PERSON PAD_LEFT NONE turn_left
THIRD_PERSON PAD_LEFT SHIFT slide_left
THIRD_PERSON PAD_RIGHT NONE turn_right
THIRD_PERSON PAD_RIGHT SHIFT slide_right
THIRD_PERSON PAD_UP NONE push_forward
THIRD_PERSON PAD_DOWN NONE push_backward
THIRD_PERSON PAD_UP SHIFT push_forward
THIRD_PERSON PAD_DOWN SHIFT push_backward
THIRD_PERSON PAD_PGUP NONE jump
THIRD_PERSON PAD_PGDN NONE push_down
THIRD_PERSON PAD_PGUP SHIFT jump
THIRD_PERSON PAD_PGDN SHIFT toggle_down
THIRD_PERSON PAD_HOME NONE toggle_fly
THIRD_PERSON PAD_HOME SHIFT toggle_fly
THIRD_PERSON PAD_CENTER NONE stop_moving
THIRD_PERSON PAD_CENTER SHIFT stop_moving
THIRD_PERSON PAD_ENTER NONE start_chat
THIRD_PERSON PAD_ENTER SHIFT start_chat
THIRD_PERSON PAD_DIVIDE NONE start_gesture
THIRD_PERSON PAD_DIVIDE SHIFT start_gesture
# Camera controls in third person on Alt
THIRD_PERSON LEFT ALT spin_around_cw
THIRD_PERSON RIGHT ALT spin_around_ccw
THIRD_PERSON UP ALT move_forward
THIRD_PERSON DOWN ALT move_backward
THIRD_PERSON PGUP ALT spin_over
THIRD_PERSON PGDN ALT spin_under
THIRD_PERSON Q ALT spin_around_cw
THIRD_PERSON D ALT spin_around_ccw
THIRD_PERSON Z ALT move_forward
THIRD_PERSON S ALT move_backward
THIRD_PERSON E ALT spin_over
THIRD_PERSON C ALT spin_under
THIRD_PERSON PAD_LEFT ALT spin_around_cw
THIRD_PERSON PAD_RIGHT ALT spin_around_ccw
THIRD_PERSON PAD_UP ALT move_forward
THIRD_PERSON PAD_DOWN ALT move_backward
THIRD_PERSON PAD_PGUP ALT spin_over
THIRD_PERSON PAD_PGDN ALT spin_under
THIRD_PERSON PAD_ENTER ALT start_chat
THIRD_PERSON PAD_DIVIDE ALT start_gesture
# mimic alt zoom behavior with keyboard only
THIRD_PERSON Q CTL_ALT spin_around_cw
THIRD_PERSON D CTL_ALT spin_around_ccw
THIRD_PERSON Z CTL_ALT spin_over
THIRD_PERSON S CTL_ALT spin_under
THIRD_PERSON E CTL_ALT spin_over
THIRD_PERSON C CTL_ALT spin_under
THIRD_PERSON LEFT CTL_ALT spin_around_cw
THIRD_PERSON RIGHT CTL_ALT spin_around_ccw
THIRD_PERSON UP CTL_ALT spin_over
THIRD_PERSON DOWN CTL_ALT spin_under
THIRD_PERSON PGUP CTL_ALT spin_over
THIRD_PERSON PGDN CTL_ALT spin_under
THIRD_PERSON PAD_LEFT CTL_ALT spin_around_cw
THIRD_PERSON PAD_RIGHT CTL_ALT spin_around_ccw
THIRD_PERSON PAD_UP CTL_ALT spin_over
THIRD_PERSON PAD_DOWN CTL_ALT spin_under
THIRD_PERSON PAD_PGUP CTL_ALT spin_over
THIRD_PERSON PAD_PGDN CTL_ALT spin_under
THIRD_PERSON PAD_ENTER CTL_ALT start_chat
THIRD_PERSON PAD_DIVIDE CTL_ALT start_gesture
# Therefore pan on Alt-Shift
THIRD_PERSON Q CTL_ALT_SHIFT pan_left
THIRD_PERSON D CTL_ALT_SHIFT pan_right
THIRD_PERSON Z CTL_ALT_SHIFT pan_up
THIRD_PERSON S CTL_ALT_SHIFT pan_down
THIRD_PERSON E CTL_ALT_SHIFT pan_in
THIRD_PERSON C CTL_ALT_SHIFT pan_out
THIRD_PERSON LEFT CTL_ALT_SHIFT pan_left
THIRD_PERSON RIGHT CTL_ALT_SHIFT pan_right
THIRD_PERSON UP CTL_ALT_SHIFT pan_up
THIRD_PERSON DOWN CTL_ALT_SHIFT pan_down
THIRD_PERSON PGUP CTL_ALT_SHIFT pan_in
THIRD_PERSON PGDN CTL_ALT_SHIFT pan_out
THIRD_PERSON PAD_LEFT CTL_ALT_SHIFT pan_left
THIRD_PERSON PAD_RIGHT CTL_ALT_SHIFT pan_right
THIRD_PERSON PAD_UP CTL_ALT_SHIFT pan_up
THIRD_PERSON PAD_DOWN CTL_ALT_SHIFT pan_down
THIRD_PERSON PAD_PGUP CTL_ALT_SHIFT pan_in
THIRD_PERSON PAD_PGDN CTL_ALT_SHIFT pan_out
THIRD_PERSON PAD_ENTER CTL_ALT_SHIFT start_chat
THIRD_PERSON PAD_DIVIDE CTL_ALT_SHIFT start_gesture
# Basic editing camera control
EDIT Q NONE spin_around_cw
EDIT D NONE spin_around_ccw
EDIT Z NONE move_forward
EDIT S NONE move_backward
EDIT E NONE spin_over
EDIT C NONE spin_under
EDIT ENTER NONE start_chat
EDIT DIVIDE NONE start_gesture
EDIT / NONE start_gesture
EDIT PAD_ENTER NONE start_chat
EDIT PAD_DIVIDE NONE start_gesture
EDIT LEFT NONE spin_around_cw
EDIT RIGHT NONE spin_around_ccw
EDIT UP NONE move_forward
EDIT DOWN NONE move_backward
EDIT PGUP NONE spin_over
EDIT PGDN NONE spin_under
EDIT Q SHIFT pan_left
EDIT D SHIFT pan_right
EDIT Z SHIFT pan_up
EDIT S SHIFT pan_down
EDIT LEFT SHIFT pan_left
EDIT RIGHT SHIFT pan_right
EDIT UP SHIFT pan_up
EDIT DOWN SHIFT pan_down
# Walking works with ALT held down.
EDIT Q ALT slide_left
EDIT D ALT slide_right
EDIT Z ALT push_forward
EDIT S ALT push_backward
EDIT E ALT jump
EDIT C ALT push_down
EDIT LEFT ALT slide_left
EDIT RIGHT ALT slide_right
EDIT UP ALT push_forward
EDIT DOWN ALT push_backward
EDIT PGUP ALT jump
EDIT PGDN ALT push_down
EDIT HOME ALT toggle_fly
EDIT PAD_LEFT ALT slide_left
EDIT PAD_RIGHT ALT slide_right
EDIT PAD_UP ALT push_forward
EDIT PAD_DOWN ALT push_backward
EDIT PAD_PGUP ALT jump
EDIT PAD_PGDN ALT push_down
EDIT PAD_ENTER ALT start_chat
EDIT PAD_DIVIDE ALT start_gesture
SITTING Q ALT spin_around_cw
SITTING D ALT spin_around_ccw
SITTING Z ALT move_forward
SITTING S ALT move_backward
SITTING E ALT spin_over_sitting
SITTING C ALT spin_under_sitting
SITTING LEFT ALT spin_around_cw
SITTING RIGHT ALT spin_around_ccw
SITTING UP ALT move_forward
SITTING DOWN ALT move_backward
SITTING PGUP ALT spin_over
SITTING PGDN ALT spin_under
SITTING Q CTL_ALT spin_around_cw
SITTING D CTL_ALT spin_around_ccw
SITTING Z CTL_ALT spin_over
SITTING S CTL_ALT spin_under
SITTING E CTL_ALT spin_over
SITTING C CTL_ALT spin_under
SITTING LEFT CTL_ALT spin_around_cw
SITTING RIGHT CTL_ALT spin_around_ccw
SITTING UP CTL_ALT spin_over
SITTING DOWN CTL_ALT spin_under
SITTING PGUP CTL_ALT spin_over
SITTING PGDN CTL_ALT spin_under
SITTING Q NONE spin_around_cw_sitting
SITTING D NONE spin_around_ccw_sitting
SITTING Z NONE move_forward_sitting
SITTING S NONE move_backward_sitting
SITTING E NONE spin_over_sitting
SITTING C NONE spin_under_sitting
SITTING LEFT NONE spin_around_cw_sitting
SITTING RIGHT NONE spin_around_ccw_sitting
SITTING UP NONE move_forward_sitting
SITTING DOWN NONE move_backward_sitting
SITTING PGUP NONE spin_over_sitting
SITTING PGDN NONE spin_under_sitting
SITTING PAD_LEFT NONE spin_around_cw_sitting
SITTING PAD_RIGHT NONE spin_around_ccw_sitting
SITTING PAD_UP NONE move_forward_sitting
SITTING PAD_DOWN NONE move_backward_sitting
SITTING PAD_PGUP NONE spin_over_sitting
SITTING PAD_PGDN NONE spin_under_sitting
SITTING PAD_CENTER NONE stop_moving
SITTING PAD_ENTER NONE start_chat
SITTING PAD_DIVIDE NONE start_gesture
# these are for passing controls when sitting on vehicles
SITTING Q SHIFT slide_left
SITTING D SHIFT slide_right
SITTING Z SHIFT move_forward_sitting
SITTING S SHIFT move_backward_sitting
SITTING E SHIFT spin_over_sitting
SITTING C SHIFT spin_under_sitting
SITTING LEFT SHIFT slide_left
SITTING RIGHT SHIFT slide_right
SITTING UP SHIFT move_forward_sitting
SITTING DOWN SHIFT move_backward_sitting
SITTING PGUP SHIFT spin_over_sitting
SITTING PGDN SHIFT spin_under_sitting
SITTING PAD_LEFT SHIFT slide_left
SITTING PAD_RIGHT SHIFT slide_right
SITTING PAD_UP SHIFT move_forward_sitting
SITTING PAD_DOWN SHIFT move_backward_sitting
SITTING PAD_PGUP SHIFT spin_over_sitting
SITTING PAD_PGDN SHIFT spin_under_sitting
SITTING PAD_ENTER SHIFT start_chat
SITTING PAD_DIVIDE SHIFT start_gesture
# pan on Alt-Shift
SITTING Q CTL_ALT_SHIFT pan_left
SITTING D CTL_ALT_SHIFT pan_right
SITTING Z CTL_ALT_SHIFT pan_up
SITTING S CTL_ALT_SHIFT pan_down
SITTING E CTL_ALT_SHIFT pan_in
SITTING C CTL_ALT_SHIFT pan_out
SITTING LEFT CTL_ALT_SHIFT pan_left
SITTING RIGHT CTL_ALT_SHIFT pan_right
SITTING UP CTL_ALT_SHIFT pan_up
SITTING DOWN CTL_ALT_SHIFT pan_down
SITTING PGUP CTL_ALT_SHIFT pan_in
SITTING PGDN CTL_ALT_SHIFT pan_out
SITTING PAD_LEFT CTL_ALT_SHIFT pan_left
SITTING PAD_RIGHT CTL_ALT_SHIFT pan_right
SITTING PAD_UP CTL_ALT_SHIFT pan_up
SITTING PAD_DOWN CTL_ALT_SHIFT pan_down
SITTING PAD_PGUP CTL_ALT_SHIFT pan_in
SITTING PAD_PGDN CTL_ALT_SHIFT pan_out
SITTING PAD_ENTER CTL_ALT_SHIFT start_chat
SITTING PAD_DIVIDE CTL_ALT_SHIFT start_gesture
SITTING ENTER NONE start_chat
SITTING DIVIDE NONE start_gesture
SITTING / NONE start_gesture
# Avatar editing camera controls
EDIT_AVATAR Q NONE edit_avatar_spin_cw
EDIT_AVATAR D NONE edit_avatar_spin_ccw
EDIT_AVATAR Z NONE edit_avatar_move_forward
EDIT_AVATAR S NONE edit_avatar_move_backward
EDIT_AVATAR E NONE edit_avatar_spin_over
EDIT_AVATAR C NONE edit_avatar_spin_under
EDIT_AVATAR LEFT NONE edit_avatar_spin_cw
EDIT_AVATAR RIGHT NONE edit_avatar_spin_ccw
EDIT_AVATAR UP NONE edit_avatar_move_forward
EDIT_AVATAR DOWN NONE edit_avatar_move_backward
EDIT_AVATAR PGUP NONE edit_avatar_spin_over
EDIT_AVATAR PGDN NONE edit_avatar_spin_under
EDIT_AVATAR ENTER NONE start_chat
EDIT_AVATAR DIVIDE NONE start_gesture
EDIT_AVATAR / NONE start_gesture
EDIT_AVATAR PAD_LEFT NONE edit_avatar_spin_cw
EDIT_AVATAR PAD_RIGHT NONE edit_avatar_spin_ccw
EDIT_AVATAR PAD_UP NONE edit_avatar_move_forward
EDIT_AVATAR PAD_DOWN NONE edit_avatar_move_backward
EDIT_AVATAR PAD_PGUP NONE edit_avatar_spin_over
EDIT_AVATAR PAD_PGDN NONE edit_avatar_spin_under
EDIT_AVATAR PAD_ENTER NONE start_chat
EDIT_AVATAR PAD_DIVIDE NONE start_gesture

View File

@@ -0,0 +1,380 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<keys>
<first_person>
<binding key="Q" mask="NONE" command="slide_left"/>
<binding key="D" mask="NONE" command="slide_right"/>
<binding key="Z" mask="NONE" command="push_forward"/>
<binding key="S" mask="NONE" command="push_backward"/>
<binding key="E" mask="NONE" command="jump"/>
<binding key="C" mask="NONE" command="push_down"/>
<binding key="F" mask="NONE" command="toggle_fly"/>
<binding key="LEFT" mask="NONE" command="slide_left"/>
<binding key="RIGHT" mask="NONE" command="slide_right"/>
<binding key="UP" mask="NONE" command="push_forward"/>
<binding key="DOWN" mask="NONE" command="push_backward"/>
<binding key="PGUP" mask="NONE" command="jump"/>
<binding key="PGDN" mask="NONE" command="push_down"/>
<binding key="HOME" mask="NONE" command="toggle_fly"/>
<binding key="PAD_LEFT" mask="NONE" command="slide_left"/>
<binding key="PAD_RIGHT" mask="NONE" command="slide_right"/>
<binding key="PAD_UP" mask="NONE" command="push_forward"/>
<binding key="PAD_DOWN" mask="NONE" command="push_backward"/>
<binding key="PAD_PGUP" mask="NONE" command="jump"/>
<binding key="PAD_PGDN" mask="NONE" command="push_down"/>
<binding key="PAD_HOME" mask="NONE" command="toggle_fly"/>
<binding key="PAD_CENTER" mask="NONE" command="stop_moving"/>
<binding key="PAD_ENTER" mask="NONE" command="start_chat"/>
<binding key="PAD_DIVIDE" mask="NONE" command="start_gesture"/>
<binding key="Q" mask="SHIFT" command="slide_left"/>
<binding key="D" mask="SHIFT" command="slide_right"/>
<binding key="Z" mask="SHIFT" command="push_forward"/>
<binding key="S" mask="SHIFT" command="push_backward"/>
<binding key="E" mask="SHIFT" command="jump"/>
<binding key="C" mask="SHIFT" command="toggle_down"/>
<binding key="F" mask="SHIFT" command="toggle_fly"/>
<binding key="SPACE" mask="NONE" command="stop_moving"/>
<binding key="ENTER" mask="NONE" command="start_chat"/>
<binding key="DIVIDE" mask="NONE" command="start_gesture"/>
<binding key="/" mask="NONE" command="start_gesture"/>
<binding key="LEFT" mask="SHIFT" command="slide_left"/>
<binding key="RIGHT" mask="SHIFT" command="slide_right"/>
<binding key="UP" mask="SHIFT" command="push_forward"/>
<binding key="DOWN" mask="SHIFT" command="push_backward"/>
<binding key="PGUP" mask="SHIFT" command="jump"/>
<binding key="PGDN" mask="SHIFT" command="toggle_down"/>
<binding key="PAD_LEFT" mask="SHIFT" command="slide_left"/>
<binding key="PAD_RIGHT" mask="SHIFT" command="slide_right"/>
<binding key="PAD_UP" mask="SHIFT" command="push_forward"/>
<binding key="PAD_DOWN" mask="SHIFT" command="push_backward"/>
<binding key="PAD_PGUP" mask="SHIFT" command="jump"/>
<binding key="PAD_PGDN" mask="SHIFT" command="toggle_down"/>
<binding key="PAD_HOME" mask="SHIFT" command="toggle_fly"/>
<binding key="PAD_ENTER" mask="SHIFT" command="start_chat"/>
<binding key="PAD_DIVIDE" mask="SHIFT" command="start_gesture"/>
</first_person>
<third_person>
<binding key="Q" mask="NONE" command="turn_left"/>
<binding key="D" mask="NONE" command="turn_right"/>
<binding key="Q" mask="SHIFT" command="slide_left"/>
<binding key="D" mask="SHIFT" command="slide_right"/>
<binding key="Z" mask="NONE" command="push_forward"/>
<binding key="S" mask="NONE" command="push_backward"/>
<binding key="Z" mask="SHIFT" command="push_forward"/>
<binding key="S" mask="SHIFT" command="push_backward"/>
<binding key="E" mask="NONE" command="jump"/>
<binding key="C" mask="NONE" command="push_down"/>
<binding key="E" mask="SHIFT" command="jump"/>
<binding key="C" mask="SHIFT" command="toggle_down"/>
<binding key="F" mask="NONE" command="toggle_fly"/>
<binding key="F" mask="SHIFT" command="toggle_fly"/>
<binding key="SPACE" mask="NONE" command="stop_moving"/>
<binding key="ENTER" mask="NONE" command="start_chat"/>
<binding key="DIVIDE" mask="NONE" command="start_gesture"/>
<binding key="/" mask="NONE" command="start_gesture"/>
<binding key="LEFT" mask="NONE" command="turn_left"/>
<binding key="LEFT" mask="SHIFT" command="slide_left"/>
<binding key="RIGHT" mask="NONE" command="turn_right"/>
<binding key="RIGHT" mask="SHIFT" command="slide_right"/>
<binding key="UP" mask="NONE" command="push_forward"/>
<binding key="DOWN" mask="NONE" command="push_backward"/>
<binding key="UP" mask="SHIFT" command="push_forward"/>
<binding key="DOWN" mask="SHIFT" command="push_backward"/>
<binding key="PGUP" mask="NONE" command="jump"/>
<binding key="PGDN" mask="NONE" command="push_down"/>
<binding key="PGUP" mask="SHIFT" command="jump"/>
<binding key="PGDN" mask="SHIFT" command="toggle_down"/>
<binding key="HOME" mask="SHIFT" command="toggle_fly"/>
<binding key="HOME" mask="NONE" command="toggle_fly"/>
<binding key="PAD_LEFT" mask="NONE" command="turn_left"/>
<binding key="PAD_LEFT" mask="SHIFT" command="slide_left"/>
<binding key="PAD_RIGHT" mask="NONE" command="turn_right"/>
<binding key="PAD_RIGHT" mask="SHIFT" command="slide_right"/>
<binding key="PAD_UP" mask="NONE" command="push_forward"/>
<binding key="PAD_DOWN" mask="NONE" command="push_backward"/>
<binding key="PAD_UP" mask="SHIFT" command="push_forward"/>
<binding key="PAD_DOWN" mask="SHIFT" command="push_backward"/>
<binding key="PAD_PGUP" mask="NONE" command="jump"/>
<binding key="PAD_PGDN" mask="NONE" command="push_down"/>
<binding key="PAD_PGUP" mask="SHIFT" command="jump"/>
<binding key="PAD_PGDN" mask="SHIFT" command="toggle_down"/>
<binding key="PAD_HOME" mask="NONE" command="toggle_fly"/>
<binding key="PAD_HOME" mask="SHIFT" command="toggle_fly"/>
<binding key="PAD_CENTER" mask="NONE" command="stop_moving"/>
<binding key="PAD_CENTER" mask="SHIFT" command="stop_moving"/>
<binding key="PAD_ENTER" mask="NONE" command="start_chat"/>
<binding key="PAD_ENTER" mask="SHIFT" command="start_chat"/>
<binding key="PAD_DIVIDE" mask="NONE" command="start_gesture"/>
<binding key="PAD_DIVIDE" mask="SHIFT" command="start_gesture"/>
<!--Camera controls in third person on Alt-->
<binding key="LEFT" mask="ALT" command="spin_around_cw"/>
<binding key="RIGHT" mask="ALT" command="spin_around_ccw"/>
<binding key="UP" mask="ALT" command="move_forward"/>
<binding key="DOWN" mask="ALT" command="move_backward"/>
<binding key="PGUP" mask="ALT" command="spin_over"/>
<binding key="PGDN" mask="ALT" command="spin_under"/>
<binding key="Q" mask="ALT" command="spin_around_cw"/>
<binding key="D" mask="ALT" command="spin_around_ccw"/>
<binding key="Z" mask="ALT" command="move_forward"/>
<binding key="S" mask="ALT" command="move_backward"/>
<binding key="E" mask="ALT" command="spin_over"/>
<binding key="C" mask="ALT" command="spin_under"/>
<binding key="PAD_LEFT" mask="ALT" command="spin_around_cw"/>
<binding key="PAD_RIGHT" mask="ALT" command="spin_around_ccw"/>
<binding key="PAD_UP" mask="ALT" command="move_forward"/>
<binding key="PAD_DOWN" mask="ALT" command="move_backward"/>
<binding key="PAD_PGUP" mask="ALT" command="spin_over"/>
<binding key="PAD_PGDN" mask="ALT" command="spin_under"/>
<binding key="PAD_ENTER" mask="ALT" command="start_chat"/>
<binding key="PAD_DIVIDE" mask="ALT" command="start_gesture"/>
<!--mimic alt zoom behavior with keyboard only-->
<binding key="Q" mask="CTL_ALT" command="spin_around_cw"/>
<binding key="D" mask="CTL_ALT" command="spin_around_ccw"/>
<binding key="Z" mask="CTL_ALT" command="spin_over"/>
<binding key="S" mask="CTL_ALT" command="spin_under"/>
<binding key="E" mask="CTL_ALT" command="spin_over"/>
<binding key="C" mask="CTL_ALT" command="spin_under"/>
<binding key="LEFT" mask="CTL_ALT" command="spin_around_cw"/>
<binding key="RIGHT" mask="CTL_ALT" command="spin_around_ccw"/>
<binding key="UP" mask="CTL_ALT" command="spin_over"/>
<binding key="DOWN" mask="CTL_ALT" command="spin_under"/>
<binding key="PGUP" mask="CTL_ALT" command="spin_over"/>
<binding key="PGDN" mask="CTL_ALT" command="spin_under"/>
<binding key="PAD_LEFT" mask="CTL_ALT" command="spin_around_cw"/>
<binding key="PAD_RIGHT" mask="CTL_ALT" command="spin_around_ccw"/>
<binding key="PAD_UP" mask="CTL_ALT" command="spin_over"/>
<binding key="PAD_DOWN" mask="CTL_ALT" command="spin_under"/>
<binding key="PAD_PGUP" mask="CTL_ALT" command="spin_over"/>
<binding key="PAD_PGDN" mask="CTL_ALT" command="spin_under"/>
<binding key="PAD_ENTER" mask="CTL_ALT" command="start_chat"/>
<binding key="PAD_DIVIDE" mask="CTL_ALT" command="start_gesture"/>
<!--Therefore pan on Alt-Shift-->
<binding key="Q" mask="CTL_ALT_SHIFT" command="pan_left"/>
<binding key="D" mask="CTL_ALT_SHIFT" command="pan_right"/>
<binding key="Z" mask="CTL_ALT_SHIFT" command="pan_up"/>
<binding key="S" mask="CTL_ALT_SHIFT" command="pan_down"/>
<binding key="E" mask="CTL_ALT_SHIFT" command="pan_in"/>
<binding key="C" mask="CTL_ALT_SHIFT" command="pan_out"/>
<binding key="LEFT" mask="CTL_ALT_SHIFT" command="pan_left"/>
<binding key="RIGHT" mask="CTL_ALT_SHIFT" command="pan_right"/>
<binding key="UP" mask="CTL_ALT_SHIFT" command="pan_up"/>
<binding key="DOWN" mask="CTL_ALT_SHIFT" command="pan_down"/>
<binding key="PGUP" mask="CTL_ALT_SHIFT" command="pan_in"/>
<binding key="PGDN" mask="CTL_ALT_SHIFT" command="pan_out"/>
<binding key="PAD_LEFT" mask="CTL_ALT_SHIFT" command="pan_left"/>
<binding key="PAD_RIGHT" mask="CTL_ALT_SHIFT" command="pan_right"/>
<binding key="PAD_UP" mask="CTL_ALT_SHIFT" command="pan_up"/>
<binding key="PAD_DOWN" mask="CTL_ALT_SHIFT" command="pan_down"/>
<binding key="PAD_PGUP" mask="CTL_ALT_SHIFT" command="pan_in"/>
<binding key="PAD_PGDN" mask="CTL_ALT_SHIFT" command="pan_out"/>
<binding key="PAD_ENTER" mask="CTL_ALT_SHIFT" command="start_chat"/>
<binding key="PAD_DIVIDE" mask="CTL_ALT_SHIFT" command="start_gesture"/>
</third_person>
<!-- Basic editing camera control -->
<edit>
<binding key="Q" mask="NONE" command="spin_around_cw"/>
<binding key="D" mask="NONE" command="spin_around_ccw"/>
<binding key="Z" mask="NONE" command="move_forward"/>
<binding key="S" mask="NONE" command="move_backward"/>
<binding key="E" mask="NONE" command="spin_over"/>
<binding key="C" mask="NONE" command="spin_under"/>
<binding key="ENTER" mask="NONE" command="start_chat"/>
<binding key="DIVIDE" mask="NONE" command="start_gesture"/>
<binding key="/" mask="NONE" command="start_gesture"/>
<binding key="PAD_ENTER" mask="NONE" command="start_chat"/>
<binding key="PAD_DIVIDE" mask="NONE" command="start_gesture"/>
<binding key="LEFT" mask="NONE" command="spin_around_cw"/>
<binding key="RIGHT" mask="NONE" command="spin_around_ccw"/>
<binding key="UP" mask="NONE" command="move_forward"/>
<binding key="DOWN" mask="NONE" command="move_backward"/>
<binding key="PGUP" mask="NONE" command="spin_over"/>
<binding key="PGDN" mask="NONE" command="spin_under"/>
<binding key="Q" mask="SHIFT" command="pan_left"/>
<binding key="D" mask="SHIFT" command="pan_right"/>
<binding key="Z" mask="SHIFT" command="pan_up"/>
<binding key="S" mask="SHIFT" command="pan_down"/>
<binding key="LEFT" mask="SHIFT" command="pan_left"/>
<binding key="RIGHT" mask="SHIFT" command="pan_right"/>
<binding key="UP" mask="SHIFT" command="pan_up"/>
<binding key="DOWN" mask="SHIFT" command="pan_down"/>
<!--Walking works with ALT held down.-->
<binding key="Q" mask="ALT" command="slide_left"/>
<binding key="D" mask="ALT" command="slide_right"/>
<binding key="Z" mask="ALT" command="push_forward"/>
<binding key="S" mask="ALT" command="push_backward"/>
<binding key="E" mask="ALT" command="jump"/>
<binding key="C" mask="ALT" command="push_down"/>
<binding key="LEFT" mask="ALT" command="slide_left"/>
<binding key="RIGHT" mask="ALT" command="slide_right"/>
<binding key="UP" mask="ALT" command="push_forward"/>
<binding key="DOWN" mask="ALT" command="push_backward"/>
<binding key="PGUP" mask="ALT" command="jump"/>
<binding key="PGDN" mask="ALT" command="push_down"/>
<binding key="HOME" mask="ALT" command="toggle_fly"/>
<binding key="PAD_LEFT" mask="ALT" command="slide_left"/>
<binding key="PAD_RIGHT" mask="ALT" command="slide_right"/>
<binding key="PAD_UP" mask="ALT" command="push_forward"/>
<binding key="PAD_DOWN" mask="ALT" command="push_backward"/>
<binding key="PAD_PGUP" mask="ALT" command="jump"/>
<binding key="PAD_PGDN" mask="ALT" command="push_down"/>
<binding key="PAD_ENTER" mask="ALT" command="start_chat"/>
<binding key="PAD_DIVIDE" mask="ALT" command="start_gesture"/>
</edit>
<sitting>
<binding key="Q" mask="ALT" command="spin_around_cw"/>
<binding key="D" mask="ALT" command="spin_around_ccw"/>
<binding key="Z" mask="ALT" command="move_forward"/>
<binding key="S" mask="ALT" command="move_backward"/>
<binding key="E" mask="ALT" command="spin_over_sitting"/>
<binding key="C" mask="ALT" command="spin_under_sitting"/>
<binding key="LEFT" mask="ALT" command="spin_around_cw"/>
<binding key="RIGHT" mask="ALT" command="spin_around_ccw"/>
<binding key="UP" mask="ALT" command="move_forward"/>
<binding key="DOWN" mask="ALT" command="move_backward"/>
<binding key="PGUP" mask="ALT" command="spin_over"/>
<binding key="PGDN" mask="ALT" command="spin_under"/>
<binding key="Q" mask="CTL_ALT" command="spin_around_cw"/>
<binding key="D" mask="CTL_ALT" command="spin_around_ccw"/>
<binding key="Z" mask="CTL_ALT" command="spin_over"/>
<binding key="S" mask="CTL_ALT" command="spin_under"/>
<binding key="E" mask="CTL_ALT" command="spin_over"/>
<binding key="C" mask="CTL_ALT" command="spin_under"/>
<binding key="LEFT" mask="CTL_ALT" command="spin_around_cw"/>
<binding key="RIGHT" mask="CTL_ALT" command="spin_around_ccw"/>
<binding key="UP" mask="CTL_ALT" command="spin_over"/>
<binding key="DOWN" mask="CTL_ALT" command="spin_under"/>
<binding key="PGUP" mask="CTL_ALT" command="spin_over"/>
<binding key="PGDN" mask="CTL_ALT" command="spin_under"/>
<binding key="Q" mask="NONE" command="spin_around_cw_sitting"/>
<binding key="D" mask="NONE" command="spin_around_ccw_sitting"/>
<binding key="Z" mask="NONE" command="move_forward_sitting"/>
<binding key="S" mask="NONE" command="move_backward_sitting"/>
<binding key="E" mask="NONE" command="spin_over_sitting"/>
<binding key="C" mask="NONE" command="spin_under_sitting"/>
<binding key="LEFT" mask="NONE" command="spin_around_cw_sitting"/>
<binding key="RIGHT" mask="NONE" command="spin_around_ccw_sitting"/>
<binding key="UP" mask="NONE" command="move_forward_sitting"/>
<binding key="DOWN" mask="NONE" command="move_backward_sitting"/>
<binding key="PGUP" mask="NONE" command="spin_over_sitting"/>
<binding key="PGDN" mask="NONE" command="spin_under_sitting"/>
<binding key="PAD_LEFT" mask="NONE" command="spin_around_cw_sitting"/>
<binding key="PAD_RIGHT" mask="NONE" command="spin_around_ccw_sitting"/>
<binding key="PAD_UP" mask="NONE" command="move_forward_sitting"/>
<binding key="PAD_DOWN" mask="NONE" command="move_backward_sitting"/>
<binding key="PAD_PGUP" mask="NONE" command="spin_over_sitting"/>
<binding key="PAD_PGDN" mask="NONE" command="spin_under_sitting"/>
<binding key="PAD_CENTER" mask="NONE" command="stop_moving"/>
<binding key="PAD_ENTER" mask="NONE" command="start_chat"/>
<binding key="PAD_DIVIDE" mask="NONE" command="start_gesture"/>
<!--these are for passing controls when sitting on vehicles-->
<binding key="Q" mask="SHIFT" command="slide_left"/>
<binding key="D" mask="SHIFT" command="slide_right"/>
<binding key="Z" mask="SHIFT" command="move_forward_sitting"/>
<binding key="S" mask="SHIFT" command="move_backward_sitting"/>
<binding key="E" mask="SHIFT" command="spin_over_sitting"/>
<binding key="C" mask="SHIFT" command="spin_under_sitting"/>
<binding key="LEFT" mask="SHIFT" command="slide_left"/>
<binding key="RIGHT" mask="SHIFT" command="slide_right"/>
<binding key="UP" mask="SHIFT" command="move_forward_sitting"/>
<binding key="DOWN" mask="SHIFT" command="move_backward_sitting"/>
<binding key="PGUP" mask="SHIFT" command="spin_over_sitting"/>
<binding key="PGDN" mask="SHIFT" command="spin_under_sitting"/>
<binding key="PAD_LEFT" mask="SHIFT" command="slide_left"/>
<binding key="PAD_RIGHT" mask="SHIFT" command="slide_right"/>
<binding key="PAD_UP" mask="SHIFT" command="move_forward_sitting"/>
<binding key="PAD_DOWN" mask="SHIFT" command="move_backward_sitting"/>
<binding key="PAD_PGUP" mask="SHIFT" command="spin_over_sitting"/>
<binding key="PAD_PGDN" mask="SHIFT" command="spin_under_sitting"/>
<binding key="PAD_ENTER" mask="SHIFT" command="start_chat"/>
<binding key="PAD_DIVIDE" mask="SHIFT" command="start_gesture"/>
<!--pan on Alt-Shift-->
<binding key="Q" mask="CTL_ALT_SHIFT" command="pan_left"/>
<binding key="D" mask="CTL_ALT_SHIFT" command="pan_right"/>
<binding key="Z" mask="CTL_ALT_SHIFT" command="pan_up"/>
<binding key="S" mask="CTL_ALT_SHIFT" command="pan_down"/>
<binding key="E" mask="CTL_ALT_SHIFT" command="pan_in"/>
<binding key="C" mask="CTL_ALT_SHIFT" command="pan_out"/>
<binding key="LEFT" mask="CTL_ALT_SHIFT" command="pan_left"/>
<binding key="RIGHT" mask="CTL_ALT_SHIFT" command="pan_right"/>
<binding key="UP" mask="CTL_ALT_SHIFT" command="pan_up"/>
<binding key="DOWN" mask="CTL_ALT_SHIFT" command="pan_down"/>
<binding key="PGUP" mask="CTL_ALT_SHIFT" command="pan_in"/>
<binding key="PGDN" mask="CTL_ALT_SHIFT" command="pan_out"/>
<binding key="PAD_LEFT" mask="CTL_ALT_SHIFT" command="pan_left"/>
<binding key="PAD_RIGHT" mask="CTL_ALT_SHIFT" command="pan_right"/>
<binding key="PAD_UP" mask="CTL_ALT_SHIFT" command="pan_up"/>
<binding key="PAD_DOWN" mask="CTL_ALT_SHIFT" command="pan_down"/>
<binding key="PAD_PGUP" mask="CTL_ALT_SHIFT" command="pan_in"/>
<binding key="PAD_PGDN" mask="CTL_ALT_SHIFT" command="pan_out"/>
<binding key="PAD_ENTER" mask="CTL_ALT_SHIFT" command="start_chat"/>
<binding key="PAD_DIVIDE" mask="CTL_ALT_SHIFT" command="start_gesture"/>
<binding key="ENTER" mask="NONE" command="start_chat"/>
<binding key="DIVIDE" mask="NONE" command="start_gesture"/>
<binding key="/" mask="NONE" command="start_gesture"/>
</sitting>
<edit_avatar>
<!--Avatar editing camera controls-->
<binding key="Q" mask="NONE" command="edit_avatar_spin_cw"/>
<binding key="D" mask="NONE" command="edit_avatar_spin_ccw"/>
<binding key="Z" mask="NONE" command="edit_avatar_move_forward"/>
<binding key="S" mask="NONE" command="edit_avatar_move_backward"/>
<binding key="E" mask="NONE" command="edit_avatar_spin_over"/>
<binding key="C" mask="NONE" command="edit_avatar_spin_under"/>
<binding key="LEFT" mask="NONE" command="edit_avatar_spin_cw"/>
<binding key="RIGHT" mask="NONE" command="edit_avatar_spin_ccw"/>
<binding key="UP" mask="NONE" command="edit_avatar_move_forward"/>
<binding key="DOWN" mask="NONE" command="edit_avatar_move_backward"/>
<binding key="PGUP" mask="NONE" command="edit_avatar_spin_over"/>
<binding key="PGDN" mask="NONE" command="edit_avatar_spin_under"/>
<binding key="ENTER" mask="NONE" command="start_chat"/>
<binding key="DIVIDE" mask="NONE" command="start_gesture"/>
<binding key="/" mask="NONE" command="start_gesture"/>
<binding key="PAD_LEFT" mask="NONE" command="edit_avatar_spin_cw"/>
<binding key="PAD_RIGHT" mask="NONE" command="edit_avatar_spin_ccw"/>
<binding key="PAD_UP" mask="NONE" command="edit_avatar_move_forward"/>
<binding key="PAD_DOWN" mask="NONE" command="edit_avatar_move_backward"/>
<binding key="PAD_PGUP" mask="NONE" command="edit_avatar_spin_over"/>
<binding key="PAD_PGDN" mask="NONE" command="edit_avatar_spin_under"/>
<binding key="PAD_ENTER" mask="NONE" command="start_chat"/>
<binding key="PAD_DIVIDE" mask="NONE" command="start_gesture"/>
</edit_avatar>
</keys>

View File

@@ -592,13 +592,32 @@ public:
void load_default_bindings(bool zqsd)
{
gViewerKeyboard.unloadBindings();
const std::string keys(zqsd ? "keysZQSD.ini" : "keys.ini");
if (!gViewerKeyboard.loadBindings(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, keys)))
const std::string key_bindings_file(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, zqsd ? "keysZQSD.xml" : "keys.xml"));
if (!gDirUtilp->fileExists(key_bindings_file) || !gViewerKeyboard.loadBindingsXML(key_bindings_file))
{
LL_ERRS("InitInfo") << "Unable to open " << keys << LL_ENDL;
const std::string key_bindings_file(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, zqsd ? "keysZQSD.ini" : "keys.ini"));
if (!gViewerKeyboard.loadBindings(key_bindings_file))
{
LL_ERRS("InitInfo") << "Unable to open " << key_bindings_file << LL_ENDL;
}
}
// Load Custom bindings (override defaults)
gViewerKeyboard.loadBindings(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"custom_keys.ini"));
std::string custom_keys(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "custom_keys.xml"));
if (!gDirUtilp->fileExists(custom_keys) || !gViewerKeyboard.loadBindingsXML(custom_keys))
{
custom_keys = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "custom_keys.ini");
if (gDirUtilp->fileExists(custom_keys))
gViewerKeyboard.loadBindings(custom_keys);
}
}
namespace {
// With Xcode 6, _exit() is too magical to use with boost::bind(), so provide
// this little helper function.
void fast_exit(int rc)
{
_exit(rc);
}
}
bool LLAppViewer::init()
@@ -645,7 +664,6 @@ bool LLAppViewer::init()
//
// OK to write stuff to logs now, we've now crash reported if necessary
//
init_default_trans_args();
if (!initConfiguration())

View File

@@ -88,22 +88,22 @@ namespace
static LLCachedControl<bool> radar_alert_chat_range(gSavedSettings, "RadarAlertChatRange");
static LLCachedControl<bool> radar_alert_age(gSavedSettings, "RadarAlertAge");
LLFloaterAvatarList* self = LLFloaterAvatarList::getInstance();
LLFloaterAvatarList& inst(LLFloaterAvatarList::instance());
LLStringUtil::format_map_t args;
LLChat chat;
switch(type)
{
case STAT_TYPE_SIM: if (radar_alert_sim) args["[RANGE]"] = self->getString("the_sim"); break;
case STAT_TYPE_DRAW: if (radar_alert_draw) args["[RANGE]"] = self->getString("draw_distance"); break;
case STAT_TYPE_SHOUTRANGE: if (radar_alert_shout_range) args["[RANGE]"] = self->getString("shout_range"); break;
case STAT_TYPE_CHATRANGE: if (radar_alert_chat_range) args["[RANGE]"] = self->getString("chat_range"); break;
case STAT_TYPE_AGE: if (radar_alert_age) chat.mText = name + " " + self->getString("has_triggered_your_avatar_age_alert") + "."; break;
case STAT_TYPE_SIM: if (radar_alert_sim) args["[RANGE]"] = inst.getString("the_sim"); break;
case STAT_TYPE_DRAW: if (radar_alert_draw) args["[RANGE]"] = inst.getString("draw_distance"); break;
case STAT_TYPE_SHOUTRANGE: if (radar_alert_shout_range) args["[RANGE]"] = inst.getString("shout_range"); break;
case STAT_TYPE_CHATRANGE: if (radar_alert_chat_range) args["[RANGE]"] = inst.getString("chat_range"); break;
case STAT_TYPE_AGE: if (radar_alert_age) chat.mText = name + " " + inst.getString("has_triggered_your_avatar_age_alert") + "."; break;
default: llassert(type); break;
}
args["[NAME]"] = name;
args["[ACTION]"] = self->getString(entering ? "has_entered" : "has_left");
args["[ACTION]"] = inst.getString(entering ? "has_entered" : "has_left");
if (args.find("[RANGE]") != args.end())
chat.mText = self->getString("template", args);
chat.mText = inst.getString("template", args);
else if (chat.mText.empty()) return;
if (entering) // Note: If we decide to make this for leaving as well, change this check to dist != F32_MIN
{
@@ -138,13 +138,14 @@ LLAvatarListEntry::LLAvatarListEntry(const LLUUID& id, const std::string& name,
mActivityType(ACTIVITY_NEW), mActivityTimer(),
mIsInList(false), mAge(-1), mTime(time(NULL))
{
LLAvatarPropertiesProcessor::getInstance()->addObserver(mID, this);
LLAvatarPropertiesProcessor::getInstance()->sendAvatarPropertiesRequest(mID);
LLAvatarPropertiesProcessor& inst(LLAvatarPropertiesProcessor::instance());
inst.addObserver(mID, this);
inst.sendAvatarPropertiesRequest(mID);
}
LLAvatarListEntry::~LLAvatarListEntry()
{
LLAvatarPropertiesProcessor::getInstance()->removeObserver(mID, this);
LLAvatarPropertiesProcessor::instance().removeObserver(mID, this);
}
// virtual
@@ -152,7 +153,8 @@ void LLAvatarListEntry::processProperties(void* data, EAvatarProcessorType type)
{
if (type == APT_PROPERTIES)
{
LLAvatarPropertiesProcessor::getInstance()->removeObserver(mID, this);
LLAvatarPropertiesProcessor& inst(LLAvatarPropertiesProcessor::instance());
inst.removeObserver(mID, this);
const LLAvatarData* pAvatarData = static_cast<const LLAvatarData*>(data);
if (pAvatarData && (pAvatarData->avatar_id != LLUUID::null))
{
@@ -166,8 +168,8 @@ void LLAvatarListEntry::processProperties(void* data, EAvatarProcessorType type)
catch(const std::exception&)
{
LL_WARNS() << "Failed to extract age from APT_PROPERTIES for " << mID << ", received \"" << pAvatarData->born_on << "\". Requesting properties again." << LL_ENDL;
LLAvatarPropertiesProcessor::getInstance()->addObserver(mID, this);
LLAvatarPropertiesProcessor::getInstance()->sendAvatarPropertiesRequest(mID);
inst.addObserver(mID, this);
inst.sendAvatarPropertiesRequest(mID);
return;
}
if (!mStats[STAT_TYPE_AGE] && mAge >= 0) //Only announce age once per entry.
@@ -210,7 +212,7 @@ void LLAvatarListEntry::resetName(const bool& hide_tags, const bool& anon_names,
const F32 ACTIVITY_TIMEOUT = 1.0f;
void LLAvatarListEntry::setActivity(ACTIVITY_TYPE activity)
{
if ( activity >= mActivityType || mActivityTimer.getElapsedTimeF32() > ACTIVITY_TIMEOUT )
if (activity >= mActivityType || mActivityTimer.getElapsedTimeF32() > ACTIVITY_TIMEOUT)
{
mActivityType = activity;
mActivityTimer.start();
@@ -266,20 +268,15 @@ void LLFloaterAvatarList::draw()
void LLFloaterAvatarList::onOpen()
{
gSavedSettings.setBOOL("ShowRadar", true);
if (mAvatars.size()) refreshAvatarList();
}
void LLFloaterAvatarList::onClose(bool app_quitting)
{
setVisible(false);
if (!app_quitting)
{
gSavedSettings.setBOOL("ShowRadar", false);
}
if (!gSavedSettings.getBOOL("RadarKeepOpen") || app_quitting)
{
if (app_quitting || !gSavedSettings.getBOOL("RadarKeepOpen"))
destroy();
}
else
setVisible(false);
}
BOOL LLFloaterAvatarList::handleRightMouseDown(S32 x, S32 y, MASK mask)
@@ -414,7 +411,10 @@ BOOL LLFloaterAvatarList::postBuild()
mAvatarList->setCommitCallback(boost::bind(&LLFloaterAvatarList::onSelectName,this));
mAvatarList->setDoubleClickCallback(boost::bind(&LLFloaterAvatarList::onClickFocus,this));
mAvatarList->setSortChangedCallback(boost::bind(&LLFloaterAvatarList::onAvatarSortingChanged,this));
refreshAvatarList();
BOOST_FOREACH(LLViewerRegion* region, LLWorld::instance().getRegionList())
{
updateAvatarList(region);
}
assessColumns();
@@ -906,8 +906,8 @@ void LLFloaterAvatarList::refreshAvatarList()
agep.column = "age";
agep.type = "text";
color = sDefaultListText;
std::string age = boost::lexical_cast<std::string>(entry->mAge);
if (entry->mAge > -1)
bool age_set(entry->mAge > -1);
if (age_set)
{
static const LLCachedControl<U32> sAvatarAgeAlertDays(gSavedSettings, "AvatarAgeAlertDays");
if ((U32)entry->mAge < sAvatarAgeAlertDays)
@@ -916,11 +916,7 @@ void LLFloaterAvatarList::refreshAvatarList()
color = sRadarTextYoung;
}
}
else
{
age = "?";
}
agep.value = age;
agep.value = age_set ? boost::lexical_cast<std::string>(entry->mAge) : "?";
agep.color = color;
element.columns.add(agep);
}
@@ -981,7 +977,6 @@ void LLFloaterAvatarList::refreshAvatarList()
mDirtyAvatarSorting = true;
// LL_INFOS() << "radar refresh: done" << LL_ENDL;
}
void LLFloaterAvatarList::resetAvatarNames()
@@ -1042,7 +1037,7 @@ void LLFloaterAvatarList::onClickTrack()
mTracking = true;
mTrackedAvatar = agent_id;
// trackAvatar only works for friends allowing you to see them on map...
// LLTracker::trackAvatar(agent_id, self->mAvatars[agent_id].getName());
// LLTracker::trackAvatar(agent_id, mAvatars[agent_id].getName());
trackAvatar(getAvatarEntry(mTrackedAvatar));
}
}

View File

@@ -112,7 +112,6 @@ const std::string PANEL_NAMES[LLFloaterTools::PANEL_COUNT] =
// Local prototypes
void commit_grid_mode(LLUICtrl *ctrl);
void commit_select_component(void *data);
void click_show_more(void*);
void click_popup_info(void*);
void click_popup_done(void*);
@@ -444,7 +443,7 @@ LLFloaterTools::LLFloaterTools()
mCommitCallbackRegistrar.add("BuildTool.commitRadioEdit", boost::bind(&commit_radio_group_edit,_1));
mCommitCallbackRegistrar.add("BuildTool.gridMode", boost::bind(&commit_grid_mode,_1));
mCommitCallbackRegistrar.add("BuildTool.selectComponent", boost::bind(&commit_select_component, this));
mCommitCallbackRegistrar.add("BuildTool.selectComponent", boost::bind(&LLFloaterTools::commitSelectComponent, this, _2));
mCommitCallbackRegistrar.add("BuildTool.gridOptions", boost::bind(&LLFloaterTools::onClickGridOptions,this));
mCommitCallbackRegistrar.add("BuildTool.applyToSelection", boost::bind(&click_apply_to_selection, this));
mCommitCallbackRegistrar.add("BuildTool.commitRadioLand", boost::bind(&commit_radio_group_land,_1));
@@ -1155,19 +1154,14 @@ void commit_radio_group_land(LLUICtrl* ctrl)
}
}
void commit_select_component(void *data)
void LLFloaterTools::commitSelectComponent(bool select_individuals)
{
LLFloaterTools* floaterp = (LLFloaterTools*)data;
//forfeit focus
if (gFocusMgr.childHasKeyboardFocus(floaterp))
if (gFocusMgr.childHasKeyboardFocus(this))
{
gFocusMgr.setKeyboardFocus(NULL);
}
BOOL select_individuals = floaterp->mCheckSelectIndividual->get();
gSavedSettings.setBOOL("EditLinkedParts", select_individuals);
floaterp->dirty();
dirty();
if (select_individuals)
{

View File

@@ -122,6 +122,7 @@ private:
void updateMediaSettings();
static bool deleteMediaConfirm(const LLSD& notification, const LLSD& response);
static bool multipleFacesSelectedConfirm(const LLSD& notification, const LLSD& response);
void commitSelectComponent(bool select_individuals);
static void setObjectType( LLPCode pcode );
void onClickGridOptions();

View File

@@ -952,6 +952,8 @@ static void formatDateString(std::string &date_string)
using namespace boost;
cmatch result;
const regex expression("([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})");
try
{
if (regex_match(date_string.c_str(), result, expression))
{
// convert matches to integers so that we can pad them with zeroes on Linux
@@ -962,6 +964,11 @@ static void formatDateString(std::string &date_string)
// ISO 8601 date format
date_string = llformat("%04d-%02d-%02dT00:00:00Z", year, month, day);
}
}
catch(...)
{
LL_ERRS() << "Decode of non-compliant DateTime format from [GroupMembersReply.GroupData.MemberData.OnlineStatus]. Please notify grid operators of this defect." << LL_ENDL;
}
}
const std::string& localized_online()

View File

@@ -2257,47 +2257,6 @@ void LLPanelObject::draw()
LLPanel::draw();
}
// virtual
void LLPanelObject::clearCtrls()
{
LLPanel::clearCtrls();
mCheckLock ->set(FALSE);
mCheckLock ->setEnabled( FALSE );
mCheckPhysics ->set(FALSE);
mCheckPhysics ->setEnabled( FALSE );
mCheckTemporary ->set(FALSE);
mCheckTemporary ->setEnabled( FALSE );
mCheckPhantom ->set(FALSE);
mCheckPhantom ->setEnabled( FALSE );
mComboMaterial ->setEnabled( FALSE );
mLabelMaterial ->setEnabled( FALSE );
// Disable text labels
mLabelPosition ->setEnabled( FALSE );
mLabelSize ->setEnabled( FALSE );
mLabelRotation ->setEnabled( FALSE );
mLabelBaseType ->setEnabled( FALSE );
mLabelCut ->setEnabled( FALSE );
mLabelHollow ->setEnabled( FALSE );
mLabelHoleType ->setEnabled( FALSE );
mLabelTwist ->setEnabled( FALSE );
mLabelSkew ->setEnabled( FALSE );
mLabelShear ->setEnabled( FALSE );
mLabelTaper ->setEnabled( FALSE );
mLabelRadiusOffset->setEnabled( FALSE );
mLabelRevolutions->setEnabled( FALSE );
childSetVisible("select_single", FALSE);
childSetVisible("edit_object", TRUE);
childSetEnabled("edit_object", FALSE);
childSetEnabled("scale_hole", FALSE);
childSetEnabled("scale_taper", FALSE);
childSetEnabled("advanced_cut", FALSE);
childSetEnabled("advanced_dimple", FALSE);
childSetVisible("advanced_slice", FALSE);
}
//
// Static functions
//

View File

@@ -63,7 +63,6 @@ public:
virtual BOOL postBuild();
virtual void draw();
virtual void clearCtrls();
void refresh();

View File

@@ -512,51 +512,6 @@ void LLPanelVolume::draw()
LLPanel::draw();
}
// virtual
void LLPanelVolume::clearCtrls()
{
LLPanel::clearCtrls();
getChildView("select_single")->setEnabled(false);
getChildView("select_single")->setVisible(true);
getChildView("edit_object")->setEnabled(false);
getChildView("edit_object")->setVisible(false);
getChildView("Light Checkbox Ctrl")->setEnabled(false);
getChildView("label color")->setEnabled(false);
LLColorSwatchCtrl* LightColorSwatch = getChild<LLColorSwatchCtrl>("colorswatch");
if(LightColorSwatch)
{
LightColorSwatch->setEnabled( FALSE );
LightColorSwatch->setValid( FALSE );
}
childSetEnabled("label texture",false);
LLTextureCtrl* LightTextureCtrl = getChild<LLTextureCtrl>("light texture control");
if(LightTextureCtrl)
{
LightTextureCtrl->setEnabled( FALSE );
LightTextureCtrl->setValid( FALSE );
}
getChildView("Light Intensity")->setEnabled(false);
getChildView("Light Radius")->setEnabled(false);
getChildView("Light Falloff")->setEnabled(false);
getChildView("Flexible1D Checkbox Ctrl")->setEnabled(false);
getChildView("FlexNumSections")->setEnabled(false);
getChildView("FlexGravity")->setEnabled(false);
getChildView("FlexTension")->setEnabled(false);
getChildView("FlexFriction")->setEnabled(false);
getChildView("FlexWind")->setEnabled(false);
getChildView("FlexForceX")->setEnabled(false);
getChildView("FlexForceY")->setEnabled(false);
getChildView("FlexForceZ")->setEnabled(false);
mSpinPhysicsGravity->setEnabled(FALSE);
mSpinPhysicsFriction->setEnabled(FALSE);
mSpinPhysicsDensity->setEnabled(FALSE);
mSpinPhysicsRestitution->setEnabled(FALSE);
}
//
// Static functions
//

View File

@@ -53,7 +53,6 @@ public:
virtual ~LLPanelVolume();
virtual void draw();
virtual void clearCtrls();
virtual BOOL postBuild();

View File

@@ -45,6 +45,7 @@
#include "lltoolfocus.h"
#include "llviewerwindow.h"
#include "llvoavatarself.h"
#include "llxuiparser.h"
void handle_reset_view();
@@ -58,7 +59,6 @@ const F32 FLY_FRAMES = 4;
const F32 NUDGE_TIME = 0.25f; // in seconds
const S32 NUDGE_FRAMES = 2;
const F32 ORBIT_NUDGE_RATE = 0.05f; // fraction of normal speed
const F32 YAW_NUDGE_RATE = 0.05f; // fraction of normal speed
struct LLKeyboardActionRegistry
: public LLRegistrySingleton<std::string, boost::function<void (EKeystate keystate)>, LLKeyboardActionRegistry>
@@ -86,6 +86,7 @@ void agent_jump( EKeystate s )
gAgent.moveUp(1);
}
}
// <singu>
void agent_toggle_down( EKeystate s )
{
if (KEYSTATE_UP == s) return;
@@ -96,6 +97,7 @@ void agent_toggle_down( EKeystate s )
}
gAgent.moveUp(-1);
}
// </singu>
void agent_push_down( EKeystate s )
{
@@ -103,22 +105,29 @@ void agent_push_down( EKeystate s )
gAgent.moveUp(-1);
}
static void agent_check_temporary_run(LLAgent::EDoubleTapRunMode mode)
{
// if (gAgent.mDoubleTapRunMode == mode &&
// gAgent.getRunning() &&
// !gAgent.getAlwaysRun())
// {
// // Turn off temporary running.
// gAgent.clearRunning();
// gAgent.sendWalkRun(gAgent.getRunning());
// }
// [RLVa:KB] - Checked: 2011-05-11 (RLVa-1.3.0i) | Added: RLVa-1.3.0i
if ( (gAgent.mDoubleTapRunMode == mode) && (gAgent.getTempRun()) )
gAgent.clearTempRun();
// [/RLVa:KB]
}
static void agent_handle_doubletap_run(EKeystate s, LLAgent::EDoubleTapRunMode mode)
{
if (KEYSTATE_UP == s)
{
// if (gAgent.mDoubleTapRunMode == mode &&
// gAgent.getRunning() &&
// !gAgent.getAlwaysRun())
// {
// // Turn off temporary running.
// gAgent.clearRunning();
// gAgent.sendWalkRun(gAgent.getRunning());
// }
// [RLVa:KB] - Checked: 2011-05-11 (RLVa-1.3.0i) | Added: RLVa-1.3.0i
if ( (gAgent.mDoubleTapRunMode == mode) && (gAgent.getTempRun()) )
gAgent.clearTempRun();
// [/RLVa:KB]
// Note: in case shift is already released, slide left/right run
// will be released in agent_turn_left()/agent_turn_right()
agent_check_temporary_run(mode);
}
else if (gSavedSettings.getBOOL("AllowTapTapHoldRun") &&
KEYSTATE_DOWN == s &&
@@ -208,7 +217,10 @@ void agent_turn_left( EKeystate s )
}
else
{
if (KEYSTATE_UP == s) return;
if (KEYSTATE_UP == s)
{
return;
}
F32 time = gKeyboard->getCurKeyElapsedTime();
gAgent.moveYaw( LLFloaterMove::getYawRate( time ) );
}
@@ -223,7 +235,10 @@ void agent_turn_right( EKeystate s )
}
else
{
if (KEYSTATE_UP == s) return;
if (KEYSTATE_UP == s)
{
return;
}
F32 time = gKeyboard->getCurKeyElapsedTime();
gAgent.moveYaw( -LLFloaterMove::getYawRate( time ) );
}
@@ -758,6 +773,61 @@ BOOL LLViewerKeyboard::bindKey(const S32 mode, const KEY key, const MASK mask, c
return TRUE;
}
LLViewerKeyboard::KeyBinding::KeyBinding()
: key("key"),
mask("mask"),
command("command")
{}
LLViewerKeyboard::KeyMode::KeyMode(EKeyboardMode _mode)
: bindings("binding"),
mode(_mode)
{}
LLViewerKeyboard::Keys::Keys()
: first_person("first_person", KeyMode(MODE_FIRST_PERSON)),
third_person("third_person", KeyMode(MODE_THIRD_PERSON)),
edit("edit", KeyMode(MODE_EDIT)),
sitting("sitting", KeyMode(MODE_SITTING)),
edit_avatar("edit_avatar", KeyMode(MODE_EDIT_AVATAR))
{}
S32 LLViewerKeyboard::loadBindingsXML(const std::string& filename)
{
S32 binding_count = 0;
Keys keys;
LLSimpleXUIParser parser;
if (parser.readXUI(filename, keys)
&& keys.validateBlock())
{
binding_count += loadBindingMode(keys.first_person);
binding_count += loadBindingMode(keys.third_person);
binding_count += loadBindingMode(keys.edit);
binding_count += loadBindingMode(keys.sitting);
binding_count += loadBindingMode(keys.edit_avatar);
}
return binding_count;
}
S32 LLViewerKeyboard::loadBindingMode(const LLViewerKeyboard::KeyMode& keymode)
{
S32 binding_count = 0;
for (LLInitParam::ParamIterator<KeyBinding>::const_iterator it = keymode.bindings.begin(),
end_it = keymode.bindings.end();
it != end_it;
++it)
{
KEY key;
MASK mask;
LLKeyboard::keyFromString(it->key, &key);
LLKeyboard::maskFromString(it->mask, &mask);
bindKey(keymode.mode, key, mask, it->command);
binding_count++;
}
return binding_count;
}
S32 LLViewerKeyboard::loadBindings(const std::string& filename)
{

View File

@@ -2,31 +2,25 @@
* @file llviewerkeyboard.h
* @brief LLViewerKeyboard class header file
*
* $LicenseInfo:firstyear=2005&license=viewergpl$
*
* Copyright (c) 2005-2009, Linden Research, Inc.
*
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
* ("Other License"), formally executed by you and Linden Lab. Terms of
* the GPL can be found in doc/GPL-license.txt in this distribution, or
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
* Copyright (C) 2010, Linden Research, Inc.
*
* There are special exceptions to the terms and conditions of the GPL as
* it is applied to this Source Code. View the full text of the exception
* in the file doc/FLOSS-exception.txt in this software distribution, or
* online at
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* By copying, modifying or distributing this software, you acknowledge
* that you have read and understood your obligations described above,
* and agree to abide by those obligations.
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
* COMPLETENESS OR PERFORMANCE.
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -34,6 +28,7 @@
#define LL_LLVIEWERKEYBOARD_H
#include "llkeyboard.h" // For EKeystate
#include "llinitparam.h"
const S32 MAX_NAMED_FUNCTIONS = 100;
const S32 MAX_KEY_BINDINGS = 128; // was 60
@@ -64,18 +59,48 @@ void bind_keyboard_functions();
class LLViewerKeyboard
{
public:
struct KeyBinding : public LLInitParam::Block<KeyBinding>
{
Mandatory<std::string> key,
mask,
command;
KeyBinding();
};
struct KeyMode : public LLInitParam::Block<KeyMode>
{
Multiple<KeyBinding> bindings;
EKeyboardMode mode;
KeyMode(EKeyboardMode mode);
};
struct Keys : public LLInitParam::Block<Keys>
{
Optional<KeyMode> first_person,
third_person,
edit,
sitting,
edit_avatar;
Keys();
};
LLViewerKeyboard();
BOOL handleKey(KEY key, MASK mask, BOOL repeated);
S32 loadBindings(const std::string& filename); // returns number bound, 0 on error
S32 loadBindingsXML(const std::string& filename); // returns number bound, 0 on error
void unloadBindings();
EKeyboardMode getMode();
BOOL modeFromString(const std::string& string, S32 *mode); // False on failure
void scanKey(KEY key, BOOL key_down, BOOL key_up, BOOL key_level);
protected:
private:
S32 loadBindingMode(const LLViewerKeyboard::KeyMode& keymode);
BOOL bindKey(const S32 mode, const KEY key, const MASK mask, const std::string& function_name);
// Hold all the ugly stuff torn out to make LLKeyboard non-viewer-specific here

View File

@@ -5082,14 +5082,14 @@ void LLViewerWindow::drawMouselookInstructions()
LLFontGL::HCENTER, LLFontGL::TOP,
LLFontGL::BOLD, LLFontGL::DROP_SHADOW_SOFT);
font->renderUTF8(
llformat("Y: %.2f", vec.mV[VX]), 0,
llformat("Y: %.2f", vec.mV[VY]), 0,
text_pos_start + 100,
INSTRUCTIONS_PAD,
LLColor4(0.5f, 1.0f, 0.5f, 0.5),
LLFontGL::HCENTER, LLFontGL::TOP,
LLFontGL::BOLD, LLFontGL::DROP_SHADOW_SOFT);
font->renderUTF8(
llformat("Z: %.2f", vec.mV[VX]), 0,
llformat("Z: %.2f", vec.mV[VZ]), 0,
text_pos_start + 200,
INSTRUCTIONS_PAD,
LLColor4(0.5f, 0.5f, 1.0f, 0.5),

View File

@@ -26,7 +26,6 @@
#include "llviewerparcelmgr.h"
#include "llviewermenu.h"
#include "llviewerregion.h"
#include "llviewerstats.h"
#include "llworld.h"
#include "rlvactions.h"

View File

@@ -18,7 +18,6 @@
#include "llagent.h"
#include "llagentcamera.h"
#include "lldaycyclemanager.h"
#include "llviewercontrol.h"
#include "llvoavatarself.h"
#include "llwlparammanager.h"

View File

@@ -28,6 +28,7 @@
#include "llviewerregion.h"
#include "rlvhandler.h"
#include "rlvhelper.h"
#include "rlvinventory.h"
#include "rlvlocks.h"
#include "rlvui.h"

View File

@@ -15,15 +15,11 @@
*/
#include "llviewerprecompiledheaders.h"
#include "llagent.h"
#include "llagentwearables.h"
#include "llappearancemgr.h"
#include "llattachmentsmgr.h"
#include "llgesturemgr.h"
#include "llnotificationsutil.h"
#include "llviewerobject.h"
#include "llviewerobjectlist.h"
#include "llwlparammanager.h"
#include "rlvhelper.h"
#include "rlvhandler.h"

View File

@@ -21,7 +21,6 @@
#include "llinventorymodel.h"
#include "llviewerinventory.h"
#include "llwearabletype.h"
#include "llwlparamset.h"
#include "rlvdefines.h"
#include "rlvcommon.h"

View File

@@ -17,17 +17,10 @@
#include "llviewerprecompiledheaders.h"
#include "llagent.h"
#include "llappearancemgr.h"
#include "llinventoryobserver.h"
#include "llstartup.h"
#include "llviewerfoldertype.h"
#include "llviewerobject.h"
#include "llvoavatarself.h"
#include "rlvdefines.h"
#include "rlvcommon.h"
#include "rlvlocks.h"
#include "rlvinventory.h"
#include "rlvhandler.h"
#include "boost/algorithm/string.hpp"

View File

@@ -18,10 +18,8 @@
#define RLV_INVENTORY_H
#include "llinventoryfunctions.h"
#include "llinventorymodel.h"
#include "llinventoryobserver.h"
#include "llsingleton.h"
#include "llviewerinventory.h"
#include "rlvhelper.h"
#include "rlvlocks.h"

View File

@@ -18,7 +18,6 @@
#include "llagent.h"
#include "llappearancemgr.h"
#include "llattachmentsmgr.h"
#include "llinventoryobserver.h"
#include "lloutfitobserver.h"
#include "llviewerobjectlist.h"
#include "pipeline.h"

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="radar" title="Radar"
<floater name="radar" title="Radar" control_name="ShowRadar"
can_resize="true" can_minimize="true" can_close="true" can_drag_on_left="false"
rect_control="FloaterRadarRect" min_width="300" min_height="300">
<string name="Title">Radar</string>

View File

@@ -12,7 +12,7 @@
<button.commit_callback function="Wlf.ChangeCameraPreset" parameter="2"/>
</button>
<slider bottom_delta="-20" left="5" control_name="RenderFarClip" decimal_digits="0" height="20" increment="8" label="Draw Dist.:" can_edit_text="true" label_width="60" max_val="1024" min_val="24" val_width="36" name="DrawDistance" width="190" tool_tip="Change your Draw Distance"/>
<slider bottom_delta="-20" control_name="AvatarHoverOffsetZ" height="20" increment=".001" label="Hover Ht.:" can_edit_text="true" label_width="60" max_val="5" min_val="-5" val_width="36" name="HoverHeightSlider" width="189"/>
<slider bottom_delta="-20" height="20" increment=".001" label="Hover Ht.:" can_edit_text="true" label_width="60" max_val="5" min_val="-5" val_width="36" name="HoverHeightSlider" width="189"/>
<slider bottom_delta="-20" control_name="RenderMaxPartCount" decimal_digits="0" height="20" increment="256" label="Particles:" can_edit_text="true" label_width="60" max_val="8192" min_val="0" val_width="36" name="MaxParticleCount" width="190" tool_tip="Amount of particles to render"/>
<slider bottom_delta="-20" control_name="RenderAvatarMaxVisible" decimal_digits="0" height="20" increment="1" label="Max Avs:" can_edit_text="true" label_width="60" max_val="50" min_val="1" val_width="36" name="RenderAvatarMaxVisible" width="190" tool_tip="How many avatars to fully render on screen. Lowering this greatly improves FPS in crowded situations. Requires Avatar Impostors to be on. [Default 35]"/>
<slider bottom_delta="-20" control_name="RenderVolumeLODFactor" height="20" increment="0.125" label="Obj. Detail:" can_edit_text="true" label_width="60" max_val="4" min_val="0.5" name="Object Detail" val_width="36" width="190" tool_tip="Controls level of detail of primitives (multiplier for current screen area when calculated level of detail[0.5 to 2.0 is stable])"/>

View File

@@ -222,6 +222,10 @@ BOOL wlfPanel_AdvSettings::postBuild()
// Set up based on initial region.
onRegionChanged();
}
else
{
mHoverHeight = NULL;
}
return TRUE;
}
@@ -513,7 +517,7 @@ void wlfPanel_AdvSettings::updateEditHoverEnabled()
{
const LLViewerRegion* region = gAgent.getRegion();
bool enabled = region && region->avatarHoverHeightEnabled();
mHoverHeight->setEnabled(enabled);
if (mHoverHeight) mHoverHeight->setEnabled(enabled);
if (enabled)
{
syncFromPreferenceSetting(mHoverHeight);