Initial pass to rework and cleanup the main UI interface

Implements interface buttons that react to input type and visually display keybinds
Updates the T3D icon and splash screen
This commit is contained in:
Areloch 2020-05-20 17:19:52 -05:00
parent 157b114ec7
commit bc27125e90
188 changed files with 2553 additions and 758 deletions

View file

@ -25,6 +25,9 @@
#include "console/consoleTypes.h"
#include "console/engineAPI.h"
#include "gfx/gfxDrawUtil.h"
#include "gui/containers/guiScrollCtrl.h"
#include "sim\actionMap.h"
#include "core\strings\stringUnit.h"
//-----------------------------------------------------------------------------
// GuiGameListMenuCtrl
@ -33,7 +36,8 @@
GuiGameListMenuCtrl::GuiGameListMenuCtrl()
: mSelected(NO_ROW),
mDebugRender(false),
mHighlighted(NO_ROW)
mHighlighted(NO_ROW),
mCallbackOnInputs(false)
{
VECTOR_SET_ASSOCIATION(mRows);
@ -93,7 +97,7 @@ void GuiGameListMenuCtrl::onRender(Point2I offset, const RectI &updateRect)
U32 buttonTextureIndex;
S32 iconIndex = (*row)->mIconIndex;
bool useHighlightIcon = (*row)->mUseHighlightIcon;
if (! (*row)->mEnabled)
if (!(*row)->mEnabled)
{
buttonTextureIndex = Profile::TEX_DISABLED;
fontColor = profile->mFontColorNA;
@ -127,7 +131,7 @@ void GuiGameListMenuCtrl::onRender(Point2I offset, const RectI &updateRect)
drawUtil->drawBitmapStretchSR(profile->mTextureObject, RectI(currentOffset, rowExtent), profile->getBitmapArrayRect(buttonTextureIndex));
// render the row icon if it has one
if ((iconIndex != NO_ICON) && profileHasIcons && (! profile->getBitmapArrayRect((U32)iconIndex).extent.isZero()))
if ((iconIndex != NO_ICON) && profileHasIcons && (!profile->getBitmapArrayRect((U32)iconIndex).extent.isZero()))
{
iconIndex += Profile::TEX_FIRST_ICON;
drawUtil->clearBitmapModulation();
@ -137,6 +141,11 @@ void GuiGameListMenuCtrl::onRender(Point2I offset, const RectI &updateRect)
// render the row text
drawUtil->setBitmapModulation(fontColor);
renderJustifiedText(currentOffset + textOffset, textExtent, (*row)->mLabel);
if ((*row)->mMode == Row::Mode::OptionList)
{
onRenderOptionList((*row), currentOffset);
}
}
if (mDebugRender)
@ -147,6 +156,92 @@ void GuiGameListMenuCtrl::onRender(Point2I offset, const RectI &updateRect)
renderChildControls(offset, updateRect);
}
void GuiGameListMenuCtrl::onRenderOptionList(Row* row, Point2I currentOffset)
{
GuiGameListMenuProfile* profile = (GuiGameListMenuProfile*)mProfile;
F32 xScale = (float)getWidth() / profile->getRowWidth();
S32 rowHeight = profile->getRowHeight();
bool profileHasArrows = profile->hasArrows();
Point2I arrowExtent;
S32 arrowOffsetY(0);
if (profileHasArrows)
{
arrowExtent = profile->getArrowExtent();
// icon is centered vertically
arrowOffsetY = (rowHeight - arrowExtent.y) >> 1;
}
GFXDrawUtil* drawer = GFX->getDrawUtil();
Point2I arrowOffset;
S32 columnSplit = profile->mColumnSplit * xScale;
S32 iconIndex;
bool hasOptions = (row->mOptions.size() > 0) && row->mSelectedOption > -1;
if (hasOptions)
{
bool isRowSelected = (getSelected() != NO_ROW) && (row == mRows[getSelected()]);
bool isRowHighlighted = (getHighlighted() != NO_ROW) ? ((row == mRows[getHighlighted()]) && (row->mEnabled)) : false;
if (profileHasArrows)
{
// render the left arrow
bool arrowOnL = (isRowSelected || isRowHighlighted) && (row->mWrapOptions || (row->mSelectedOption > 0));
iconIndex = (arrowOnL) ? Profile::TEX_L_ARROW_ON : Profile::TEX_L_ARROW_OFF;
arrowOffset.x = currentOffset.x + columnSplit;
arrowOffset.y = currentOffset.y + arrowOffsetY;
drawer->clearBitmapModulation();
drawer->drawBitmapStretchSR(profile->mTextureObject, RectI(arrowOffset, arrowExtent), profile->getBitmapArrayRect((U32)iconIndex));
// render the right arrow
bool arrowOnR = (isRowSelected || isRowHighlighted) && (row->mWrapOptions || (row->mSelectedOption < row->mOptions.size() - 1));
iconIndex = (arrowOnR) ? Profile::TEX_R_ARROW_ON : Profile::TEX_R_ARROW_OFF;
arrowOffset.x = currentOffset.x + (profile->mHitAreaLowerRight.x - profile->mRightPad) * xScale - arrowExtent.x;
arrowOffset.y = currentOffset.y + arrowOffsetY;
drawer->clearBitmapModulation();
drawer->drawBitmapStretchSR(profile->mTextureObject, RectI(arrowOffset, arrowExtent), profile->getBitmapArrayRect((U32)iconIndex));
}
// get the appropriate font color
ColorI fontColor;
if (!row->mEnabled)
{
fontColor = profile->mFontColorNA;
}
else if (isRowSelected)
{
fontColor = profile->mFontColorSEL;
}
else if (isRowHighlighted)
{
fontColor = profile->mFontColorHL;
}
else
{
fontColor = profile->mFontColor;
}
// calculate text to be at the center between the arrows
GFont* font = profile->mFont;
StringTableEntry text = row->mOptions[row->mSelectedOption];
S32 textWidth = font->getStrWidth(text);
S32 columnWidth = profile->mHitAreaLowerRight.x * xScale - profile->mRightPad - columnSplit;
S32 columnCenter = columnSplit + (columnWidth >> 1);
S32 textStartX = columnCenter - (textWidth >> 1);
Point2I textOffset(textStartX, 0);
// render the option text itself
Point2I textExtent(columnWidth, rowHeight);
drawer->setBitmapModulation(fontColor);
renderJustifiedText(currentOffset + textOffset, textExtent, text);
}
}
void GuiGameListMenuCtrl::onDebugRender(Point2I offset)
{
GuiGameListMenuProfile * profile = (GuiGameListMenuProfile *) mProfile;
@ -197,13 +292,13 @@ void GuiGameListMenuCtrl::onDebugRender(Point2I offset)
}
}
void GuiGameListMenuCtrl::addRow(const char* label, const char* callback, S32 icon, S32 yPad, bool useHighlightIcon, bool enabled)
void GuiGameListMenuCtrl::addRow(const char* label, const char* callback, S32 icon, S32 yPad, bool useHighlightIcon, bool enabled, S32 mode)
{
Row * row = new Row();
addRow(row, label, callback, icon, yPad, useHighlightIcon, enabled);
addRow(row, label, callback, icon, yPad, useHighlightIcon, enabled, mode);
}
void GuiGameListMenuCtrl::addRow(Row * row, const char* label, const char* callback, S32 icon, S32 yPad, bool useHighlightIcon, bool enabled)
void GuiGameListMenuCtrl::addRow(Row * row, const char* label, const char* callback, S32 icon, S32 yPad, bool useHighlightIcon, bool enabled, S32 mode)
{
row->mLabel = StringTable->insert(label, true);
row->mScriptCallback = (dStrlen(callback) > 0) ? StringTable->insert(callback, true) : NULL;
@ -211,6 +306,7 @@ void GuiGameListMenuCtrl::addRow(Row * row, const char* label, const char* callb
row->mHeightPad = yPad;
row->mUseHighlightIcon = useHighlightIcon;
row->mEnabled = enabled;
row->mMode = (Row::Mode)mode;
mRows.push_back(row);
@ -222,6 +318,24 @@ void GuiGameListMenuCtrl::addRow(Row * row, const char* label, const char* callb
}
}
void GuiGameListMenuCtrl::addRow(const char* label, const char* optionsList, bool wrapOptions, const char* callback, S32 icon, S32 yPad, bool enabled)
{
static StringTableEntry DELIM = StringTable->insert("\t", true);
Row* row = new Row();
Vector<StringTableEntry> options(__FILE__, __LINE__);
S32 count = StringUnit::getUnitCount(optionsList, DELIM);
for (S32 i = 0; i < count; ++i)
{
const char* option = StringUnit::getUnit(optionsList, i, DELIM);
options.push_back(StringTable->insert(option, true));
}
row->mOptions = options;
bool hasOptions = row->mOptions.size() > 0;
row->mSelectedOption = (hasOptions) ? 0 : NO_OPTION;
row->mWrapOptions = wrapOptions;
addRow(row, label, callback, icon, yPad, true, (hasOptions) ? enabled : false, Row::Mode::OptionList);
}
Point2I GuiGameListMenuCtrl::getMinExtent() const
{
Point2I parentMin = Parent::getMinExtent();
@ -280,12 +394,12 @@ bool GuiGameListMenuCtrl::onWake()
if( !hasValidProfile() )
return false;
if( mRows.empty() )
/*if( mRows.empty() )
{
Con::errorf( "GuiGameListMenuCtrl: %s can't be woken up without any rows. Please use \"addRow\" to add at least one row to the control before pushing it to the canvas.",
getName() );
return false;
}
}*/
enforceConstraints();
@ -349,7 +463,15 @@ void GuiGameListMenuCtrl::onMouseUp(const GuiEvent &event)
S32 hitRow = getRow(event.mousePoint);
if ((hitRow != NO_ROW) && isRowEnabled(hitRow) && (hitRow == getSelected()))
{
activateRow();
if (mRows[hitRow]->mMode == Row::Mode::Default)
{
activateRow();
}
else if (mRows[hitRow]->mMode == Row::Mode::OptionList)
{
S32 xPos = globalToLocalCoord(event.mousePoint).x;
clickOption((Row*)mRows[getSelected()], xPos);
}
}
}
@ -425,6 +547,13 @@ void GuiGameListMenuCtrl::setSelected(S32 index)
}
mSelected = mClamp(index, 0, mRows.size() - 1);
//If we're childed to a scroll container, make sure us changing rows has our new position visible
GuiScrollCtrl* scroll = dynamic_cast<GuiScrollCtrl*>(getParent());
if (scroll)
{
scroll->scrollRectVisible(getRowBounds(mSelected));
}
}
bool GuiGameListMenuCtrl::isRowEnabled(S32 index) const
@ -470,6 +599,63 @@ void GuiGameListMenuCtrl::selectFirstEnabledRow()
}
}
bool GuiGameListMenuCtrl::onInputEvent(const InputEventInfo& event)
{
if (mCallbackOnInputs)
{
char deviceString[32];
if (!ActionMap::getDeviceName(event.deviceType, event.deviceInst, deviceString))
return false;
if (event.action == SI_MAKE || event.action == SI_BREAK)
{
bool isModifier = false;
switch (event.objInst)
{
case KEY_LCONTROL:
case KEY_RCONTROL:
case KEY_LALT:
case KEY_RALT:
case KEY_LSHIFT:
case KEY_RSHIFT:
case KEY_MAC_LOPT:
case KEY_MAC_ROPT:
isModifier = true;
}
if ((event.objType == SI_KEY) && isModifier)
{
char keyString[32];
if (!ActionMap::getKeyString(event.objInst, keyString))
return false;
onInputEvent_callback(deviceString, keyString, event.action);
}
else
{
const char* actionString = ActionMap::buildActionString(&event);
onInputEvent_callback(deviceString, actionString, event.action);
}
}
else if (event.objType == SI_AXIS || event.objType == SI_INT || event.objType == SI_FLOAT)
{
F32 fValue = event.fValue;
if (event.objType == SI_INT)
fValue = (F32)event.iValue;
if (!ActionMap::getDeviceName(event.deviceType, event.deviceInst, deviceString))
return false;
const char* actionString = ActionMap::buildActionString(&event);
onAxisEvent_callback(deviceString, actionString, fValue);
}
}
return false;
}
bool GuiGameListMenuCtrl::onKeyDown(const GuiEvent &event)
{
switch (event.keyCode)
@ -528,6 +714,18 @@ bool GuiGameListMenuCtrl::onGamepadAxisDown(const GuiEvent &event)
return true;
}
bool GuiGameListMenuCtrl::onGamepadAxisLeft(const GuiEvent& event)
{
changeOption(-1);
return true;
}
bool GuiGameListMenuCtrl::onGamepadAxisRight(const GuiEvent& event)
{
changeOption(1);
return true;
}
void GuiGameListMenuCtrl::doScriptCommand(StringTableEntry command)
{
if (command && command[0])
@ -589,10 +787,179 @@ void GuiGameListMenuCtrl::setRowLabel(S32 rowIndex, const char * label)
mRows[rowIndex]->mLabel = StringTable->insert(label, true);
}
void GuiGameListMenuCtrl::clearRows()
{
mRows.clear();
}
RectI GuiGameListMenuCtrl::getRowBounds(S32 rowIndex)
{
GuiGameListMenuProfile* profile = (GuiGameListMenuProfile*)mProfile;
F32 xScale = (float)getWidth() / profile->getRowWidth();
S32 rowHeight = profile->getRowHeight();
Point2I currentOffset = Point2I::Zero;
Point2I extent = getExtent();
Point2I rowExtent(extent.x, rowHeight);
for (U32 i = 1; i <= rowIndex; i++)
{
//the top row can't pad, so we'll ignore it
GuiGameListMenuCtrl::Row* row = mRows[i];
// rows other than the first can have padding above them
currentOffset.y += row->mHeightPad;
currentOffset.y += rowHeight;
}
return RectI(currentOffset, rowExtent);
}
//-----------------------------------------------------------------------------
// Console stuff (GuiGameListMenuCtrl)
//-----------------------------------------------------------------------------
StringTableEntry GuiGameListMenuCtrl::getCurrentOption(S32 rowIndex) const
{
if (isValidRowIndex(rowIndex))
{
Row* row = (Row*)mRows[rowIndex];
if (row->mSelectedOption != NO_OPTION)
{
return row->mOptions[row->mSelectedOption];
}
}
return StringTable->insert("", false);
}
bool GuiGameListMenuCtrl::selectOption(S32 rowIndex, const char* theOption)
{
if (!isValidRowIndex(rowIndex))
{
return false;
}
Row* row = (Row*)mRows[rowIndex];
for (Vector<StringTableEntry>::iterator anOption = row->mOptions.begin(); anOption < row->mOptions.end(); ++anOption)
{
if (dStrcmp(*anOption, theOption) == 0)
{
S32 newIndex = anOption - row->mOptions.begin();
row->mSelectedOption = newIndex;
return true;
}
}
return false;
}
void GuiGameListMenuCtrl::setOptions(S32 rowIndex, const char* optionsList)
{
static StringTableEntry DELIM = StringTable->insert("\t", true);
if (!isValidRowIndex(rowIndex))
{
return;
}
Row* row = (Row*)mRows[rowIndex];
S32 count = StringUnit::getUnitCount(optionsList, DELIM);
row->mOptions.setSize(count);
for (S32 i = 0; i < count; ++i)
{
const char* option = StringUnit::getUnit(optionsList, i, DELIM);
row->mOptions[i] = StringTable->insert(option, true);
}
if (row->mSelectedOption >= row->mOptions.size())
{
row->mSelectedOption = row->mOptions.size() - 1;
}
}
void GuiGameListMenuCtrl::clickOption(Row* row, S32 xPos)
{
GuiGameListMenuProfile* profile = (GuiGameListMenuProfile*)mProfile;
if (!profile->hasArrows())
{
return;
}
F32 xScale = (float)getWidth() / profile->getRowWidth();
S32 bitmapArrowWidth = mProfile->getBitmapArrayRect(Profile::TEX_FIRST_ARROW).extent.x;
S32 leftArrowX1 = profile->mColumnSplit * xScale;
S32 leftArrowX2 = leftArrowX1 + bitmapArrowWidth;
S32 rightArrowX2 = (profile->mHitAreaLowerRight.x - profile->mRightPad) * xScale;
S32 rightArrowX1 = rightArrowX2 - bitmapArrowWidth;
if ((leftArrowX1 <= xPos) && (xPos <= leftArrowX2))
{
changeOption(row, -1);
}
else if ((rightArrowX1 <= xPos) && (xPos <= rightArrowX2))
{
changeOption(row, 1);
}
}
void GuiGameListMenuCtrl::changeOption(S32 delta)
{
if (getSelected() != NO_ROW)
{
Row* row = (Row*)mRows[getSelected()];
changeOption(row, delta);
}
}
void GuiGameListMenuCtrl::changeOption(Row* row, S32 delta)
{
S32 optionCount = row->mOptions.size();
S32 newSelection = row->mSelectedOption + delta;
if (optionCount == 0)
{
newSelection = NO_OPTION;
}
else if (!row->mWrapOptions)
{
newSelection = mClamp(newSelection, 0, optionCount - 1);
}
else if (newSelection < 0)
{
newSelection = optionCount - 1;
}
else if (newSelection >= optionCount)
{
newSelection = 0;
}
row->mSelectedOption = newSelection;
static StringTableEntry LEFT = StringTable->insert("LEFT", true);
static StringTableEntry RIGHT = StringTable->insert("RIGHT", true);
if (row->mScriptCallback != NULL)
{
setThisControl();
StringTableEntry direction = NULL;
if (delta < 0)
{
direction = LEFT;
}
else if (delta > 0)
{
direction = RIGHT;
}
if ((direction != NULL) && (Con::isFunction(row->mScriptCallback)))
{
Con::executef(row->mScriptCallback, direction);
}
}
}
IMPLEMENT_CONOBJECT(GuiGameListMenuCtrl);
ConsoleDocClass( GuiGameListMenuCtrl,
@ -622,6 +989,20 @@ ConsoleDocClass( GuiGameListMenuCtrl,
IMPLEMENT_CALLBACK( GuiGameListMenuCtrl, onChange, void, (), (),
"Called when the selected row changes." );
IMPLEMENT_CALLBACK(GuiGameListMenuCtrl, onInputEvent, void, (const char* device, const char* action, bool state),
(device, action, state),
"@brief Callback that occurs when an input is triggered on this control\n\n"
"@param device The device type triggering the input, such as keyboard, mouse, etc\n"
"@param action The actual event occuring, such as a key or button\n"
"@param state True if the action is being pressed, false if it is being release\n\n");
IMPLEMENT_CALLBACK(GuiGameListMenuCtrl, onAxisEvent, void, (const char* device, const char* action, F32 axisValue),
(device, action, axisValue),
"@brief Callback that occurs when an axis event is triggered on this control\n\n"
"@param device The device type triggering the input, such as mouse, joystick, gamepad, etc\n"
"@param action The ActionMap code for the axis\n"
"@param axisValue The current value of the axis\n\n");
void GuiGameListMenuCtrl::initPersistFields()
{
addField("debugRender", TypeBool, Offset(mDebugRender, GuiGameListMenuCtrl),
@ -639,21 +1020,25 @@ void GuiGameListMenuCtrl::initPersistFields()
addField("callbackOnY", TypeString, Offset(mCallbackOnY, GuiGameListMenuCtrl),
"Script callback when the 'Y' button is pressed. 'Y' inputs are Keyboard: Y; Gamepad: Y" );
addField("callbackOnInputs", TypeBool, Offset(mCallbackOnInputs, GuiGameListMenuCtrl),
"Script callback when any inputs are detected, even if they aren't the regular 4 face buttons. Useful for secondary/speciality handling of menu navigation.");
Parent::initPersistFields();
}
DefineEngineMethod( GuiGameListMenuCtrl, addRow, void,
( const char* label, const char* callback, S32 icon, S32 yPad, bool useHighlightIcon, bool enabled ),
( -1, 0, true, true ),
( const char* label, const char* callback, S32 icon, S32 yPad, bool useHighlightIcon, bool enabled, int mode ),
( -1, 0, true, true, 0 ),
"Add a row to the list control.\n\n"
"@param label The text to display on the row as a label.\n"
"@param callback Name of a script function to use as a callback when this row is activated.\n"
"@param icon [optional] Index of the icon to use as a marker.\n"
"@param yPad [optional] An extra amount of height padding before the row. Does nothing on the first row.\n"
"@param useHighlightIcon [optional] Does this row use the highlight icon?.\n"
"@param enabled [optional] If this row is initially enabled." )
"@param enabled [optional] If this row is initially enabled.\n"
"@param mode [optional] What option mode the row is in. 0 = Default, 1 = OptionList, 2 == Keybind")
{
object->addRow( label, callback, icon, yPad, useHighlightIcon, enabled );
object->addRow( label, callback, icon, yPad, useHighlightIcon, enabled, mode);
}
DefineEngineMethod( GuiGameListMenuCtrl, isRowEnabled, bool, ( S32 row ),,
@ -715,16 +1100,65 @@ DefineEngineMethod( GuiGameListMenuCtrl, getSelectedRow, S32, (),,
return object->getSelected();
}
DefineEngineMethod(GuiGameListMenuCtrl, clearRows, void, (), ,
"Gets the index of the currently selected row.\n\n"
"@return Index of the selected row.")
{
return object->clearRows();
}
DefineEngineMethod(GuiGameListMenuCtrl, addOptionRow, void,
(const char* label, const char* options, bool wrapOptions, const char* callback, S32 icon, S32 yPad, bool enabled),
(-1, 0, true),
"Add a row to the list control.\n\n"
"@param label The text to display on the row as a label.\n"
"@param options A tab separated list of options.\n"
"@param wrapOptions Specify true to allow options to wrap at each end or false to prevent wrapping.\n"
"@param callback Name of a script function to use as a callback when this row is activated.\n"
"@param icon [optional] Index of the icon to use as a marker.\n"
"@param yPad [optional] An extra amount of height padding before the row. Does nothing on the first row.\n"
"@param enabled [optional] If this row is initially enabled.")
{
object->addRow(label, options, wrapOptions, callback, icon, yPad, enabled);
}
DefineEngineMethod(GuiGameListMenuCtrl, getCurrentOption, const char*, (S32 row), ,
"Gets the text for the currently selected option of the given row.\n\n"
"@param row Index of the row to get the option from.\n"
"@return A string representing the text currently displayed as the selected option on the given row. If there is no such displayed text then the empty string is returned.")
{
return object->getCurrentOption(row);
}
DefineEngineMethod(GuiGameListMenuCtrl, selectOption, bool, (S32 row, const char* option), ,
"Set the row's current option to the one specified\n\n"
"@param row Index of the row to set an option on.\n"
"@param option The option to be made active.\n"
"@return True if the row contained the option and was set, false otherwise.")
{
return object->selectOption(row, option);
}
DefineEngineMethod(GuiGameListMenuCtrl, setOptions, void, (S32 row, const char* optionsList), ,
"Sets the list of options on the given row.\n\n"
"@param row Index of the row to set options on."
"@param optionsList A tab separated list of options for the control.")
{
object->setOptions(row, optionsList);
}
//-----------------------------------------------------------------------------
// GuiGameListMenuProfile
//-----------------------------------------------------------------------------
GuiGameListMenuProfile::GuiGameListMenuProfile()
: mHitAreaUpperLeft(0, 0),
mHitAreaLowerRight(0, 0),
mIconOffset(0, 0),
mRowSize(0, 0),
mRowScale(1.0f, 1.0f)
: mHitAreaUpperLeft(0, 0),
mHitAreaLowerRight(0, 0),
mIconOffset(0, 0),
mRowSize(0, 0),
mRowScale(1.0f, 1.0f),
mColumnSplit(0),
mRightPad(0)
{
}
@ -775,6 +1209,12 @@ void GuiGameListMenuProfile::enforceConstraints()
Point2I rowTexExtent = getBitmapArrayRect(TEX_NORMAL).extent;
mRowScale.x = (float) getRowWidth() / rowTexExtent.x;
mRowScale.y = (float) getRowHeight() / rowTexExtent.y;
if (mHitAreaUpperLeft.x > mColumnSplit || mColumnSplit > mHitAreaLowerRight.x)
Con::errorf("GuiGameListOptionsProfile: You can't create %s with a ColumnSplit outside the hit area. You set the split to %d. Please change the ColumnSplit to be in the range [%d, %d].",
getName(), mColumnSplit, mHitAreaUpperLeft.x, mHitAreaLowerRight.x);
mColumnSplit = mClamp(mColumnSplit, mHitAreaUpperLeft.x, mHitAreaLowerRight.x);
}
Point2I GuiGameListMenuProfile::getIconExtent()
@ -827,6 +1267,8 @@ ConsoleDocClass( GuiGameListMenuProfile,
" hitAreaLowerRight = \"190 18\";\n"
" iconOffset = \"10 2\";\n"
" rowSize = \"200 20\";\n"
" columnSplit = \"100\";\n"
" rightPad = \"4\";\n"
" //Properties not specific to this control have been omitted from this example.\n"
"};\n"
"@endtsexample\n\n"
@ -848,6 +1290,12 @@ void GuiGameListMenuProfile::initPersistFields()
addField( "rowSize", TypePoint2I, Offset(mRowSize, GuiGameListMenuProfile),
"The base size (\"width height\") of a row" );
addField("columnSplit", TypeS32, Offset(mColumnSplit, GuiGameListMenuProfile),
"Padding between the leftmost edge of the control, and the row's left arrow.");
addField("rightPad", TypeS32, Offset(mRightPad, GuiGameListMenuProfile),
"Padding between the rightmost edge of the control and the row's right arrow.");
Parent::initPersistFields();
removeField("tab");

View file

@ -47,6 +47,26 @@ protected:
bool mUseHighlightIcon; ///< Toggle the use of the highlight icon
bool mEnabled; ///< If this row is enabled or not (grayed out)
enum Mode
{
Default = 0,
OptionList,
Keybind
};
Mode mMode;
//List options
Vector<StringTableEntry> mOptions; ///< Collection of options available to display
S32 mSelectedOption; ///< Index into mOptions pointing at the selected option
bool mWrapOptions; ///< Determines if options should "wrap around" at the ends
Row() : mLabel(StringTable->EmptyString()), mScriptCallback(StringTable->EmptyString()), mIconIndex(-1), mHeightPad(0), mUseHighlightIcon(false), mEnabled(true),
mSelectedOption(0), mWrapOptions(false), mMode(Mode::Default)
{
VECTOR_SET_ASSOCIATION(mOptions);
}
virtual ~Row() {}
};
@ -99,7 +119,43 @@ public:
/// means no icon will be shown on this row.
/// \param yPad [optional] An extra amount of height padding before the row.
/// \param enabled [optional] If this row is initially enabled. Default true.
virtual void addRow(const char* label, const char* callback, S32 icon = -1, S32 yPad = 0, bool useHighlightIcon = true, bool enabled = true);
virtual void addRow(const char* label, const char* callback, S32 icon = -1, S32 yPad = 0, bool useHighlightIcon = true, bool enabled = true, S32 mode = 0);
/// Adds a row to the control.
///
/// \param label The text to display on the row as a label.
/// \param optionsList A tab separated list of options for the control.
/// \param wrapOptions Specify true to allow options to wrap at the ends or
/// false to prevent wrapping.
/// \param callback [optional] Name of a script function to use as a callback
/// when this row is activated. Default NULL means no callback.
/// \param icon [optional] Index of the icon to use as a marker. Default -1
/// means no icon will be shown on this row.
/// \param yPad [optional] An extra amount of height padding before the row.
/// \param enabled [optional] If this row is initially enabled. Default true.
void addRow(const char* label, const char* optionsList, bool wrapOptions, const char* callback, S32 icon, S32 yPad, bool enabled);
/// Gets the text for the currently selected option of the given row.
///
/// \param rowIndex Index of the row to get the option from.
/// \return A string representing the text currently displayed as the selected
/// option on the given row. If there is no such displayed text then the empty
/// string is returned.
StringTableEntry getCurrentOption(S32 rowIndex) const;
/// Attempts to set the given row to the specified selected option. The option
/// will only be set if the option exists in the control.
///
/// \param rowIndex Index of the row to set an option on.
/// \param option The option to be made active.
/// \return True if the row contained the option and was set, false otherwise.
bool selectOption(S32 rowIndex, StringTableEntry option);
/// Sets the list of options on the given row.
///
/// \param rowIndex Index of the row to set options on.
/// \param optionsList A tab separated list of options for the control.
void setOptions(S32 rowIndex, const char* optionsList);
/// Activates the current row. The script callback of the current row will
/// be called (if it has one).
@ -115,6 +171,8 @@ public:
void onRender(Point2I offset, const RectI &updateRect);
void onRenderOptionList(Row* row, Point2I currentOffset);
/// Callback when the object is registered with the sim.
///
/// \return True if the profile was successfully added, false otherwise.
@ -158,6 +216,8 @@ public:
/// \param event A reference to the event that triggered the callback.
void onMouseUp(const GuiEvent &event);
virtual bool onInputEvent(const InputEventInfo& event);
/// Callback when the gamepad axis is activated.
///
/// \param event A reference to the event that triggered the callback.
@ -168,6 +228,20 @@ public:
/// \param event A reference to the event that triggered the callback.
virtual bool onGamepadAxisDown(const GuiEvent & event);
/// Callback when the gamepad axis is activated.
///
/// \param event A reference to the event that triggered the callback.
virtual bool onGamepadAxisLeft(const GuiEvent& event);
/// Callback when the gamepad axis is activated.
///
/// \param event A reference to the event that triggered the callback.
virtual bool onGamepadAxisRight(const GuiEvent& event);
void clearRows();
RectI getRowBounds(S32 rowIndex);
DECLARE_CONOBJECT(GuiGameListMenuCtrl);
DECLARE_CATEGORY( "Gui Game" );
DECLARE_DESCRIPTION( "Base class for cross platform menu controls that are gamepad friendly." );
@ -177,6 +251,7 @@ public:
static const S32 NO_ROW = -1; ///< Indicates a query result of no row found.
static const S32 NO_ICON = -1; ///< Indicates a row has no extra icon available
static const S32 NO_OPTION = -1; ///< Indicates there is no option
protected:
/// Adds a row to the control.
@ -189,7 +264,7 @@ protected:
/// means no icon will be shown on this row.
/// \param yPad [optional] An extra amount of height padding before the row.
/// \param enabled [optional] If this row is initially enabled. Default true.
virtual void addRow(Row * row, const char* label, const char* callback, S32 icon, S32 yPad, bool useHighlightIcon, bool enabled);
virtual void addRow(Row * row, const char* label, const char* callback, S32 icon, S32 yPad, bool useHighlightIcon, bool enabled, S32 mode = 0);
/// Determines if the given index is a valid row index. Any index pointing at
/// an existing row is valid.
@ -224,6 +299,10 @@ protected:
/// @name Callbacks
/// @{
DECLARE_CALLBACK( void, onChange, () );
DECLARE_CALLBACK(void, onInputEvent, (const char* device, const char* action, bool state));
DECLARE_CALLBACK(void, onAxisEvent, (const char* device, const char* action, F32 axisValue));
/// @}
/// Evaluates some script. If the command is empty then nothing is evaluated.
@ -239,6 +318,30 @@ protected:
bool mDebugRender; ///< Determines when to show debug render lines
Vector<Row *> mRows; ///< Holds data wrappers on all the rows we have
private:
/// Performs a click on the current option row. The x position is used to
/// determine if the left or right arrow were clicked. If one was clicked, the
/// option will be changed. If neither was clicked, the option is unaffected.
/// This method should only be called when there is an actively selected row.
///
/// \param row The row to perform the click on.
/// \param xPos The x position of the the click, relative to the control.
void clickOption(Row* row, S32 xPos);
/// Changes the option on the currently selected row. If there is no row
/// selected, this method does nothing.
///
/// \param delta The amount to change the option selection by. Typically this
/// will be 1 or -1.
void changeOption(S32 delta);
/// Changes the option on the given row.
///
/// \param row The row to change the option on.
/// \param delta The amount to change the option selection by. Typically this
/// will be 1 or -1.
void changeOption(Row* row, S32 delta);
private:
/// Recalculates the height of this control based on the stored row height and
/// and padding on the rows.
@ -260,6 +363,8 @@ private:
S32 mSelected; ///< index of the currently selected row
S32 mHighlighted; ///< index of the currently highlighted row
bool mCallbackOnInputs;
};
/// \class GuiGameListMenuProfile
@ -325,6 +430,9 @@ public:
Point2I mIconOffset; ///< Offset for a row's extra icon
Point2I mRowSize; ///< The base size of a row
S32 mColumnSplit; ///< Absolute position of the split between columns
S32 mRightPad; ///< Extra padding between the right arrow and the hit area
GuiGameListMenuProfile();
DECLARE_CONOBJECT(GuiGameListMenuProfile);

View file

@ -419,6 +419,11 @@ bool GuiGameListOptionsCtrl::selectOption(S32 rowIndex, const char * theOption)
return false;
}
void GuiGameListOptionsCtrl::clearRows()
{
mRows.clear();
}
//-----------------------------------------------------------------------------
// Console stuff (GuiGameListOptionsCtrl)
//-----------------------------------------------------------------------------
@ -484,6 +489,15 @@ DefineEngineMethod( GuiGameListOptionsCtrl, setOptions, void, ( S32 row, const c
object->setOptions( row, optionsList );
}
DefineEngineMethod(GuiGameListOptionsCtrl, clearOptions, void, (), ,
"Sets the list of options on the given row.\n\n"
"@param row Index of the row to set options on."
"@param optionsList A tab separated list of options for the control.")
{
object->clearRows();
}
//-----------------------------------------------------------------------------
// GuiGameListOptionsProfile
//-----------------------------------------------------------------------------

View file

@ -41,7 +41,16 @@ protected:
S32 mSelectedOption; ///< Index into mOptions pointing at the selected option
bool mWrapOptions; ///< Determines if options should "wrap around" at the ends
Row() : mSelectedOption(0), mWrapOptions(false)
enum Mode
{
Default = 0,
OptionsList,
Keybind
};
Mode mMode;
Row() : mSelectedOption(0), mWrapOptions(false), mMode(Mode::Default)
{
VECTOR_SET_ASSOCIATION( mOptions );
}
@ -111,6 +120,8 @@ public:
/// \param event A reference to the event that triggered the callback.
virtual bool onGamepadAxisRight(const GuiEvent &event);
virtual void clearRows();
GuiGameListOptionsCtrl();
~GuiGameListOptionsCtrl();

View file

@ -516,6 +516,39 @@ bool GuiTextListCtrl::onKeyDown( const GuiEvent &event )
}
bool GuiTextListCtrl::onGamepadAxisUp(const GuiEvent& event)
{
if (mSelectedCell.y < (mList.size() - 1))
{
S32 yDelta = 0;
mSelectedCell.y++;
yDelta = mCellSize.y;
GuiScrollCtrl* parent = dynamic_cast<GuiScrollCtrl*>(getParent());
if (parent)
parent->scrollDelta(0, yDelta);
}
return true;
}
bool GuiTextListCtrl::onGamepadAxisDown(const GuiEvent& event)
{
if (mSelectedCell.y > 0)
{
S32 yDelta = 0;
mSelectedCell.y--;
yDelta = -mCellSize.y;
GuiScrollCtrl* parent = dynamic_cast<GuiScrollCtrl*>(getParent());
if (parent)
parent->scrollDelta(0, yDelta);
}
return true;
}
//-----------------------------------------------------------------------------
// Console Methods
//-----------------------------------------------------------------------------

View file

@ -104,6 +104,8 @@ class GuiTextListCtrl : public GuiArrayCtrl
const char *getSelectedText();
bool onKeyDown(const GuiEvent &event);
bool onGamepadAxisUp(const GuiEvent& event);
bool onGamepadAxisDown(const GuiEvent& event);
virtual void onRenderCell(Point2I offset, Point2I cell, bool selected, bool mouseOver);

View file

@ -1082,7 +1082,7 @@ bool GuiCanvas::processGamepadEvent(InputEventInfo &inputEvent)
case SI_YAXIS:
case XI_THUMBLY:
case XI_THUMBRY:
if (negative)
if (!negative)
{
return mFirstResponder->onGamepadAxisDown(mLastEvent);
}

View file

@ -64,9 +64,7 @@ function StartGame( %mission, %hostingType )
{
if( %mission $= "" )
{
%id = CL_levelList.getSelectedId();
%mission = getField(CL_levelList.getRowTextById(%id), 1);
//error("Cannot start a level with no level selected!");
%mission = $selectedLevelFile;
}
if (%hostingType !$= "")

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

View file

@ -14,7 +14,6 @@
function UI::onCreate( %this )
{
%bool = true;
}
function UI::onDestroy( %this )
@ -36,9 +35,14 @@ function UI::initClient(%this)
//Profiles
exec("./scripts/profiles.cs");
exec("./scripts/menu.keybinds.cs");
//Now gui files
exec("./guis/mainMenu.gui");
exec("./guis/guiGamepadButton.cs");
exec("./guis/guiGamepadButton.gui");
exec("./guis/mainMenu.cs");
exec("./guis/mainMenu.gui");
exec("./guis/chooseLevelDlg.gui");
exec("./guis/chooseLevelDlg.cs");
@ -48,8 +52,8 @@ function UI::initClient(%this)
exec("./guis/loadingGui.gui");
exec("./guis/optionsMenu.gui");
exec("./guis/optionsMenu.cs");
exec("./guis/optionsMenu.gui");
exec("./guis/pauseMenu.gui");
exec("./guis/pauseMenu.cs");
@ -73,8 +77,7 @@ function UI::initClient(%this)
exec("./guis/startupGui.cs");
// Load Editor Dialogs
exec("./guis/messageBoxOk.gui");
exec("./guis/messageBoxYesNo.gui");
exec("./guis/messageBoxDlg.gui");
//Load scripts
exec("./scripts/optionsList.cs");
@ -89,9 +92,13 @@ function UI::initClient(%this)
exec("./guis/menuGraphics.gui");
exec("./guis/menuGraphics.cs");
//exec("./scripts/menu.keybinds.cs");
//exec("./scripts/GuiTreeViewCtrl.cs");
loadStartup();
//menuMoveMap.push();
}
function UI::onCreateClientConnection(%this){}

View file

@ -23,13 +23,15 @@
//----------------------------------------
function ChooseLevelDlg::onWake( %this )
{
CL_levelList.clear();
ChooseLevelWindow->SmallPreviews.clear();
if(!isObject(LevelListEntries))
new ArrayObject(LevelListEntries){};
LevelList.clearRows();
LevelListEntries.empty();
%this->CurrentPreview.visible = false;
%this->levelName.visible = false;
%this->LevelDescriptionLabel.visible = false;
%this->LevelDescription.visible = false;
ChooseLevelWindow->CurrentPreview.setBitmap("data/ui/images/no-preview");
ChooseLevelWindow->LevelDescriptionLabel.visible = false;
ChooseLevelWindow->LevelDescription.visible = false;
%assetQuery = new AssetQuery();
AssetDatabase.findAssetType(%assetQuery, "LevelAsset");
@ -76,13 +78,22 @@ function ChooseLevelDlg::onWake( %this )
%this.addMissionFile( "tools/levels/DefaultEditorLevel.mis" );
}
// Sort our list
CL_levelList.sort(0);
// Set the first row as the selected row
CL_levelList.setSelectedRow(0);
for (%i = 0; %i < CL_levelList.rowCount(); %i++)
for(%i=0; %i < LevelListEntries.count(); %i++)
{
%levelEntry = LevelListEntries.getKey(%i);
LevelList.addRow(getField(%levelEntry, 0), "", -1, -30);
}
LevelList.setSelected(0);
LevelList.onChange();
if(!$pref::HostMultiPlayer)
LevelSelectTitle.setText("SINGLE PLAYER");
else
LevelSelectTitle.setText("CREATE SERVER");
/*for (%i = 0; %i < LevelList.rowCount(); %i++)
{
%preview = new GuiButtonCtrl() {
profile = "GuiMenuButtonProfile";
@ -127,67 +138,31 @@ function ChooseLevelDlg::onWake( %this )
%desc = getField(CL_levelList.getRowText(%i), 2);
%preview.levelDesc = %desc;
}
}*/
}
ChooseLevelWindow->SmallPreviews.firstVisible = -1;
ChooseLevelWindow->SmallPreviews.lastVisible = -1;
function ChooseLevelButtonHolder::onWake(%this)
{
%this.refresh();
}
if (ChooseLevelWindow->SmallPreviews.getCount() > 0)
{
ChooseLevelWindow->SmallPreviews.firstVisible = 0;
function ChooseLevelButtonHolder::refresh(%this)
{
ChooseLevelButtonHolder.add(GamepadButtonsGui);
GamepadButtonsGui.clearButtons();
GamepadButtonsGui.setButton(2, "A", "Enter", "Start Level", "ChooseLevelDlg.beginLevel();");
GamepadButtonsGui.setButton(3, "B", "Esc", "Back", "ChooseLevelDlg.backOut();");
GamepadButtonsGui.refreshButtons();
}
if (ChooseLevelWindow->SmallPreviews.getCount() < 6)
ChooseLevelWindow->SmallPreviews.lastVisible = ChooseLevelWindow->SmallPreviews.getCount() - 1;
else
ChooseLevelWindow->SmallPreviews.lastVisible = 4;
}
if (ChooseLevelWindow->SmallPreviews.getCount() > 0)
ChooseLevelWindow.previewSelected(ChooseLevelWindow->SmallPreviews.getObject(0));
// If we have 5 or less previews then hide our next/previous buttons
// and resize to fill their positions
if (ChooseLevelWindow->SmallPreviews.getCount() < 6)
{
ChooseLevelWindow->PreviousSmallPreviews.setVisible(false);
ChooseLevelWindow->NextSmallPreviews.setVisible(false);
%previewPos = ChooseLevelWindow->SmallPreviews.getPosition();
%previousPos = ChooseLevelWindow->PreviousSmallPreviews.getPosition();
%previewPosX = getWord(%previousPos, 0);
%previewPosY = getWord(%previewPos, 1);
ChooseLevelWindow->SmallPreviews.setPosition(%previewPosX, %previewPosY);
ChooseLevelWindow->SmallPreviews.colSpacing = 10;//((getWord(NextSmallPreviews.getPosition(), 0)+11)-getWord(PreviousSmallPreviews.getPosition(), 0))/4;
ChooseLevelWindow->SmallPreviews.refresh();
}
/*if (ChooseLevelWindow->SmallPreviews.getCount() <= 1)
{
// Hide the small previews
ChooseLevelWindow->SmallPreviews.setVisible(false);
// Shrink the ChooseLevelWindow so that we don't have a large blank space
%extentX = getWord(ChooseLevelWindow.getExtent(), 0);
%extentY = getWord(ChooseLevelWindow->SmallPreviews.getPosition(), 1);
ChooseLevelWIndow.setExtent(%extentX, %extentY);
}
else
{
// Make sure the small previews are visible
ChooseLevelWindow->SmallPreviews.setVisible(true);
%extentX = getWord(ChooseLevelWindow.getExtent(), 0);
%extentY = getWord(ChooseLevelWindow->SmallPreviews.getPosition(), 1);
%extentY = %extentY + getWord(ChooseLevelWindow->SmallPreviews.getExtent(), 1);
%extentY = %extentY + 9;
//ChooseLevelWIndow.setExtent(%extentX, %extentY);
//}*/
function ChooseLevelDlg::onSleep( %this )
{
// This is set from the outside, only stays true for a single wake/sleep
// cycle.
%this.launchInEditor = false;
}
function ChooseLevelDlg::addMissionFile( %this, %file )
@ -213,7 +188,7 @@ function ChooseLevelDlg::addMissionFile( %this, %file )
%LevelInfoObject.delete();
}
CL_levelList.addRow( CL_levelList.rowCount(), %levelName TAB %file TAB %levelDesc TAB %levelPreview );
LevelListEntries.add( %levelName TAB %file TAB %levelDesc TAB %levelPreview );
}
function ChooseLevelDlg::addLevelAsset( %this, %levelAsset )
@ -245,113 +220,57 @@ function ChooseLevelDlg::addLevelAsset( %this, %levelAsset )
%levelDesc = %levelAsset.description;
%levelPreview = %levelAsset.levelPreviewImage;
CL_levelList.addRow( CL_levelList.rowCount(), %levelName TAB %file TAB %levelDesc TAB %levelPreview );
LevelListEntries.add( %levelName TAB %file TAB %levelDesc TAB %levelPreview );
}
function ChooseLevelDlg::onSleep( %this )
function LevelList::onChange(%this)
{
// This is set from the outside, only stays true for a single wake/sleep
// cycle.
%this.launchInEditor = false;
}
function ChooseLevelWindow::previewSelected(%this, %preview)
{
// Set the selected level
if (isObject(%preview) && %preview.levelIndex !$= "")
CL_levelList.setSelectedRow(%preview.levelIndex);
%index = %this.getSelectedRow();
%levelEntry = LevelListEntries.getKey(%index);
// Get the name
ChooseLevelWindow->LevelName.text = getField(%levelEntry, 0);
// Get the level file
$selectedLevelFile = getField(%levelEntry, 1);
// Find the preview image
%levelPreview = getField(%levelEntry, 3);
// Test against all of the different image formats
// This should probably be moved into an engine function
if (isFile(%levelPreview @ ".png") ||
isFile(%levelPreview @ ".jpg") ||
isFile(%levelPreview @ ".bmp") ||
isFile(%levelPreview @ ".gif") ||
isFile(%levelPreview @ ".jng") ||
isFile(%levelPreview @ ".mng") ||
isFile(%levelPreview @ ".tga"))
ChooseLevelWindow->CurrentPreview.setBitmap(%previewFile);
else
CL_levelList.setSelectedRow(-1);
ChooseLevelWindow->CurrentPreview.setBitmap("data/ui/images/no-preview");
// Set the large preview image
if (isObject(%preview) && %preview.bitmap !$= "")
// Get the description
%levelDesc = getField(%levelEntry, 2);
if(%levelDesc !$= "")
{
%this->CurrentPreview.visible = true;
%this->CurrentPreview.setBitmap(%preview.bitmap);
ChooseLevelWindow->LevelDescriptionLabel.setVisible(true);
ChooseLevelWindow->LevelDescription.setVisible(true);
ChooseLevelWindow->LevelDescription.setText(%levelDesc);
}
else
{
%this->CurrentPreview.visible = false;
}
// Set the current level name
if (isObject(%preview) && %preview.levelName !$= "")
{
%this->LevelName.visible = true;
%this->LevelName.setText(%preview.levelName);
}
else
{
%this->LevelName.visible = false;
}
// Set the current level description
if (isObject(%preview) && %preview.levelDesc !$= "")
{
%this->LevelDescription.visible = true;
%this->LevelDescriptionLabel.visible = true;
%this->LevelDescription.setText(%preview.levelDesc);
}
else
{
%this->LevelDescription.visible = false;
%this->LevelDescriptionLabel.visible = false;
}
}
function ChooseLevelWindow::previousPreviews(%this)
{
%prevHiddenIdx = %this->SmallPreviews.firstVisible - 1;
if (%prevHiddenIdx < 0)
return;
%lastVisibleIdx = %this->SmallPreviews.lastVisible;
if (%lastVisibleIdx >= %this->SmallPreviews.getCount())
return;
%prevHiddenObj = %this->SmallPreviews.getObject(%prevHiddenIdx);
%lastVisibleObj = %this->SmallPreviews.getObject(%lastVisibleIdx);
if (isObject(%prevHiddenObj) && isObject(%lastVisibleObj))
{
%this->SmallPreviews.firstVisible--;
%this->SmallPreviews.lastVisible--;
%prevHiddenObj.setVisible(true);
%lastVisibleObj.setVisible(false);
}
}
function ChooseLevelWindow::nextPreviews(%this)
{
%firstVisibleIdx = %this->SmallPreviews.firstVisible;
if (%firstVisibleIdx < 0)
return;
%firstHiddenIdx = %this->SmallPreviews.lastVisible + 1;
if (%firstHiddenIdx >= %this->SmallPreviews.getCount())
return;
%firstVisibleObj = %this->SmallPreviews.getObject(%firstVisibleIdx);
%firstHiddenObj = %this->SmallPreviews.getObject(%firstHiddenIdx);
if (isObject(%firstVisibleObj) && isObject(%firstHiddenObj))
{
%this->SmallPreviews.firstVisible++;
%this->SmallPreviews.lastVisible++;
%firstVisibleObj.setVisible(false);
%firstHiddenObj.setVisible(true);
ChooseLevelWindow->LevelDescriptionLabel.setVisible(false);
ChooseLevelWindow->LevelDescription.setVisible(false);
}
}
// Do this onMouseUp not via Command which occurs onMouseDown so we do
// not have a lingering mouseUp event lingering in the ether.
function ChooseLevelDlgGoBtn::onMouseUp( %this )
function ChooseLevelDlg::beginLevel(%this)
{
// So we can't fire the button when loading is in progress.
if ( isObject( ServerGroup ) )
@ -370,3 +289,9 @@ function ChooseLevelDlgGoBtn::onMouseUp( %this )
}
}
function ChooseLevelDlg::backOut(%this)
{
Canvas.popDialog(ChooseLevelDlg);
if(isObject(ChooseLevelDlg.returnGui) && ChooseLevelDlg.returnGui.isMethod("onReturnTo"))
ChooseLevelDlg.returnGui.onReturnTo();
}

View file

@ -1,7 +1,7 @@
//--- OBJECT WRITE BEGIN ---
%guiContent = new GuiControl(ChooseLevelDlg) {
position = "0 0";
extent = "1280 1024";
extent = "1024 768";
minExtent = "8 8";
horizSizing = "width";
vertSizing = "height";
@ -13,16 +13,16 @@
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "1";
enabled = "1";
Enabled = "1";
launchInEditor = "0";
returnGui = "MainMenuGui";
new GuiControl(ChooseLevelWindow) {
position = "80 36";
extent = "770 616";
position = "48 56";
extent = "928 655";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
horizSizing = "center";
vertSizing = "center";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
@ -32,29 +32,51 @@
canSave = "1";
canSaveDynamicFields = "0";
new GuiTextCtrl(LevelSelectTitle) {
text = "CHOOSE LEVEL";
maxLength = "1024";
margin = "0 0 0 0";
padding = "0 0 0 0";
anchorTop = "1";
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "22 10";
extent = "307 28";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "MenuHeaderText";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiBitmapCtrl() {
bitmap = "data/ui/images/no-preview";
color = "255 255 255 255";
wrap = "0";
position = "369 31";
position = "513 71";
extent = "400 300";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiDefaultProfile";
visible = "0";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
internalName = "CurrentPreview";
hidden = "1";
canSave = "1";
canSaveDynamicFields = "1";
enabled = "1";
Enabled = "1";
};
new GuiTextCtrl() {
text = "Empty Room";
text = "EmptyLevel";
maxLength = "255";
margin = "0 0 0 0";
padding = "0 0 0 0";
@ -62,19 +84,18 @@
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "370 335";
extent = "90 18";
position = "514 375";
extent = "398 27";
minExtent = "8 8";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "0";
profile = "MenuHeaderText";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
internalName = "levelName";
hidden = "1";
internalName = "LevelName";
canSave = "1";
canSaveDynamicFields = "0";
};
@ -87,19 +108,18 @@
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "370 354";
position = "522 410";
extent = "91 18";
minExtent = "8 8";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "0";
profile = "MenuSubHeaderText";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
internalName = "LevelDescriptionLabel";
hidden = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
@ -107,9 +127,10 @@
lineSpacing = "2";
allowColorChars = "0";
maxChars = "-1";
text = "This is placeholder text";
useURLMouseCursor = "0";
position = "370 380";
extent = "165 14";
position = "522 436";
extent = "391 14";
minExtent = "8 8";
horizSizing = "right";
vertSizing = "bottom";
@ -123,150 +144,69 @@
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiBitmapButtonCtrl() {
bitmap = "data/ui/images/previous-button";
bitmapMode = "Stretched";
autoFitExtents = "0";
useModifiers = "0";
useStates = "1";
masked = "0";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "2 -1";
extent = "368 33";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiDefaultProfile";
visible = "0";
active = "1";
command = "ChooseLevelWindow.previousPreviews();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
internalName = "PreviousSmallPreviews";
hidden = "1";
canSave = "1";
canSaveDynamicFields = "1";
enabled = "1";
wrap = "0";
};
new GuiBitmapButtonCtrl() {
bitmap = "data/ui/images/next-button";
bitmapMode = "Stretched";
autoFitExtents = "0";
useModifiers = "0";
useStates = "1";
masked = "0";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "-3 549";
extent = "374 33";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiDefaultProfile";
visible = "0";
active = "1";
command = "ChooseLevelWindow.nextPreviews();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
internalName = "NextSmallPreviews";
hidden = "1";
canSave = "1";
canSaveDynamicFields = "1";
enabled = "1";
wrap = "0";
};
new GuiTextListCtrl(CL_levelList) {
columns = "0";
fitParentWidth = "1";
clipColumnText = "0";
position = "-7 1";
extent = "80 30";
minExtent = "8 8";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiTextArrayProfile";
visible = "0";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
hidden = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiDynamicCtrlArrayControl() {
colCount = "1";
colSize = "368";
rowCount = "14";
rowSize = "35";
rowSpacing = "0";
colSpacing = "10";
frozen = "0";
autoCellSize = "1";
fillRowFirst = "0";
dynamicSize = "0";
new GuiScrollCtrl() {
willFirstRespond = "1";
hScrollBar = "dynamic";
vScrollBar = "dynamic";
lockHorizScroll = "0";
lockVertScroll = "0";
constantThumbHeight = "0";
childMargin = "0 0";
mouseWheelScrollSpeed = "-1";
margin = "0 0 0 0";
padding = "0 0 0 0";
position = "2 33";
extent = "368 516";
anchorTop = "1";
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "0 40";
extent = "450 580";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiDefaultProfile";
profile = "GuiMenuScrollProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
internalName = "SmallPreviews";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiButtonCtrl(ChooseLevelDlgGoBtn) {
text = "Start Level";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "1";
position = "371 583";
extent = "399 33";
minExtent = "8 8";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiButtonCtrl(ChooseLevelDlgBackBtn) {
text = "Return to Menu";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "1";
position = "0 583";
extent = "371 33";
minExtent = "8 8";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
active = "1";
command = "Canvas.popDialog(ChooseLevelDlg);\n\nif(isObject(ChooseLevelDlg.returnGui) && ChooseLevelDlg.returnGui.isMethod(\"onReturnTo\")) ChooseLevelDlg.returnGui.onReturnTo();";
accelerator = "escape";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
new GuiGameListMenuCtrl(LevelList) {
debugRender = "0";
callbackOnInputs = "1";
position = "1 1";
extent = "450 580";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "DefaultListMenuProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
class = "UIMenuButtonList";
canSave = "1";
canSaveDynamicFields = "0";
};
};
};
new GuiControl(ChooseLevelButtonHolder) {
position = "189 652";
extent = "646 130";
minExtent = "8 2";
horizSizing = "center";
vertSizing = "top";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
};
//--- OBJECT WRITE END ---

View file

@ -0,0 +1,319 @@
//------------------------------------------------------------------------------
// global vars
//------------------------------------------------------------------------------
$BUTTON_A = 0;
$BUTTON_B = 1;
$BUTTON_X = 2;
$BUTTON_Y = 3;
$BUTTON_BACK = 4;
$BUTTON_START = 5;
$BUTTON_LTRIGGER = 6;
$BUTTON_RTRIGGER = 7;
$BUTTON_LSHOULDER = 8;
$BUTTON_RSHOULDER = 9;
$BUTTON_LSTICK = 10;
$BUTTON_RSTICK = 11;
//------------------------------------------------------------------------------
// GamepadButtonsGui methods
//------------------------------------------------------------------------------
/// Callback when this control wakes up. All buttons are set to invisible and
/// disabled.
function GamepadButtonsGui::onWake(%this)
{
GamepadButtonsGui.controllerName = "K&M";
}
function GamepadButtonsGui::initMenuButtons(%this)
{
%buttonExt = %this.extent.x / 4 SPC %this.extent.y / 2;
for(%i=0; %i < 9; %i++)
{
%btn = new GuiIconButtonCtrl()
{
iconLocation = "Left";
sizeIconToButton = true;
makeIconSquare = true;
textLocation = "Right";
extent = %buttonExt;
profile="GuiMenuButtonProfile";
gamepadButton = "";
keyboardButton = "";
};
GamepadButtonsGui.addGuiControl(%btn);
}
GamepadButtonsGui.refresh();
}
/// Sets the command and text for the specified button. If %text and %command
/// are left empty, the button will be disabled and hidden.
/// Note: This command is not executed when the A button is pressed. That
/// command is executed directly from the GuiGameList___Ctrl. This command is
/// for the graphical hint and to allow a mouse equivalent.
///
/// \param %button (constant) The button to set. See: $BUTTON_A, _B, _X, _Y
/// \param %text (string) The text to display next to the A button graphic.
/// \param %command (string) The command executed when the A button is pressed.
function GamepadButtonsGui::setButton(%this, %buttonIdx, %gamepadButton, %keyboardButton, %text, %command, %gamepadOnly)
{
if(%buttonIdx >= GamepadButtonsGui.getCount())
return;
%btn = GamepadButtonsGui.getObject(%buttonIdx);
%set = (! ((%text $= "") && (%command $= "")));
%btn.setText(%text);
%btn.setActive(%set);
%btn.setVisible(%set);
%btn.gamepadButton = %gamepadButton;
%btn.keyboardButton = %keyboardButton;
if(%gamepadOnly $= "")
%gamepadOnly = false;
%btn.gamepadOnly = %gamepadOnly;
%btn.Command = %command;
}
function GamepadButtonsGui::checkGamepad(%this)
{
%controllerName = SDLInputManager::JoystickNameForIndex(0);
GamepadButtonsGui.controllerName = %controllerName;
}
function GamepadButtonsGui::clearButtons(%this)
{
for(%i=0; %i < GamepadButtonsGui.getCount(); %i++)
{
%btn = GamepadButtonsGui.getObject(%i);
%btn.setBitmap("");
%btn.text = "";
%btn.command = "";
}
}
function GamepadButtonsGui::refreshButtons(%this)
{
//Set up our basic buttons
for(%i=0; %i < GamepadButtonsGui.getCount(); %i++)
{
%btn = GamepadButtonsGui.getObject(%i);
%set = (! ((%btn.text $= "") && (%btn.command $= "")));
//Special-case of where we're in keyboard+mouse mode, but the menubutton is gamepad only mode, so we early out
if(%btn.gamepadOnly && GamepadButtonsGui.controllerName $= "K&M")
%set = false;
%btn.setActive(%set);
%btn.setVisible(%set);
if(!%btn.isActive())
continue;
if(GamepadButtonsGui.controllerName !$= "K&M")
{
if(%btn.gamepadButton !$= "")
{
%path = "";
if(GamepadButtonsGui.controllerName $= "PS4 Controller")
{
%path = "data/ui/images/inputs/PS4/PS4_";
if(%btn.gamepadButton $= "A")
%path = %path @ "Cross";
else if(%btn.gamepadButton $= "B")
%path = %path @ "Circle";
else if(%btn.gamepadButton $= "X")
%path = %path @ "Square";
else if(%btn.gamepadButton $= "Y")
%path = %path @ "Triangle";
else if(%btn.gamepadButton $= "LB")
%path = %path @ "L1";
else if(%btn.gamepadButton $= "LT")
%path = %path @ "L2";
else if(%btn.gamepadButton $= "RB")
%path = %path @ "R1";
else if(%btn.gamepadButton $= "RT")
%path = %path @ "R2";
else
continue;
}
else if(GamepadButtonsGui.controllerName $= "Nintendo Switch Pro Controller")
{
%path = "data/ui/images/inputs/Switch/Switch_";
if(%btn.gamepadButton $= "A")
%path = %path @ "B";
else if(%btn.gamepadButton $= "B")
%path = %path @ "A";
else if(%btn.gamepadButton $= "X")
%path = %path @ "Y";
else if(%btn.gamepadButton $= "Y")
%path = %path @ "X";
else if(%btn.gamepadButton $= "LB")
%path = %path @ "LB";
else if(%btn.gamepadButton $= "LT")
%path = %path @ "LT";
else if(%btn.gamepadButton $= "RB")
%path = %path @ "RB";
else if(%btn.gamepadButton $= "RT")
%path = %path @ "RT";
else
continue;
}
else if(GamepadButtonsGui.controllerName !$= "")
{
%path = "data/ui/images/inputs/Xbox/Xbox_";
%path = %path @ %btn.gamepadButton;
}
}
}
else
{
if(%btn.keyboardButton !$= "")
{
%path = "data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_" @ %btn.keyboardButton;
}
}
%btn.setBitmap(%path);
}
return true;
}
function GamepadButtonsGui::processInputs(%this, %device, %action)
{
//check to see if our status has changed
%changed = false;
%oldDevice = GamepadButtonsGui.controllerName;
if(startsWith(%device, "Keyboard"))
{
if(GamepadButtonsGui.controllerName !$= %device)
%changed = true;
GamepadButtonsGui.controllerName = "K&M";
Canvas.showCursor();
}
else if(startsWith(%device, "Mouse"))
{
if(startsWith(%action, "button"))
{
if(GamepadButtonsGui.controllerName !$= %device)
%changed = true;
GamepadButtonsGui.controllerName = "K&M";
Canvas.showCursor();
}
}
else
{
if(GamepadButtonsGui.checkGamepad())
{
Canvas.hideCursor();
}
if(GamepadButtonsGui.controllerName !$= %device)
%changed = true;
}
if(%changed)
GamepadButtonsGui.refreshButtons();
//Now process the input for the button accelerator, if applicable
//Set up our basic buttons
for(%i=0; %i < GamepadButtonsGui.getCount(); %i++)
{
%btn = GamepadButtonsGui.getObject(%i);
if(!%btn.isActive())
continue;
if(GamepadButtonsGui.controllerName !$= "K&M")
{
if(%action $= "btn_r")
%action = "RB";
else if(%action $= "btn_l")
%action = "LB";
if(%btn.gamepadButton $= %action)
{
eval(%btn.command);
}
}
else
{
if(%action $= "return")
%action = "enter";
else if(%action $= "escape")
%action = "esc";
if(%btn.keyboardButton $= %action)
{
eval(%btn.command);
}
}
}
}
function GamepadButtonsGui::processAxisEvent(%this, %device, %action, %axisVal)
{
%changed = false;
%oldDevice = GamepadButtonsGui.controllerName;
if(startsWith(%device, "Mouse"))
{
if(startsWith(%action, "button"))
{
if(GamepadButtonsGui.controllerName !$= %device)
%changed = true;
GamepadButtonsGui.controllerName = "K&M";
Canvas.showCursor();
}
}
else
{
if(GamepadButtonsGui.checkGamepad())
{
Canvas.hideCursor();
}
if(GamepadButtonsGui.controllerName !$= %device)
%changed = true;
}
if(%changed)
GamepadButtonsGui.refreshButtons();
}
//
//
function onSDLDeviceConnected(%sdlIndex, %deviceName, %deviceType)
{
/*if(GamepadButtonsGui.checkGamepad())
{
GamepadButtonsGui.hidden = false;
}*/
}
function onSDLDeviceDisconnected(%sdlIndex)
{
/*if(!GamepadButtonsGui.checkGamepad())
{
GamepadButtonsGui.hidden = true;
}*/
}

View file

@ -0,0 +1,239 @@
//--- OBJECT WRITE BEGIN ---
new GuiControl(GamepadButtonsGuiCtrl) {
position = "0 0";
extent = "646 130";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GamepadDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "1";
new GuiDynamicCtrlArrayControl(GamepadButtonsGui) {
position = "0 0";
extent = "640 100";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GamepadDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "1";
colSize = "155";
rowSize = "45";
rowSpacing = 5;
colSpacing = 5;
frozen = true;
/*new GuiBitmapCtrl(ButtonBImg) {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "0";
Profile = "GamepadDefaultProfile";
HorizSizing = "left";
VertSizing = "relative";
position = "416 16";
Extent = "32 32";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
hovertime = "1000";
bitmap = "data/ui/images/Inputs/Xbox/Xbox_B";
wrap = "0";
};
new GuiTextCtrl(ButtonBLabel) {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "0";
Profile = "GamepadButtonTextRight";
HorizSizing = "relative";
VertSizing = "relative";
position = "248 16";
Extent = "160 32";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
hovertime = "1000";
text = "Button B Label";
maxLength = "1024";
};
new GuiButtonBaseCtrl(ButtonBButton) {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "0";
Profile = "GamepadDefaultProfile";
HorizSizing = "relative";
VertSizing = "relative";
position = "248 16";
Extent = "200 32";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
hovertime = "1000";
text = "Button";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
};
new GuiBitmapCtrl(ButtonAImg) {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "0";
Profile = "GamepadDefaultProfile";
HorizSizing = "left";
VertSizing = "relative";
position = "400 64";
Extent = "32 32";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
hovertime = "1000";
bitmap = "data/ui/images/Inputs/Xbox/Xbox_A";
wrap = "0";
};
new GuiTextCtrl(ButtonALabel) {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "0";
Profile = "GamepadButtonTextRight";
HorizSizing = "relative";
VertSizing = "relative";
position = "232 64";
Extent = "160 32";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
hovertime = "1000";
text = "Button B Label";
maxLength = "1024";
};
new GuiButtonBaseCtrl(ButtonAButton) {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "0";
Profile = "GamepadDefaultProfile";
HorizSizing = "relative";
VertSizing = "relative";
position = "232 64";
Extent = "200 32";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
hovertime = "1000";
text = "Button";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
};
new GuiBitmapCtrl(ButtonXImg) {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "0";
Profile = "GamepadDefaultProfile";
HorizSizing = "right";
VertSizing = "relative";
position = "32 64";
Extent = "32 32";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
hovertime = "1000";
bitmap = "data/ui/images/Inputs/Xbox/Xbox_X";
wrap = "0";
};
new GuiTextCtrl(ButtonXLabel) {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "0";
Profile = "GamepadButtonTextLeft";
HorizSizing = "relative";
VertSizing = "relative";
position = "72 64";
Extent = "160 32";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
hovertime = "1000";
text = "Button X Label";
maxLength = "1024";
};
new GuiButtonBaseCtrl(ButtonXButton) {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "0";
Profile = "GamepadDefaultProfile";
HorizSizing = "relative";
VertSizing = "relative";
position = "32 64";
Extent = "200 32";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
hovertime = "1000";
text = "Button";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
};
new GuiBitmapCtrl(ButtonYImg) {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "0";
Profile = "GamepadDefaultProfile";
HorizSizing = "right";
VertSizing = "relative";
position = "16 16";
Extent = "32 32";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
hovertime = "1000";
bitmap = "data/ui/images/Inputs/Xbox/Xbox_Y";
wrap = "0";
};
new GuiTextCtrl(ButtonYLabel) {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "0";
Profile = "GamepadButtonTextLeft";
HorizSizing = "relative";
VertSizing = "relative";
position = "55 16";
Extent = "164 32";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
hovertime = "1000";
text = "Button Y Label";
maxLength = "1024";
};
new GuiButtonBaseCtrl(ButtonYButton) {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "0";
Profile = "GamepadDefaultProfile";
HorizSizing = "relative";
VertSizing = "relative";
position = "16 16";
Extent = "208 32";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
hovertime = "1000";
text = "Button";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
};*/
};
};
//--- OBJECT WRITE END ---

View file

@ -6,6 +6,26 @@ function JoinServerMenu::onWake()
JoinServerJoinBtn.setActive(JS_serverList.rowCount() > 0);
}
function JoinServerButtonHolder::onWake(%this)
{
%this.refresh();
}
function JoinServerButtonHolder::refresh(%this)
{
JoinServerButtonHolder.add(GamepadButtonsGui);
GamepadButtonsGui.clearButtons();
GamepadButtonsGui.setButton(1, "A", "", "Query LAN", "JoinServerMenu.queryLan();");
GamepadButtonsGui.setButton(2, "X", "", "Query Internet", "JoinServerMenu.query();");
GamepadButtonsGui.setButton(3, "B", "", "Refresh", "JoinServerMenu.refresh();");
GamepadButtonsGui.setButton(6, "Start", "Enter", "Join", "JoinServerMenu.join();");
GamepadButtonsGui.setButton(7, "B", "Esc", "Back", "JoinServerMenu.backOut();");
GamepadButtonsGui.refreshButtons();
}
//----------------------------------------
function JoinServerMenu::query(%this)
{
@ -77,11 +97,13 @@ function JoinServerMenu::refreshSelectedServer( %this )
}
//----------------------------------------
function JoinServerMenu::exit(%this)
function JoinServerMenu::backOut(%this)
{
cancelServerQuery();
Canvas.popDialog(JoinServerMenu);
if(isObject(JoinServerMenu.returnGui) && JoinServerMenu.returnGui.isMethod("onReturnTo"))
JoinServerMenu.returnGui.onReturnTo();
}
//----------------------------------------

View file

@ -15,11 +15,11 @@
canSaveDynamicFields = "1";
new GuiControl(JoinServerWindow) {
position = "80 36";
extent = "800 616";
position = "45 56";
extent = "928 655";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
horizSizing = "center";
vertSizing = "center";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
@ -29,21 +29,39 @@
canSave = "1";
canSaveDynamicFields = "0";
new GuiTextCtrl(JS_status) {
text = "No servers found.";
maxLength = "255";
new GuiBitmapCtrl() {
bitmap = "data/ui/images/hudfill.png";
color = "255 255 255 255";
wrap = "0";
position = "0 0";
extent = "928 655";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiTextCtrl() {
text = "JOIN SERVER";
maxLength = "1024";
margin = "0 0 0 0";
padding = "0 0 0 0";
anchorTop = "1";
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "277 31";
extent = "148 18";
minExtent = "8 8";
position = "22 10";
extent = "207 28";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
profile = "MenuHeaderText";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
@ -52,54 +70,28 @@
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiScrollCtrl() {
willFirstRespond = "1";
hScrollBar = "dynamic";
vScrollBar = "alwaysOn";
lockHorizScroll = "0";
lockVertScroll = "0";
constantThumbHeight = "0";
childMargin = "0 0";
mouseWheelScrollSpeed = "-1";
new GuiTextCtrl() {
text = "Player Name:";
maxLength = "255";
margin = "0 0 0 0";
padding = "0 0 0 0";
anchorTop = "1";
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "10 80";
extent = "780 461";
position = "12 47";
extent = "109 18";
minExtent = "8 8";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuScrollProfile";
profile = "MenuSubHeaderText";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
new GuiTextListCtrl(JS_serverList) {
columns = "0 200 270 335 400";
fitParentWidth = "1";
clipColumnText = "0";
position = "1 1";
extent = "762 8";
minExtent = "8 8";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiTextArrayProfile";
visible = "1";
active = "1";
altCommand = "JoinServerDlg.join();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
};
new GuiTextEditCtrl() {
historySize = "0";
@ -114,7 +106,7 @@
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "116 31";
position = "124 47";
extent = "144 18";
minExtent = "8 8";
horizSizing = "right";
@ -129,8 +121,8 @@
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiTextCtrl() {
text = "Player Name:";
new GuiTextCtrl(JS_status) {
text = "No servers found.";
maxLength = "255";
margin = "0 0 0 0";
padding = "0 0 0 0";
@ -138,17 +130,17 @@
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "12 31";
extent = "98 18";
position = "277 47";
extent = "148 18";
minExtent = "8 8";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
profile = "MenuSubHeaderText";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
@ -161,7 +153,7 @@
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "269 59";
position = "269 67";
extent = "36 18";
minExtent = "8 8";
horizSizing = "right";
@ -184,7 +176,7 @@
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "335 59";
position = "335 67";
extent = "38 18";
minExtent = "8 8";
horizSizing = "right";
@ -207,7 +199,7 @@
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "412 59";
position = "412 67";
extent = "28 18";
minExtent = "8 8";
horizSizing = "right";
@ -230,7 +222,7 @@
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "212 59";
position = "212 67";
extent = "20 18";
minExtent = "8 8";
horizSizing = "right";
@ -253,7 +245,7 @@
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "12 59";
position = "12 67";
extent = "63 18";
minExtent = "8 8";
horizSizing = "right";
@ -267,9 +259,59 @@
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiScrollCtrl() {
willFirstRespond = "1";
hScrollBar = "dynamic";
vScrollBar = "dynamic";
lockHorizScroll = "0";
lockVertScroll = "0";
constantThumbHeight = "0";
childMargin = "0 0";
mouseWheelScrollSpeed = "-1";
margin = "0 0 0 0";
padding = "0 0 0 0";
anchorTop = "1";
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "19 98";
extent = "890 501";
minExtent = "8 8";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuScrollProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
new GuiTextListCtrl(JS_serverList) {
columns = "0 200 270 335 400";
fitParentWidth = "1";
clipColumnText = "0";
rowHeightPadding = "2";
position = "1 1";
extent = "765 8";
minExtent = "8 8";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiTextArrayProfile";
visible = "1";
active = "1";
altCommand = "JoinServerDlg.join();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
};
new GuiControl(JS_queryStatus) {
position = "10 541";
extent = "778 35";
position = "16 615";
extent = "900 35";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
@ -360,13 +402,14 @@
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
visible = "0";
active = "1";
command = "Canvas.popDialog(JoinServerMenu);\n\nif(isObject(JoinServerMenu.returnGui) && JoinServerMenu.returnGui.isMethod(\"onReturnTo\")) JoinServerMenu.returnGui.onReturnTo();";
accelerator = "escape";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
hidden = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
@ -381,12 +424,13 @@
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
visible = "0";
active = "1";
command = "JoinServerMenu.queryLan();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
hidden = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
@ -401,12 +445,13 @@
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
visible = "0";
active = "1";
command = "JoinServerMenu.query();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
hidden = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
@ -421,12 +466,13 @@
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
visible = "0";
active = "1";
command = "JoinServerMenu.refresh();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
hidden = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
@ -441,15 +487,31 @@
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
visible = "0";
active = "0";
command = "JoinServerMenu.join();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
hidden = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
};
new GuiControl(JoinServerButtonHolder) {
position = "189 652";
extent = "646 130";
minExtent = "8 2";
horizSizing = "center";
vertSizing = "top";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
};
//--- OBJECT WRITE END ---

View file

@ -1,41 +1,102 @@
function MainMenuGui::onWake(%this)
function MainMenuGui::onAdd(%this)
{
if (isFunction("getWebDeployment") &&
getWebDeployment() &&
isObject(%this-->ExitButton))
%this-->ExitButton.setVisible(false);
MainMenuButtonContainer.hidden = false;
GamepadButtonsGui.initMenuButtons();
}
function MainMenuGui::openSinglePlayerMenu(%this)
function MainMenuGui::onWake(%this)
{
MainMenuButtonList.hidden = false;
}
function MainMenuGui::onSleep(%this)
{
menuMoveMap.pop();
}
function MainMenuButtonHolder::onWake(%this)
{
%this.refresh();
}
function MainMenuButtonHolder::refresh(%this)
{
%this.add(GamepadButtonsGui);
GamepadButtonsGui.clearButtons();
//GamepadButtonsGui.setButton(2, "A", "Select", "Go", "echo(\"FART\");");
//GamepadButtonsGui.setButton(3, "B", "Esc", "Back", "");
GamepadButtonsGui.refreshButtons();
}
function MainMenuButtonList::onAdd(%this)
{
MainMenuButtonList.addRow("Single Player", "openSinglePlayerMenu", 0);
MainMenuButtonList.addRow("Create Server", "openMultiPlayerMenu", 4, -15);
MainMenuButtonList.addRow("Join Server", "openJoinServerMenu", 4, -15);
MainMenuButtonList.addRow("Options", "openOptionsMenu", 6, -15);
MainMenuButtonList.addRow("Open World Editor", "openWorldEditorBtn", 6, -15);
MainMenuButtonList.addRow("Open GUI Editor", "openGUIEditorBtn", 6, -15);
MainMenuButtonList.addRow("Exit Game", "quit", 8, -15);
}
function UIMenuButtonList::onInputEvent(%this, %device, %action, %state)
{
if(%state)
GamepadButtonsGui.processInputs(%device, %action);
}
function UIMenuButtonList::onAxisEvent(%this, %device, %action, %axisVal)
{
GamepadButtonsGui.processAxisEvent(%device, %action);
}
function openSinglePlayerMenu()
{
$pref::HostMultiPlayer=false;
Canvas.pushDialog(ChooseLevelDlg);
ChooseLevelDlg.returnGui = %this;
MainMenuButtonContainer.hidden = true;
ChooseLevelDlg.returnGui = MainMenuGui;
MainMenuButtonList.hidden = true;
MainMenuAppLogo.setBitmap("data/ui/images/Torque-3D-logo");
}
function MainMenuGui::openMultiPlayerMenu(%this)
function openMultiPlayerMenu()
{
$pref::HostMultiPlayer=true;
Canvas.pushDialog(ChooseLevelDlg);
ChooseLevelDlg.returnGui = %this;
MainMenuButtonContainer.hidden = true;
ChooseLevelDlg.returnGui = MainMenuGui;
MainMenuButtonList.hidden = true;
MainMenuAppLogo.setBitmap("data/ui/images/Torque-3D-logo");
}
function MainMenuGui::openOptionsMenu(%this)
function openJoinServerMenu()
{
Canvas.pushDialog(JoinServerMenu);
JoinServerMenu.returnGui = MainMenuGui;
MainMenuButtonList.hidden = true;
}
function openOptionsMenu()
{
Canvas.pushDialog(OptionsMenu);
OptionsMenu.returnGui = %this;
MainMenuButtonContainer.hidden = true;
OptionsMenu.returnGui = MainMenuGui;
MainMenuButtonList.hidden = true;
MainMenuAppLogo.setBitmap("data/ui/images/Torque-3D-logo");
}
function openWorldEditorBtn()
{
fastLoadWorldEdit(1);
}
function openGUIEditorBtn()
{
fastLoadGUIEdit(1);
}
function MainMenuGui::onReturnTo(%this)
{
MainMenuButtonContainer.hidden = false;
MainMenuButtonList.hidden = false;
MainMenuAppLogo.setBitmap("data/ui/images/Torque-3D-logo-shortcut");
}

View file

@ -2,7 +2,7 @@ exec( "tools/gui/profiles.ed.cs" );
//--- OBJECT WRITE BEGIN ---
%guiContent = new GuiChunkedBitmapCtrl(MainMenuGui) {
bitmap = "data/ui/images/BackgroundImage.png";
bitmap = "data/ui/images/background-dark.png";
useVariable = "0";
tile = "0";
position = "0 0";
@ -20,9 +20,10 @@ exec( "tools/gui/profiles.ed.cs" );
canSaveDynamicFields = "1";
Enabled = "1";
isDecoy = "0";
navigationIndex = "-1";
new GuiBitmapButtonCtrl(MainMenuAppLogo) {
bitmap = "data/ui/images/Torque-3D-logo-shortcut";
bitmap = "data/ui/images/Torque-3D-logo";
bitmapMode = "Stretched";
autoFitExtents = "0";
useModifiers = "0";
@ -45,13 +46,33 @@ exec( "tools/gui/profiles.ed.cs" );
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "1";
navigationIndex = "-1";
};
new GuiControl(MainMenuButtonContainer) {
position = "20 193";
extent = "442 381";
new GuiGameListMenuCtrl(MainMenuButtonList) {
class = "UIMenuButtonList";
debugRender = "0";
callbackOnA = "MainMenuButtonList.activateRow();";
callbackOnInputs = "1";
position = "292 103";
extent = "439 561";
minExtent = "8 2";
horizSizing = "right";
horizSizing = "center";
vertSizing = "center";
profile = "DefaultListMenuProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiControl(MainMenuButtonHolder) {
position = "190 652";
extent = "646 130";
minExtent = "8 2";
horizSizing = "center";
vertSizing = "top";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
@ -60,175 +81,6 @@ exec( "tools/gui/profiles.ed.cs" );
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
new GuiDynamicCtrlArrayControl() {
colCount = "1";
colSize = "442";
rowCount = "9";
rowSize = "40";
rowSpacing = "0";
colSpacing = "0";
frozen = "0";
autoCellSize = "1";
fillRowFirst = "0";
dynamicSize = "0";
padding = "0 0 0 0";
position = "0 0";
extent = "442 381";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
new GuiButtonCtrl() {
text = "Singleplayer";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "1";
position = "0 0";
extent = "442 40";
minExtent = "8 8";
horizSizing = "relative";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
active = "1";
command = "MainMenuGui.openSinglePlayerMenu();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiButtonCtrl() {
text = "Create Server";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "0 40";
extent = "442 40";
minExtent = "8 8";
horizSizing = "relative";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
active = "1";
command = "MainMenuGui.openMultiPlayerMenu();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiButtonCtrl() {
text = "Join Server";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "0 80";
extent = "442 40";
minExtent = "8 8";
horizSizing = "relative";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
active = "1";
command = "Canvas.pushDialog(JoinServerMenu);";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiButtonCtrl() {
text = "Options";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "0 120";
extent = "442 40";
minExtent = "8 8";
horizSizing = "relative";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
active = "1";
command = "MainMenuGui.openOptionsMenu();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiButtonCtrl() {
text = "Launch World Editor";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "0 160";
extent = "442 40";
minExtent = "8 8";
horizSizing = "relative";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
active = "1";
command = "fastLoadWorldEdit(1);";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiButtonCtrl() {
text = "Launch GUI Editor";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "0 200";
extent = "442 40";
minExtent = "8 8";
horizSizing = "relative";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
active = "1";
command = "fastLoadGUIEdit(1);";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiButtonCtrl() {
text = "Exit";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "0 240";
extent = "442 40";
minExtent = "8 8";
horizSizing = "relative";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
active = "1";
command = "quit();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
internalName = "ExitButton";
canSave = "1";
canSaveDynamicFields = "0";
};
};
};
};
//--- OBJECT WRITE END ---

View file

@ -0,0 +1,110 @@
//--- OBJECT WRITE BEGIN ---
%guiContent = new GuiControl(MessageBoxDlg) {
position = "0 0";
extent = "1024 768";
minExtent = "8 8";
horizSizing = "width";
vertSizing = "height";
profile = "GuiOverlayProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "1";
helpTag = "0";
new GuiControl(MessageBoxCtrl) {
position = "192 197";
extent = "641 381";
minExtent = "8 2";
horizSizing = "center";
vertSizing = "center";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
new GuiBitmapCtrl() {
bitmap = "data/ui/images/hudfill.png";
color = "255 255 255 255";
wrap = "0";
position = "0 0";
extent = "1156 704";
minExtent = "8 2";
horizSizing = "width";
vertSizing = "height";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiTextCtrl(MessageBoxTitleText) {
text = "OPTIONS";
maxLength = "1024";
margin = "0 0 0 0";
padding = "0 0 0 0";
anchorTop = "1";
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "32 10";
extent = "577 28";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "MenuHeaderText";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiMLTextCtrl(MessageBoxText) {
lineSpacing = "2";
allowColorChars = "0";
maxChars = "-1";
useURLMouseCursor = "0";
position = "81 83";
extent = "481 14";
minExtent = "8 8";
horizSizing = "center";
vertSizing = "center";
profile = "MenuMLSubHeaderText";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiControl(MessageBoxButtonHolder) {
position = "0 237";
extent = "641 130";
minExtent = "8 2";
horizSizing = "center";
vertSizing = "top";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
};
};
//--- OBJECT WRITE END ---

View file

@ -1413,5 +1413,20 @@
canSaveDynamicFields = "0";
};
};
new GuiControl(OptionsButtonHolder) {
position = "190 652";
extent = "646 130";
minExtent = "8 2";
horizSizing = "center";
vertSizing = "top";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
};
//--- OBJECT WRITE END ---

View file

@ -46,112 +46,260 @@
//headbob
//FOV
function OptionsMenuSettingsList::onAdd(%this)
{
%yesNoList = "No\tYes";
%onOffList = "Off\tOn";
%highMedLow = "Low\tMedium\tHigh";
%anisoFilter = "Off\t4\t8\t16";
OptionsMenuSettingsList.addOptionRow("Shadow Quality", "High\tMedium\tLow\tNone", false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Soft Shadow Quality", %highMedLow, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Mesh Quality", %highMedLow, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Texture Quality", %highMedLow, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Terrain Quality", %highMedLow, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Decal Lifetime", %highMedLow, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Ground Cover Density", %highMedLow, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Shader Quality", %highMedLow, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Anisotropic Filtering", %anisoFilter, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Anti-Aliasing", "4\t2\t1\tOff", false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Refresh Rate", "75\t60\t30", false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Parallax", %onOffList, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Water Reflections", %onOffList, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("SSAO", %onOffList, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Depth of Field", %onOffList, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Vignette", %onOffList, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Light Rays", %onOffList, false, "", -1, -30);
}
function OptionsMenu::onWake(%this)
{
OptionsMain.hidden = false;
ControlsMenu.hidden = true;
GraphicsMenu.hidden = true;
AudioMenu.hidden = true;
CameraMenu.hidden = true;
ScreenBrightnessMenu.hidden = true;
OptionsOKButton.hidden = false;
OptionsCancelButton.hidden = false;
OptionsDefaultsButton.hidden = false;
OptionsMenu.tamlReader = new Taml();
OptionsSettingStack.clear();
MainMenuButtonList.hidden = true;
%array = OptionsSettingStack;
%array.clear();
%this.pageTabIndex = 0;
%tab = %this.getTab();
%tab.performClick();
}
function OptionsButtonHolder::onWake(%this)
{
%this.refresh();
}
function OptionsButtonHolder::refresh(%this)
{
OptionsButtonHolder.add(GamepadButtonsGui);
%keyboardMenuBtn = new GuiButtonCtrl(){
text = "Keyboard and Mouse";
profile = GuiMenuButtonProfile;
extent = %array.extent.x SPC "35";
command="ControlsMenu::loadSettings();";
};
GamepadButtonsGui.clearButtons();
%controllerMenuBtn = new GuiButtonCtrl(){
text = "Controller";
profile = GuiMenuButtonProfile;
extent = %array.extent.x SPC "35";
command="DisplayMenu::loadSettings();";
};
GamepadButtonsGui.setButton(0, "LB", "", "Prev Tab", "OptionsMenu.prevTab();", true);
GamepadButtonsGui.setButton(1, "RB", "", "Next Tab", "OptionsMenu.nextTab();", true);
GamepadButtonsGui.setButton(2, "Start", "Enter", "Apply", "OptionsMenu.apply();");
GamepadButtonsGui.setButton(3, "B", "Esc", "Back", "OptionsMenu.backOut();");
GamepadButtonsGui.setButton(7, "Back", "R", "Reset", "OptionsMenu.backOut();");
%displayMenuBtn = new GuiButtonCtrl(){
text = "Display";
profile = GuiMenuButtonProfile;
extent = %array.extent.x SPC "35";
command="DisplayMenu::loadSettings();";
};
GamepadButtonsGui.refreshButtons();
}
function OptionsMenuSettingsList::onChange(%this)
{
return;
%graphicsMenuBtn = new GuiButtonCtrl(){
text = "Graphics";
profile = GuiMenuButtonProfile;
extent = %array.extent.x SPC "35";
command="GraphicsMenu::loadSettings();";
};
OptionsMenuSettingsList.clearOptions();
%currentRowText = %this.getRowLabel(%this.getSelectedRow());
%audioMenuBtn = new GuiButtonCtrl(){
text = "Audio";
profile = GuiMenuButtonProfile;
extent = %array.extent.x SPC "35";
command="AudioMenu::loadSettings();";
};
%gameplayMenuBtn = new GuiButtonCtrl(){
text = "Gameplay";
profile = GuiMenuButtonProfile;
extent = %array.extent.x SPC "35";
command="GameplayMenu::loadSettings();";
};
%array.add(%keyboardMenuBtn);
//%array.add(%controllerMenuBtn);
%array.add(%displayMenuBtn);
%array.add(%graphicsMenuBtn);
%array.add(%audioMenuBtn);
//%array.add(%gameplayMenuBtn);
//We programmatically set up our settings here so we can do some prepwork on the fields/controls
//Presets
/*OptionsMenu.addSettingOption(%array, "Preset", "High", ShadowQualityList, $pref::Video::Resolution);
//AA
OptionsMenu.addSettingOption(%array, "AntiAliasing", "FXAA 4x", ShadowQualityList, $pref::Video::Resolution);
//Lighting
OptionsMenu.addSettingOption(%array, "Shadow Quality", "High", ShadowQualityList, $pref::Video::Resolution);
OptionsMenu.addSettingOption(%array, "Shadow Caching", "On", ShadowQualityList, $pref::Video::Resolution);
OptionsMenu.addSettingOption(%array, "Soft Shadows", "High", ShadowQualityList, $pref::Video::Resolution);
//Models and Textures
OptionsMenu.addSettingOption(%array, "Level of Detail", "High", ShadowQualityList, $pref::Video::Resolution);
OptionsMenu.addSettingOption(%array, "Texture Quality", "High", ShadowQualityList, $pref::Video::Resolution);
OptionsMenu.addSettingOption(%array, "Material Quality", "High", ShadowQualityList, $pref::Video::Resolution);
OptionsMenu.addSettingOption(%array, "Terrain Detail", "High", ShadowQualityList, $pref::Video::Resolution);
OptionsMenu.addSettingOption(%array, "Decal Lifetime", "High", ShadowQualityList, $pref::Video::Resolution);
OptionsMenu.addSettingOption(%array, "Ground Clutter Density", "High", ShadowQualityList, $pref::Video::Resolution);
//Effects
OptionsMenu.addSettingOption(%array, "HDR", "On", ShadowQualityList, $pref::Video::Resolution);
OptionsMenu.addSettingOption(%array, "Parallax", "On", ShadowQualityList, $pref::Video::Resolution);
OptionsMenu.addSettingOption(%array, "Ambient Occlusion", "On", ShadowQualityList, $pref::Video::Resolution);
OptionsMenu.addSettingOption(%array, "Light Rays", "On", ShadowQualityList, $pref::Video::Resolution);
OptionsMenu.addSettingOption(%array, "Depth of Field", "On", ShadowQualityList, $pref::Video::Resolution);
OptionsMenu.addSettingOption(%array, "Vignetting", "On", ShadowQualityList, $pref::Video::Resolution);
OptionsMenu.addSettingOption(%array, "Water Reflections", "On", ShadowQualityList, $pref::Video::Resolution);
OptionsMenu.addSettingOption(%array, "Anisotropic Filtering", "16x", ShadowQualityList, $pref::Video::Resolution);*/
if(!isObject(GraphicsSettingsCache))
if(%currentRowText $= "Display")
{
new ArrayObject(GraphicsSettingsCache){};
OptionsMenuList.populateDisplaySettingsList();
}
else if(%currentRowText $= "Graphics")
{
OptionsMenuList.populateGraphicsSettingsList();
}
else if(%currentRowText $= "Audio")
{
OptionsMenuList.populateAudioSettingsList();
}
else if(%currentRowText $= "Keyboard + Mouse")
{
OptionsMenuList.populateKeyboardMouseSettingsList();
}
else if(%currentRowText $= "Gamepad")
{
OptionsMenuList.populateGamepadSettingsList();
}
}
function OptionsMenu::prevTab(%this)
{
%this.pageTabIndex--;
if(%this.pageTabIndex < 0)
%this.pageTabIndex = 4;
%tabBtn = %this.getTab();
%tabBtn.performClick();
}
function OptionsMenu::nextTab(%this)
{
%this.pageTabIndex++;
if(%this.pageTabIndex > 4)
%this.pageTabIndex = 0;
%tabBtn = %this.getTab();
%tabBtn.performClick();
}
function OptionsMenu::getTab(%this)
{
if(%this.pageTabIndex == 0)
return %this-->DisplayButton;
else if(%this.pageTabIndex == 1)
return %this-->GraphicsButton;
else if(%this.pageTabIndex == 2)
return %this-->AudioButton;
else if(%this.pageTabIndex == 3)
return %this-->KBMButton;
else if(%this.pageTabIndex == 4)
return %this-->GamepadButton;
else
return %this-->DisplayButton;
}
function OptionsMenu::populateDisplaySettingsList(%this)
{
%this.pageTabIndex = 0;
OptionsMenuSettingsList.clearRows();
%resolutionList = getScreenResolutionList();
//OptionsMenuSettingsList.addOptionsRow("Resolution", %yesNoList, false, "", 0, -15);
OptionsMenuSettingsList.addOptionRow("Resolution", %resolutionList, false, "screenResolutionOptionChanged", -1, -30);
}
function _makePrettyResString( %resString, %giveAspectRation )
{
%width = getWord( %resString, $WORD::RES_X );
%height = getWord( %resString, $WORD::RES_Y );
%aspect = %width / %height;
%aspect = mRound( %aspect * 100 ) * 0.01;
switch$( %aspect )
{
case "1.33":
%aspect = "4:3";
case "1.78":
%aspect = "16:9";
default:
%aspect = "";
}
GraphicsSettingsCache.empty();
%outRes = %width @ " x " @ %height;
if ( %giveAspectRation && %aspect !$= "" )
%outRes = %outRes @ " (" @ %aspect @ ")";
return %outRes;
}
function getScreenResolutionList()
{
%returnsList = "";
%resCount = Canvas.getModeCount();
for (%i = 0; %i < %resCount; %i++)
{
%testResString = Canvas.getMode( %i );
%testRes = _makePrettyResString( %testResString );
//sanitize
%found = false;
%retCount = getTokenCount(%returnsList, "\t");
for (%x = 0; %x < %retCount; %x++)
{
%existingEntry = getToken(%returnsList, "\t", %x);
if(%existingEntry $= %testRes)
{
%found = true;
break;
}
}
if(%found)
continue;
if(%i != 0)
%returnsList = %returnsList @ "\t" @ %testRes;
else
%returnsList = %testRes;
}
return %returnsList;
}
function screenResolutionOptionChanged()
{
echo("Resolution Changed to: " @ OptionsMenuSettingsList.getCurrentOption(0));
}
function OptionsMenu::populateGraphicsSettingsList(%this)
{
%this.pageTabIndex = 1;
OptionsMenuSettingsList.clearRows();
%yesNoList = "No\tYes";
%onOffList = "Off\tOn";
%highMedLow = "Low\tMedium\tHigh";
%anisoFilter = "Off\t4\t8\t16";
OptionsMenuSettingsList.addOptionRow("Shadow Quality", "High\tMedium\tLow\tNone", false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Soft Shadow Quality", %highMedLow, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Mesh Quality", %highMedLow, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Texture Quality", %highMedLow, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Terrain Quality", %highMedLow, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Decal Lifetime", %highMedLow, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Ground Cover Density", %highMedLow, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Shader Quality", %highMedLow, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Anisotropic Filtering", %anisoFilter, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Anti-Aliasing", "4\t2\t1\tOff", false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Refresh Rate", "75\t60\t30", false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Parallax", %onOffList, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Water Reflections", %onOffList, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("SSAO", %onOffList, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Depth of Field", %onOffList, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Vignette", %onOffList, false, "", -1, -30);
OptionsMenuSettingsList.addOptionRow("Light Rays", %onOffList, false, "", -1, -30);
}
function OptionsMenu::populateAudioSettingsList(%this)
{
%this.pageTabIndex = 2;
OptionsMenuSettingsList.clearRows();
%yesNoList = "Yes\tNo";
OptionsMenuSettingsList.addOptionRow("Audio Device", %yesNoList, false, "", -1, -15);
}
function OptionsMenu::populateKeyboardMouseSettingsList(%this)
{
%this.pageTabIndex = 3;
OptionsMenuSettingsList.clearRows();
OptionsMenuSettingsList.addOptionRow("Forward", "W", false, "", -1, -15);
}
function OptionsMenu::populateGamepadSettingsList(%this)
{
%this.pageTabIndex = 4;
OptionsMenuSettingsList.clearRows();
}
function OptionsMenuList::activateRow(%this)
{
OptionsMenuSettingsList.setFirstResponder();
}
function OptionsMenuList::backOut(%this)
{
OptionsMenuList.setFirstResponder();
}
function OptionsMenuOKButton::onClick(%this)
@ -161,6 +309,15 @@ function OptionsMenuOKButton::onClick(%this)
OptionsMenu.backOut();
}
//
//
function OptionsMenuSettingsList::backOut(%this)
{
OptionsMenuList.setFirstResponder();
}
//
//
function OptionsMenuCancelButton::onClick(%this)
{
//we don't save, so just back out of the menu

View file

@ -13,23 +13,23 @@
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "1";
returnGui = "MainMenuGui";
tamlReader = "20077";
tamlReader = "20088";
tile = "0";
useVariable = "0";
new GuiControl() {
position = "86 70";
position = "89 75";
extent = "846 618";
minExtent = "8 2";
horizSizing = "center";
vertSizing = "center";
profile = "GuiDefaultProfile";
visible = "1";
visible = "0";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
hidden = "1";
canSave = "1";
canSaveDynamicFields = "0";
@ -128,7 +128,7 @@
minExtent = "8 2";
horizSizing = "width";
vertSizing = "height";
profile = "GuiScrollProfile";
profile = "GuiMenuScrollProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
@ -148,7 +148,7 @@
changeChildSizeToFit = "1";
changeChildPosition = "1";
position = "1 1";
extent = "846 210";
extent = "846 140";
minExtent = "16 16";
horizSizing = "width";
vertSizing = "bottom";
@ -160,6 +160,87 @@
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
new GuiButtonCtrl() {
text = "Keyboard and Mouse";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "0 0";
extent = "846 35";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
active = "1";
command = "ControlsMenu::loadSettings();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiButtonCtrl() {
text = "Display";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "0 35";
extent = "846 35";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
active = "1";
command = "DisplayMenu::loadSettings();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiButtonCtrl() {
text = "Graphics";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "0 70";
extent = "846 35";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
active = "1";
command = "GraphicsMenu::loadSettings();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiButtonCtrl() {
text = "Audio";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "0 105";
extent = "846 35";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
active = "1";
command = "AudioMenu::loadSettings();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
};
};
new GuiMLTextCtrl() {
@ -183,7 +264,6 @@
canSaveDynamicFields = "0";
};
new GuiButtonCtrl() {
class="OptionsMenuOKButton";
text = "OK";
groupNum = "-1";
buttonType = "PushButton";
@ -199,11 +279,11 @@
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
class = "OptionsMenuOKButton";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiButtonCtrl() {
class="OptionsMenuDefaultsButton";
text = "Defaults";
groupNum = "-1";
buttonType = "PushButton";
@ -219,11 +299,11 @@
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
class = "OptionsMenuDefaultsButton";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiButtonCtrl() {
class="OptionsMenuCancelButton";
text = "Cancel";
groupNum = "-1";
buttonType = "PushButton";
@ -239,9 +319,283 @@
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
class = "OptionsMenuCancelButton";
canSave = "1";
canSaveDynamicFields = "0";
};
};
new GuiControl() {
position = "48 56";
extent = "928 655";
minExtent = "8 2";
horizSizing = "center";
vertSizing = "center";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
new GuiTextCtrl() {
text = "OPTIONS";
maxLength = "1024";
margin = "0 0 0 0";
padding = "0 0 0 0";
anchorTop = "1";
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "22 10";
extent = "120 28";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "MenuHeaderText";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiBitmapBarCtrl() {
percent = "100";
vertical = "0";
flipClip = "0";
bitmap = "data/ui/images/hudfill.png";
color = "255 255 255 255";
position = "0 40";
extent = "846 618";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiDefaultProfile";
visible = "0";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
hidden = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiButtonCtrl() {
text = "Display";
groupNum = "1";
buttonType = "RadioButton";
useMouseEvents = "0";
position = "114 49";
extent = "140 32";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
internalName = "DisplayButton";
command="OptionsMenu.populateDisplaySettingsList();";
};
new GuiButtonCtrl() {
text = "Graphics";
groupNum = "1";
buttonType = "RadioButton";
useMouseEvents = "0";
position = "258 49";
extent = "140 32";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
internalName = "GraphicsButton";
command="OptionsMenu.populateGraphicsSettingsList();";
};
new GuiButtonCtrl() {
text = "Audio";
groupNum = "1";
buttonType = "RadioButton";
useMouseEvents = "0";
position = "402 49";
extent = "140 32";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
internalName = "AudioButton";
command="OptionsMenu.populateAudioSettingsList();";
};
new GuiButtonCtrl() {
text = "Keyboard + Mouse";
groupNum = "1";
buttonType = "RadioButton";
useMouseEvents = "0";
position = "547 49";
extent = "140 32";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
internalName = "KBMButton";
command="OptionsMenu.populateKeyboardMouseSettingsList();";
};
new GuiButtonCtrl() {
text = "Gamepad";
groupNum = "1";
buttonType = "RadioButton";
useMouseEvents = "0";
position = "691 49";
extent = "140 32";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
internalName = "GamepadButton";
command="OptionsMenu.populateGamepadSettingsList();";
};
new GuiScrollCtrl() {
willFirstRespond = "1";
hScrollBar = "alwaysOff";
vScrollBar = "dynamic";
lockHorizScroll = "0";
lockVertScroll = "0";
constantThumbHeight = "0";
childMargin = "0 0";
mouseWheelScrollSpeed = "-1";
margin = "0 0 0 0";
padding = "0 0 0 0";
anchorTop = "1";
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "1 83";
extent = "622 573";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuScrollProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
new GuiGameListMenuCtrl(OptionsMenuSettingsList) {
class = "UIMenuButtonList";
debugRender = "0";
callbackOnA = "OptionsMenuSettingsList.activateRow();";
callbackOnB = "OptionsMenuSettingsList.backOut();";
callbackOnInputs = "1";
position = "1 1";
extent = "621 141";
minExtent = "8 2";
horizSizing = "width";
vertSizing = "bottom";
profile = "DefaultListMenuProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
};
new GuiTextCtrl(OptionName) {
text = "Option";
maxLength = "1024";
margin = "0 0 0 0";
padding = "0 0 0 0";
anchorTop = "1";
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "635 94";
extent = "293 17";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "MenuSubHeaderText";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiMLTextCtrl(OptionDescription) {
lineSpacing = "2";
allowColorChars = "0";
maxChars = "-1";
text = "This is a placeholder text for an option.";
useURLMouseCursor = "0";
position = "635 126";
extent = "293 14";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMLWhiteTextProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
};
new GuiControl(OptionsButtonHolder) {
position = "189 652";
extent = "646 130";
minExtent = "8 2";
horizSizing = "center";
vertSizing = "top";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
};
//--- OBJECT WRITE END ---

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Some files were not shown because too many files have changed in this diff Show more