Merge branch 'BaseUIUpdateWipwork_20231219' of https://github.com/Areloch/Torque3D into development

This commit is contained in:
Areloch 2023-12-26 21:29:24 -06:00
commit 6e101595d6
76 changed files with 4162 additions and 6304 deletions

View file

@ -210,7 +210,7 @@ bool AssetManager::addModuleDeclaredAssets( ModuleDefinition* pModuleDefinition
dSprintf(extensionBuffer, sizeof(extensionBuffer), "*.%s", pDeclaredAssets->getExtension());
// Scan declared assets at location.
if ( !scanDeclaredAssets( filePathBuffer, extensionBuffer, pDeclaredAssets->getRecurse(), pModuleDefinition ) )
if ( !scanDeclaredAssets( filePathBuffer, extensionBuffer, pDeclaredAssets->getRecurse(), pModuleDefinition ) && mEchoInfo)
{
// Warn.
Con::warnf( "AssetManager::addModuleDeclaredAssets() - No assets found at location '%s' with extension '%s'.", filePathBuffer, pDeclaredAssets->getExtension() );

View file

@ -83,6 +83,8 @@ IMPLEMENT_CALLBACK( GuiButtonBaseCtrl, onMouseDragged, void, (), (),
"pressed the left mouse button on the control and then moves the mouse over a certain distance threshold with "
"the mouse button still pressed." );
IMPLEMENT_CALLBACK(GuiButtonBaseCtrl, onHighlighted, void, (bool highlighted), (highlighted),
"Called when the status of the button being highlighted changes.");
ImplementEnumType( GuiButtonType,
"Type of button control.\n\n"
@ -290,6 +292,7 @@ void GuiButtonBaseCtrl::onMouseEnter(const GuiEvent &event)
{
mDepressed = true;
mHighlighted = true;
onHighlighted_callback(true);
}
else
{
@ -297,6 +300,7 @@ void GuiButtonBaseCtrl::onMouseEnter(const GuiEvent &event)
SFX->playOnce(mProfile->getSoundButtonOverProfile());
mHighlighted = true;
onHighlighted_callback(true);
}
}
@ -311,6 +315,7 @@ void GuiButtonBaseCtrl::onMouseLeave(const GuiEvent &)
if( isMouseLocked() )
mDepressed = false;
mHighlighted = false;
onHighlighted_callback(false);
}
//-----------------------------------------------------------------------------

View file

@ -73,6 +73,7 @@ class GuiButtonBaseCtrl : public GuiControl
DECLARE_CALLBACK( void, onMouseEnter, () );
DECLARE_CALLBACK( void, onMouseLeave, () );
DECLARE_CALLBACK( void, onMouseDragged, () );
DECLARE_CALLBACK( void, onHighlighted, (bool));
/// @}
@ -95,9 +96,18 @@ class GuiButtonBaseCtrl : public GuiControl
bool getStateOn() const { return mStateOn; }
void setDepressed( bool depressed ) { mDepressed = depressed; }
void resetState() {mDepressed = false; mHighlighted = false;}
void resetState()
{
mDepressed = false;
mHighlighted = false;
onHighlighted_callback(false);
}
void setHighlighted(bool highlighted) { mHighlighted = highlighted; }
void setHighlighted(bool highlighted)
{
mHighlighted = highlighted;
onHighlighted_callback(highlighted);
}
bool isHighlighted() { return mHighlighted; }
void acceleratorKeyPress(U32 index);

View file

@ -253,7 +253,7 @@ void GuiIconButtonCtrl::renderButton( Point2I &offset, const RectI& updateRect )
if (mProfile->mBorder != 0)
renderFilledBorder(boundsRect, borderColor, fillColor, mProfile->mBorderThickness);
else
GFX->getDrawUtil()->drawRectFill(boundsRect, mProfile->mFillColor);
GFX->getDrawUtil()->drawRectFill(boundsRect, fillColor);
}
}
else if(mHighlighted && mActive)
@ -269,7 +269,7 @@ void GuiIconButtonCtrl::renderButton( Point2I &offset, const RectI& updateRect )
if (mProfile->mBorder != 0)
renderFilledBorder(boundsRect, borderColor, fillColor, mProfile->mBorderThickness);
else
GFX->getDrawUtil()->drawRectFill(boundsRect, mProfile->mFillColor);
GFX->getDrawUtil()->drawRectFill(boundsRect, fillColor);
}
}
else
@ -388,6 +388,7 @@ void GuiIconButtonCtrl::renderButton( Point2I &offset, const RectI& updateRect )
start.x = iconRect.extent.x + mButtonMargin.x + mTextMargin;
}
drawer->setBitmapModulation(fontColor);
drawer->drawText( mProfile->mFont, start + offset, text, mProfile->mFontColors );
}
@ -395,6 +396,7 @@ void GuiIconButtonCtrl::renderButton( Point2I &offset, const RectI& updateRect )
{
Point2I start( mTextMargin, ( getHeight() - mProfile->mFont->getHeight() ) / 2 );
drawer->setBitmapModulation(fontColor);
drawer->drawText( mProfile->mFont, start + offset, text, mProfile->mFontColors );
}
@ -408,6 +410,7 @@ void GuiIconButtonCtrl::renderButton( Point2I &offset, const RectI& updateRect )
}
else
start.set( ( getWidth() - textWidth ) / 2, ( getHeight() - mProfile->mFont->getHeight() ) / 2 );
drawer->setBitmapModulation( fontColor );
drawer->drawText( mProfile->mFont, start + offset, text, mProfile->mFontColors );
}

View file

@ -218,7 +218,8 @@ GuiControl::GuiControl() : mAddGroup( NULL ),
mLangTable(NULL),
mFirstResponder(NULL),
mHorizSizing(horizResizeRight),
mVertSizing(vertResizeBottom)
mVertSizing(vertResizeBottom),
mCategory(StringTable->EmptyString())
{
mConsoleVariable = StringTable->EmptyString();
mAcceleratorKey = StringTable->EmptyString();
@ -294,6 +295,10 @@ void GuiControl::initPersistFields()
addField("accelerator", TypeString, Offset(mAcceleratorKey, GuiControl),
"Key combination that triggers the control's primary action when the control is on the canvas." );
addField("category", TypeString, Offset(mCategory, GuiControl),
"Name of the category this gui control should be grouped into for organizational purposes. Primarily for tooling.");
endGroup( "Control" );
addGroup( "ToolTip" );

View file

@ -218,6 +218,8 @@ class GuiControl : public SimGroup
String mAltConsoleCommand;
String mTooltip;
StringTableEntry mCategory;
/// @}

View file

@ -40,6 +40,7 @@
#include "gui/editor/editorFunctions.h"
#include "math/mEase.h"
#include "math/mathTypes.h"
#include "sim/actionMap.h"
//-----------------------------------------------------------------------------
@ -60,7 +61,7 @@ GuiControl* GuiInspectorTypeMenuBase::constructEditControl()
GuiPopUpMenuCtrl *menu = dynamic_cast<GuiPopUpMenuCtrl*>(retCtrl);
// Let's make it look pretty.
retCtrl->setDataField( StringTable->insert("profile"), NULL, "GuiPopUpMenuProfile" );
retCtrl->setDataField( StringTable->insert("profile"), NULL, "ToolsGuiPopupMenuProfile" );
_registerEditControl( retCtrl );
// Configure it to update our value when the popup is closed
@ -387,6 +388,44 @@ void GuiInspectorTypeGuiProfile::consoleInit()
ConsoleBaseType::getType( TYPEID< GuiControlProfile >() )->setInspectorFieldType("GuiInspectorTypeGuiProfile");
}
//-----------------------------------------------------------------------------
// GuiInspectorTypeActionMap
//-----------------------------------------------------------------------------
IMPLEMENT_CONOBJECT(GuiInspectorTypeActionMap);
ConsoleDocClass(GuiInspectorTypeActionMap,
"@brief Inspector field type for ActionMap\n\n"
"Editor use only.\n\n"
"@internal"
);
void GuiInspectorTypeActionMap::_populateMenu(GuiPopUpMenuCtrl* menu)
{
// Add the action maps to the menu.
//First add a blank entry so you can clear the action map
menu->addEntry("", 0);
SimGroup* grp = Sim::getRootGroup();
SimSetIterator iter(grp);
for (; *iter; ++iter)
{
ActionMap* actionMap = dynamic_cast<ActionMap*>(*iter);
if (!actionMap)
continue;
menu->addEntry(actionMap->getName(), actionMap->getId());
}
menu->sort();
}
void GuiInspectorTypeActionMap::consoleInit()
{
Parent::consoleInit();
ConsoleBaseType::getType(TYPEID< ActionMap >())->setInspectorFieldType("GuiInspectorTypeActionMap");
}
//-----------------------------------------------------------------------------
// GuiInspectorTypeCheckBox
//-----------------------------------------------------------------------------

View file

@ -186,6 +186,20 @@ public:
virtual void _populateMenu( GuiPopUpMenuCtrl *menu );
};
//-----------------------------------------------------------------------------
// GuiInspectorTypeActionMap Class
//-----------------------------------------------------------------------------
class GuiInspectorTypeActionMap : public GuiInspectorTypeMenuBase
{
private:
typedef GuiInspectorTypeMenuBase Parent;
public:
DECLARE_CONOBJECT(GuiInspectorTypeActionMap);
static void consoleInit();
virtual void _populateMenu(GuiPopUpMenuCtrl* menu);
};
//-----------------------------------------------------------------------------
// GuiInspectorTypeCheckBox Class
//-----------------------------------------------------------------------------

View file

@ -64,6 +64,7 @@ GuiInputCtrl::GuiInputCtrl()
mSendModifierEvents(false),
mIgnoreMouseEvents(false)
{
mActionmap = nullptr;
}
//------------------------------------------------------------------------------
@ -80,6 +81,7 @@ void GuiInputCtrl::initPersistFields()
"If true, Make events will be sent for modifier keys (Default false).");
addField("ignoreMouseEvents", TypeBool, Offset(mIgnoreMouseEvents, GuiInputCtrl),
"If true, any events from mouse devices will be passed through.");
addField("actionMap", TYPEID<ActionMap>(), Offset(mActionmap, GuiInputCtrl), "The name of an action map to push/pop on the input stack alongside the wake/sleep of this control.");
endGroup("GuiInputCtrl");
Parent::initPersistFields();
@ -103,6 +105,12 @@ bool GuiInputCtrl::onWake()
if( !smDesignTime && !mIgnoreMouseEvents)
mouseLock();
if(mActionmap != nullptr)
{
SimSet* actionMapSet = Sim::getActiveActionMapSet();
actionMapSet->pushObject(mActionmap);
}
setFirstResponder();
@ -115,6 +123,13 @@ void GuiInputCtrl::onSleep()
{
Parent::onSleep();
mouseUnlock();
if (mActionmap != nullptr)
{
SimSet* actionMapSet = Sim::getActiveActionMapSet();
actionMapSet->removeObject(mActionmap);
}
clearFirstResponder();
}
@ -158,6 +173,9 @@ bool GuiInputCtrl::onInputEvent( const InputEventInfo &event )
if (mIgnoreMouseEvents && event.deviceType == MouseDeviceType)
return false;
if (mActionmap != nullptr)
return false;
char deviceString[32];
if ( event.action == SI_MAKE )
{

View file

@ -26,6 +26,7 @@
#ifndef _GUIMOUSEEVENTCTRL_H_
#include "gui/utility/guiMouseEventCtrl.h"
#endif
#include "sim/actionMap.h"
/// A control that locks the mouse and reports all keyboard input events
@ -38,6 +39,8 @@ protected:
bool mSendModifierEvents;
bool mIgnoreMouseEvents;
ActionMap* mActionmap;
public:
typedef GuiMouseEventCtrl Parent;

View file

@ -729,7 +729,8 @@ bool ActionMap::nextBoundNode( const char* function, U32 &devMapIndex, U32 &node
for ( U32 j = nodeIndex; j < dvcMap->nodeMap.size(); j++ )
{
const Node* node = &dvcMap->nodeMap[j];
if ( !( node->flags & Node::BindCmd ) && ( dStricmp( function, node->consoleFunction ) == 0 ) )
if ( ( (node->flags & Node::BindCmd) && (dStricmp(function, node->makeConsoleCommand) == 0 || dStricmp(function, node->breakConsoleCommand) == 0) )
|| (!(node->flags & Node::BindCmd) && dStricmp( function, node->consoleFunction ) == 0 ) )
{
devMapIndex = i;
nodeIndex = j;
@ -1805,6 +1806,7 @@ bool ActionMap::handleEvent(const InputEventInfo* pEvent)
for (SimSet::iterator itr = pActionMapSet->end() - 1;
itr > pActionMapSet->begin(); itr--) {
ActionMap* pMap = static_cast<ActionMap*>(*itr);
if (pMap->processAction(pEvent) == true)
return true;
}

View file

@ -52,7 +52,7 @@ new GuiControlProfile(GuiConsoleTextProfile)
category = "Core";
};
$ConsoleDefaultFillColor = "12 14 19 175";
$ConsoleDefaultFillColor = "0 0 0 175";
if(!isObject(ConsoleScrollProfile))
new GuiControlProfile(ConsoleScrollProfile : GuiScrollProfile)

View file

@ -147,25 +147,31 @@ new GuiControlProfile(GuiTextEditProfile)
category = "Core";
};
if(!isObject(GuiMenuScrollProfile))
new GuiControlProfile(GuiMenuScrollProfile)
if(!isObject(GuiScrollProfile))
new GuiControlProfile(GuiScrollProfile)
{
opaque = true;
fontColor = $TextMediumEmphasisColor;
fontColorHL = $TextMediumEmphasisColor;
fontColorNA = $TextDisabledColor;
fontColorSEL = $TextMediumEmphasisColor;
fillColor = "40 40 40";
opaque = "0";
fontColor = "200 200 200 255";
fontColorHL = "200 200 200 255";
fontColorNA = "108 108 108 255";
fontColorSEL = "200 200 200 255";
fillColor = "0 0 0 0";
fillColorHL = "56 56 56";
fillColorNA = "40 40 40";
borderColor = "87 87 87";
borderColorNA = "0 0 0";
borderColorHL = "255 255 255";
border = true;
border = "0";
bitmapAsset = "Core_GUI:scrollBar_image";
hasBitmapArray = true;
category = "Core";
fontSize = 15;
fontColors[0] = "200 200 200 255";
fontColors[1] = "200 200 200 255";
fontColors[2] = "108 108 108 255";
fontColors[3] = "200 200 200 255";
fontColors[8] = "Fuchsia";
fontColors[9] = "255 0 255 255";
};
if(!isObject(GuiOverlayProfile))
@ -261,3 +267,24 @@ new GuiControlProfile(GuiScrollProfile)
bitmapAsset = "Core_GUI:scrollBar_image";
category = "Core";
};
// ---------------------------------------------------------------------------
singleton GuiControlProfile( GuiInputCtrlProfile )
{
tab = true;
canKeyFocus = true;
category = "Core";
};
singleton GuiControlProfile (GuiTextProfile)
{
justify = "left";
fontColor = "20 20 20";
category = "Core";
};
singleton GuiControlProfile (GuiTextRightProfile : GuiTextProfile)
{
justify = "right";
category = "Core";
};

View file

@ -7,7 +7,7 @@ function Core_SFX::onCreate(%this)
exec("./scripts/audioDescriptions." @ $TorqueScriptFileExtension);
exec("./scripts/audioEnvironments." @ $TorqueScriptFileExtension);
exec("./scripts/audioStates." @ $TorqueScriptFileExtension);
exec("./scripts/audioOptions." @ $TorqueScriptFileExtension);
}
function Core_SFX::onDestroy(%this)

View file

@ -0,0 +1,103 @@
new SimGroup(AudioSettingsGroup)
{
class = "PrimaryOptionsGroup";
displayName = "Audio";
new SimGroup()
{
class = "SubOptionsGroup";
displayName = "Audio Devices";
new SimGroup(AudioSettingsProviderGroup)
{
class = "AudioOptionsSettings";
OptionName = "Audio Provider";
Description = "";
};
new SimGroup(AudioSettingsDeviceGroup)
{
class = "AudioOptionsSettings";
OptionName = "Audio Device";
Description = "";
};
};
};
function AudioSettingsGroup::populateSettings(%this)
{
AudioSettingsProviderGroup.clear();
AudioSettingsDeviceGroup.clear();
%buffer = sfxGetAvailableDevices();
%count = getRecordCount( %buffer );
for(%i = 0; %i < %count; %i++)
{
%record = getRecord(%buffer, %i);
%provider = getField(%record, 0);
%device = getField(%record, 1);
//When the client is actually running, we don't care about null audo devices
if(%provider $= "null")
continue;
//We can't have duplicate providers, so double check for uniqueness
%foundProvider = false;
foreach(%registeredProviders in AudioSettingsProviderGroup)
{
if(%registeredProviders.displayName $= %provider)
{
%foundProvider = true;
break;
}
}
if(!%foundProvider)
{
//Provider entry
%providerEntry = new ArrayObject()
{
class = "OptionsQualityLevel";
displayName = %provider;
key["$pref::SFX::provider"] = %provider;
};
AudioSettingsProviderGroup.add(%providerEntry);
}
//Device Entry
%deviceEntry = new ArrayObject()
{
class = "OptionsQualityLevel";
displayName = %device;
provider = %provider; //this is for filtering later, if we need to
key["$pref::SFX::device"] = %device;
};
AudioSettingsDeviceGroup.add(%deviceEntry);
}
}
function AudioSettingsProviderGroup::onApply(%this)
{
updateAudioOptionsSettings();
}
function AudioSettingsDeviceGroup::onApply(%this)
{
updateAudioOptionsSettings();
}
function updateAudioOptionsSettings()
{
if ( !sfxCreateDevice( $pref::SFX::provider,
$pref::SFX::device,
$pref::SFX::useHardware,
-1 ) )
error( "Unable to create SFX device: " @ $pref::SFX::provider
SPC $pref::SFX::device
SPC $pref::SFX::useHardware );
}

View file

@ -17,13 +17,20 @@ addKeyRemap("Ascend", "ExampleMoveMap", "keyboard", "moveup", "Makes the camera
addKeyRemap("Descend", "ExampleMoveMap", "keyboard", "movedown", "Makes the camera descend");
addKeyRemap("Jump", "ExampleMoveMap", "keyboard", "jump", "Jump");
addKeyRemap("Forward", "ExampleMoveMap", "gamepad", "gamePadMoveY", "Forward Movement");
addKeyRemap("Backward", "ExampleMoveMap", "gamepad", "gamePadMoveY", "Backward Movement");
addKeyRemap("Strafe Left", "ExampleMoveMap", "gamepad", "gamePadMoveX", "Left Strafing Movement");
addKeyRemap("Strafe Right", "ExampleMoveMap", "gamepad", "gamePadMoveX", "Right Strafing Movement");
addKeyRemap("Jump", "ExampleMoveMap", "gamepad", "jump", "Jump");
//------------------------------------------------------------------------------
// Non-remapable binds
//------------------------------------------------------------------------------
ExampleMoveMap.bind( keyboard, F2, showPlayerList );
ExampleMoveMap.bind(keyboard, "ctrl h", hideHUDs);
ExampleMoveMap.bind(keyboard, "alt p", doScreenShotHudless);
ExampleMoveMap.bindCmd(keyboard, "escape", "", "Canvas.pushDialog(PauseMenu);");
ExampleMoveMap.bindCmd(keyboard, "escape", "", "Canvas.pushDialog(GameMenu);");
ExampleMoveMap.bindCmd(gamepad, btn_start, "Canvas.pushDialog(GameMenu);", "" );
//------------------------------------------------------------------------------
// Movement Keys

View file

@ -39,21 +39,12 @@ function UI::initClient(%this)
//Load UI stuff
//Profiles
%this.queueExec("./scripts/profiles");
//Navigation Utility Scripts
%this.queueExec("./scripts/menuNavigation");
//Now gui files
%this.queueExec("./scripts/menuInputHandling");
%this.queueExec("./guis/mainMenu");
%this.queueExec("./guis/mainMenu.gui");
%this.queueExec("./guis/mainMenuButtons");
%this.queueExec("./guis/mainMenuButtons.gui");
%this.queueExec("./guis/chooseLevelDlg");
%this.queueExec("./guis/chooseLevelDlg.gui");
%this.queueExec("./guis/ChooseLevelMenu");
%this.queueExec("./guis/ChooseLevelMenu.gui");
%this.queueExec("./guis/joinServerMenu");
%this.queueExec("./guis/joinServerMenu.gui");
@ -63,9 +54,10 @@ function UI::initClient(%this)
%this.queueExec("./guis/optionsMenu");
%this.queueExec("./guis/optionsMenu.gui");
%this.queueExec("./guis/pauseMenu");
%this.queueExec("./guis/pauseMenu.gui");
%this.queueExec("./guis/GameMenu");
%this.queueExec("./guis/GameMenu.gui");
%this.queueExec("./guis/remapDlg");
%this.queueExec("./guis/remapDlg.gui");
%this.queueExec("./guis/remapConfirmDlg.gui");
@ -73,21 +65,18 @@ function UI::initClient(%this)
%this.queueExec("./guis/profiler.gui");
%this.queueExec("./guis/netGraphGui.gui");
%this.queueExec("./guis/RecordingsDlg.gui");
%this.queueExec("./guis/guiMusicPlayer");
%this.queueExec("./guis/guiMusicPlayer.gui");
%this.queueExec("./guis/startupGui");
%this.queueExec("./guis/startupGui.gui");
// Load Editor Dialogs
%this.queueExec("./guis/messageBoxDlg");
%this.queueExec("./guis/messageBoxDlg.gui");
%this.queueExec("./guis/SystemMenu");
%this.queueExec("./guis/SystemMenu.gui");
//Load scripts
%this.queueExec("./scripts/controlsMenu");
%this.queueExec("./scripts/messageBoxes");
%this.queueExec("./scripts/help");
%this.queueExec("./scripts/cursors");
if(isToolBuild())
@ -97,3 +86,8 @@ function UI::initClient(%this)
function UI::onCreateClientConnection(%this){}
function UI::onDestroyClientConnection(%this){}
function UI::registerGameMenus(%this, %menusArrayObj)
{
%menusArrayObj.add("System", SystemMenu);
}

View file

@ -1,5 +0,0 @@
<GUIAsset
AssetName="ChooseLevelDlg"
scriptFile="@assetFile=chooseLevelDlg"
GUIFile="@assetFile=chooseLevelDlg.gui"
VersionId="1"/>

View file

@ -0,0 +1,5 @@
<GUIAsset
AssetName="ChooseLevelMenu"
scriptFile="@assetFile=ChooseLevelMenu"
GUIFile="@assetFile=ChooseLevelMenu.gui"
VersionId="1"/>

View file

@ -0,0 +1,96 @@
//--- OBJECT WRITE BEGIN ---
$guiContent = new GuiControl(ChooseLevelMenu) {
extent = "1280 720";
minExtent = "8 8";
horizSizing = "width";
vertSizing = "height";
profile = "GuiMenuBackgroundProfile";
category = "BaseUI";
tooltipProfile = "GuiToolTipProfile";
isContainer = "1";
canSaveDynamicFields = "1";
launchInEditor = "0";
new GuiInputCtrl(ChooseLevelInputHandler) {
ignoreMouseEvents = "1";
ActionMap = "ChooseLevelActionMap";
position = "-50 0";
extent = "2186 851";
horizSizing = "width";
vertSizing = "height";
profile = "GuiInputCtrlProfile";
tooltipProfile = "GuiToolTipProfile";
};
new GuiPanel(ChooseLevelTitlePanel) {
extent = "1281 60";
horizSizing = "width";
profile = "GuiMenuPanelProfile";
tooltipProfile = "GuiToolTipProfile";
new GuiTextCtrl(ChooseLevelTitleText) {
text = "SINGLE PLAYER";
position = "22 23";
extent = "220 28";
profile = "MenuHeaderText";
tooltipProfile = "GuiToolTipProfile";
};
};
new GuiPanel(ChooseLevelButtonPanel) {
position = "0 683";
extent = "1281 40";
horizSizing = "width";
vertSizing = "top";
profile = "GuiMenuPanelProfile";
tooltipProfile = "GuiToolTipProfile";
new GuiIconButtonCtrl(ChooseLevelStartBtn) {
BitmapAsset = "UI:Keyboard_Black_Return_image";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Center";
text = "Start";
position = "1115 0";
extent = "140 40";
horizSizing = "left";
vertSizing = "center";
profile = "GuiMenuButtonProfile";
command = "OptionsMenu.applySettings();";
tooltipProfile = "GuiToolTipProfile";
};
new GuiIconButtonCtrl(ChooseLevelBackBtn) {
BitmapAsset = "UI:Keyboard_Black_Escape_image";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Center";
text = "Back";
position = "16 0";
extent = "140 40";
vertSizing = "center";
profile = "GuiMenuButtonProfile";
command = "Canvas.popDialog();";
tooltipProfile = "GuiToolTipProfile";
};
};
new GuiScrollCtrl(LevelPreviewScroll) {
hScrollBar = "dynamic";
vScrollBar = "alwaysOff";
position = "0 118";
extent = "1283 500";
horizSizing = "width";
vertSizing = "center";
profile = "GuiMenuScrollProfile";
tooltipProfile = "GuiToolTipProfile";
new GuiStackControl(LevelPreviewArray) {
position = "1 1";
extent = "1280 480";
vertSizing = "center";
profile = "GuiMenuDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
padding = "5";
stackingType = "Horizontal";
};
};
};
//--- OBJECT WRITE END ---

View file

@ -0,0 +1,211 @@
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
//----------------------------------------
function ChooseLevelMenu::onAdd( %this )
{
if(!isObject(ChooseLevelAssetQuery))
new AssetQuery(ChooseLevelAssetQuery);
}
function ChooseLevelMenu::onWake(%this)
{
LevelPreviewArray.clear();
ChooseLevelAssetQuery.clear();
AssetDatabase.findAssetType(ChooseLevelAssetQuery, "LevelAsset");
%count = ChooseLevelAssetQuery.getCount();
if(%count == 0 && !IsDirectory("tools"))
{
//We have no levels found. Prompt the user to open the editor to the default level if the tools are present
MessageBoxOK("Error", "No levels were found in any modules. Please ensure you have modules loaded that contain gameplay code and level files.",
"Canvas.popDialog(ChooseLevelMenu); if(isObject(ChooseLevelMenu.returnGui) && ChooseLevelMenu.returnGui.isMethod(\"onReturnTo\")) ChooseLevelMenu.returnGui.onReturnTo();");
ChooseLevelAssetQuery.delete();
return;
}
for(%i=0; %i < %count; %i++)
{
%assetId = ChooseLevelAssetQuery.getAsset(%i);
if(AssetDatabase.getAssetModule(%assetId).ModuleId $= "ToolsModule")
continue;
%levelAsset = AssetDatabase.acquireAsset(%assetId);
%file = %levelAsset.getLevelPath();
if ( !isFile(%file) )
continue;
%levelPreviewImg = %levelAsset.getPreviewImagePath();
if (!isFile(%levelPreviewImg))
%levelPreviewImg = "UI:no_preview_image";
%preview = new GuiContainer() {
extent = "480 480";
levelAssetId = %assetId;
new GuiButtonCtrl() {
position = "0 0";
extent = "480 480";
buttonType = "ToggleButton";
profile = GuiMenuButtonLeftJustProfile;
horizSizing = "width";
vertSizing = "height";
internalName = "button";
class = "LevelPreviewButton";
command = "$selectedLevelAsset = " @ %assetId @ ";";
altCommand = "ChooseLevelBegin(1);"; //allow doubleclick to quick action it
};
new GuiBitmapCtrl() {
position = "20 0";
extent = "440 440";
BitmapAsset = %levelPreviewImg;
horizSizing = "width";
vertSizing = "bottom";
profile = GuiNonModalDefaultProfile;
};
new GuiTextCtrl() {
position = "20 445";
extent = "440 15";
text = %levelAsset.levelName;
profile = MenuSubHeaderText;
internalName = "levelNameTxt";
};
new GuiMLTextCtrl() {
position = "20 465";
extent = "440 15";
text = %levelAsset.levelDescription;
profile = GuiMLTextProfile;
internalName = "levelDescTxt";
};
};
LevelPreviewArray.add(%preview);
}
// Also add the new level mission as defined in the world editor settings
// if we are choosing a level to launch in the editor.
if ( %this.launchInEditor )
{
%this.addMissionFile( "tools/levels/DefaultEditorLevel.mis" );
}
//LevelList.setSelected(0);
if(!$pref::HostMultiPlayer)
ChooseLevelTitleText.setText("SINGLE PLAYER");
else
ChooseLevelTitleText.setText("CREATE SERVER");
$MenuList = LevelPreviewArray;
$MenuList.listPosition = 0;
$MenuList.syncGui();
}
if(!isObject( ChooseLevelActionMap ) )
{
new ActionMap(ChooseLevelActionMap){};
//Null the up/down nav so we can swap in left/right nav
ChooseLevelActionMap.bindCmd( keyboard, w, "" );
ChooseLevelActionMap.bindCmd( keyboard, s, "" );
ChooseLevelActionMap.bindCmd( gamepad, yaxis, "" );
ChooseLevelActionMap.bindCmd( gamepad, upov, "" );
ChooseLevelActionMap.bindCmd( gamepad, dpov, "" );
ChooseLevelActionMap.bind( keyboard, a, BaseUINavigatePrev );
ChooseLevelActionMap.bind( keyboard, d, BaseUINavigateNext );
ChooseLevelActionMap.bind( gamepad, xaxis, "D", "-0.23 0.23", BaseUIStickNavigate );
ChooseLevelActionMap.bind( gamepad, lpov, BaseUINavigatePrev );
ChooseLevelActionMap.bind( gamepad, rpov, BaseUINavigateNext );
ChooseLevelActionMap.bind( keyboard, Enter, ChooseLevelBegin );
ChooseLevelActionMap.bind( gamepad, btn_a, ChooseLevelBegin );
}
function LevelPreviewArray::syncGUI(%this)
{
%this.callOnChildren("setHighlighted", false);
%btn = %this.getObject(%this.listPosition);
%btn-->button.setHighlighted(true);
$selectedLevelAsset = %btn.levelAssetId;
}
function ChooseLevelBegin(%val)
{
if(%val)
{
// So we can't fire the button when loading is in progress.
if ( isObject( ServerGroup ) )
return;
Canvas.popDialog();
%entry = LevelPreviewArray.getObject(LevelPreviewArray.listPosition);
if(!AssetDatabase.isDeclaredAsset(%entry.levelAssetId))
{
MessageBoxOK("Error", "Selected level preview does not have a valid level asset!");
return;
}
// Launch the chosen level with the editor open?
if ( ChooseLevelMenu.launchInEditor )
{
activatePackage( "BootEditor" );
ChooseLevelMenu.launchInEditor = false;
StartGame(%entry.levelAssetId, "SinglePlayer");
}
else
{
StartGame(%entry.levelAssetId);
}
}
}
function ChooseLevelMenu::onSleep( %this )
{
// This is set from the outside, only stays true for a single wake/sleep
// cycle.
%this.launchInEditor = false;
}
function LevelPreviewButton::onHighlighted(%this, %highlighted)
{
%container = %this.getParent();
%container-->levelNameTxt.profile = %highlighted ? MenuSubHeaderTextHighlighted : MenuSubHeaderText;
%container-->levelDescTxt.profile = %highlighted ? GuiMLTextProfileHighlighted : GuiMLTextProfile;
LevelPreviewScroll.scrollToObject(%this);
}

View file

@ -0,0 +1,5 @@
<GUIAsset
AssetName="GameMenu"
scriptFile="@assetFile=GameMenu"
GUIFile="@assetFile=GameMenu.gui"
VersionId="1"/>

View file

@ -0,0 +1,93 @@
//--- OBJECT WRITE BEGIN ---
$guiContent = new GuiControl(GameMenu) {
extent = "1280 720";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
isContainer = "1";
canSaveDynamicFields = "1";
new GuiInputCtrl(GameMenuInputHandler) {
ignoreMouseEvents = "1";
ActionMap = "GameMenuActionMap";
position = "-50 0";
extent = "50 50";
horizSizing = "width";
vertSizing = "height";
profile = "GuiInputCtrlProfile";
tooltipProfile = "GuiToolTipProfile";
};
new GuiChunkedBitmapCtrl(GameMenuBG) {
BitmapAsset = "UI:hudfill_image";
extent = "1280 720";
horizSizing = "width";
vertSizing = "height";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
isContainer = "1";
canSaveDynamicFields = "1";
new GuiPanel(GameMenuTitlePanel) {
extent = "1281 60";
horizSizing = "width";
profile = "GuiMenuPanelProfile";
tooltipProfile = "GuiToolTipProfile";
new GuiStackControl(GameMenuButtonList){
position = "40 0";
extent = "1240 60";
profile = GuiDefaultProfile;
stackingType = "Horizontal";
padding = "10";
horizSizing = "center";
vertSizing = "center";
};
new GuiControl(GameMenuNavButtonOverlay) {
extent = "1281 60";
horizSizing = "width";
vertSizing = "height";
profile = GuiNonModalDefaultProfile;
new GuiBitmapCtrl(GameMenuPrevNavIcon) {
BitmapAsset = "UI:Keyboard_Black_Q_image";
position = "0 24";
extent = "40 40";
profile = GuiNonModalDefaultProfile;
vertSizing = "top";
};
new GuiBitmapCtrl(GameMenuNextNavIcon) {
BitmapAsset = "UI:Keyboard_Black_E_image";
position = "0 24";
extent = "40 40";
profile = GuiNonModalDefaultProfile;
vertSizing = "top";
};
};
};
};
new GuiPanel(GameMenuButtonPanel) {
position = "0 683";
extent = "1281 40";
horizSizing = "width";
vertSizing = "top";
profile = "GuiMenuPanelProfile";
tooltipProfile = "GuiToolTipProfile";
new GuiIconButtonCtrl(GameMenuBackBtn) {
BitmapAsset = "UI:Keyboard_Black_Escape_image";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Center";
text = "Back";
position = "16 0";
extent = "140 40";
vertSizing = "center";
profile = "GuiMenuButtonProfile";
command = "Canvas.popDialog(GameMenu);";
tooltipProfile = "GuiToolTipProfile";
class = "MenuInputButton";
};
};
};
//--- OBJECT WRITE END ---

View file

@ -0,0 +1,186 @@
function GameMenu::onAdd(%this)
{
%this.gameMenusArray = new ArrayObject(){};
}
function GameMenu::onWake(%this)
{
if($Server::ServerType $= "SinglePlayer")
{
$timescale = 0;
sfxSetChannelVolume( $SimAudioType, $pref::SFX::channelVolume[ 0 ] );
}
callOnModules("registerGameMenus", "", %this.gameMenusArray);
//Remove duplicates as needed
%this.gameMenusArray.uniqueKey();
GameMenuButtonList.clear();
%stackWidth = 0;
//process the entries and give 'em buttons on the button array
for(%i=0; %i < %this.gameMenusArray.count(); %i++)
{
%buttonText = %this.gameMenusArray.getKey(%i);
%textWidth = GuiMenuButtonProfile.getStringWidth(%buttonText);
%btn = new GuiButtonCtrl() {
extent = %textWidth + 80 SPC 40;
profile = GuiMenuButtonProfile;
text = %buttonText;
class = "GameMenuButton";
command = "GameMenu.openGameMenu(\"" @ %buttonText @ "\");";
};
%stackWidth += %textWidth + 40;
GameMenuButtonList.add(%btn);
}
GameMenuButtonList.resize(GameMenuTitlePanel.extent.x/2 - %stackWidth/2, 0, %stackWidth, GameMenuTitlePanel.extent.y);
%this.openGameMenu("System");
//give a slight delay for the canvas to be fully refreshed before we sync things
%this.schedule(500, "syncGUI");
}
function GameMenu::onSleep(%this)
{
if($Server::ServerType $= "SinglePlayer")
{
$timescale = 1;
sfxSetChannelVolume( $SimAudioType, $pref::SFX::channelVolume[ $SimAudioType ] );
}
if(isObject(%this.currentMenu))
{
Canvas.popDialog(%this.currentMenu);
}
}
if(!isObject( GameMenuActionMap ) )
{
new ActionMap(GameMenuActionMap){};
//We'll just use the existing BaseUI nav functions because it'd be the same logic anyways
GameMenuActionMap.bind( keyboard, w, BaseUINavigatePrev );
GameMenuActionMap.bind( keyboard, s, BaseUINavigateNext );
GameMenuActionMap.bind( gamepad, yaxis, "D", "-0.23 0.23", BaseUIStickNavigate );
GameMenuActionMap.bind( gamepad, upov, BaseUINavigatePrev );
GameMenuActionMap.bind( gamepad, dpov, BaseUINavigateNext );
GameMenuActionMap.bind( keyboard, Enter, BaseUIActivateSelected );
GameMenuActionMap.bind( gamepad, btn_a, BaseUIActivateSelected );
GameMenuActionMap.bindCmd( keyboard, Escape, "Canvas.popDialog(GameMenu);", "" );
GameMenuActionMap.bindCmd( gamepad, btn_b, "Canvas.popDialog(GameMenu);", "" );
GameMenuActionMap.bindCmd( gamepad, btn_start, "Canvas.popDialog(GameMenu);", "" );
GameMenuActionMap.bind( keyboard, q, GameMenuPrevMenu );
GameMenuActionMap.bind( gamepad, btn_l, GameMenuPrevMenu );
GameMenuActionMap.bind( keyboard, e, GameMenuNextMenu );
GameMenuActionMap.bind( gamepad, btn_r, GameMenuNextMenu );
}
function GameMenu::openGameMenu(%this, %menuName)
{
%menuIdx = %this.gameMenusArray.getIndexFromKey(%menuName);
if(%menuIdx != -1)
{
%newMenu = %this.gameMenusArray.getValue(%menuIdx);
if(isObject(%this.currentMenu))
Canvas.popDialog(%this.currentMenu);
Canvas.pushDialog(%newMenu);
%this.currentMenu = %newMenu;
%this.currentMenuIdx = %menuIdx;
}
%this.syncGui();
}
function openPauseMenuOptions()
{
GameMenu.pushPage(OptionsMenu);
}
function pauseMenuExitToMenu()
{
MessageBoxOKCancel("Exit?", "Do you wish to exit to the Main Menu?", "escapeFromGame();", "");
}
function pauseMenuExitToDesktop()
{
MessageBoxOKCancel("Exit?", "Do you wish to exit to the desktop?", "quit();", "");
}
function GameMenuPrevMenu(%val)
{
if(%val)
{
%currentIdx = GameMenu.currentMenuIdx;
GameMenu.currentMenuIdx -= 1;
if(GameMenu.currentMenuIdx < 0)
GameMenu.currentMenuIdx = 0;
if(%currentIdx == GameMenu.currentMenuIdx)
return;
%menuName = GameMenu.gameMenusArray.getKey(GameMenu.currentMenuIdx);
GameMenu.openGameMenu(%menuName);
}
}
function GameMenuNextMenu(%val)
{
if(%val)
{
%currentIdx = GameMenu.currentMenuIdx;
GameMenu.currentMenuIdx += 1;
if(GameMenu.currentMenuIdx >= GameMenu.gameMenusArray.count())
GameMenu.currentMenuIdx = GameMenu.gameMenusArray.count()-1;
if(%currentIdx == GameMenu.currentMenuIdx)
return;
%menuName = GameMenu.gameMenusArray.getKey(GameMenu.currentMenuIdx);
GameMenu.openGameMenu(%menuName);
}
}
function GameMenu::syncGui(%this)
{
GameMenuButtonList.callOnChildren("setHighlighted", false);
%btn = GameMenuButtonList.getObject(%this.currentMenuIdx);
%btn.setHighlighted(true);
%buttonPosX = %btn.position.x + GameMenuButtonList.position.x;
GameMenuPrevNavIcon.position.x = %buttonPosX;
GameMenuNextNavIcon.position.x = %buttonPosX + %btn.extent.x - 40;
//Update the button imagery to comply to the last input device we'd used
%device = Canvas.getLastInputDevice();
if(%device $= "mouse")
%device = "keyboard";
GameMenuBackBtn.setBitmap(BaseUIActionMap.getCommandButtonBitmap(%device, "BaseUIBackOut"));
GameMenuPrevNavIcon.setBitmap(GameMenuActionMap.getCommandButtonBitmap(%device, "GameMenuPrevMenu"));
GameMenuNextNavIcon.setBitmap(GameMenuActionMap.getCommandButtonBitmap(%device, "GameMenuNextMenu"));
%this.schedule(500, "syncGUI");
}
/*
*/

View file

@ -1,5 +0,0 @@
<GUIAsset
AssetName="GuiMusicPlayer"
scriptFile="@assetFile=guiMusicPlayer"
GUIFile="@assetFile=guiMusicPlayer.gui"
VersionId="1"/>

View file

@ -1,4 +0,0 @@
<GUIAsset
AssetName="IODropdownDlg"
GUIFile="@assetFile=IODropdownDlg.ed.gui"
VersionId="1"/>

View file

@ -1,159 +0,0 @@
//--- OBJECT WRITE BEGIN ---
$guiContent = new GuiControl(IODropdownDlg) {
profile = "GuiDefaultProfile";
horizSizing = "width";
vertSizing = "height";
position = "0 0";
extent = "640 480";
minExtent = "8 8";
visible = "1";
helpTag = "0";
new GuiWindowCtrl(IODropdownFrame) {
canSaveDynamicFields = "0";
Profile = "GuiWindowProfile";
horizSizing = "center";
vertSizing = "center";
position = "272 77";
extent = "256 117";
minExtent = "256 8";
canSave = "1";
Visible = "1";
hovertime = "1000";
maxLength = "255";
resizeWidth = "1";
resizeHeight = "1";
canMove = "1";
canClose = "1";
canMinimize = "0";
canMaximize = "0";
minSize = "50 50";
text = "";
closeCommand="IOCallback(IODropdownDlg,IODropdownDlg.cancelCallback);";
new GuiMLTextCtrl(IODropdownText) {
text = "";
maxLength = "1024";
margin = "0 0 0 0";
padding = "0 0 0 0";
anchorTop = "1";
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
isContainer = "0";
profile = "GuiMLTextProfile";
horizSizing = "center";
vertSizing = "bottom";
position = "9 26";
extent = "237 16";
minExtent = "8 8";
canSave = "1";
visible = "1";
tooltipprofile = "GuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
};
new GuiBitmapBorderCtrl() {
isContainer = "0";
profile = "GuiGroupBorderProfile";
horizSizing = "width";
vertSizing = "bottom";
position = "7 51";
extent = "243 28";
minExtent = "0 0";
canSave = "1";
visible = "1";
tooltipprofile = "GuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
new GuiTextCtrl(IOInputText) {
text = "Decal Datablock";
maxLength = "1024";
margin = "0 0 0 0";
padding = "0 0 0 0";
anchorTop = "1";
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
isContainer = "0";
profile = "GuiTextRightProfile";
horizSizing = "right";
vertSizing = "bottom";
position = "5 5";
extent = "105 18";
minExtent = "8 2";
canSave = "1";
visible = "1";
tooltipprofile = "GuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
};
new GuiPopUpMenuCtrl(IODropdownMenu) {
maxPopupHeight = "200";
sbUsesNAColor = "0";
reverseTextList = "0";
bitmapBounds = "16 16";
maxLength = "1024";
margin = "0 0 0 0";
padding = "0 0 0 0";
anchorTop = "1";
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
isContainer = "0";
profile = "GuiPopUpMenuProfile";
horizSizing = "width";
vertSizing = "bottom";
position = "115 5";
extent = "122 18";
minExtent = "8 2";
canSave = "1";
visible = "1";
tooltipprofile = "GuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
};
};
new GuiButtonCtrl() {
text = "OK";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
isContainer = "0";
profile = "GuiButtonProfile";
horizSizing = "width";
vertSizing = "top";
position = "7 85";
extent = "156 24";
minExtent = "8 8";
canSave = "1";
visible = "1";
accelerator = "return";
command = "IOCallback(IODropdownDlg,IODropdownDlg.callback);";
tooltipprofile = "GuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
};
new GuiButtonCtrl() {
text = "Cancel";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
isContainer = "0";
profile = "GuiButtonProfile";
horizSizing = "left";
vertSizing = "top";
position = "170 85";
extent = "80 24";
minExtent = "8 8";
canSave = "1";
visible = "1";
accelerator = "escape";
command = "IOCallback(IODropdownDlg,IODropdownDlg.cancelCallback);";
tooltipprofile = "GuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
};
};
};
//--- OBJECT WRITE END ---

View file

@ -1,5 +0,0 @@
<GUIAsset
AssetName="MainMenuButtons"
scriptFile="@assetFile=MainMenuButtons.tscript"
GUIFile="@assetFile=MainMenuButtons.gui"
VersionId="1"/>

View file

@ -1,84 +0,0 @@
//--- OBJECT WRITE BEGIN ---
$guiContent = new GuiControl(MainMenuButtons) {
extent = "1024 768";
horizSizing = "width";
vertSizing = "height";
profile = "GuiNonModalDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
isContainer = "1";
canSaveDynamicFields = "1";
originalAssetName = "MainMenuButtons";
new GuiStackControl(MainMenuButtonList) {
padding = "15";
dynamicSize = "0";
position = "312 145";
extent = "400 477";
horizSizing = "center";
vertSizing = "center";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
superClass = "MenuList";
new GuiButtonCtrl(MainMenuSinglePlayerBtn) {
text = "Single Player";
extent = "400 55";
profile = "GuiMenuButtonProfile";
command = "openSinglePlayerMenu();";
tooltipProfile = "GuiToolTipProfile";
};
new GuiButtonCtrl(MainMenuCreateSrvrBtn) {
text = "Create Server";
position = "0 70";
extent = "400 55";
profile = "GuiMenuButtonProfile";
command = "openMultiPlayerMenu();";
tooltipProfile = "GuiToolTipProfile";
};
new GuiButtonCtrl(MainMenuJoinSrvrBtn) {
text = "Join Server";
position = "0 140";
extent = "400 55";
profile = "GuiMenuButtonProfile";
command = "openJoinServerMenu();";
tooltipProfile = "GuiToolTipProfile";
};
new GuiButtonCtrl(MainMenuOptionBtn) {
text = "Options";
position = "0 210";
extent = "400 55";
profile = "GuiMenuButtonProfile";
command = "openOptionsMenu();";
tooltipProfile = "GuiToolTipProfile";
};
new GuiButtonCtrl(MainMenuWorldEditBtn) {
text = "Open World Editor (F11)";
position = "0 280";
extent = "400 55";
profile = "GuiMenuButtonProfile";
command = "openWorldEditorBtn();";
tooltipProfile = "GuiToolTipProfile";
enabled = (ModuleDatabase.findModule("ToolsModule") !$= "");
visible = (ModuleDatabase.findModule("ToolsModule") !$= "");
};
new GuiButtonCtrl(MainMenuGuiEditBtn) {
text = "Open GUI Editor (F10)";
position = "0 350";
extent = "400 55";
profile = "GuiMenuButtonProfile";
command = "openGUIEditorBtn();";
tooltipProfile = "GuiToolTipProfile";
enabled = (ModuleDatabase.findModule("ToolsModule") !$= "");
visible = (ModuleDatabase.findModule("ToolsModule") !$= "");
};
new GuiButtonCtrl(MainMenuExitBtn) {
text = "Exit";
position = "0 420";
extent = "400 55";
profile = "GuiMenuButtonProfile";
command = "quit();";
tooltipProfile = "GuiToolTipProfile";
};
};
};
//--- OBJECT WRITE END ---

View file

@ -1,116 +0,0 @@
function MainMenuButtons::onWake(%this)
{
}
function MainMenuButtons::onSleep(%this)
{
}
//==============================================================================
// This gets called by the MainMenuGUI beacuse it, being a UINavigation classed control
// set MainMenuButtonList as it's root page.
// This is an optional function, but is called as part of the validation that the page
// CAN be opened, so it's shown here as an example
function MainMenuButtons::canOpen(%this)
{
return true;
}
//==============================================================================
// This gets called by the MainMenuGUI beacuse it, being a UINavigation classed control
// set MainMenuButtonList as it's root page.
// Once the page is added to the MainMenuGUI's UINavigation page stack, onOpen here is called
// Which allows us to actually do the work we need to do for display
function MainMenuButtons::onOpen(%this)
{
//Here, we set the MainMenuButtonList - a GuiStackControl with the MenuList class
// to be the active menu list.
// This means that when the MainMenuGUI's MainMenuInputHandler receives an input
// or we have one of the buttons in the MainMenuButtonHolder be actioned, we know
// we're working/navigating this list of buttons specifically
// In practice, it sets the $activeMenuList global variable so the various menu class code
// can reference it consistently
MainMenuButtonList.setAsActiveMenuList();
//Because MainMenuGUI set it's MainMenuButtonHolder as the active button container, we can reference it
//by $activeMenuButtonContainer and set the menu button/accelerator prompts we need for the MainMenuButtonList
//specifically.
//In particular, being a simple list of buttons, the only one we NEED is a simple activate, so we'll
//disable all the other ones to keep them clear in case they were set by other pages at some point
$activeMenuButtonContainer-->button1.disable();
$activeMenuButtonContainer-->button2.disable();
$activeMenuButtonContainer-->button3.disable();
//Here we set the 4th button in the container
//All the buttons have the MenuInputButton class, which, like the other classes
//help keep things accessible and consistent. Here we use that class's set function to
//configure the accelerator behavior
//The first parameter sets the gamepad button to the 'A' button
//The second sets the keyboard button to Enter or Return
//Third is what the displayed text will be
//And finally we set the command when the button is clicked, or either key inputs are caught by
//our MenuInputHandler
//The menu buttons automatically detect which input device you're using and swap the display between
//gamepad or keyboard for consistent behavior
$activeMenuButtonContainer-->button4.set("btn_a", "Return", "Go", "MainMenuButtonList.activate();");
$activeMenuButtonContainer-->button5.disable();
}
//Optional, as the check defaults to true, but here as an example case
function MainMenuButtons::canClose(%this)
{
return true;
}
function MainMenuButtons::onClose(%this)
{
}
//Our actual commands when we activate the buttons
function openSinglePlayerMenu()
{
$pref::HostMultiPlayer=false;
MainMenuGui.pushPage(ChooseLevelDlg);
}
function openMultiPlayerMenu()
{
$pref::HostMultiPlayer=true;
//Here, like the other commands, we add a new page onto the stack
//In this case, we'll push the ChooseLevelDlg control onto the stack. This will
//invoke the canClose() and then onClose() functions for MainMenuButtonList
//before calling the onOpen() for ChooseLevelDlg then displaying.
MainMenuGui.pushPage(ChooseLevelDlg);
}
function openJoinServerMenu()
{
//Here, like the other commands, we add a new page onto the stack
//In this case, we'll push the JoinServerMenu control onto the stack. This will
//invoke the canClose() and then onClose() functions for MainMenuButtonList
//before calling the onOpen() for JoinServerMenu then displaying.
MainMenuGui.pushPage(JoinServerMenu);
}
function openOptionsMenu()
{
//Here, like the other commands, we add a new page onto the stack
//In this case, we'll push the OptionsMenu control onto the stack. This will
//invoke the canClose() and then onClose() functions for MainMenuButtonList
//before calling the onOpen() for OptionsMenu then displaying.
//The options menu additionally has an example of why we may want to capitalize on the
//canClose() call.
MainMenuGui.pushPage(OptionsMenu);
}
function openWorldEditorBtn()
{
fastLoadWorldEdit(1);
}
function openGUIEditorBtn()
{
fastLoadGUIEdit(1);
}

View file

@ -1,5 +0,0 @@
<GUIAsset
AssetName="PauseMenu"
scriptFile="@assetFile=pauseMenu"
GUIFile="@assetFile=pauseMenu.gui"
VersionId="1"/>

View file

@ -1,230 +0,0 @@
//--- OBJECT WRITE BEGIN ---
$guiContent = new GuiControl(recordingsDlg) {
position = "0 0";
extent = "1024 768";
minExtent = "8 8";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "1";
helpTag = "0";
new GuiWindowCtrl() {
text = "Demo Recordings";
resizeWidth = "0";
resizeHeight = "0";
canMove = "1";
canClose = "1";
canMinimize = "0";
canMaximize = "0";
canCollapse = "0";
closeCommand = "Canvas.popDialog(recordingsDlg);";
edgeSnap = "1";
margin = "0 0 0 0";
padding = "0 0 0 0";
anchorTop = "1";
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "247 215";
extent = "530 338";
minExtent = "48 92";
horizSizing = "center";
vertSizing = "center";
profile = "GuiWindowProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
new GuiScrollCtrl() {
willFirstRespond = "1";
hScrollBar = "dynamic";
vScrollBar = "alwaysOn";
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 = "23 60";
extent = "484 237";
minExtent = "32 32";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiScrollProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
new GuiTextListCtrl(RecordingsDlgList) {
columns = "0";
fitParentWidth = "1";
clipColumnText = "0";
position = "1 1";
extent = "469 32";
minExtent = "8 20";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiTextArrayProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
};
new GuiButtonCtrl(DR_CancelBtn) {
text = "Cancel";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "396 306";
extent = "110 20";
minExtent = "8 8";
horizSizing = "right";
vertSizing = "top";
profile = "GuiButtonProfile";
visible = "1";
active = "1";
command = "Canvas.popDialog(recordingsDlg);";
accelerator = "escape";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiButtonCtrl(DR_StartDemoBtn) {
text = "Play";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "25 305";
extent = "110 20";
minExtent = "8 8";
horizSizing = "right";
vertSizing = "top";
profile = "GuiButtonProfile";
visible = "1";
active = "1";
command = "StartSelectedDemo();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiTextCtrl() {
text = "During gameplay press the following keys:";
maxLength = "1024";
margin = "0 0 0 0";
padding = "0 0 0 0";
anchorTop = "1";
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "23 30";
extent = "206 18";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiTextProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiTextCtrl() {
text = "Start = F3";
maxLength = "1024";
margin = "0 0 0 0";
padding = "0 0 0 0";
anchorTop = "1";
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "253 32";
extent = "50 15";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiTextProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiTextCtrl() {
text = "Stop = F4";
maxLength = "1024";
margin = "0 0 0 0";
padding = "0 0 0 0";
anchorTop = "1";
anchorBottom = "0";
anchorLeft = "1";
anchorRight = "0";
position = "320 32";
extent = "49 13";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiTextProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiButtonCtrl(DR_DelDemoBtn) {
text = "Delete";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "210 305";
extent = "110 20";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiButtonProfile";
visible = "1";
active = "1";
command = "deleteDemoRecord();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
};
};
//--- OBJECT WRITE END ---

View file

@ -0,0 +1,5 @@
<GUIAsset
AssetName="SystemMenu"
ScriptFile="@assetFile=SystemMenu.tscript"
GUIFile="@assetFile=SystemMenu.gui"
VersionId="1"/>

View file

@ -0,0 +1,52 @@
//--- OBJECT WRITE BEGIN ---
$guiContent = new GuiControl(SystemMenu) {
extent = "1280 720";
profile = "GuiNonModalDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
isContainer = "1";
canSaveDynamicFields = "1";
new GuiStackControl(SystemMenuButtonList) {
padding = "5";
dynamicSize = "0";
position = "440 263";
extent = "400 189";
horizSizing = "center";
vertSizing = "center";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
new GuiButtonCtrl() {
text = "Return to Game";
extent = "400 40";
profile = "GuiMenuButtonProfile";
command = "Canvas.popDialog(GameMenu);";
tooltipProfile = "GuiToolTipProfile";
};
new GuiButtonCtrl() {
text = "Options";
position = "0 45";
extent = "400 40";
profile = "GuiMenuButtonProfile";
command = "Canvas.pushDialog(OptionsMenu);";
tooltipProfile = "GuiToolTipProfile";
};
new GuiButtonCtrl() {
text = "Exit to Menu";
position = "0 90";
extent = "400 40";
profile = "GuiMenuButtonProfile";
command = "systemMenuExitToMenu();";
tooltipProfile = "GuiToolTipProfile";
};
new GuiButtonCtrl() {
text = "Exit to Desktop";
position = "0 135";
extent = "400 40";
profile = "GuiMenuButtonProfile";
command = "systemMenuExitToDesktop();";
tooltipProfile = "GuiToolTipProfile";
};
};
};
//--- OBJECT WRITE END ---

View file

@ -0,0 +1,37 @@
function SystemMenu::onWake(%this)
{
$MenuList = SystemMenuButtonList;
$MenuList.listPosition = 0;
}
function SystemMenu::onSleep(%this)
{
}
function systemMenuExitToMenu()
{
MessageBoxOKCancel("Exit?", "Do you wish to exit to the Main Menu?", "escapeFromGame();", "");
}
function systemMenuExitToDesktop()
{
MessageBoxOKCancel("Exit?", "Do you wish to exit to the desktop?", "quit();", "");
}
function SystemMenuButtonList::syncGUI(%this)
{
%this.callOnChildren("setHighlighted", false);
%btn = %this.getObject(%this.listPosition);
%btn.setHighlighted(true);
//
//Update the button imagery to comply to the last input device we'd used
%device = Canvas.getLastInputDevice();
if(%device $= "mouse")
%device = "keyboard";
//We'll call back to the GameMenu parent just to be sure everything's on the same page
GameMenu.syncGui();
}

View file

@ -1,106 +0,0 @@
//--- OBJECT WRITE BEGIN ---
$guiContent = new GuiControl(ChooseLevelDlg) {
extent = "1024 768";
minExtent = "8 8";
horizSizing = "width";
vertSizing = "height";
profile = "GuiNonModalDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
isContainer = "1";
canSaveDynamicFields = "1";
Enabled = "1";
launchInEditor = "0";
returnGui = "MainMenuGui";
new GuiControl(ChooseLevelWindow) {
position = "48 56";
extent = "928 655";
horizSizing = "center";
vertSizing = "center";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
isContainer = "1";
new GuiBitmapBarCtrl() {
BitmapAsset = "UI:panel_image";
extent = "927 40";
horizSizing = "width";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
};
new GuiTextCtrl(LevelSelectTitle) {
text = "SINGLE PLAYER";
position = "22 10";
extent = "307 28";
profile = "MenuHeaderText";
tooltipProfile = "GuiToolTipProfile";
};
new GuiBitmapBarCtrl() {
BitmapAsset = "UI:panel_low_image";
position = "0 40";
extent = "927 618";
horizSizing = "width";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
};
new GuiBitmapCtrl() {
BitmapAsset = "Core_Rendering:missingTexture_image";
position = "513 71";
extent = "400 300";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
internalName = "CurrentPreview";
canSaveDynamicFields = "1";
Enabled = "1";
};
new GuiTextCtrl() {
text = "Example Level";
maxLength = "255";
position = "514 375";
extent = "398 27";
minExtent = "8 8";
profile = "MenuHeaderText";
tooltipProfile = "GuiToolTipProfile";
isContainer = "0";
internalName = "LevelName";
};
new GuiTextCtrl() {
text = "Description:";
maxLength = "255";
position = "522 410";
extent = "91 18";
minExtent = "8 8";
profile = "MenuSubHeaderText";
tooltipProfile = "GuiToolTipProfile";
isContainer = "0";
internalName = "LevelDescriptionLabel";
};
new GuiMLTextCtrl() {
text = "This is placeholder text";
position = "522 436";
extent = "391 14";
minExtent = "8 8";
profile = "GuiMLWhiteTextProfile";
tooltipProfile = "GuiToolTipProfile";
internalName = "LevelDescription";
};
new GuiScrollCtrl() {
hScrollBar = "dynamic";
vScrollBar = "dynamic";
position = "0 40";
extent = "450 580";
profile = "GuiMenuScrollProfile";
tooltipProfile = "GuiToolTipProfile";
new GuiGameListMenuCtrl(LevelList) {
callbackOnInputs = "1";
position = "1 1";
extent = "450 90";
profile = "DefaultListMenuProfile";
tooltipProfile = "GuiToolTipProfile";
class = "UIMenuButtonList";
};
};
};
};
//--- OBJECT WRITE END ---

View file

@ -1,210 +0,0 @@
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
//----------------------------------------
function ChooseLevelDlg::onWake( %this )
{
if(!isObject(LevelListEntries))
new ArrayObject(LevelListEntries){};
if(!isObject(ChooseLevelAssetQuery))
new AssetQuery(ChooseLevelAssetQuery);
}
function ChooseLevelDlg::onOpen(%this)
{
LevelList.clearRows();
LevelListEntries.empty();
ChooseLevelWindow->CurrentPreview.setBitmap("UI:no_preview_image");
ChooseLevelWindow->LevelDescriptionLabel.visible = false;
ChooseLevelWindow->LevelDescription.visible = false;
ChooseLevelAssetQuery.clear();
AssetDatabase.findAssetType(ChooseLevelAssetQuery, "LevelAsset");
%count = ChooseLevelAssetQuery.getCount();
if(%count == 0 && !IsDirectory("tools"))
{
//We have no levels found. Prompt the user to open the editor to the default level if the tools are present
MessageBoxOK("Error", "No levels were found in any modules. Please ensure you have modules loaded that contain gameplay code and level files.",
"Canvas.popDialog(ChooseLevelDlg); if(isObject(ChooseLevelDlg.returnGui) && ChooseLevelDlg.returnGui.isMethod(\"onReturnTo\")) ChooseLevelDlg.returnGui.onReturnTo();");
ChooseLevelAssetQuery.delete();
return;
}
for(%i=0; %i < %count; %i++)
{
%assetId = ChooseLevelAssetQuery.getAsset(%i);
if(AssetDatabase.getAssetModule(%assetId).ModuleId $= "ToolsModule")
continue;
%levelAsset = AssetDatabase.acquireAsset(%assetId);
%file = %levelAsset.getLevelPath();
if ( !isFile(%file @ ".mis") && !isFile(%file @ ".mis.dso") &&!isFile(%file) )
continue;
// Skip our new level/mission if we arent choosing a level
// to launch in the editor.
if ( !%this.launchInEditor )
{
%fileName = fileName(%file);
if (strstr(%fileName, "newMission.mis") > -1 || strstr(%fileName, "newLevel.mis") > -1)
continue;
}
%this.addLevelAsset( %levelAsset );
}
// Also add the new level mission as defined in the world editor settings
// if we are choosing a level to launch in the editor.
if ( %this.launchInEditor )
{
%this.addMissionFile( "tools/levels/DefaultEditorLevel.mis" );
}
for(%i=0; %i < LevelListEntries.count(); %i++)
{
%levelAsset = LevelListEntries.getKey(%i);
LevelList.addRow(%levelAsset.LevelName, "", -1, -30);
}
LevelList.setSelected(0);
LevelList.onChange();
if(!$pref::HostMultiPlayer)
LevelSelectTitle.setText("SINGLE PLAYER");
else
LevelSelectTitle.setText("CREATE SERVER");
$activeMenuButtonContainer-->button1.disable();
$activeMenuButtonContainer-->button2.disable();
$activeMenuButtonContainer-->button3.disable();
$activeMenuButtonContainer-->button4.set("btn_a", "Return", "Start Level", "ChooseLevelDlg.beginLevel();");
$activeMenuButtonContainer-->button5.set("btn_b", "Escape", "Back", %this @ ".navigation.popPage();");
}
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 )
{
%levelName = fileBase(%file);
%levelDesc = "A Torque level";
%LevelInfoObject = getLevelInfo(%file);
if (%LevelInfoObject != 0)
{
if(%LevelInfoObject.levelName !$= "")
%levelName = %LevelInfoObject.levelName;
else if(%LevelInfoObject.name !$= "")
%levelName = %LevelInfoObject.name;
if (%LevelInfoObject.desc0 !$= "")
%levelDesc = %LevelInfoObject.desc0;
if (%LevelInfoObject.preview !$= "")
%levelPreview = %LevelInfoObject.preview;
%LevelInfoObject.delete();
}
LevelListEntries.add( %levelName TAB %file TAB %levelDesc TAB %levelPreview );
}
function ChooseLevelDlg::addLevelAsset( %this, %levelAsset )
{
LevelListEntries.add( %levelAsset );
}
function LevelList::onChange(%this)
{
%index = %this.getSelectedRow();
%levelAsset = LevelListEntries.getKey(%index);
// Get the name
ChooseLevelWindow->LevelName.text = %levelAsset.LevelName;
// Get the level id
$selectedLevelAsset = %levelAsset.getAssetId();
// Find the preview image
%levelPreview = %levelAsset.getPreviewImagePath();
// Test against all of the different image formats
// This should probably be moved into an engine function
if (isFile(%levelPreview))
ChooseLevelWindow->CurrentPreview.setBitmap(%levelPreview);
else
ChooseLevelWindow->CurrentPreview.setBitmap("UI:no_preview_image");
// Get the description
%levelDesc = %levelAsset.description;
if(%levelDesc !$= "")
{
ChooseLevelWindow->LevelDescriptionLabel.setVisible(true);
ChooseLevelWindow->LevelDescription.setVisible(true);
ChooseLevelWindow->LevelDescription.setText(%levelDesc);
}
else
{
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 ChooseLevelDlg::beginLevel(%this)
{
// So we can't fire the button when loading is in progress.
if ( isObject( ServerGroup ) )
return;
%this.navigation.popPage();
// Launch the chosen level with the editor open?
if ( ChooseLevelDlg.launchInEditor )
{
activatePackage( "BootEditor" );
ChooseLevelDlg.launchInEditor = false;
StartGame("", "SinglePlayer");
}
else
{
StartGame();
}
}

View file

@ -1,192 +0,0 @@
//--- OBJECT WRITE BEGIN ---
$guiContent = new GuiControl(GuiMusicPlayer) {
isContainer = "1";
Profile = "GuiWindowProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "0 0";
Extent = "1024 768";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
tooltipprofile = "GuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "1";
superClass = "GuiMusicPlayerClass";
new GuiWindowCtrl() {
resizeWidth = "0";
resizeHeight = "0";
canMove = "1";
canClose = "1";
canMinimize = "1";
canMaximize = "1";
minSize = "50 50";
EdgeSnap = "1";
text = "Torque Music Player";
Margin = "0 0 0 0";
Padding = "0 0 0 0";
AnchorTop = "1";
AnchorBottom = "0";
AnchorLeft = "1";
AnchorRight = "0";
isContainer = "1";
Profile = "GuiWindowProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "29 35";
Extent = "518 377";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
tooltipprofile = "GuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
closeCommand = "toggleMusicPlayer();";
new GuiCheckBoxCtrl(GuiMusicPlayerFadeCheckBox) {
useInactiveState = "0";
text = "Fade";
groupNum = "-1";
buttonType = "ToggleButton";
useMouseEvents = "0";
isContainer = "0";
Profile = "GuiCheckBoxProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "457 347";
Extent = "53 30";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
tooltipprofile = "GuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
};
new GuiCheckBoxCtrl(GuiMusicPlayerLoopCheckBox) {
useInactiveState = "0";
text = "Loop";
groupNum = "-1";
buttonType = "ToggleButton";
useMouseEvents = "0";
isContainer = "0";
Profile = "GuiCheckBoxProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "457 330";
Extent = "44 30";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
tooltipprofile = "GuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
};
new GuiScrollCtrl() {
willFirstRespond = "1";
hScrollBar = "dynamic";
vScrollBar = "alwaysOn";
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";
isContainer = "1";
Profile = "GuiScrollProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "9 31";
Extent = "500 298";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
tooltipprofile = "GuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
new GuiListBoxCtrl(GuiMusicPlayerMusicList) {
AllowMultipleSelections = "1";
fitParentWidth = "1";
isContainer = "0";
Profile = "GuiListBoxProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "1 1";
Extent = "485 2";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
tooltipprofile = "GuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
superClass = "GuiMusicPlayerMusicListClass";
};
};
new GuiSliderCtrl(GuiMusicPlayerScrubber) {
range = "0 1";
ticks = "10";
value = "0";
snap = "false";
isContainer = "0";
Profile = "GuiSliderProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "114 343";
Extent = "331 23";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
Command = "$thisControl.onDragComplete();";
tooltipprofile = "GuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
class = "GuiMusicPlayerScrubberClass";
className = "GuiMusicPlayerScrubberClass";
};
new GuiButtonCtrl(GuiMusicPlayerStopButton) {
text = "Stop";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
isContainer = "0";
Profile = "GuiButtonProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "57 338";
Extent = "40 30";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
Command = "GuiMusicPlayer.stop();";
tooltipprofile = "GuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
};
new GuiButtonCtrl(GuiMusicPlayerPlayButton) {
text = "Play";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
isContainer = "0";
Profile = "GuiButtonProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "13 338";
Extent = "40 30";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
Command = "GuiMusicPlayer.play();";
tooltipprofile = "GuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
};
};
};
//--- OBJECT WRITE END ---

View file

@ -1,236 +0,0 @@
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
// A very simple music player.
//---------------------------------------------------------------------------------------------
// Preferences.
$pref::GuiMusicPlayer::filePattern = "*.ogg\t*.wav";
$pref::GuiMusicPlayer::fadeTime = "3.0";
//---------------------------------------------------------------------------------------------
// Datablocks.
singleton SFXDescription( GuiMusicPlayerStream : AudioMusic2D )
{
volume = 1.0;
isLooping = false;
isStreaming = true;
is3D = false;
};
singleton SFXDescription( GuiMusicPlayerLoopingStream : AudioMusic2D )
{
volume = 1.0;
isLooping = true;
isStreaming = true;
is3D = false;
};
//---------------------------------------------------------------------------------------------
// Functions.
function toggleMusicPlayer()
{
if( !GuiMusicPlayer.isAwake() )
{
GuiMusicPlayer.setExtent( Canvas.getExtent() );
GuiMusicPlayer.setPosition( 0, 0 );
Canvas.pushDialog( GuiMusicPlayer );
}
else
Canvas.popDialog( GuiMusicPlayer );
}
//---------------------------------------------------------------------------------------------
// Methods.
function GuiMusicPlayer_onSFXSourceStatusChange( %id, %status )
{
if( %status $= "Stopped" )
GuiMusicPlayer.onStop();
}
function GuiMusicPlayerClass::play( %this )
{
if( %this.status $= "Stopped"
|| %this.status $= "Paused"
|| %this.status $= "" )
{
%isPlaying = true;
if( %this.status $= "Paused" && isObject( %this.sfxSource ) )
%this.sfxSource.play();
else
{
%sel = GuiMusicPlayerMusicList.getSelectedItem();
if( %sel == -1 )
%isPlaying = false;
else
{
%desc = GuiMusicPlayerStream;
if( GuiMusicPlayerLoopCheckBox.getValue() )
%desc = GuiMusicPlayerLoopingStream;
if( GuiMusicPlayerFadeCheckBox.getValue() )
{
%desc.fadeInTime = $pref::GuiMusicPlayer::fadeTime;
%desc.fadeOutTime = $pref::GuiMusicPlayer::fadeTime;
}
else
{
%desc.fadeInTime = 0;
%desc.fadeOutTime = 0;
}
%file = GuiMusicPlayerMusicList.getItemText( %sel );
%this.sfxSource = sfxPlayOnce( %desc, %file );
if( !%this.sfxSource )
%isPlaying = false;
else
{
%this.sfxSource.statusCallback = "GuiMusicPlayer_onSFXSourceStatusChange";
GuiMusicPlayer.status = "Playing";
GuiMusicPlayerScrubber.setActive( true );
GuiMusicPlayerScrubber.setup( %this.sfxSource.getDuration() );
}
}
}
if( %isPlaying )
{
GuiMusicPlayerPlayButton.setText( "Pause" );
GuiMusicPlayerPlayButton.command = "GuiMusicPlayer.pause();";
GuiMusicPlayerLoopCheckBox.setActive( false );
GuiMusicPlayerFadeCheckBox.setActive( false );
%this.status = "Playing";
}
}
}
function GuiMusicPlayerClass::stop( %this )
{
if( %this.status $= "Playing"
|| %this.status $= "Paused" )
{
if( isObject( %this.sfxSource ) )
%this.sfxSource.stop( 0 ); // Stop immediately.
}
}
function GuiMusicPlayerClass::onStop( %this )
{
%this.sfxSource = 0;
GuiMusicPlayerLoopCheckBox.setActive( true );
GuiMusicPlayerFadeCheckBox.setActive( true );
GuiMusicPlayerScrubber.setActive( false );
GuiMusicPlayerPlayButton.setText( "Play" );
GuiMusicPlayerPlayButton.Command = "GuiMusicPlayer.play();";
%this.status = "Stopped";
GuiMusicPlayerScrubber.setValue( 0 );
}
function GuiMusicPlayerClass::pause( %this )
{
if( %this.status $= "Playing" )
{
if( isObject( %this.sfxSource ) )
%this.sfxSource.pause( 0 );
GuiMusicPlayerPlayButton.setText( "Play" );
GuiMusicPlayerPlayButton.command = "GuiMusicPlayer.play();";
%this.status = "Paused";
}
}
function GuiMusicPlayerClass::seek( %this, %playtime )
{
if( ( %this.status $= "Playing"
|| %this.status $= "Paused" )
&& isObject( %this.sfxSource ) )
%this.sfxSource.setPosition( %playtime );
}
function GuiMusicPlayer::onWake( %this )
{
GuiMusicPlayerMusicList.load();
}
function GuiMusicPlayerMusicListClass::load( %this )
{
// Remove all the files currently in the list.
%this.clearItems();
// Find the file matching pattern we should use.
%filePattern = $pref::GuiMusicPlayer::filePattern;
%sfxProvider = getWord( sfxGetDeviceInfo(), 0 );
%filePatternVarName = "$pref::GuiMusicPlayer::filePattern" @ %sfxProvider;
if( isDefined( %filePatternVarName ) )
eval( "%filePattern = " @ %filePatternVarName @ ";" );
// Find all files matching the pattern.
for( %file = findFirstFileMultiExpr( %filePattern );
%file !$= "";
%file = findNextFileMultiExpr( %filePattern ) )
%this.addItem( makeRelativePath( %file, getMainDotCsDir() ) );
}
function GuiMusicPlayerMusicList::onDoubleClick( %this )
{
GuiMusicPlayer.stop();
GuiMusicPlayer.play();
}
function GuiMusicPlayerScrubber::onMouseDragged( %this )
{
%this.isBeingDragged = true;
}
function GuiMusicPlayerScrubberClass::setup( %this, %totalPlaytime )
{
%this.range = "0 " @ %totalPlaytime;
%this.ticks = %totalPlaytime / 5; // One tick per five seconds.
%this.update();
}
function GuiMusicPlayerScrubberClass::update( %this )
{
if( GuiMusicPlayer.status $= "Playing"
&& !%this.isBeingDragged )
%this.setValue( GuiMusicPlayer.sfxSource.getPosition() );
if( GuiMusicPlayer.status $= "Playing"
|| GuiMusicPlayer.status $= "Paused" )
%this.schedule( 5, "update" );
}
function GuiMusicPlayerScrubberClass::onDragComplete( %this )
{
GuiMusicPlayer.seek( %this.getValue() );
%this.isBeingDragged = false;
}

View file

@ -1,159 +1,160 @@
//--- OBJECT WRITE BEGIN ---
$guiContent = new GuiControl(JoinServerMenu) {
extent = "1024 768";
profile = "GuiNonModalDefaultProfile";
extent = "1280 720";
horizSizing = "width";
vertSizing = "height";
profile = "GuiMenuBackgroundProfile";
tooltipProfile = "GuiToolTipProfile";
isContainer = "1";
canSaveDynamicFields = "1";
new GuiInputCtrl(JoinServerInputHandler) {
ignoreMouseEvents = "1";
ActionMap = "JoinServerActionMap";
position = "-50 0";
extent = "50 50";
horizSizing = "width";
vertSizing = "height";
canSaveDynamicFields = "0";
new GuiControl(JoinServerWindow) {
position = "48 56";
extent = "928 655";
horizSizing = "center";
vertSizing = "center";
profile = "GuiDefaultProfile";
profile = "GuiInputCtrlProfile";
tooltipProfile = "GuiToolTipProfile";
};
new GuiPanel(JoinServerTitlePanel) {
extent = "1281 60";
horizSizing = "width";
profile = "GuiMenuPanelProfile";
tooltipProfile = "GuiToolTipProfile";
isContainer = "1";
new GuiBitmapBarCtrl() {
BitmapAsset = "UI:panel_image";
extent = "927 40";
horizSizing = "width";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
};
new GuiTextCtrl() {
text = "JOIN SERVER";
position = "22 10";
extent = "207 28";
position = "22 23";
extent = "220 28";
profile = "MenuHeaderText";
tooltipProfile = "GuiToolTipProfile";
};
new GuiBitmapBarCtrl() {
BitmapAsset = "UI:panel_low_image";
position = "0 40";
extent = "927 618";
horizSizing = "width";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
};
new GuiTextCtrl(JS_status) {
text = "No servers found.";
maxLength = "255";
position = "392 47";
extent = "148 18";
minExtent = "8 8";
};
new GuiContainer() {
position = "203 61";
extent = "900 30";
profile = GuiMenuPanelProfile;
tooltipProfile = "GuiToolTipProfile";
horizSizing = "center";
vertSizing = "bottom";
new GuiTextCtrl() {
text = "Server Details";
position = "0 0";
extent = "700 30";
horizSizing = "right";
vertSizing = "center";
profile = "MenuSubHeaderText";
tooltipProfile = "GuiToolTipProfile";
};
new GuiTextCtrl() {
text = "Players";
maxLength = "255";
position = "269 67";
extent = "36 18";
minExtent = "8 8";
profile = "GuiMLWhiteTextProfile";
tooltipProfile = "GuiToolTipProfile";
isContainer = "0";
};
new GuiTextCtrl() {
text = "Version";
maxLength = "255";
position = "335 67";
extent = "38 18";
minExtent = "8 8";
profile = "GuiMLWhiteTextProfile";
tooltipProfile = "GuiToolTipProfile";
isContainer = "0";
};
new GuiTextCtrl() {
text = "Game";
maxLength = "255";
position = "412 67";
extent = "28 18";
minExtent = "8 8";
profile = "GuiMLWhiteTextProfile";
tooltipProfile = "GuiToolTipProfile";
isContainer = "0";
};
new GuiTextCtrl() {
text = "Ping";
maxLength = "255";
position = "212 67";
extent = "20 18";
minExtent = "8 8";
profile = "GuiMLWhiteTextProfile";
position = "700 0";
extent = "70 30";
horizSizing = "left";
vertSizing = "center";
profile = "MenuSubHeaderCenteredText";
tooltipProfile = "GuiToolTipProfile";
isContainer = "0";
};
new GuiTextCtrl() {
text = "Server Name";
maxLength = "255";
position = "12 67";
extent = "63 18";
minExtent = "8 8";
profile = "GuiMLWhiteTextProfile";
text = "Player Count";
position = "770 0";
extent = "130 30";
horizSizing = "left";
vertSizing = "center";
profile = "MenuSubHeaderCenteredText";
tooltipProfile = "GuiToolTipProfile";
isContainer = "0";
};
new GuiScrollCtrl() {
hScrollBar = "dynamic";
vScrollBar = "dynamic";
position = "19 98";
extent = "890 501";
minExtent = "8 8";
profile = "GuiMenuScrollProfile";
tooltipProfile = "GuiToolTipProfile";
};
new GuiScrollCtrl() {
hScrollBar = "alwaysOff";
vScrollBar = "dynamic";
position = "203 91";
extent = "900 621";
minExtent = "8 8";
horizSizing = "center";
vertSizing = "height";
profile = "GuiMenuScrollProfile";
tooltipProfile = "GuiToolTipProfile";
new GuiStackControl(JoinServerList) {
padding = "10";
changeChildSizeToFit = "0";
position = "1 1";
extent = "888 16";
horizSizing = "center";
vertSizing = "center";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
superClass = "MenuList";
};
new GuiStackControl(JoinServerList) {
padding = "10";
changeChildSizeToFit = "0";
position = "1 1";
extent = "888 16";
horizSizing = "center";
vertSizing = "center";
profile = "GuiMenuDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
};
new GuiControl(JS_queryStatus) {
position = "16 615";
extent = "900 35";
profile = "GuiDefaultProfile";
visible = "0";
tooltipProfile = "GuiToolTipProfile";
isContainer = "1";
hidden = "1";
new GuiProgressCtrl(JS_statusBar) {
position = "84 0";
extent = "695 35";
minExtent = "8 8";
profile = "GuiProgressProfile";
tooltipProfile = "GuiToolTipProfile";
isContainer = "0";
};
new GuiButtonCtrl(JS_cancelQuery) {
text = "Cancel!";
extent = "84 35";
minExtent = "8 8";
profile = "GuiMenuButtonProfile";
command = "JoinServerDlg.cancel();";
tooltipProfile = "GuiToolTipProfile";
};
new GuiTextCtrl(JS_statusText) {
text = "Querying master server";
maxLength = "255";
position = "84 0";
extent = "695 35";
minExtent = "8 8";
profile = "GuiMenuButtonProfile";
tooltipProfile = "GuiToolTipProfile";
isContainer = "0";
};
new GuiPanel(JoinServerButtonPanel) {
position = "0 683";
extent = "1281 40";
horizSizing = "width";
vertSizing = "top";
profile = "GuiMenuPanelProfile";
tooltipProfile = "GuiToolTipProfile";
new GuiIconButtonCtrl(JoinServerJoinBtn) {
BitmapAsset = "UI:Keyboard_Black_Return_image";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Center";
text = "Join";
position = "1115 0";
extent = "140 40";
horizSizing = "left";
vertSizing = "center";
profile = "GuiMenuButtonProfile";
command = "JoinServerMenu.join();";
tooltipProfile = "GuiToolTipProfile";
};
new GuiIconButtonCtrl(JoinServerQLanBtn) {
BitmapAsset = "UI:Keyboard_Black_Escape_image";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Center";
text = "Query Lan";
position = "965 0";
extent = "140 40";
horizSizing = "left";
vertSizing = "center";
profile = "GuiMenuButtonProfile";
command = "JoinServerMenu.queryLan();";
tooltipProfile = "GuiToolTipProfile";
};
new GuiIconButtonCtrl(JoinServerQServerBtn) {
BitmapAsset = "UI:Keyboard_Black_Escape_image";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Center";
text = "Query Server";
position = "800 0";
extent = "160 40";
horizSizing = "left";
vertSizing = "center";
profile = "GuiMenuButtonProfile";
command = "JoinServerMenu.join();";
tooltipProfile = "GuiToolTipProfile";
};
new GuiIconButtonCtrl(JoinServerBackBtn) {
BitmapAsset = "UI:Keyboard_Black_Escape_image";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Center";
text = "Back";
position = "16 0";
extent = "140 40";
vertSizing = "center";
profile = "GuiMenuButtonProfile";
command = "Canvas.popDialog();";
tooltipProfile = "GuiToolTipProfile";
};
};
};

View file

@ -1,22 +1,32 @@
function JoinServerMenu::onWake(%this)
{
$MenuList = JoinServerList;
JoinServerList.listPosition = 0;
JoinServerList.syncGui();
}
function JoinServerMenu::onOpen(%this)
if(!isObject( JoinServerActionMap ) )
{
JoinServerList.setAsActiveMenuList();
$activeMenuButtonContainer-->button1.set("btn_y", "R", "Refresh", "JoinServerMenu.refresh();");
$activeMenuButtonContainer-->button2.set("btn_a", "Q", "Query LAN", "JoinServerMenu.queryLan();");
$activeMenuButtonContainer-->button3.set("btn_x", "E", "Query Online", "JoinServerMenu.query();");
$activeMenuButtonContainer-->button4.set("btn_start", "Return", "Join", "JoinServerMenu.join();");
$activeMenuButtonContainer-->button5.set("btn_b", "Escape", "Back", "cancelServerQuery(); " @ %this @ ".navigation.popPage();");
new ActionMap(JoinServerActionMap){};
JoinServerActionMap.bindCmd( keyboard, q, "JoinServerMenu.query();" );
JoinServerActionMap.bindCmd( gamepad, btn_x, "JoinServerMenu.query();" );
JoinServerActionMap.bindCmd( keyboard, e, "JoinServerMenu.queryLan();" );
JoinServerActionMap.bindCmd( gamepad, btn_y, "JoinServerMenu.queryLan();" );
JoinServerActionMap.bindCmd( keyboard, Enter, "JoinServerMenu::join();" );
JoinServerActionMap.bindCmd( gamepad, btn_a, "JoinServerMenu::join();" );
}
//----------------------------------------
function JoinServerMenu::query(%this)
{
//Nuke the current list and indicate we're working on a query...
JoinServerList.clear();
queryMasterServer(
0, // Query flags
$Client::GameTypeQuery, // gameTypes
@ -34,6 +44,9 @@ function JoinServerMenu::query(%this)
//----------------------------------------
function JoinServerMenu::queryLan(%this)
{
//Nuke the current list and indicate we're working on a query...
JoinServerList.clear();
queryLANServers(
$pref::Net::Port, // lanPort for local queries
0, // Query flags
@ -61,16 +74,14 @@ function JoinServerMenu::cancel(%this)
function JoinServerMenu::join(%this)
{
cancelServerQuery();
%index = JS_serverList.getSelectedId();
JoinGame(%index);
JoinGame(JoinServerList.listPosition);
}
//----------------------------------------
function JoinServerMenu::refresh(%this)
{
cancelServerQuery();
%index= JoinServerList.getActiveRow();
%index = JoinServerList.listPosition;
// The server info index is stored in the row along with the
// rest of displayed info.
@ -93,19 +104,19 @@ function JoinServerMenu::update(%this)
%sc = getServerCount();
for( %i = 0; %i < %sc; %i ++ ) {
setServerInfo(%i);
%serverBtn = new GuiButtonCtrl(){
text = $ServerInfo::Name TAB
$ServerInfo::Ping TAB
$ServerInfo::PlayerCount @ "/" @ $ServerInfo::MaxPlayers TAB
$ServerInfo::Version TAB
$ServerInfo::MissionName;
profile = GuiJoinServerButtonProfile;
extent = JoinServerList.extent.x SPC 30;
};
JoinServerList.add(%serverBtn);
%serverEntry = %this.addServerEntry();
%serverEntry-->serverNameTxt.text = $ServerInfo::Name;
%serverEntry-->serverDetailsTxt.text = $ServerInfo::MissionName @ " | v" @ $ServerInfo::Version @ " | " @ $ServerInfo::MissionType;
%serverEntry-->pingTxt.text = $ServerInfo::Ping @ " ms";
%serverEntry-->playerCountTxt.text = $ServerInfo::PlayerCount @ "|" @ $ServerInfo::MaxPlayers;
%serverEntry.resize(0, 0, JoinServerList.extent.x, %serverEntry.extent.y);
JoinServerList.add(%serverEntry);
}
$activeMenuButtonContainer-->button4.setActive(JoinServerList.getCount() > 0);
JoinServerList.syncGui();
}
//----------------------------------------
@ -115,26 +126,147 @@ function onServerQueryStatus(%status, %msg, %value)
// Update query status
// States: start, update, ping, query, done
// value = % (0-1) done for ping and query states
if (!JS_queryStatus.isVisible())
JS_queryStatus.setVisible(true);
//if (!JS_queryStatus.isVisible())
// JS_queryStatus.setVisible(true);
switch$ (%status) {
case "start":
JS_statusText.setText(%msg);
JS_statusBar.setValue(0);
MessagePopup("", %msg, 5000);
JoinServerList.clear();
case "ping":
JS_statusText.setText("Ping Servers");
JS_statusBar.setValue(%value);
MessagePopup("", "Pinging Servers", 5000);
case "query":
JS_statusText.setText("Query Servers");
JS_statusBar.setValue(%value);
MessagePopup("", "Querying Servers", 5000);
case "done":
JS_queryStatus.setVisible(false);
JS_status.setText(%msg);
MessagePopup("", %msg, 1000);
JoinServerMenu.update();
}
}
function JoinServerMenu::addServerEntry(%this)
{
%entry = new GuiContainer() {
position = "0 0";
extent = "900 40";
profile = GuiMenuDefaultProfile;
tooltipProfile = "GuiToolTipProfile";
horizSizing = "width";
vertSizing = "bottom";
class = "JoinServerServerEntry";
new GuiButtonCtrl() {
profile = GuiMenuButtonProfile;
position = "0 0";
extent = "900 40";
horizSizing = "width";
vertSizing = "height";
internalName = "button";
class = "JoinServerEntryButton";
};
new GuiTextCtrl() {
position = "0 0";
extent = "700 20";
profile = "MenuSubHeaderText";
tooltipProfile = "GuiToolTipProfile";
internalName = "serverNameTxt";
};
new GuiTextCtrl() {
position = $optionsEntryPad SPC 17;
extent = "700 18";
profile = "GuiMLTextProfile";
tooltipProfile = "GuiToolTipProfile";
internalName = "serverDetailsTxt";
};
new GuiTextCtrl() {
position = "700 0";
extent = "70 40";
horizSizing = "left";
vertSizing = "center";
profile = "MenuSubHeaderCenteredText";
tooltipProfile = "GuiToolTipProfile";
internalName = "pingTxt";
};
new GuiTextCtrl() {
position = "770 0";
extent = "130 40";
horizSizing = "left";
vertSizing = "center";
profile = "MenuSubHeaderCenteredText";
tooltipProfile = "GuiToolTipProfile";
internalName = "playerCountTxt";
};
};
return %entry;
}
function JoinServerEntryButton::onHighlighted(%this, %highlighted)
{
%container = %this.getParent();
%container-->serverNameTxt.profile = %highlighted ? MenuSubHeaderTextHighlighted : MenuSubHeaderText;
%container-->serverDetailsTxt.profile = %highlighted ? GuiMLTextProfileHighlighted : GuiMLTextProfile;
%container-->pingTxt.profile = %highlighted ? MenuSubHeaderCenteredTextHighlighted : MenuSubHeaderCenteredText;
%container-->playerCountTxt.profile = %highlighted ? MenuSubHeaderCenteredTextHighlighted : MenuSubHeaderCenteredText;
}
function JoinServerMenu::addStatusEntry(%this)
{
%entry = new GuiContainer() {
position = "0 0";
extent = "900 40";
profile = GuiMenuDefaultProfile;
tooltipProfile = "GuiToolTipProfile";
horizSizing = "width";
vertSizing = "bottom";
class = "JoinServerStatusEntry";
new GuiTextCtrl() {
position = "0 0";
extent = "730 20";
profile = "MenuSubHeaderCenteredText";
tooltipProfile = "GuiToolTipProfile";
internalName = "statusTxt";
};
};
return %entry;
}
function JoinServerStatusEntry::updateProgress(%this)
{
%this-->statusText.text = %this-->statusText.text @ "."; //ellipses.......
%this.schedule(500, "updateProgress");
}
function JoinServerList::syncGui(%this)
{
%this.callOnChildren("setHighlighted", false);
if(%this.listPosition < %this.getCount())
{
%btn = %this.getObject(%this.listPosition);
%btn-->button.setHighlighted(true);
}
//
//Update the button imagery to comply to the last input device we'd used
%device = Canvas.getLastInputDevice();
if(%device $= "mouse")
%device = "keyboard";
JoinServerBackBtn.setBitmap(BaseUIActionMap.getCommandButtonBitmap(%device, "BaseUIBackOut"));
JoinServerJoinBtn.setBitmap(JoinServerActionMap.getCommandButtonBitmap(%device, "JoinServerMenu::join();"));
JoinServerQLanBtn.setBitmap(JoinServerActionMap.getCommandButtonBitmap(%device, "JoinServerMenu.queryLan();"));
JoinServerQServerBtn.setBitmap(JoinServerActionMap.getCommandButtonBitmap(%device, "JoinServerMenu.query();"));
JoinServerJoinBtn.setActive(JoinServerList.getCount() > 0);
}

View file

@ -1,40 +1,38 @@
//--- OBJECT WRITE BEGIN ---
$guiContent = new GuiChunkedBitmapCtrl(MainMenuGui) {
BitmapAsset = "UI:backgrounddark_image";
extent = "1024 768";
$guiContent = new GuiControl(MainMenuGui) {
extent = "1280 720";
minExtent = "8 8";
horizSizing = "width";
vertSizing = "height";
profile = "GuiDefaultProfile";
profile = "GuiMenuBackgroundProfile";
category = "BaseUI";
tooltipProfile = "GuiToolTipProfile";
isContainer = "1";
superClass = "UINavigation";
canSaveDynamicFields = "0";
canSaveDynamicFields = "1";
new GuiInputCtrl(MainMenuInputHandler) {
ignoreMouseEvents = "1";
ActionMap = "BaseUIActionMap";
position = "-50 0";
extent = "2186 851";
horizSizing = "width";
vertSizing = "height";
profile = "GuiInputCtrlProfile";
tooltipProfile = "GuiToolTipProfile";
};
new GuiBitmapCtrl(SideBackgroundImage) {
bitmapAsset = "UI:menu_side_background_image";
color = "255 255 255 255";
wrap = "0";
position = "0 0";
BitmapAsset = "UI:menu_side_background_image";
position = "0 -48";
extent = "900 600";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "top";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiBitmapCtrl(MainMenuAppLogo) {
BitmapAsset = "UI:Torque_3D_logo_image";
position = "550 30";
position = "460 78";
extent = "360 100";
horizSizing = "left";
horizSizing = "center";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
canSaveDynamicFields = "1";
@ -46,98 +44,94 @@ $guiContent = new GuiChunkedBitmapCtrl(MainMenuGui) {
useModifiers = "0";
useStates = "1";
};
new GuiControl(MainMenuButtonHolder) {
position = "143 711";
extent = "736 40";
horizSizing = "center";
new GuiPanel(MainMenuButtonPanel) {
position = "0 683";
extent = "1281 40";
horizSizing = "width";
vertSizing = "top";
profile = "GuiMenuPanelProfile";
tooltipProfile = "GuiToolTipProfile";
new GuiIconButtonCtrl(MainMenuGoButton) {
BitmapAsset = "UI:Keyboard_Black_Return_image";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Center";
text = "Go";
position = "1115 0";
extent = "140 40";
horizSizing = "left";
vertSizing = "center";
profile = "GuiMenuButtonProfile";
command = "activateSelected();";
tooltipProfile = "GuiToolTipProfile";
};
};
new GuiStackControl(MainMenuButtonList) {
padding = "5";
dynamicSize = "0";
position = "440 199";
extent = "400 322";
horizSizing = "center";
vertSizing = "center";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
isContainer = "1";
class = "MenuInputButtonContainer";
new GuiIconButtonCtrl() {
BitmapAsset = "UI:Keyboard_Black_Return_image";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Right";
text = "Go";
position = "11 0";
extent = "140 40";
new GuiButtonCtrl(MainMenuSinglePlayerBtn) {
text = "Single Player";
extent = "400 40";
profile = "GuiMenuButtonProfile";
command = "MainMenuButtonList.activate();";
command = "$pref::HostMultiPlayer=false;\nCanvas.pushDialog(ChooseLevelMenu);";
tooltipProfile = "GuiToolTipProfile";
internalName = "button1";
class = "MenuInputButton";
};
new GuiIconButtonCtrl() {
BitmapAsset = "UI:Keyboard_Black_Return_image";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Right";
text = "Go";
position = "155 0";
extent = "140 40";
new GuiButtonCtrl(MainMenuCreateSrvrBtn) {
text = "Create Server";
position = "0 45";
extent = "400 40";
profile = "GuiMenuButtonProfile";
command = "MainMenuButtonList.activate();";
command = "$pref::HostMultiPlayer=true;Canvas.pushDialog(ChooseLevelMenu);";
tooltipProfile = "GuiToolTipProfile";
internalName = "button2";
class = "MenuInputButton";
};
new GuiIconButtonCtrl() {
BitmapAsset = "UI:Keyboard_Black_Return_image";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Right";
text = "Go";
position = "299 0";
extent = "140 40";
new GuiButtonCtrl(MainMenuJoinSrvrBtn) {
text = "Join Server";
position = "0 90";
extent = "400 40";
profile = "GuiMenuButtonProfile";
command = "MainMenuButtonList.activate();";
command = "Canvas.pushDialog(JoinServerMenu);";
tooltipProfile = "GuiToolTipProfile";
internalName = "button3";
class = "MenuInputButton";
};
new GuiIconButtonCtrl() {
BitmapAsset = "UI:Keyboard_Black_Return_image";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Right";
text = "Go";
position = "443 0";
extent = "140 40";
new GuiButtonCtrl(MainMenuOptionBtn) {
text = "Options";
position = "0 135";
extent = "400 40";
profile = "GuiMenuButtonProfile";
command = "MainMenuButtonList.activate();";
command = "Canvas.pushDialog(OptionsMenu);";
tooltipProfile = "GuiToolTipProfile";
};
new GuiButtonCtrl(MainMenuWorldEditBtn) {
text = "Open World Editor (F11)";
position = "0 180";
extent = "400 40";
profile = "GuiMenuButtonProfile";
command = "fastLoadWorldEdit(1);";
tooltipProfile = "GuiToolTipProfile";
};
new GuiButtonCtrl(MainMenuGuiEditBtn) {
text = "Open GUI Editor (F10)";
position = "0 225";
extent = "400 40";
profile = "GuiMenuButtonProfile";
command = "fastLoadGUIEdit(1);";
tooltipProfile = "GuiToolTipProfile";
};
new GuiButtonCtrl(MainMenuExitBtn) {
text = "Exit";
position = "0 270";
extent = "400 40";
profile = "GuiMenuButtonProfile";
command = "quit();";
tooltipProfile = "GuiToolTipProfile";
internalName = "button4";
class = "MenuInputButton";
};
new GuiIconButtonCtrl() {
BitmapAsset = "UI:Keyboard_Black_Return_image";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Right";
text = "Go";
position = "587 0";
extent = "140 40";
profile = "GuiMenuButtonProfile";
command = "MainMenuButtonList.activate();";
tooltipProfile = "GuiToolTipProfile";
internalName = "button5";
class = "MenuInputButton";
};
};
new GuiInputCtrl(MainMenuInputHandler) {
sendAxisEvents = "1";
sendBreakEvents = "1";
ignoreMouseEvents = "1";
position = "-50 0";
extent = "10 10";
horizSizing = "width";
vertSizing = "height";
profile = "GuiInputCtrlProfile";
tooltipProfile = "GuiToolTipProfile";
class = "MenuInputHandler";
};
};
//--- OBJECT WRITE END ---

View file

@ -1,52 +1,102 @@
function MainMenuGui::onAdd(%this)
{
$activeControllerName = "K&M"; //default input type
}
function MainMenuGui::onWake(%this)
{
//In the BaseUI example case, the MainMenuGUI acts as our background
//So it's a logical control to set as our UINavigation as well. So we
//set the MainMenuGUI's superClass to UINavigation to integrate it into
//that namespace to open up page navigation
//At the same time, the MainMenuGUI control has the button holder, set to
//the MenuInputButtonContainer class, allowing us to set it as the active button
//holder here, prepping it for catching any button inputs to active commands
//Specifically, it sets the $activeMenuButtonContainer to be this, which allows
//other controls to manage what the behavior of the buttons is consistently
//without needing to worry about hardcoded names
MainMenuButtonHolder.setActive();
//We also have the MainMenuInputHandler, a GuiInputCtrl with the MenuInputHandler class
//This allows us to catch any input/axis event and pass it along to the active menuList
//or button containers to navigate the menus
//We set up this catch by making said control our first responder, here
MainMenuInputHandler.setFirstResponder();
//We also go ahead and mark for any future pages being added to the UINavigation's page stack
//to be prompted to resize when added. This isn't required, but helps keep pages formated to
//the current size of the UINavigation, which is useful when dealing with aspect ratio or resolution
//changes.
%this.resizePages = true;
//Lastly, we go ahead and display some actual navigable content up on our main menu here
//In this case, we set the MainMenuButtons as our root page, so we always come back
//to having the main menu buttons on screen if every other page is closed.
//This will ultimately call MainMenuButtons::onOpen(), so to see where the navigation
//chain continues, see that function.
%this.setRootPage(MainMenuButtons);
%this.refreshPage();
$MenuList = MainMenuButtonList;
$MenuList.listPosition = 0;
}
function MainMenuButtonHolder::onWake(%this)
function MainMenuGui::onSleep(%this)
{
//Because the blan slate MainMenuGUI doesn't have anything we need to bother with inputs on
//we just go ahead and disable all the buttons in our MainMenuButtonHolder to have
// a clean slate
%this-->button1.disable();
%this-->button2.disable();
%this-->button3.disable();
%this-->button4.disable();
%this-->button5.disable();
}
if(!isObject( BaseUIActionMap ) )
{
new ActionMap(BaseUIActionMap){};
BaseUIActionMap.bind( keyboard, w, BaseUINavigatePrev );
BaseUIActionMap.bind( keyboard, s, BaseUINavigateNext );
BaseUIActionMap.bind( gamepad, yaxis, "D", "-0.23 0.23", BaseUIStickNavigate );
BaseUIActionMap.bind( gamepad, upov, BaseUINavigatePrev );
BaseUIActionMap.bind( gamepad, dpov, BaseUINavigateNext );
BaseUIActionMap.bind( keyboard, Enter, BaseUIActivateSelected );
BaseUIActionMap.bind( gamepad, btn_a, BaseUIActivateSelected );
BaseUIActionMap.bind( keyboard, Escape, BaseUIBackOut );
BaseUIActionMap.bind( gamepad, btn_b, BaseUIBackOut );
}
function BaseUINavigatePrev(%val)
{
if(%val)
{
$MenuList.listPosition -= 1;
if($MenuList.listPosition < 0)
$MenuList.listPosition = 0;
$MenuList.syncGUI();
}
}
function BaseUINavigateNext(%val)
{
if(%val)
{
$MenuList.listPosition += 1;
if($MenuList.listPosition >= $MenuList.getCount())
$MenuList.listPosition = $MenuList.getCount()-1;
$MenuList.syncGUI();
}
}
function BaseUIStickNavigate(%val)
{
if(%val == -1)
BaseUINavigateNext(1);
else if(%val == 1)
mainMenuNavigateDown(1);
}
function BaseUIBackOut(%val)
{
//we can't navigate further back than the MainMenuGui
if(%val && Canvas.getObject(Canvas.getCount()-1) != MainMenuGui)
{
Canvas.popDialog();
%topMenu = Canvas.getObject(Canvas.getCount()-1);
if(isObject(%topMenu))
{
//re-kick the on-wake so we can be fully up to date and relevently
//contexted
%topMenu.onWake();
}
}
}
function MainMenuButtonList::syncGUI(%this)
{
%this.callOnChildren("setHighlighted", false);
%btn = %this.getObject(%this.listPosition);
%btn.setHighlighted(true);
//
//Update the button imagery to comply to the last input device we'd used
%device = Canvas.getLastInputDevice();
if(%device $= "mouse")
%device = "keyboard";
MainMenuGoButton.setBitmap(BaseUIActionMap.getCommandButtonBitmap(%device, "BaseUIActivateSelected"));
}
function BaseUIActivateSelected()
{
%btn = $MenuList.getObject($MenuList.listPosition);
if(%btn.isMethod("performClick"))
%btn.performClick();
}

View file

@ -1,347 +1,75 @@
//--- OBJECT WRITE BEGIN ---
$guiContent = new GuiControl(MessageBoxDlg) {
position = "0 0";
extent = "1024 768";
extent = "1280 720";
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";
new GuiInputCtrl(MessageBoxInputHandler) {
ignoreMouseEvents = "1";
ActionMap = "MessageBoxActionMap";
position = "-50 0";
extent = "2186 851";
horizSizing = "width";
vertSizing = "height";
profile = "GuiInputCtrlProfile";
tooltipProfile = "GuiToolTipProfile";
};
new GuiBitmapCtrl() {
BitmapAsset = "UI:backdrop_image";
position = "272 128";
extent = "735 463";
horizSizing = "center";
vertSizing = "center";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
};
new GuiControl(MessageBoxCtrl) {
position = "319 169";
extent = "641 381";
horizSizing = "center";
vertSizing = "center";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
canSave = "1";
canSaveDynamicFields = "0";
new GuiBitmapBarCtrl() {
percent = "100";
vertical = "0";
flipClip = "0";
bitmapAsset = "UI:panel_image";
color = "255 255 255 255";
position = "0 0";
extent = "641 40";
minExtent = "8 2";
new GuiPanel() {
extent = "641 381";
horizSizing = "width";
vertSizing = "bottom";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
vertSizing = "height";
profile = "GuiMenuBasePanelProfile";
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 7";
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 GuiBitmapBarCtrl() {
percent = "100";
vertical = "0";
flipClip = "0";
bitmapAsset = "UI:panel_low_image";
color = "255 255 255 255";
position = "0 40";
extent = "641 341";
minExtent = "8 2";
horizSizing = "width";
vertSizing = "bottom";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
profile = "MenuHeaderText";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiMLTextCtrl(MessageBoxText) {
lineSpacing = "2";
allowColorChars = "0";
maxChars = "-1";
useURLMouseCursor = "0";
position = "81 83";
extent = "481 19";
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(MessageBoxOKButtonHolder) {
position = "0 285";
extent = "642 40";
minExtent = "8 2";
horizSizing = "center";
new GuiStackControl(MessageBoxButtonHolder) {
stackingType = "Horizontal";
position = "250 285";
extent = "140 40";
horizSizing = "width";
vertSizing = "top";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
class = "MenuInputButtonContainer";
canSave = "1";
canSaveDynamicFields = "0";
new GuiIconButtonCtrl() {
buttonMargin = "4 4";
iconBitmap = "data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_Enter";
iconLocation = "Left";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Right";
textMargin = "4";
autoSize = "0";
text = "Go";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "251 0";
extent = "140 40";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
active = "1";
command = "MainMenuButtonList.activateRow();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
internalName = "OKButton";
class = "MenuInputButton";
canSave = "1";
canSaveDynamicFields = "0";
};
};
new GuiControl(MessageBoxOCButtonHolder) {
position = "0 285";
extent = "642 40";
minExtent = "8 2";
horizSizing = "center";
vertSizing = "top";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
class = "MenuInputButtonContainer";
canSave = "1";
canSaveDynamicFields = "0";
new GuiIconButtonCtrl() {
buttonMargin = "4 4";
iconBitmap = "data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_Enter";
iconLocation = "Left";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Right";
textMargin = "4";
autoSize = "0";
text = "Go";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "171 0";
extent = "140 40";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
active = "1";
command = "MainMenuButtonList.activateRow();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
internalName = "OKButton";
class = "MenuInputButton";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiIconButtonCtrl() {
buttonMargin = "4 4";
iconBitmap = "data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_Enter";
iconLocation = "Left";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Right";
textMargin = "4";
autoSize = "0";
text = "Go";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "323 0";
extent = "140 40";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
active = "1";
command = "MainMenuButtonList.activateRow();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
internalName = "CancelButton";
class = "MenuInputButton";
canSave = "1";
canSaveDynamicFields = "0";
};
};
new GuiControl(MessageBoxYNCButtonHolder) {
position = "0 285";
extent = "642 40";
minExtent = "8 2";
horizSizing = "center";
vertSizing = "top";
profile = "GuiDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "1";
class = "MenuInputButtonContainer";
canSave = "1";
canSaveDynamicFields = "0";
new GuiIconButtonCtrl() {
buttonMargin = "4 4";
iconBitmap = "data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_Enter";
iconLocation = "Left";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Right";
textMargin = "4";
autoSize = "0";
text = "Go";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "99 0";
extent = "140 40";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
active = "1";
command = "MainMenuButtonList.activateRow();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
internalName = "yesButton";
class = "MenuInputButton";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiIconButtonCtrl() {
buttonMargin = "4 4";
iconBitmap = "data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_Enter";
iconLocation = "Left";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Right";
textMargin = "4";
autoSize = "0";
text = "Go";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "251 0";
extent = "140 40";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
active = "1";
command = "MainMenuButtonList.activateRow();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
internalName = "noButton";
class = "MenuInputButton";
canSave = "1";
canSaveDynamicFields = "0";
};
new GuiIconButtonCtrl() {
buttonMargin = "4 4";
iconBitmap = "data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_Enter";
iconLocation = "Left";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Right";
textMargin = "4";
autoSize = "0";
text = "Go";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "403 0";
extent = "140 40";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
active = "1";
command = "MainMenuButtonList.activateRow();";
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
internalName = "CancelButton";
class = "MenuInputButton";
canSave = "1";
canSaveDynamicFields = "0";
};
};
};
};

View file

@ -0,0 +1,218 @@
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
// --------------------------------------------------------------------
// Message Sound
// --------------------------------------------------------------------
/*new SFXDescription(MessageBoxAudioDescription)
{
volume = 1.0;
isLooping = false;
is3D = false;
channel = $GuiAudioType;
};
new SFXProfile(messageBoxBeep)
{
filename = "./messageBoxSound";
description = MessageBoxAudioDescription;
preload = true;
};*/
//---------------------------------------------------------------------------------------------
// messageCallback
// Calls a callback passed to a message box.
//---------------------------------------------------------------------------------------------
function messageCallback(%dlg, %callback)
{
Canvas.popDialog(%dlg);
eval(%callback);
}
//---------------------------------------------------------------------------------------------
// MBSetText
// Sets the text of a message box and resizes it to accomodate the new string.
//---------------------------------------------------------------------------------------------
function MBSetText(%text, %frame, %msg)
{
// Get the extent of the text box.
%ext = %text.getExtent();
// Set the text in the center of the text box.
%text.setText("<just:center>" @ %msg);
// Force the textbox to resize itself vertically.
%text.forceReflow();
// Grab the new extent of the text box.
%newExtent = %text.getExtent();
// Get the vertical change in extent.
%deltaY = getWord(%newExtent, 1) - getWord(%ext, 1);
// Resize the window housing the text box.
%windowPos = %frame.getPosition();
%windowExt = %frame.getExtent();
%frame.resize(getWord(%windowPos, 0), getWord(%windowPos, 1) - (%deltaY / 2),
getWord(%windowExt, 0), getWord(%windowExt, 1) + %deltaY);
%frame.canMove = "0";
//%frame.canClose = "0";
%frame.resizeWidth = "0";
%frame.resizeHeight = "0";
%frame.canMinimize = "0";
%frame.canMaximize = "0";
//sfxPlayOnce( messageBoxBeep );
}
function MessageBoxCtrl::onWake(%this)
{
%this.callback = "";
%this.cancelCallback = "";
}
//---------------------------------------------------------------------------------------------
// Various message box display functions. Each one takes a window title, a message, and a
// callback for each button.
//---------------------------------------------------------------------------------------------
function MessageBoxCtrl::createButton(%this, %text, %command, %bitmap)
{
%btn = new GuiIconButtonCtrl() {
BitmapAsset = %bitmap;
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Center";
iconLocation = "Left";
text = %text;
position = "251 0";
extent = "140 40";
profile = "GuiMenuButtonProfile";
command = %command;
tooltipProfile = "GuiToolTipProfile";
};
MessageBoxButtonHolder.add(%btn);
//update positioning of the holder to be centered
MessageBoxButtonHolder.position.x = MessageBoxCtrl.extent.x/2 - MessageBoxButtonHolder.extent.x/2;
return %btn;
}
function MessageBoxDlg::onWake(%this)
{
}
if(!isObject( MessageBoxActionMap ) )
{
new ActionMap(MessageBoxActionMap){};
MessageBoxActionMap.bind( keyboard, Enter, messageBoxYesClicked );
MessageBoxActionMap.bind( gamepad, btn_a, messageBoxYesClicked );
MessageBoxActionMap.bind( keyboard, Escape, messageBoxNoClicked );
MessageBoxActionMap.bind( gamepad, btn_b, messageBoxNoClicked );
}
function MessageBoxCtrl::syncGui(%this)
{
}
function messageBoxYesClicked(%this)
{
MessageCallback(MessageBoxDlg, MessageBoxDlg.callback);
}
function messageBoxNoClicked(%this)
{
MessageCallback(MessageBoxDlg,MessageBoxDlg.cancelCallback);
}
//MessageBoxOK("Test", "This is a test message box", "echo(\"Uhhhhhawhat?\"");
function MessageBoxOK(%title, %message, %callback)
{
MessageBoxButtonHolder.clear();
Canvas.pushDialog(MessageBoxDlg);
MessageBoxTitleText.text = %title;
%okButton = MessageBoxCtrl.createButton("OK", "messageBoxYesClicked();");
%bitmapAssetId = MessageBoxActionMap.getCommandButtonBitmap(Canvas.getLastInputDevice(), "messageBoxYesClicked");
%okButton.setBitmap(%bitmapAssetId);
MBSetText(MessageBoxText, MessageBoxCtrl, %message);
MessageBoxDlg.callback = %callback;
}
function MessageBoxOKCancel(%title, %message, %callback, %cancelCallback, %okLabelOverride, %cancelLabelOverride)
{
MessageBoxButtonHolder.clear();
Canvas.pushDialog(MessageBoxDlg);
MessageBoxTitleText.text = %title;
if(%okLabelOverride $= "")
%okLabel = "OK";
else
%okLabel = %okLabelOverride;
if(%cancelLabelOverride $= "")
%cancelLabel = "Cancel";
else
%cancelLabel = %cancelLabelOverride;
%okButton = MessageBoxCtrl.createButton(%okLabel, "messageBoxYesClicked();");
%bitmapAssetId = MessageBoxActionMap.getCommandButtonBitmap(Canvas.getLastInputDevice(), "messageBoxYesClicked");
%okButton.setBitmap(%bitmapAssetId);
%cancelButton = MessageBoxCtrl.createButton(%cancelLabel, "messageBoxNoClicked();");
%bitmapAssetId = MessageBoxActionMap.getCommandButtonBitmap(Canvas.getLastInputDevice(), "messageBoxNoClicked");
%cancelButton.setBitmap(%bitmapAssetId);
MBSetText(MessageBoxText, MessageBoxCtrl, %message);
MessageBoxDlg.callback = %callback;
MessageBoxDlg.cancelCallback = %cancelCallback;
}
function MessageBoxYesNo(%title, %message, %yesCallback, %noCallback)
{
MessageBoxOKCancel(%title, %message, %yesCallback, %noCallback, "Yes", "No");
}
//---------------------------------------------------------------------------------------------
// MessagePopup
// Displays a message box with no buttons. Disappears after %delay milliseconds.
//---------------------------------------------------------------------------------------------
function MessagePopup(%title, %message, %delay)
{
Canvas.pushDialog(MessageBoxDlg);
MessageBoxTitleText.text = %title;
MBSetText(MessageBoxText, MessageBoxCtrl, %message);
if (%delay !$= "")
schedule(%delay, 0, CloseMessagePopup);
}
function CloseMessagePopup()
{
Canvas.popDialog(MessageBoxDlg);
}

View file

@ -1,226 +1,212 @@
//--- OBJECT WRITE BEGIN ---
$guiContent = new GuiControl(OptionsMenu) {
extent = "1024 768";
profile = "GuiNonModalDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
isContainer = "1";
extent = "1280 720";
minExtent = "8 8";
horizSizing = "width";
vertSizing = "height";
profile = "GuiMenuBackgroundProfile";
category = "BaseUI";
tooltipProfile = "GuiToolTipProfile";
isContainer = "1";
canSaveDynamicFields = "0";
new GuiControl(OptionsMenuContainer) {
position = "48 56";
extent = "928 655";
horizSizing = "aspectCenter";
vertSizing = "center";
new GuiInputCtrl(OptionsMenuInputHandler) {
ignoreMouseEvents = "1";
ActionMap = "OptionsMenuActionMap";
position = "-50 0";
extent = "2186 851";
horizSizing = "width";
vertSizing = "height";
profile = "GuiInputCtrlProfile";
tooltipProfile = "GuiToolTipProfile";
};
new GuiControl(OptionsMenuCategoryContainer) {
position = "0 60";
extent = "1280 49";
horizSizing = "center";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
isContainer = "1";
new GuiBitmapBarCtrl() {
BitmapAsset = "UI:panel_low_image";
position = "0 40";
extent = "927 618";
new GuiStackControl(OptionsMenuCategoryList) {
stackingType = "Horizontal";
padding = "10";
dynamicSize = "0";
position = "330 0";
extent = "650 40";
horizSizing = "center";
vertSizing = "center";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
new GuiButtonCtrl() {
text = "Video";
extent = "120 40";
profile = "GuiMenuButtonProfile";
command = "OptionsMenu.openOptionsCategory(\"Video\");";
tooltipProfile = "GuiToolTipProfile";
};
new GuiButtonCtrl() {
text = "Audio";
position = "130 0";
extent = "120 40";
profile = "GuiMenuButtonProfile";
command = "OptionsMenu.openOptionsCategory(\"Audio\");";
tooltipProfile = "GuiToolTipProfile";
};
new GuiButtonCtrl() {
text = "Keyboard/Mouse";
position = "260 0";
extent = "220 40";
profile = "GuiMenuButtonProfile";
command = "OptionsMenu.openOptionsCategory(\"KBM\");";
tooltipProfile = "GuiToolTipProfile";
};
new GuiButtonCtrl() {
text = "Controller";
position = "480 0";
extent = "160 40";
profile = "GuiMenuButtonProfile";
command = "OptionsMenu.openOptionsCategory(\"Controller\");";
tooltipProfile = "GuiToolTipProfile";
};
};
new GuiControl(OptionsMenuNavButtonOverlay) {
extent = "1281 40";
horizSizing = "width";
vertSizing = "height";
profile = GuiNonModalDefaultProfile;
new GuiBitmapCtrl(OptionsMenuPrevNavIcon) {
BitmapAsset = "UI:Keyboard_Black_Q_image";
position = "0 10";
extent = "40 40";
profile = GuiNonModalDefaultProfile;
vertSizing = "top";
};
new GuiBitmapCtrl(OptionsMenuNextNavIcon) {
BitmapAsset = "UI:Keyboard_Black_E_image";
position = "0 10";
extent = "40 40";
profile = GuiNonModalDefaultProfile;
vertSizing = "top";
};
};
};
new GuiScrollCtrl(OptionsMenuSettingsScroll) {
hScrollBar = "alwaysOff";
vScrollBar = "dynamic";
position = "240 110";
extent = "800 573";
horizSizing = "center";
vertSizing = "height";
profile = "GuiMenuScrollProfile";
tooltipProfile = "GuiToolTipProfile";
new GuiStackControl(VideoSettingsList) {
class = "OptionsMenuList";
padding = "5";
changeChildSizeToFit = "0";
position = "0 1";
extent = "800 200";
horizSizing = "width";
vertSizing = "height";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
};
new GuiBitmapBarCtrl() {
BitmapAsset = "UI:panel_image";
extent = "927 40";
new GuiStackControl(AudioSettingsList) {
class = "OptionsMenuList";
padding = "5";
changeChildSizeToFit = "0";
position = "0 1";
extent = "800 200";
horizSizing = "width";
vertSizing = "height";
profile = "GuiDefaultProfile";
visible = "0";
tooltipProfile = "GuiToolTipProfile";
hidden = "1";
};
new GuiStackControl(KBMControlsList) {
class = "OptionsMenuList";
padding = "5";
changeChildSizeToFit = "0";
position = "0 1";
extent = "800 200";
horizSizing = "width";
vertSizing = "height";
profile = "GuiDefaultProfile";
visible = "0";
tooltipProfile = "GuiToolTipProfile";
hidden = "1";
};
new GuiStackControl(GamepadControlsList) {
class = "OptionsMenuList";
padding = "5";
changeChildSizeToFit = "0";
position = "0 1";
extent = "800 200";
horizSizing = "width";
vertSizing = "height";
profile = "GuiDefaultProfile";
visible = "0";
tooltipProfile = "GuiToolTipProfile";
hidden = "1";
};
};
new GuiPanel(OptionMenuTitlePanel) {
extent = "1281 60";
horizSizing = "width";
profile = "GuiMenuPanelProfile";
tooltipProfile = "GuiToolTipProfile";
new GuiTextCtrl() {
text = "OPTIONS";
position = "22 7";
position = "22 23";
extent = "220 28";
profile = "MenuHeaderText";
tooltipProfile = "GuiToolTipProfile";
};
new GuiTextCtrl(OptionName) {
position = "3 606";
extent = "293 17";
horizSizing = "width";
profile = "MenuSubHeaderText";
tooltipProfile = "GuiToolTipProfile";
};
new GuiMLTextCtrl(OptionDescription) {
text = "This is a placeholder text for an option.";
position = "3 625";
extent = "293 14";
horizSizing = "width";
profile = "GuiMLTextProfile";
tooltipProfile = "GuiToolTipProfile";
};
new GuiSplitContainer() {
splitPoint = "250 100";
fixedPanel = "FirstPanel";
fixedSize = "250";
position = "0 48";
extent = "928 555";
horizSizing = "width";
profile = "GuiMenuScrollProfile";
tooltipProfile = "GuiToolTipProfile";
new GuiPanel() {
docking = "Client";
extent = "248 555";
profile = "GuiOverlayProfile";
tooltipProfile = "GuiToolTipProfile";
internalName = "Panel1";
new GuiStackControl(OptionsMenuCategoryList) {
padding = "10";
dynamicSize = "0";
extent = "248 555";
horizSizing = "width";
vertSizing = "height";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
superClass = "MenuList";
new GuiButtonCtrl() {
text = "Display";
extent = "248 35";
profile = "GuiMenuButtonProfile";
command = "populateDisplaySettingsList();";
tooltipProfile = "GuiToolTipProfile";
};
new GuiButtonCtrl() {
text = "Graphics";
position = "0 45";
extent = "248 35";
profile = "GuiMenuButtonProfile";
command = "populateGraphicsSettingsList();";
tooltipProfile = "GuiToolTipProfile";
};
new GuiButtonCtrl() {
text = "Audio";
position = "0 90";
extent = "248 35";
profile = "GuiMenuButtonProfile";
command = "populateAudioSettingsList();";
tooltipProfile = "GuiToolTipProfile";
};
new GuiButtonCtrl() {
text = "Keyboard & Mouse";
position = "0 135";
extent = "248 35";
profile = "GuiMenuButtonProfile";
command = "populateKeyboardMouseSettingsList();";
tooltipProfile = "GuiToolTipProfile";
};
new GuiButtonCtrl() {
text = "Gamepad";
position = "0 180";
extent = "248 35";
profile = "GuiMenuButtonProfile";
command = "populateGamepadSettingsList();";
tooltipProfile = "GuiToolTipProfile";
};
new GuiButtonCtrl() {
text = "Example Options";
position = "0 225";
extent = "248 35";
profile = "GuiMenuButtonProfile";
command = "testExampleOptions();";
tooltipProfile = "GuiToolTipProfile";
};
};
};
new GuiPanel() {
docking = "Client";
position = "252 0";
extent = "676 555";
profile = "GuiOverlayProfile";
tooltipProfile = "GuiToolTipProfile";
internalName = "panel2";
new GuiScrollCtrl(OptionsMenuSettingsScroll) {
hScrollBar = "alwaysOff";
vScrollBar = "dynamic";
extent = "676 554";
horizSizing = "width";
vertSizing = "height";
profile = "GuiMenuScrollProfile";
tooltipProfile = "GuiToolTipProfile";
new GuiStackControl(OptionsMenuSettingsList) {
padding = "5";
changeChildSizeToFit = "0";
position = "1 1";
extent = "661 170";
horizSizing = "width";
vertSizing = "height";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
superClass = "MenuList";
new GuiGameSettingsCtrl() {
PreviousBitmapAsset = "UI:previousOption_n_image";
NextBitmapAsset = "UI:nextOption_n_image";
columnSplit = "198";
useMouseEvents = "1";
extent = "661 30";
horizSizing = "width";
profile = "GuiMenuButtonProfile";
tooltipProfile = "GuiToolTipProfile";
class = "MenuOptionsButton";
};
new GuiGameSettingsCtrl() {
PreviousBitmapAsset = "UI:previousOption_n_image";
NextBitmapAsset = "UI:nextOption_n_image";
columnSplit = "198";
useMouseEvents = "1";
position = "0 35";
extent = "661 30";
horizSizing = "width";
profile = "GuiMenuButtonProfile";
tooltipProfile = "GuiToolTipProfile";
class = "MenuOptionsButton";
};
new GuiGameSettingsCtrl() {
PreviousBitmapAsset = "UI:previousOption_n_image";
NextBitmapAsset = "UI:nextOption_n_image";
columnSplit = "198";
useMouseEvents = "1";
position = "0 70";
extent = "661 30";
horizSizing = "width";
profile = "GuiMenuButtonProfile";
tooltipProfile = "GuiToolTipProfile";
class = "MenuOptionsButton";
};
new GuiGameSettingsCtrl() {
PreviousBitmapAsset = "UI:previousOption_n_image";
NextBitmapAsset = "UI:nextOption_n_image";
columnSplit = "198";
useMouseEvents = "1";
position = "0 105";
extent = "661 30";
horizSizing = "width";
profile = "GuiMenuButtonProfile";
tooltipProfile = "GuiToolTipProfile";
class = "MenuOptionsButton";
};
new GuiGameSettingsCtrl() {
PreviousBitmapAsset = "UI:previousOption_n_image";
NextBitmapAsset = "UI:nextOption_n_image";
columnSplit = "198";
useMouseEvents = "1";
position = "0 140";
extent = "661 30";
horizSizing = "width";
profile = "GuiMenuButtonProfile";
tooltipProfile = "GuiToolTipProfile";
class = "MenuOptionsButton";
};
};
};
};
};
new GuiPanel(OptionsMenuButtonPanel) {
position = "0 683";
extent = "1281 40";
horizSizing = "width";
vertSizing = "top";
profile = "GuiMenuPanelProfile";
tooltipProfile = "GuiToolTipProfile";
new GuiIconButtonCtrl(OptionsMenuBackBtn) {
BitmapAsset = "UI:Keyboard_Black_Escape_image";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Center";
text = "Back";
position = "16 0";
extent = "140 40";
vertSizing = "center";
profile = "GuiMenuButtonProfile";
command = "tryCloseOptionsMenu();";
tooltipProfile = "GuiToolTipProfile";
class = "MenuInputButton";
};
new GuiIconButtonCtrl(OptionsMenuResetBtn) {
BitmapAsset = "UI:Keyboard_Black_Return_image";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Center";
text = "Reset";
position = "1135 0";
extent = "140 40";
horizSizing = "left";
vertSizing = "center";
profile = "GuiMenuButtonProfile";
command = "OptionsMenu.resetSettings();";
tooltipProfile = "GuiToolTipProfile";
class = "MenuInputButton";
};
};
};
//--- OBJECT WRITE END ---

File diff suppressed because it is too large Load diff

View file

@ -1,163 +0,0 @@
//--- OBJECT WRITE BEGIN ---
$guiContent = new GuiControl(PauseMenu) {
extent = "1024 768";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
isContainer = "1";
superClass = "UINavigation";
canSaveDynamicFields = "1";
new GuiChunkedBitmapCtrl(PauseMenuBG) {
BitmapAsset = "UI:hudfill_image";
extent = "1024 768";
horizSizing = "width";
vertSizing = "height";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
isContainer = "1";
canSaveDynamicFields = "1";
};
new GuiInputCtrl(PauseMenuInputHandler) {
sendAxisEvents = "1";
sendBreakEvents = "1";
ignoreMouseEvents = "1";
position = "-50 0";
extent = "10 10";
horizSizing = "width";
vertSizing = "height";
profile = "GuiInputCtrlProfile";
tooltipProfile = "GuiToolTipProfile";
class = "MenuInputHandler";
};
new GuiControl(PauseMenuButtons) {
position = "162 125";
extent = "700 518";
horizSizing = "center";
vertSizing = "center";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
isContainer = "1";
new GuiStackControl(PauseMenuList) {
padding = "15";
dynamicSize = "0";
extent = "700 320";
horizSizing = "center";
vertSizing = "center";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
superClass = "MenuList";
new GuiButtonCtrl() {
text = "Options";
extent = "700 55";
profile = "GuiMenuButtonProfile";
command = "openPauseMenuOptions();";
tooltipProfile = "GuiToolTipProfile";
};
new GuiButtonCtrl() {
text = "Exit to Menu";
position = "0 70";
extent = "700 55";
profile = "GuiMenuButtonProfile";
command = "pauseMenuExitToMenu();";
tooltipProfile = "GuiToolTipProfile";
};
new GuiButtonCtrl() {
text = "Exit to Desktop";
position = "0 140";
extent = "700 55";
profile = "GuiMenuButtonProfile";
command = "pauseMenuExitToDesktop();";
tooltipProfile = "GuiToolTipProfile";
};
};
};
new GuiControl(PauseButtonHolder) {
position = "144 711";
extent = "736 40";
horizSizing = "center";
vertSizing = "top";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
isContainer = "1";
class = "MenuInputButtonContainer";
new GuiIconButtonCtrl() {
BitmapAsset = "UI:Keyboard_Black_Return_image";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Right";
position = "11 0";
extent = "140 40";
profile = "GuiMenuButtonProfile";
visible = "0";
active = "0";
tooltipProfile = "GuiToolTipProfile";
internalName = "button1";
class = "MenuInputButton";
hidden = "1";
};
new GuiIconButtonCtrl() {
BitmapAsset = "UI:Keyboard_Black_Return_image";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Right";
position = "155 0";
extent = "140 40";
profile = "GuiMenuButtonProfile";
visible = "0";
active = "0";
tooltipProfile = "GuiToolTipProfile";
internalName = "button2";
class = "MenuInputButton";
hidden = "1";
};
new GuiIconButtonCtrl() {
BitmapAsset = "UI:Keyboard_Black_Return_image";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Right";
position = "299 0";
extent = "140 40";
profile = "GuiMenuButtonProfile";
visible = "0";
active = "0";
tooltipProfile = "GuiToolTipProfile";
internalName = "button3";
class = "MenuInputButton";
hidden = "1";
};
new GuiIconButtonCtrl() {
BitmapAsset = "UI:Keyboard_Black_Return_image";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Right";
position = "443 0";
extent = "140 40";
profile = "GuiMenuButtonProfile";
visible = "0";
active = "0";
tooltipProfile = "GuiToolTipProfile";
internalName = "button4";
class = "MenuInputButton";
hidden = "1";
};
new GuiIconButtonCtrl() {
BitmapAsset = "UI:Keyboard_Black_Return_image";
sizeIconToButton = "1";
makeIconSquare = "1";
textLocation = "Right";
position = "587 0";
extent = "140 40";
profile = "GuiMenuButtonProfile";
visible = "0";
active = "0";
tooltipProfile = "GuiToolTipProfile";
internalName = "button5";
class = "MenuInputButton";
hidden = "1";
};
};
};
//--- OBJECT WRITE END ---

View file

@ -1,93 +0,0 @@
function PauseMenu::onWake(%this)
{
if($Server::ServerType $= "SinglePlayer")
{
$timescale = 0;
sfxSetChannelVolume( $SimAudioType, $pref::SFX::channelVolume[ 0 ] );
}
PauseButtonHolder.setActive();
PauseMenuInputHandler.setFirstResponder();
%this.resizePages = true;
%this.setRootPage(PauseMenuButtons);
}
function PauseMenuButtons::onOpen(%this)
{
PauseMenuList.clear();
if($Tools::loaded && EditorIsActive())
{
%this.addPauseMenuButton("Exit Editor", "fastLoadWorldEdit();");
}
%this.addPauseMenuButton("Options", "openPauseMenuOptions();");
%this.addPauseMenuButton("Exit to Menu", "pauseMenuExitToMenu();");
%this.addPauseMenuButton("Exit to Desktop", "pauseMenuExitToDesktop();");
PauseMenuList.setAsActiveMenuList();
$activeMenuButtonContainer-->button1.disable();
$activeMenuButtonContainer-->button2.disable();
$activeMenuButtonContainer-->button3.disable();
$activeMenuButtonContainer-->button4.set("btn_a", "", "OK", "PauseMenuList.activate();");
$activeMenuButtonContainer-->button5.set("btn_b", "Escape", "Back", "Canvas.popDialog();");
}
function PauseMenuButtons::addPauseMenuButton(%this, %buttonText, %buttonCallback)
{
%newButton = new GuiButtonCtrl() {
text = %buttonText;
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
position = "0 0";
extent = "400 55";
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiMenuButtonProfile";
visible = "1";
active = "1";
command = %buttonCallback;
tooltipProfile = "GuiToolTipProfile";
hovertime = "1000";
isContainer = "0";
canSave = "1";
canSaveDynamicFields = "0";
};
PauseMenuList.add(%newButton);
}
function PauseMenu::onSleep(%this)
{
if($Server::ServerType $= "SinglePlayer")
{
$timescale = 1;
sfxSetChannelVolume( $SimAudioType, $pref::SFX::channelVolume[ $SimAudioType ] );
}
}
function openPauseMenuOptions()
{
PauseMenu.pushPage(OptionsMenu);
}
function pauseMenuExitToMenu()
{
MessageBoxOKCancel("Exit?", "Do you wish to exit to the Main Menu?", "escapeFromGame();", "");
}
function pauseMenuExitToDesktop()
{
MessageBoxOKCancel("Exit?", "Do you wish to exit to the desktop?", "quit();", "");
}
function PauseButtonHolder::onWake(%this)
{
}

View file

@ -1,4 +0,0 @@
<GUIAsset
AssetName="recordingsDlg"
GUIFile="@assetFile=RecordingsDlg.gui"
VersionId="1"/>

View file

@ -1,6 +1,6 @@
//--- OBJECT WRITE BEGIN ---
$guiContent = new GuiControl(RemapDlg) {
extent = "1024 768";
extent = "1280 720";
minExtent = "8 8";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
@ -9,7 +9,7 @@ $guiContent = new GuiControl(RemapDlg) {
helpTag = "0";
new GuiContainer(RemapPanel) {
position = "162 332";
position = "290 308";
extent = "700 104";
horizSizing = "center";
vertSizing = "center";
@ -34,26 +34,28 @@ $guiContent = new GuiControl(RemapDlg) {
tooltipProfile = "GuiToolTipProfile";
isContainer = "1";
new GuiBitmapBarCtrl() {
BitmapAsset = "UI:panel_image";
extent = "701 40";
new GuiBitmapCtrl() {
BitmapAsset = "UI:backdrop_image";
position = "1 1";
extent = "701 100";
horizSizing = "width";
vertSizing = "height";
profile = "GuiDefaultProfile";
tooltipProfile = "GuiToolTipProfile";
};
new GuiBitmapBarCtrl() {
BitmapAsset = "UI:panel_low_image";
position = "0 40";
extent = "701 341";
new GuiPanel() {
position = "38 12";
extent = "625 80";
horizSizing = "width";
profile = "GuiDefaultProfile";
vertSizing = "height";
profile = "GuiMenuBasePanelProfile";
tooltipProfile = "GuiToolTipProfile";
};
new GuiTextCtrl() {
text = "Press escape to cancel";
text = "Press escape or start to cancel";
maxLength = "255";
position = "260 67";
extent = "181 23";
position = "252 51";
extent = "245 23";
minExtent = "8 8";
horizSizing = "width";
vertSizing = "height";
@ -61,9 +63,9 @@ $guiContent = new GuiControl(RemapDlg) {
tooltipProfile = "GuiToolTipProfile";
};
new GuiTextCtrl() {
text = "Re-bind \"Forward\" to...";
text = "Re-bind \"\" to...";
maxLength = "255";
position = "259 40";
position = "251 24";
extent = "184 23";
minExtent = "8 8";
horizSizing = "center";

View file

@ -0,0 +1,77 @@
function OptRemapInputCtrl::onInputEvent( %this, %device, %action )
{
Canvas.popDialog( RemapDlg );
if ( %device $= "keyboard" && %action $= "escape" )
return;
else if( %device $= "gamepad" && %action $= "btn_start" )
return;
%cmd = $RemapCmd[%this.index];
%name = $RemapName[%this.index];
%actionMap = $RemapActionMap[%this.index];
echo("OptRemapInputCtrl::onInputEvent() - remapping details: " @ %cmd @ ", " @ %name @ ", " @ %actionMap @ " remapped to: " @ %device @ ", " @ %action);
// Grab the friendly display name for this action
// which we'll use when prompting the user below.
%mapName = getMapDisplayName( %device, %action );
// Get the current command this action is mapped to.
%prevMap = %actionMap.getCommand( %device, %action );
//TODO: clear all existant keybinds to a command and then bind it so we only have a single one at all times
unbindExtraActions( %cmd, %actionMap, 0 );
unbindExtraActions( %cmd, %actionMap, 1 );
// If nothing was mapped to the previous command
// mapping then it's easy... just bind it.
if ( %prevMap $= "" )
{
//unbindExtraActions( %cmd, %actionMap, 1 );
%actionMap.bind( %device, %action, %cmd );
OptionsMenu.syncGui();
return;
}
// If the previous command is the same as the
// current then they hit the same input as what
// was already assigned.
if ( %prevMap $= %cmd )
{
//unbindExtraActions( %cmd, %actionMap, 0 );
%actionMap.bind( %device, %action, %cmd );
OptionsMenu.syncGui();
return;
}
// Look for the index of the previous mapping.
%prevMapIndex = findRemapCmdIndex( %prevMap );
// If we get a negative index then the previous
// mapping was to an item that isn't included in
// the mapping list... so we cannot unmap it.
if ( %prevMapIndex == -1 )
{
MessageBoxOK( "Remap Failed", "\"" @ %mapName @ "\" is already bound to a non-remappable command!" );
return;
}
// Setup the forced remapping callback command.
%callback = "redoMapping(" @ %device @ ", " @ %actionMap @ ", \"" @ %action @ "\", \"" @
%cmd @ "\", " @ %prevMapIndex @ ", " @ %this.index @ ");";
// Warn that we're about to remove the old mapping and
// replace it with another.
%prevCmdName = $RemapName[%prevMapIndex];
//Canvas.pushDialog( RemapConfirmDlg );
%remapWarnText = "\"" @ %mapName @ "\" is already bound to \"" @ %prevCmdName @ "\"! Do you wish to replace this mapping?";
%doRemapCommand = "redoMapping(" @ %device @ ", " @ %actionMap @ ", \"" @ %action @ "\", \"" @
%cmd @ "\", " @ %prevMapIndex @ ", " @ %this.index @ ");";
%cancelCommand = "";
MessageBoxYesNo( "Key already in use", %remapWarnText, %doRemapCommand, %cancelCommand );
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

View file

@ -0,0 +1,3 @@
<ImageAsset
AssetName="backdrop_image"
imageFile="@assetFile=backdrop.png"/>

View file

@ -0,0 +1,3 @@
<ImageAsset
AssetName="textEditFrame_image"
imageFile="@assetFile=textEditFrame.png"/>

View file

@ -205,21 +205,6 @@ function controlSetChanged()
fillRemapList();
}
function doKeyRemap( %row )
{
%rowIndex = %row.remapIndex;
%name = $RemapName[%rowIndex];
RemapDlg-->OptRemapText.text = "Re-bind \"" @ %name @ "\" to..." ;
OptRemapInputCtrl.index = %rowIndex;
Canvas.pushDialog( RemapDlg );
//Let the options menu know
%actionMap = $RemapActionMap[%rowIndex];
OptionsMenu.onKeybindChanged(%actionMap, %name);
}
function ControlsMenuRebindButton::onClick(%this)
{
%name = $RemapName[%this.keybindIndex];
@ -230,89 +215,6 @@ function ControlsMenuRebindButton::onClick(%this)
Canvas.pushDialog( RemapDlg );
}
function OptRemapInputCtrl::onInputEvent( %this, %device, %action )
{
//error( "** onInputEvent called - device = " @ %device @ ", action = " @ %action @ " **" );
Canvas.popDialog( RemapDlg );
// Test for the reserved keystrokes:
if ( %device $= "keyboard" )
{
// Cancel...
if ( %action $= "escape" )
{
// Do nothing...
return;
}
}
%cmd = $RemapCmd[%this.index];
%name = $RemapName[%this.index];
%actionMap = $RemapActionMap[%this.index];
// Grab the friendly display name for this action
// which we'll use when prompting the user below.
%mapName = getMapDisplayName( %device, %action );
// Get the current command this action is mapped to.
%prevMap = %actionMap.getCommand( %device, %action );
//TODO: clear all existant keybinds to a command and then bind it so we only have a single one at all times
unbindExtraActions( %cmd, %actionMap, 0 );
unbindExtraActions( %cmd, %actionMap, 1 );
// If nothing was mapped to the previous command
// mapping then it's easy... just bind it.
if ( %prevMap $= "" )
{
//unbindExtraActions( %cmd, %actionMap, 1 );
%actionMap.bind( %device, %action, %cmd );
fillRemapList();
return;
}
// If the previous command is the same as the
// current then they hit the same input as what
// was already assigned.
if ( %prevMap $= %cmd )
{
//unbindExtraActions( %cmd, %actionMap, 0 );
%actionMap.bind( %device, %action, %cmd );
fillRemapList();
return;
}
// Look for the index of the previous mapping.
%prevMapIndex = findRemapCmdIndex( %prevMap );
// If we get a negative index then the previous
// mapping was to an item that isn't included in
// the mapping list... so we cannot unmap it.
if ( %prevMapIndex == -1 )
{
MessageBoxOK( "Remap Failed", "\"" @ %mapName @ "\" is already bound to a non-remappable command!" );
return;
}
// Setup the forced remapping callback command.
%callback = "redoMapping(" @ %device @ ", " @ %actionMap @ ", \"" @ %action @ "\", \"" @
%cmd @ "\", " @ %prevMapIndex @ ", " @ %this.index @ ");";
// Warn that we're about to remove the old mapping and
// replace it with another.
%prevCmdName = $RemapName[%prevMapIndex];
Canvas.pushDialog( RemapConfirmDlg );
%remapWarnText = "\"" @ %mapName @ "\" is already bound to \"" @ %prevCmdName @ "\"! Do you wish to replace this mapping?";
%doRemapCommand = "redoMapping(" @ %device @ ", " @ %actionMap @ ", \"" @ %action @ "\", \"" @
%cmd @ "\", " @ %prevMapIndex @ ", " @ %this.index @ "); Canvas.popDialog();";
%cancelCommand = "Canvas.popDialog();";
MessageBoxYesNo( "Key already in use", %remapWarnText, %doRemapCommand, %cancelCommand );
}
function findRemapCmdIndex( %command )
{
for ( %i = 0; %i < $RemapCount; %i++ )

View file

@ -1,50 +0,0 @@
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
function GuiTreeViewCtrl::onDefineIcons( %this )
{
%icons = "core/art/gui/images/treeview/default:" @
"core/art/gui/images/treeview/simgroup:" @
"core/art/gui/images/treeview/simgroup_closed:" @
"core/art/gui/images/treeview/simgroup_selected:" @
"core/art/gui/images/treeview/simgroup_selected_closed:" @
"core/art/gui/images/treeview/hidden:" @
"core/art/gui/images/treeview/shll_icon_passworded_hi:" @
"core/art/gui/images/treeview/shll_icon_passworded:" @
"core/art/gui/images/treeview/default";
%this.buildIconTable(%icons);
}
function GuiTreeViewCtrl::handleRenameObject( %this, %name, %obj )
{
%inspector = GuiInspector::findByObject( %obj );
if( isObject( %inspector ) )
{
%field = ( %this.renameInternal ) ? "internalName" : "name";
%inspector.setObjectField( %field, %name );
return true;
}
return false;
}

View file

@ -1,90 +0,0 @@
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
function HelpDlg::onWake(%this)
{
HelpFileList.entryCount = 0;
HelpFileList.clear();
for(%file = findFirstFile("*.hfl"); %file !$= ""; %file = findNextFile("*.hfl"))
{
HelpFileList.fileName[HelpFileList.entryCount] = %file;
HelpFileList.addRow(HelpFileList.entryCount, fileBase(%file));
HelpFileList.entryCount++;
}
HelpFileList.sortNumerical(0);
for(%i = 0; %i < HelpFileList.entryCount; %i++)
{
%rowId = HelpFileList.getRowId(%i);
%text = HelpFileList.getRowTextById(%rowId);
%text = %i + 1 @ ". " @ restWords(%text);
HelpFileList.setRowById(%rowId, %text);
}
HelpFileList.setSelectedRow(0);
}
function HelpFileList::onSelect(%this, %row)
{
%fo = new FileObject();
%fo.openForRead(%this.fileName[%row]);
%text = "";
while(!%fo.isEOF())
%text = %text @ %fo.readLine() @ "\n";
%fo.delete();
HelpText.setText(%text);
}
function getHelp(%helpName)
{
Canvas.pushDialog(HelpDlg);
if(%helpName !$= "")
{
%index = HelpFileList.findTextIndex(%helpName);
HelpFileList.setSelectedRow(%index);
}
}
function contextHelp()
{
for(%i = 0; %i < Canvas.getCount(); %i++)
{
if(Canvas.getObject(%i).getName() $= HelpDlg)
{
Canvas.popDialog(HelpDlg);
return;
}
}
%content = Canvas.getContent();
%helpPage = %content.getHelpPage();
getHelp(%helpPage);
}
function GuiControl::getHelpPage(%this)
{
return %this.helpPage;
}
function GuiMLTextCtrl::onURL(%this, %url)
{
gotoWebPage( %url );
}

View file

@ -1,729 +0,0 @@
//==============================================================================
// Menu Input Buttons
// This file manages the Menu Input Buttons stuff
// Any time you have a GUI button that should be clickable AND map to a key input
// such as a gamepad button, or enter, etc, this stuff can be used
//==============================================================================
/*
Gamepad input reference for 360 controller
btn_a = A
btn_b = B
btn_x = X
btn_y = Y
btn_r = Right Bumper
btn_l = Right Bumper
upov = Dpad Up
dpov = Dpad Down
lpov = Dpad Left
rpov = Dpad Right
xaxis = Left Stick | + values = up, - values = down
yaxis = Left Stick | + values = up, - values = down
rxaxis = Right Stick | + values = up, - values = down
ryaxis = Right Stick | + values = up, - values = down
zaxis = Left Trigger
rzaxis = Right Trigger
btn_start = Start
btn_back = Back/Select
*/
//==============================================================================
/// Summary:
/// This is used with the main UI menu lists, when a non-axis input event is called
/// such as pressing a button
/// It is called from the engine
///
/// \param %device (string) The name of the device the input event is coming fromt
/// \param %action (string) The specific key/input action
/// \param %state (bool) The down/up state of the event sent
function UIMenuButtonList::onInputEvent(%this, %device, %action, %state)
{
if(%state)
$activeMenuButtonContainer.processInputs(%device, %action);
}
//==============================================================================
/// Summary:
/// This is used with the main UI menu lists, when an axis input event is called
/// such as moving a joystick
/// It is called from the engine
///
/// \param %device (string) The name of the device the input event is coming fromt
/// \param %action (string) The specific key/input action
/// \param %axisVal (float) The float value of the axis event
function UIMenuButtonList::onAxisEvent(%this, %device, %action, %axisVal)
{
//Skip out of the value is too low as it could just be noise or miscalibrated defaults
if(%axisVal < 0.02)
return;
$activeMenuButtonContainer.processAxisEvent(%device, %action);
}
//==============================================================================
/// Summary:
/// Sets the command and text for the specified button. If %text and %command
/// are left empty, the button will be disabled and hidden.
///
/// \param %gamepadButton (string) The button to set for when using gamepad input. See the input map reference comment at the top of the file
/// \param %keyboardButton (string) The button to set for when using keyboard/mouse input.
/// \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 MenuInputButton::set(%this, %gamepadButton, %keyboardButton, %text, %command)
{
%this.setHidden(false);
%set = (! ((%text $= "") && (%command $= "")));
%this.gamepadButton = %gamepadButton;
%this.keyboardButton = %keyboardButton;
if(%gamepadButton $= "")
%this.gamepadValid = false;
else
%this.gamepadValid = true;
if(%keyboardButton $= "")
%this.kbmValid = false;
else
%this.kbmValid = true;
if((!%this.kbmValid && $activeControllerType !$= "gamepad") ||
(!%this.gamepadValid && $activeControllerType $= "gamepad"))
%set = false;
%this.setText(%text);
%this.Command = %command;
%this.refresh();
}
//==============================================================================
/// Summary:
/// Disables the MenuInputButton, marking it as not to consume inputs or display
function MenuInputButton::disable(%this)
{
%this.setText("");
%this.Command = "";
%this.setActive(false);
%this.setVisible(false);
}
//==============================================================================
/// Summary:
/// Refreshes the specific button, updating it's visbility status and the displayed input image
function MenuInputButton::refresh(%this)
{
%set = (! ((%this.text $= "") && (%this.command $= "")));
//Do a check so if a MenuInput is selectively bound and we're not using the
//matched input type, then we skip
if((!%this.kbmValid && $activeControllerType !$= "gamepad") ||
(!%this.gamepadValid && $activeControllerType $= "gamepad"))
%set = false;
%this.setActive(%set);
%this.setVisible(%set);
if(!%this.isActive())
return;
if($activeControllerType $= "gamepad")
{
if(%this.gamepadButton !$= "")
{
%assetId = "";
if($activeControllerName $= "PS4 Controller")
{
%assetId = "UI:PS4_";
if(%this.gamepadButton $= "btn_a")
%assetId = %assetId @ "Cross";
else if(%this.gamepadButton $= "btn_b")
%assetId = %assetId @ "Circle";
else if(%this.gamepadButton $= "btn_x")
%assetId = %assetId @ "Square";
else if(%this.gamepadButton $= "btn_y")
%assetId = %assetId @ "Triangle";
else if(%this.gamepadButton $= "btn_l")
%assetId = %assetId @ "L1";
else if(%this.gamepadButton $= "zaxis")
%assetId = %assetId @ "L2";
else if(%this.gamepadButton $= "btn_r")
%assetId = %assetId @ "R1";
else if(%this.gamepadButton $= "rzaxis")
%assetId = %assetId @ "R2";
else if(%this.gamepadButton $= "btn_start")
%assetId = %assetId @ "Options";
else if(%this.gamepadButton $= "btn_back")
%assetId = %assetId @ "Share";
}
else if($activeControllerName $= "Nintendo Switch Pro Controller")
{
%assetId = "UI:Switch_";
if(%this.gamepadButton $= "btn_a")
%assetId = %assetId @ "B";
else if(%this.gamepadButton $= "btn_b")
%assetId = %assetId @ "A";
else if(%this.gamepadButton $= "btn_x")
%assetId = %assetId @ "Y";
else if(%this.gamepadButton $= "btn_y")
%assetId = %assetId @ "X";
else if(%this.gamepadButton $= "btn_l")
%assetId = %assetId @ "LB";
else if(%this.gamepadButton $= "zaxis")
%assetId = %assetId @ "LT";
else if(%this.gamepadButton $= "btn_r")
%assetId = %assetId @ "RB";
else if(%this.gamepadButton $= "rzaxis")
%assetId = %assetId @ "RT";
else if(%this.gamepadButton $= "btn_start")
%assetId = %assetId @ "Plus";
else if(%this.gamepadButton $= "btn_back")
%assetId = %assetId @ "Minus";
}
else if($activeControllerName !$= "")
{
%assetId = "UI:Xbox_";
if(%this.gamepadButton $= "btn_a")
%assetId = %assetId @ "A";
else if(%this.gamepadButton $= "btn_b")
%assetId = %assetId @ "B";
else if(%this.gamepadButton $= "btn_x")
%assetId = %assetId @ "X";
else if(%this.gamepadButton $= "btn_y")
%assetId = %assetId @ "Y";
else if(%this.gamepadButton $= "btn_l")
%assetId = %assetId @ "LB";
else if(%this.gamepadButton $= "zaxis")
%assetId = %assetId @ "LT";
else if(%this.gamepadButton $= "btn_r")
%assetId = %assetId @ "RB";
else if(%this.gamepadButton $= "rzaxis")
%assetId = %assetId @ "RT";
else if(%this.gamepadButton $= "btn_start")
%assetId = %assetId @ "Menu";
else if(%this.gamepadButton $= "btn_back")
%assetId = %assetId @ "Windows";
}
}
}
else
{
if(%this.keyboardButton !$= "")
{
%assetId = "UI:Keyboard_Black_" @ %this.keyboardButton;
}
}
%this.setBitmap(%assetId @ "_image");
return true;
}
//==============================================================================
/// Summary:
/// Refreshes a menu input container, updating the buttons inside it
function MenuInputButtonContainer::refresh(%this)
{
%count = %this.getCount();
for(%i=0; %i < %count; %i++)
{
%btn = %this.getObject(%i);
%btn.refresh();
}
}
//==============================================================================
/// Summary:
/// Sets the given MenuInputButtonContainer as the active one. This directs input events
/// to it's buttons, ensures it's visible, and auto-hides the old active container if it was set
function MenuInputButtonContainer::setActive(%this)
{
if(isObject($activeMenuButtonContainer))
$activeMenuButtonContainer.hidden = true;
$activeMenuButtonContainer = %this;
$activeMenuButtonContainer.hidden = false;
$activeMenuButtonContainer.refresh();
}
//==============================================================================
/// Summary:
/// Checks the input manager for if we have a gamepad active and gets it's name
/// If we have one, also sets the active input type to gamepad
function MenuInputButtonContainer::checkGamepad(%this)
{
%controllerName = SDLInputManager::JoystickNameForIndex(0);
$activeControllerName = %controllerName;
if($activeControllerName $= "")
$activeControllerType = "K&M";
else
$activeControllerType = "gamepad";
}
//==============================================================================
/// Summary:
/// This is called by the earlier inputs callback that comes from the menu list
/// this allows us to first check what the input type is, and if the device is different
/// (such as going from keyboard and mouse to gamepad) we can refresh the buttons to update
/// the display
/// Then we process the input to see if it matches to any of the button maps for our
/// MenuInputButtons. If we have a match, we execute it's command.
///
/// \param %device (string) The device that is causing the input event
/// \param %action (string) The name of the input action
function MenuInputButtonContainer::processInputs(%this, %device, %action)
{
//check to see if our status has changed
%changed = false;
%oldDevice = $activeControllerName;
%deviceName = stripTrailingNumber(%device);
if(%deviceName $= "keyboard" || %deviceName $= "mouse")
{
if($activeControllerName !$= "K&M")
%changed = true;
$activeControllerName = "K&M";
$activeControllerType = "K&M";
Canvas.showCursor();
}
else
{
if(%this.checkGamepad())
{
Canvas.hideCursor();
}
if($activeControllerType !$= %oldDevice)
%changed = true;
}
if(%changed)
%this.refresh();
//Now process the input for the button accelerator, if applicable
//Set up our basic buttons
for(%i=0; %i < %this.getCount(); %i++)
{
%btn = %this.getObject(%i);
if(!%btn.isActive())
continue;
if($activeControllerType !$= "K&M")
{
if(%btn.gamepadButton $= %action)
{
eval(%btn.command);
}
}
else
{
if(%btn.keyboardButton $= %action)
{
eval(%btn.command);
}
}
}
}
//==============================================================================
/// Summary:
/// This is called by the earlier inputs callback that comes from the menu list
/// this allows us to first check what the input type is, and if the device is different
/// (such as going from keyboard and mouse to gamepad) we can refresh the buttons to update
/// the display
///
/// \param %device (string) The name of the device the input event is coming fromt
/// \param %action (string) The specific key/input action
/// \param %axisVal (float) The float value of the axis event
function MenuInputButtonContainer::processAxisEvent(%this, %device, %action, %axisVal)
{
//check to see if our status has changed
%changed = false;
%oldDevice = $activeControllerName;
%deviceName = stripTrailingNumber(%device);
if(%deviceName $= "mouse")
{
if($activeControllerName !$= "K&M")
%changed = true;
$activeControllerName = "K&M";
$activeControllerType = "K&M";
Canvas.showCursor();
}
else
{
if(%this.checkGamepad())
{
Canvas.hideCursor();
}
if($activeControllerType !$= %oldDevice)
%changed = true;
}
if(%changed)
%this.refresh();
}
//
//
function onSDLDeviceConnected(%sdlIndex, %deviceName, %deviceType)
{
/*if(GamepadButtonsGui.checkGamepad())
{
GamepadButtonsGui.hidden = false;
}*/
}
function onSDLDeviceDisconnected(%sdlIndex)
{
/*if(!GamepadButtonsGui.checkGamepad())
{
GamepadButtonsGui.hidden = true;
}*/
}
//==============================================================================
// Menu Input processing
// These functions manage the Menu input processing in general
// Whenever a MenuInputHandler consumes an input event, it'll process them here
// This'll let the active menu list be navigated, as well as buttons be processed
// and ultimately handled by the Input Buttons above
//==============================================================================
//==============================================================================
/// Summary:
/// This is used with the main UI menu lists, when an axis input event is called
/// such as moving a joystick
/// It is called from the engine
///
/// \param %device (string) The name of the device the input event is coming fromt
/// \param %action (string) The specific key/input action
/// \param %axisVal (float) The float value of the axis event
function MenuInputHandler::onAxisEvent(%this, %device, %action, %value)
{
//this is to force a refresh of the menu
if(%value == 1 || %value == -1)
$activeMenuButtonContainer.processInputs(%device, %action);
if(startsWith(%device, "mouse"))
return;
if((%action $= "upov" && %value > 0) || (%action $= "yaxis" && %value == -1))
{
$activeMenuList.navigateUp();
}
if((%action $= "dpov" && %value > 0) || (%action $= "yaxis" && %value == 1))
{
$activeMenuList.navigateDown();
}
//How we deal with the left and right navigation is dependant on the mode of the
//menu list
if($activeMenuListMode $= "Settings")
{
if((%action $= "lpov" && %value > 0) || (%action $= "xaxis" && %value == -1))
{
echo("Options menu nudged left!");
//$activeMenuList.navigateLeft();
}
if((%action $= "rpov" && %value > 0) || (%action $= "xaxis" && %value == -1))
{
echo("Options menu nudged right!");
//$activeMenuList.navigateRight();
}
}
else
{
if((%action $= "lpov" && %value > 0) || (%action $= "xaxis" && %value == -1))
{
$activeMenuList.navigateLeft();
}
if((%action $= "rpov" && %value > 0) || (%action $= "xaxis" && %value == -1))
{
$activeMenuList.navigateRight();
}
}
}
//==============================================================================
/// Summary:
/// This is used with the main UI menu lists, when a non-axis input event is called
/// such as pressing a button
/// It is called from the engine
///
/// \param %device (string) The name of the device the input event is coming fromt
/// \param %action (string) The specific key/input action
/// \param %state (bool) The down/up state of the event sent
function MenuInputHandler::onInputEvent(%this, %device, %action, %state)
{
if(%action $= "upov" || %action $= "dpov" || %action $= "lpov" || %action $= "rpov")
{
%this.onAxisEvent(%device, %action, %state);
return;
}
if(%state)
$activeMenuButtonContainer.processInputs(%device, %action);
}
//==============================================================================
// Menu List processing
// These functions manage the navigation and activation of the Menu Lists
//==============================================================================
//==============================================================================
/// Summary:
/// Is the GUIContainer with this MenuList namespace the 'active' menulist as far
/// as UI interfaces is concerned?
function MenuList::isActiveMenuList(%this)
{
if($activeMenuList == %this)
return true;
return false;
}
//==============================================================================
/// Summary:
/// Sets the GUIContainer with this MenuList namespace as the active menulist.
/// This means that any input events caught in MenuInputHandlers is directed at
/// this menu list to navigate it
///
/// \param %startPosition (Point2F) The X and Y starting positions of the selection for this menuList
/// \param %menuMode (string) Indicates the mode/type of menuList, allowing for special behaviors depending on type
function MenuList::setAsActiveMenuList(%this, %startPosition, %menuMode)
{
if(%startPosition $= "")
%startPosition = "0 0";
if(%menuMode $= "")
%menuMode = "Menu";
$activeMenuList = %this;
$activeMenuList.hidden = false;
$activeMenuList.ListPosition = %startPosition;
$activeMenuListMode = %menuMode;
%this.refresh();
}
//==============================================================================
/// Summary:
/// Activates the currently highlighted child object
function MenuList::activate(%this)
{
//check for a highlighted element
if($activeMenuList.ListPosition.y > -1 && $activeMenuList.ListPosition < $activeMenuList.getCount())
{
%btn = $activeMenuList.getObject($activeMenuList.ListPosition.y);
%btn.performClick();
}
}
//==============================================================================
/// Summary:
/// refreshes the menuList, updating children highlight status and if there is
/// a button pointer control defined on our list, we update it's position as
/// needed
function MenuList::refresh(%this)
{
%selectedObject = -1;
for(%i=0; %i < $activeMenuList.getCount(); %i++)
{
%btn = $activeMenuList.getObject(%i);
%isSelected = %i == $activeMenuList.ListPosition.y;
%btn.setHighlighted(%isSelected);
if(%isSelected)
%selectedObject = %i;
}
if(isObject(%this.buttonPointerCtrl))
{
if(%selectedObject != -1)
{
%this.buttonPointerCtrl.setHidden(false);
%buttonCenter = $activeMenuList.getObject(%selectedObject).getGlobalCenter();
if(%this.centerButtonPointerCtrl)
{
%this.buttonPointerCtrl.setCenter(%buttonCenter.x, %buttonCenter.y);
}
else
{
//if we're not centering, then left-justify
%this.buttonPointerCtrl.setCenter(%buttonCenter.x - $activeMenuList.getObject(%selectedObject).extent.x / 2, %buttonCenter.y);
}
}
else
{
%this.buttonPointerCtrl.setHidden(true);
}
}
if($activeMenuList.isMethod("onNavigate"))
$activeMenuList.onNavigate($activeMenuList.ListPosition.y);
%parent = $activeMenuList.getParent();
if(%parent.getClassName() $= "GuiScrollCtrl")
{
%parent.scrollToObject(%selectedObject);
}
}
//==============================================================================
/// Summary:
/// Selects the next 'up' child item in the menuList. If the current is the topmost
/// then nothing happens
function MenuList::navigateUp(%this)
{
$activeMenuList.ListPosition.y -= 1;
if($activeMenuList.ListPosition.y < 0)
$activeMenuList.ListPosition.y = 0;
%this.refresh();
}
//==============================================================================
/// Summary:
/// Selects the next 'down' child item in the menuList. If the current is the bottommost
/// then nothing happens
function MenuList::navigateDown(%this)
{
$activeMenuList.ListPosition.y += 1;
if($activeMenuList.ListPosition.y >= $activeMenuList.getCount())
$activeMenuList.ListPosition.y = $activeMenuList.getCount()-1;
%this.refresh();
}
//==============================================================================
/// Summary:
/// Selects the next 'left' child item in the menuList. If the current item is the leftmost
/// then nothing happens
function MenuList::navigateLeft()
{
//Atm, we're only handling specific control types, namely options entries, but
//this could readily be expanded upon to handle grids like for inventory screens
//or the like
%btn = $activeMenuList.getObject($activeMenuList.ListPosition.y);
if(%btn.getClassName() $= "GuiGameSettingsCtrl" && %btn.isEnabled())
{
%mode = %btn.getMode();
if(%mode == 0) //options list
{
%optionId = %btn.getCurrentOptionIndex() - 1;
%btn.selectOptionByIndex(%optionId);
%btn.onChange();
}
else if(%mode == 1) //slider
{
%value = %btn.getValue();
%adjustedValue = %value - %btn.getIncrement();
%minValue = %btn.getRange().x;
if(%adjustedValue < %minValue)
%adjustedValue = %minValue;
%btn.setValue(%adjustedValue);
%btn.onChange();
}
}
}
//==============================================================================
/// Summary:
/// Selects the next 'right' child item in the menuList. If the current item is the rightmost
/// then nothing happens
function MenuList::navigateRight()
{
%btn = $activeMenuList.getObject($activeMenuList.ListPosition.y);
if(%btn.getClassName() $= "GuiGameSettingsCtrl" && %btn.isEnabled())
{
%mode = %btn.getMode();
if(%mode == 0) //options list
{
%optionId = %btn.getCurrentOptionIndex() + 1;
%btn.selectOptionByIndex(%optionId);
%btn.onChange();
}
else if(%mode == 1) //slider
{
%value = %btn.getValue();
%adjustedValue = %value + %btn.getIncrement();
%maxValue = %btn.getRange().y;
if(%adjustedValue > %maxValue)
%adjustedValue = %maxValue;
%btn.setValue(%adjustedValue);
%btn.onChange();
}
}
}
//==============================================================================
/// Summary:
/// Gets the current vertical positionally selected child object
function MenuList::getActiveRow(%this)
{
return $activeMenuList.ListPosition.y;
}
//==============================================================================
/// Summary:
/// Called from the engine when a GUIButtonBase-derived class with MenuListButton namespace class
/// has its highlighting status changed. Allows us to react to this change of state and trigger refreshse
/// or other events to keep the navigation tracking up to date
///
/// \param %state (bool) The on/off state of the button being highlighted
function MenuListButton::onHighlighted(%this, %state)
{
echo("MenuListButton::onHighlighted() - " @ %this.internalName @ " was " @ %state @ " highlighted");
%parentContainer = %this.getParent();
if(%parentContainer.class $= "MenuList" || %parentContainer.superClass $= "MenuList")
{
if(isObject(%parentContainer.buttonPointerCtrl))
{
if(%state)
{
%parentContainer.buttonPointerCtrl.setHidden(false);
%buttonCenter = %this.getGlobalCenter();
echo(" - button center:" @ %buttonCenter);
if(%parentContainer.centerButtonPointerCtrl)
{
%parentContainer.buttonPointerCtrl.setGlobalCenter(%buttonCenter.x, %buttonCenter.y);
}
else
{
//if we're not centering, then left-justify
%parentContainer.buttonPointerCtrl.setGlobalCenter(%buttonCenter.x - %this.extent.x / 2, %buttonCenter.y);
}
echo(" - pointer position:" @ %parentContainer.buttonPointerCtrl.getPosition());
}
/*else
{
%parentContainer.buttonPointerCtrl.setHidden(true);
}*/
}
}
}

View file

@ -1,308 +0,0 @@
//==============================================================================
/// Summary:
/// This function sets the root page for the navigation stack. The root page is 'below'
/// all other normal pages and cannot be popped like a normal page.
/// When we set a new root page, we first check if we have an existing root page.
/// If we do, we run the usual canClose() then onClose() function pair, then we
/// set it and call the onOpen() for the new root page.
///
/// \param %rootPage (guiControl) The new guiControl that is being set as the root page of the navigation stack
function UINavigation::setRootPage(%this, %rootPage)
{
if(!isObject(%this.pageStack))
{
%this.pageStack = new ArrayObject();
}
if(%this.rootPage $= %rootPage)
return;
if(isObject(%this.rootPage))
{
%canClose = true;
if(%this.rootPage.isMethod("canClose"))
%canClose = %this.rootPage.call("canClose");
if(!%canClose)
return; //if we're not allowed to close, just bail out wholesale because clearly
//something is blocking changes to pages
%this.remove(%this.rootPage);
if(%this.rootPage.isMethod("onClose"))
%this.rootPage.call("onClose");
%this.rootPage.navigation = "";
}
%this.rootPage = %rootPage;
%this.add(%rootPage);
if(%this.resizePages)
{
%rootPage.resize(%this.position.x, %this.position.y,
%this.extent.x, %this.extent.y);
}
%rootPage.navigation = %this;
if(%rootPage.isMethod("onOpen"))
%rootPage.call("onOpen");
}
//==============================================================================
/// Summary:
/// This function pushes a page onto the given UINavigation-classed GUIContainer's stack
/// The order of operations is thus:
/// 1) check to see if the new page being pushed says it can open via the canOpen() function.
/// If this method is not defined, it defaults to true, as there's no impediment to continuing
/// If this check returns false, the pushPage event cancels.
/// 2) check to see if the current page on the stack says it can close. Similar to
/// the canOpen() check on the new page, we default to true
/// If this check returns false, the pushPage event cancels.
/// 3) Call - if defined - onClose() on the current top page of the stack
/// 4) Add the new page onto the stack
/// 5) Call - if defined - onOpen() on the new page
/// 6) Finally, if we defined a callback, call that.
/// With this all run, the previous top page has done any cleanup work it needed to
/// and the new top page has been opened successfully.
///
/// \param %newPage (guiControl) The new guiControl that is being added onto the page stack
/// \param %callback[optional]: (Evaluable string) A evalable statement to invoke when the push has been completed
function UINavigation::pushPage(%this, %newPage, %callback)
{
if(!isObject(%this.pageStack))
{
%this.pageStack = new ArrayObject();
}
//don't re-add pages
if(%this.getPageCount() != 0 &&
%this.pageStack.getIndexFromKey(%newPage) != -1)
return;
%canChange = true;
if(%newPage.isMethod("canOpen"))
%canChange = %newPage.call("canOpen");
if(!%canChange)
return;
%currentPage = %this.getCurrentPage();
if(isObject(%currentPage))
{
if(%currentPage.isMethod("canClose"))
%canChange = %currentPage.call("canClose");
if(!%canChange)
return;
if(%currentPage.isMethod("onClose"))
%currentPage.call("onClose");
}
%this.pageStack.push_back(%newPage);
%this.add(%newPage);
if(%this.resizePages)
{
%newPage.resize(%this.position.x, %this.position.y,
%this.extent.x, %this.extent.y);
}
if(%newPage.isMethod("onOpen"))
%newPage.call("onOpen");
%newPage.navigation = %this;
if(%callback !$= "")
eval(%callback);
}
//==============================================================================
/// Summary:
/// This function pops the topmost page off the given UINavigation-classed GUIContainer's stack
/// The order of operations is thus:
/// 1) check to see if the top page being popped says it can close via the canClose() function.
/// If this method is not defined, it defaults to true, as there's no impediment to continuing
/// If this check returns false, the popPage event cancels.
/// 2) check to see if the previous page on the stack says it can open. Similar to
/// the canClose() check on the new page, we default to true
/// If this check returns false, the popPage event cancels.
/// 3) Call - if defined - onClose() on the current top page of the stack
/// 4) Remove the top page
/// 5) Call - if defined - onOpen() on the now topmost page
/// 6) Finally, if we defined a callback, call that.
/// With this all run, the previous top page has done any cleanup work it needed to
/// and the new top page has been opened successfully.
///
/// \param %callback[optional] (Evaluable string) A evalable statement to invoke when the pop has been completed
function UINavigation::popPage(%this, %callback)
{
if(%this.pageStack.count() == 0)
return;
%currentPage = %this.getCurrentPage();
if(isObject(%currentPage))
{
%canChange = true;
if(%currentPage.isMethod("canClose"))
%canChange = %currentPage.call("canClose");
if(!%canChange)
return;
}
%prevPage = %this.getPreviousPage();
if(isObject(%prevPage))
{
%canChange = true;
if(%prevPage.isMethod("canOpen"))
%canChange = %prevPage.call("canOpen");
if(!%canChange)
return;
}
if(isObject(%currentPage))
{
if(%currentPage.isMethod("onClose"))
{
%currentPage.call("onClose");
}
%this.pageStack.pop_back();
%this.remove(%currentPage);
%currentPage.navigation = "";
}
%newTopPage = %this.getCurrentPage();
if(isObject(%newTopPage))
{
if(%newTopPage.isMethod("onOpen"))
%newTopPage.call("onOpen");
}
if(%callback !$= "")
eval(%callback);
}
//==============================================================================
/// Summary:
/// In order tops the topmost page in a loop until it has closed the entire stack,
/// leaving only the root page
///
/// \param %callback[optional] (Evaluable String) A evalable statement to invoke when the pop has been completed
function UINavigation::popToRoot(%this, %callback)
{
%pageChanged = false;
while(%this.getPageCount() != 0)
{
%currentPage = %this.getCurrentPage();
if(isObject(%currentPage))
{
if(%currentPage.isMethod("canClose"))
%canChange = %currentPage.call("canClose");
if(!%canChange)
return;
}
%prevPage = %this.getPreviousPage();
if(isObject(%prevPage))
{
if(%prevPage.isMethod("canOpen"))
%canChange = %prevPage.call("canOpen");
if(!%canChange)
return;
}
if(isObject(%currentPage))
{
if(%currentPage.isMethod("onClose"))
{
%currentPage.call("onClose");
}
%this.pageStack.pop_back();
%this.remove(%currentPage);
%currentPage.navigation = "";
}
%newTopPage = %this.getCurrentPage();
if(%newTopPage.isMethod("onOpen"))
%newTopPage.call("onOpen");
%pageChanged = true;
}
if(%pageChanged && %callback !$= "")
eval(%callback);
}
//==============================================================================
/// Summary:
/// Gets the current, topmost page on the stack. If no non-root pages are on the stack
/// the root page is returned
function UINavigation::getCurrentPage(%this)
{
if(isObject(%this.pageStack) && %this.pageStack.count() != 0)
{
return %this.pageStack.getKey(%this.pageStack.count()-1);
}
else
{
if(isObject(%this.rootPage))
return %this.rootPage;
}
return 0;
}
//==============================================================================
/// Summary:
/// Gets the page just under the topmost page in the stack. If there is no previous page
/// then the root page is returned
function UINavigation::getPreviousPage(%this)
{
if(isObject(%this.pageStack) && %this.pageStack.count() > 1)
{
return %this.pageStack.getKey(%this.pageStack.count()-2);
}
else
{
if(isObject(%this.rootPage))
return %this.rootPage;
}
return 0;
}
//==============================================================================
/// Summary:
/// Gets the number of pages on the stack.
function UINavigation::getPageCount(%this)
{
%count = 0;
if(isObject(%this.pageStack))
%count = %this.pageStack.count();
if(isObject(%this.rootPage))
%count++;
return %count;
}
//==============================================================================
/// Summary:
/// Force the page to reprocess to ensure it's status is up to date
function UINavigation::refreshPage(%this)
{
%page = %this.getCurrentPage();
if(!isObject(%page))
return;
if(%page.isMethod("onOpen"))
%page.call("onOpen");
}

View file

@ -1,341 +0,0 @@
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
// --------------------------------------------------------------------
// Message Sound
// --------------------------------------------------------------------
/*new SFXDescription(MessageBoxAudioDescription)
{
volume = 1.0;
isLooping = false;
is3D = false;
channel = $GuiAudioType;
};
new SFXProfile(messageBoxBeep)
{
filename = "./messageBoxSound";
description = MessageBoxAudioDescription;
preload = true;
};*/
//---------------------------------------------------------------------------------------------
// messageCallback
// Calls a callback passed to a message box.
//---------------------------------------------------------------------------------------------
function messageCallback(%dlg, %callback)
{
Canvas.popDialog(%dlg);
eval(%callback);
}
//---------------------------------------------------------------------------------------------
// MBSetText
// Sets the text of a message box and resizes it to accomodate the new string.
//---------------------------------------------------------------------------------------------
function MBSetText(%text, %frame, %msg)
{
// Get the extent of the text box.
%ext = %text.getExtent();
// Set the text in the center of the text box.
%text.setText("<just:center>" @ %msg);
// Force the textbox to resize itself vertically.
%text.forceReflow();
// Grab the new extent of the text box.
%newExtent = %text.getExtent();
// Get the vertical change in extent.
%deltaY = getWord(%newExtent, 1) - getWord(%ext, 1);
// Resize the window housing the text box.
%windowPos = %frame.getPosition();
%windowExt = %frame.getExtent();
%frame.resize(getWord(%windowPos, 0), getWord(%windowPos, 1) - (%deltaY / 2),
getWord(%windowExt, 0), getWord(%windowExt, 1) + %deltaY);
%frame.canMove = "0";
//%frame.canClose = "0";
%frame.resizeWidth = "0";
%frame.resizeHeight = "0";
%frame.canMinimize = "0";
%frame.canMaximize = "0";
//sfxPlayOnce( messageBoxBeep );
}
function MessageBoxCtrl::onWake(%this)
{
}
//---------------------------------------------------------------------------------------------
// Various message box display functions. Each one takes a window title, a message, and a
// callback for each button.
//---------------------------------------------------------------------------------------------
//MessageBoxOK("Test", "This is a test message box", "echo(\"Uhhhhhawhat?\"");
function MessageBoxOK(%title, %message, %callback)
{
Canvas.pushDialog(MessageBoxDlg);
MessageBoxTitleText.text = %title;
MessageBoxOCButtonHolder.hidden = true;
MessageBoxYNCButtonHolder.hidden = true;
MessageBoxOKButtonHolder.hidden = false;
MessageBoxOKButtonHolder-->OKButton.set("btn_a", "Return", "OK", "MessageCallback(MessageBoxDlg,MessageBoxDlg.callback);");
MessageBoxCtrl.originalMenuInputContainer = $activeMenuButtonContainer;
MessageBoxOKButtonHolder.setActive();
MBSetText(MessageBoxText, MessageBoxCtrl, %message);
MessageBoxDlg.callback = %callback;
}
function MessageBoxOKDlg::onSleep( %this )
{
%this.callback = "";
MessageBoxCtrl.originalMenuInputContainer.setActive();
}
function MessageBoxOKCancel(%title, %message, %callback, %cancelCallback, %okLabelOverride, %cancelLabelOverride)
{
Canvas.pushDialog(MessageBoxDlg);
MessageBoxTitleText.text = %title;
MessageBoxOCButtonHolder.hidden = false;
MessageBoxYNCButtonHolder.hidden = true;
MessageBoxOKButtonHolder.hidden = true;
if(%okLabelOverride $= "")
%okLabel = "OK";
else
%okLabel = %okLabelOverride;
if(%cancelLabelOverride $= "")
%cancelLabel = "Cancel";
else
%cancelLabel = %cancelLabelOverride;
MessageBoxOCButtonHolder-->OKButton.set("btn_a", "Return", %okLabel, "MessageCallback(MessageBoxDlg,MessageBoxDlg.callback);");
MessageBoxOCButtonHolder-->CancelButton.set("btn_b", "Escape", %cancelLabel, "MessageCallback(MessageBoxDlg,MessageBoxDlg.cancelCallback);");
MessageBoxCtrl.originalMenuInputContainer = $activeMenuButtonContainer;
MessageBoxOCButtonHolder.setActive();
MBSetText(MessageBoxText, MessageBoxCtrl, %message);
MessageBoxDlg.callback = %callback;
MessageBoxDlg.cancelCallback = %cancelCallback;
}
function MessageBoxOKCancelDlg::onSleep( %this )
{
%this.callback = "";
MessageBoxCtrl.originalMenuInputContainer.setActive();
}
function MessageBoxOKCancelDetails(%title, %message, %details, %callback, %cancelCallback)
{
if(%details $= "")
{
MBOKCancelDetailsButton.setVisible(false);
}
MBOKCancelDetailsScroll.setVisible(false);
MBOKCancelDetailsFrame.setText( %title );
Canvas.pushDialog(MessageBoxOKCancelDetailsDlg);
MBSetText(MBOKCancelDetailsText, MBOKCancelDetailsFrame, %message);
MBOKCancelDetailsInfoText.setText(%details);
%textExtent = MBOKCancelDetailsText.getExtent();
%textExtentY = getWord(%textExtent, 1);
%textPos = MBOKCancelDetailsText.getPosition();
%textPosY = getWord(%textPos, 1);
%extentY = %textPosY + %textExtentY + 65;
MBOKCancelDetailsInfoText.setExtent(285, 128);
MBOKCancelDetailsFrame.setExtent(300, %extentY);
MessageBoxOKCancelDetailsDlg.callback = %callback;
MessageBoxOKCancelDetailsDlg.cancelCallback = %cancelCallback;
MBOKCancelDetailsFrame.defaultExtent = MBOKCancelDetailsFrame.getExtent();
}
function MBOKCancelDetailsToggleInfoFrame()
{
if(!MBOKCancelDetailsScroll.isVisible())
{
MBOKCancelDetailsScroll.setVisible(true);
MBOKCancelDetailsText.forceReflow();
%textExtent = MBOKCancelDetailsText.getExtent();
%textExtentY = getWord(%textExtent, 1);
%textPos = MBOKCancelDetailsText.getPosition();
%textPosY = getWord(%textPos, 1);
%verticalStretch = %textExtentY;
if((%verticalStretch > 260) || (%verticalStretch < 0))
%verticalStretch = 260;
%extent = MBOKCancelDetailsFrame.defaultExtent;
%height = getWord(%extent, 1);
%posY = %textPosY + %textExtentY + 10;
%posX = getWord(MBOKCancelDetailsScroll.getPosition(), 0);
MBOKCancelDetailsScroll.setPosition(%posX, %posY);
MBOKCancelDetailsScroll.setExtent(getWord(MBOKCancelDetailsScroll.getExtent(), 0), %verticalStretch);
MBOKCancelDetailsFrame.setExtent(300, %height + %verticalStretch + 10);
} else
{
%extent = MBOKCancelDetailsFrame.defaultExtent;
%width = getWord(%extent, 0);
%height = getWord(%extent, 1);
MBOKCancelDetailsFrame.setExtent(%width, %height);
MBOKCancelDetailsScroll.setVisible(false);
}
}
function MessageBoxOKCancelDetailsDlg::onSleep( %this )
{
%this.callback = "";
MessageBoxCtrl.originalMenuInputContainer.setActive();
}
function MessageBoxYesNo(%title, %message, %yesCallback, %noCallback)
{
Canvas.pushDialog(MessageBoxDlg);
MessageBoxTitleText.text = %title;
MessageBoxOCButtonHolder.hidden = false;
MessageBoxYNCButtonHolder.hidden = true;
MessageBoxOKButtonHolder.hidden = true;
MessageBoxOCButtonHolder-->OKButton.set("btn_a", "Return", "Yes", "MessageCallback(MessageBoxDlg,MessageBoxDlg.yesCallBack);");
MessageBoxOCButtonHolder-->CancelButton.set("btn_b", "Escape", "No", "MessageCallback(MessageBoxDlg,MessageBoxDlg.noCallback);");
MessageBoxCtrl.originalMenuInputContainer = $activeMenuButtonContainer;
MessageBoxOCButtonHolder.setActive();
MBSetText(MessageBoxText, MessageBoxCtrl, %message);
MessageBoxDlg.yesCallBack = %yesCallback;
MessageBoxDlg.noCallback = %noCallback;
}
function MessageBoxYesNoCancel(%title, %message, %yesCallback, %noCallback, %cancelCallback)
{
Canvas.pushDialog(MessageBoxDlg);
MessageBoxTitleText.text = %title;
MessageBoxOCButtonHolder.hidden = true;
MessageBoxYNCButtonHolder.hidden = false;
MessageBoxOKButtonHolder.hidden = true;
MessageBoxYNCButtonHolder-->yesButton.set("btn_a", "Return", "Yes", "MessageCallback(MessageBoxDlg,MessageBoxDlg.yesCallBack);");
MessageBoxYNCButtonHolder-->noButton.set("btn_x", "backspace", "No", "MessageCallback(MessageBoxDlg,MessageBoxDlg.noCallback);");
MessageBoxYNCButtonHolder-->cancelButton.set("btn_b", "Escape", "No", "MessageCallback(MessageBoxDlg,MessageBoxDlg.cancelCallback);");
MessageBoxCtrl.originalMenuInputContainer = $activeMenuButtonContainer;
MessageBoxYNCButtonHolder.setActive();
MBSetText(MessageBoxText, MessageBoxCtrl, %message);
MessageBoxDlg.yesCallBack = %yesCallback;
MessageBoxDlg.noCallback = %noCallback;
MessageBoxDlg.cancelCallback = %cancelCallback;
}
function MessageBoxDlg::onSleep( %this )
{
%this.callback = "";
%this.cancelCallback = "";
%this.yesCallback = "";
%this.noCallback = "";
%this.cancelCallback = "";
MessageBoxCtrl.originalMenuInputContainer.setActive();
}
//---------------------------------------------------------------------------------------------
// MessagePopup
// Displays a message box with no buttons. Disappears after %delay milliseconds.
//---------------------------------------------------------------------------------------------
function MessagePopup(%title, %message, %delay)
{
Canvas.pushDialog(MessageBoxDlg);
MessageBoxTitleText.text = %title;
MBSetText(MessageBoxText, MessageBoxCtrl, %message);
if (%delay !$= "")
schedule(%delay, 0, CloseMessagePopup);
}
function CloseMessagePopup()
{
Canvas.popDialog(MessageBoxDlg);
}
//---------------------------------------------------------------------------------------------
// IODropdown
// By passing in a simgroup or simset, the user will be able to choose a child of that group
// through a guiPopupMenuCtrl
//---------------------------------------------------------------------------------------------
function IODropdown(%title, %message, %simgroup, %callback, %cancelCallback)
{
IODropdownFrame.text = %title;
Canvas.pushDialog(IODropdownDlg);
MBSetText(IODropdownText, IODropdownFrame, %message);
if(isObject(%simgroup))
{
for(%i = 0; %i < %simgroup.getCount(); %i++)
IODropdownMenu.add(%simgroup.getObject(%i).getName());
}
IODropdownMenu.sort();
IODropdownMenu.setFirstSelected(0);
IODropdownDlg.callback = %callback;
IODropdownDlg.cancelCallback = %cancelCallback;
}
function IODropdownDlg::onSleep( %this )
{
%this.callback = "";
%this.cancelCallback = "";
IODropdownMenu.clear();
}
//The # in the function passed replaced with the output
//of the preset menu.
function IOCallback(%dlg, %callback)
{
%id = IODropdownMenu.getSelected();
%text = IODropdownMenu.getTextById(%id);
%callback = strreplace(%callback, "#", %text);
eval(%callback);
Canvas.popDialog(%dlg);
}

View file

@ -1,74 +1,94 @@
$TextMediumEmphasisColor = "200 200 200";
$TextMediumEmphasisColorHL = "0 0 0";
$TextHighEmphasisColor = "224 224 224";
$TextHighEmphasisColorHL = "0 0 0";
$TextDisabledColor = "108 108 108";
new GuiGameListMenuProfile(DefaultListMenuProfile)
// ---------------------------------------------------------------------------
// Defaults
// ---------------------------------------------------------------------------
singleton GuiControlProfile( GuiMenuDefaultProfile )
{
opaque = false;
fillColor = "0 0 0 0";
category = "BaseUI";
};
singleton GuiControlProfile( GuiModelessDialogProfile : GuiMenuDefaultProfile )
{
modal = false;
};
singleton GuiControlProfile(GuiMenuBackgroundProfile)
{
category = "BaseUI";
opaque = true;
fillcolor = "34 34 34 255";
};
singleton GuiControlProfile(GuiMenuPanelProfile)
{
category = "BaseUI";
opaque = true;
fillcolor = "15 15 15 255";
};
singleton GuiControlProfile(GuiMenuBasePanelProfile)
{
category = "BaseUI";
opaque = true;
fillcolor = "40 40 40 255";
};
// ---------------------------------------------------------------------------
// Text
// ---------------------------------------------------------------------------
singleton GuiControlProfile(MenuHeaderText)
{
fontType = "Arial Bold";
fontSize = 20;
fontColor = $TextMediumEmphasisColor;
fontColorSEL = $TextMediumEmphasisColor;
fontColorNA = $TextDisabledColor;
fontColorHL = $TextMediumEmphasisColor;
fillColor = "108 108 108";
fillColorHL = "140 140 140";
fillColorSEL = "180 180 180";
HitAreaUpperLeft = "16 20";
HitAreaLowerRight = "503 74";
IconOffset = "40 0";
TextOffset = "100 0";
RowSize = "500 90";
ColumnSplit = "250";
RightPad = "20";
bitmap = "UI:listMenuArray_image";
canKeyFocus = true;
};
new GuiControlProfile(GamepadDefaultProfile)
{
border = 0;
};
new GuiControlProfile(GamepadButtonTextLeft)
{
fontType = "Arial Bold";
fontSize = 20;
fontColor = "255 255 255";
justify = "left";
};
new GuiControlProfile(GamepadButtonTextRight : GamepadButtonTextLeft)
{
justify = "right";
};
new GuiControlProfile(MenuHeaderText)
{
fontType = "Arial Bold";
fontSize = 30;
fontSize = 36;
fontColor = $TextHighEmphasisColor;
justify = "left";
modal = false;
category = "BaseUI";
};
new GuiControlProfile(MenuHeaderTextCenter)
singleton GuiControlProfile(MenuHeaderTextHighlighted : MenuHeaderText)
{
fontColor = $TextHighEmphasisColorHL;
};
singleton GuiControlProfile(MenuHeaderTextCenter : MenuHeaderText)
{
fontType = "Arial Bold";
fontSize = 30;
fontColor = $TextHighEmphasisColor;
justify = "center";
};
new GuiControlProfile(MenuSubHeaderText)
singleton GuiControlProfile(MenuSubHeaderText)
{
fontType = "Arial Bold";
fontSize = 20;
fontSize = 24;
fontColor = $TextMediumEmphasisColor;
justify = "left";
modal = false;
category = "BaseUI";
};
new GuiControlProfile(MenuMLSubHeaderText)
singleton GuiControlProfile(MenuSubHeaderTextHighlighted : MenuSubHeaderText)
{
fontColor = $TextMediumEmphasisColorHL;
};
singleton GuiControlProfile(MenuSubHeaderCenteredText : MenuSubHeaderText)
{
justify = "center";
};
singleton GuiControlProfile(MenuSubHeaderCenteredTextHighlighted : MenuSubHeaderCenteredText)
{
fontColor = $TextMediumEmphasisColorHL;
};
singleton GuiControlProfile(MenuMLSubHeaderText)
{
fontType = "Arial Bold";
fontSize = 20;
@ -76,482 +96,107 @@ new GuiControlProfile(MenuMLSubHeaderText)
justify = "left";
autoSizeWidth = true;
autoSizeHeight = true;
};
new GuiControlProfile(MenuMLSubHeaderTextCenter : MenuMLSubHeaderText)
{
justify = "center";
};
if( !isObject( GuiMenuButtonProfile ) )
new GuiControlProfile( GuiMenuButtonProfile )
{
opaque = true;
border = true;
fontSize = 18;
fontType = "Arial Bold";
fontColor = $TextMediumEmphasisColor;
fontColorHL = $TextMediumEmphasisColor;
fontColorNA = $TextDisabledColor;
fontColorSEL = $TextMediumEmphasisColor;
fillColor = "40 40 40";
fillColorHL = "49 34 37";
fillColorNA = "40 40 40";
borderColor = "87 87 87";
borderColorNA = "0 0 0";
borderColorHL = "194 64 64";
fixedExtent = false;
justify = "center";
canKeyFocus = false;
//bitmapAsset = "UI:menu_button_image";
hasBitmapArray = false;
soundButtonDown = "UI:buttonClick";
soundButtonOver = "UI:buttonHover";
category = "Core";
};
if( !isObject( GuiHighlightMenuButtonProfile ) )
new GuiControlProfile( GuiHighlightMenuButtonProfile )
{
opaque = true;
border = false;
fontSize = 18;
fontType = "Arial Bold";
fontColor = "240 240 240";
fontColorHL = "0 0 0";
fontColorNA = "125 125 125";
//fontColorSEL ="0 0 0";
fixedExtent = false;
justify = "center";
canKeyFocus = false;
bitmapAsset = "UI:selector_button_highlight_only_image";
hasBitmapArray = false;
category = "Core";
};
if( !isObject( GuiBlankMenuButtonProfile ) )
new GuiControlProfile( GuiBlankMenuButtonProfile )
{
opaque = true;
border = false;
fontSize = 18;
fontType = "Arial Bold";
fontColor = "220 220 220";
fontColorHL = "255 255 255";
fontColorNA = "200 200 200";
//fontColorSEL ="0 0 0";
fixedExtent = false;
justify = "center";
canKeyFocus = false;
bitmapAsset = "UI:selector_button_blank_image";
hasBitmapArray = false;
soundButtonDown = menuButtonPressed;
soundButtonOver = menuButtonHover;
category = "Core";
};
if( !isObject( GuiJoinServerButtonProfile ) )
new GuiControlProfile( GuiJoinServerButtonProfile : GuiMenuButtonProfile )
{
justify = "left";
};
if( !isObject( GuiMenuTextProfile ) )
new GuiControlProfile( GuiMenuTextProfile )
{
opaque = true;
border = false;
fontSize = 18;
fontType = "Arial Bold";
fontColor = "240 240 240";
fontColorHL = "0 0 0";
fontColorNA = "125 125 125";
fixedExtent = false;
justify = "center";
category = "Core";
};
if( !isObject( GuiSolidDefaultProfile ) )
new GuiControlProfile (GuiSolidDefaultProfile)
{
opaque = true;
border = true;
category = "Core";
};
if( !isObject( GuiTransparentProfile ) )
new GuiControlProfile (GuiTransparentProfile)
{
opaque = false;
border = false;
category = "Core";
};
if( !isObject( GuiGroupBorderProfile ) )
new GuiControlProfile( GuiGroupBorderProfile )
{
border = false;
opaque = false;
hasBitmapArray = true;
bitmapAsset = "UI:group_border_image";
category = "Core";
};
if( !isObject( GuiTabBorderProfile ) )
new GuiControlProfile( GuiTabBorderProfile )
{
border = false;
opaque = false;
hasBitmapArray = true;
bitmapAsset = "UI:tab_border_image";
category = "Core";
};
if( !isObject( GuiModelessDialogProfile ) )
new GuiControlProfile( GuiModelessDialogProfile )
{
modal = false;
category = "Core";
category = "BaseUI";
};
if( !isObject( GuiFrameSetProfile ) )
new GuiControlProfile (GuiFrameSetProfile)
singleton GuiControlProfile(MenuMLSubHeaderTextCenter : MenuMLSubHeaderText)
{
justify = "center";
};
singleton GuiControlProfile( GuiMenuTextProfile )
{
fillcolor = "255 255 255";
borderColor = "246 245 244";
border = 1;
opaque = true;
border = true;
category = "Core";
border = false;
fontSize = 18;
fontType = "Arial Bold";
fontColor = "240 240 240";
fontColorHL = "0 0 0";
fontColorNA = "125 125 125";
fixedExtent = false;
justify = "center";
category = "BaseUI";
modal = false;
};
if( !isObject( GuiInputCtrlProfile ) )
new GuiControlProfile( GuiInputCtrlProfile )
{
tab = true;
canKeyFocus = true;
category = "Core";
};
if( !isObject( GuiTextProfile ) )
new GuiControlProfile (GuiTextProfile)
{
justify = "left";
fontColor = "20 20 20";
category = "Core";
};
if( !isObject( GuiTextRightProfile ) )
new GuiControlProfile (GuiTextRightProfile : GuiTextProfile)
{
justify = "right";
category = "Core";
};
if( !isObject( GuiAutoSizeTextProfile ) )
new GuiControlProfile (GuiAutoSizeTextProfile)
singleton GuiControlProfile( GuiMenuTextProfileHL : GuiMenuTextProfile )
{
fontColor = "0 0 0";
autoSizeWidth = true;
autoSizeHeight = true;
category = "Core";
};
if( !isObject( GuiMediumTextProfile ) )
new GuiControlProfile( GuiMediumTextProfile : GuiTextProfile )
{
fontSize = 24;
category = "Core";
};
if( !isObject( GuiBigTextProfile ) )
new GuiControlProfile( GuiBigTextProfile : GuiTextProfile )
{
fontSize = 36;
category = "Core";
};
if( !isObject( GuiMLTextProfile ) )
new GuiControlProfile( GuiMLTextProfile )
singleton GuiControlProfile( GuiMLTextProfile )
{
fontColor = $TextMediumEmphasisColor;
fontColorHL = $TextMediumEmphasisColor;
fontColorSEL = $TextMediumEmphasisColor;
fontColorNA = $TextDisabledColor;
fontSize = 20;
fontColorLink = "100 100 100";
fontColorLinkHL = $TextMediumEmphasisColor;
autoSizeWidth = true;
autoSizeHeight = true;
border = false;
category = "Core";
modal = false;
category = "BaseUI";
};
if( !isObject( GuiMLWhiteTextProfile ) )
new GuiControlProfile( GuiMLWhiteTextProfile )
singleton GuiControlProfile( GuiMLTextProfileHighlighted : GuiMLTextProfile )
{
fontColor = "220 220 220";
fontColorHL = $TextMediumEmphasisColor;
autoSizeWidth = true;
autoSizeHeight = true;
border = false;
category = "Core";
fontColor = $TextMediumEmphasisColorHL;
};
if( !isObject( GuiTextArrayProfile ) )
new GuiControlProfile( GuiTextArrayProfile : GuiTextProfile )
{
fontColor = $TextMediumEmphasisColor;
fontColorHL = $TextMediumEmphasisColor;
fontColorSEL = $TextMediumEmphasisColor;
fontColorNA = $TextDisabledColor;
fillColor = "22 22 22 255";
fillColorHL = "22 22 22 255";
fillColorSEL = "56 56 56 255";
border = true;
borderColor ="87 87 87";
borderColorHL = "87 87 87";
borderColorSEL = "255 255 255";
category = "Core";
canKeyFocus = true;
};
if( !isObject( GuiMenuTextEditProfile ) )
new GuiControlProfile( GuiMenuTextEditProfile : GuiTextEditProfile )
{
fontColor = $TextMediumEmphasisColor;
fontColorHL = $TextMediumEmphasisColor;
fontColorSEL = $TextMediumEmphasisColor;
fontColorNA = $TextDisabledColor;
fillColor = "22 22 22 255";
fillColorHL = "22 22 22 255";
border = true;
borderColor ="87 87 87";
borderColorHL = "87 87 87";
borderColorSEL = "255 255 255";
category = "Core";
};
// ----------------------------------------------------------------------------
// TODO: Revisit Popupmenu
// ----------------------------------------------------------------------------
if( !isObject( GuiPopupMenuItemBorder ) )
new GuiControlProfile( GuiPopupMenuItemBorder : GuiButtonProfile )
// ---------------------------------------------------------------------------
// Interactive Controls
// ---------------------------------------------------------------------------
singleton GuiControlProfile( GuiMenuButtonProfile )
{
opaque = true;
border = true;
fontColor = "0 0 0";
fontColorHL = "0 0 0";
fontColorNA = "255 255 255";
fixedExtent = false;
border = false;
fontSize = 24;
fontType = "Arial Bold";
fontColor = "200 200 200 255";
fontColorHL = "0 0 0 255";
fontColorNA = "108 108 108 255";
fontColorSEL = "200 200 200 255";
fillColor = "0 0 0 0";
fillColorHL = "255 255 255 255";
fillColorNA = "40 40 40";
borderColor = "87 87 87";
borderColorNA = "0 0 0";
borderColorHL = "194 64 64";
fixedExtent = 0;
justify = "center";
canKeyFocus = false;
bitmapAsset = "UI:menubutton_image";
category = "Core";
hasBitmapArray = false;
soundButtonDown = "UI:buttonClick";
soundButtonOver = "UI:buttonHover";
category = "BaseUI";
fontColors[0] = "200 200 200 255";
fontColors[2] = "108 108 108 255";
fontColors[3] = "200 200 200 255";
};
if( !isObject( GuiPopUpMenuDefault ) )
new GuiControlProfile( GuiPopUpMenuDefault : GuiDefaultProfile )
singleton GuiControlProfile( GuiMenuButtonLeftJustProfile : GuiMenuButtonProfile )
{
opaque = true;
mouseOverSelected = true;
textOffset = "3 3";
border = 0;
borderThickness = 0;
fixedExtent = true;
hasBitmapArray = true;
fillColor = EditorSettings.value("Theme/fieldBGColor");//"255 255 255";//100
fillColorHL = EditorSettings.value("Theme/fieldBGHLColor");//"91 101 116";
fillColorSEL = EditorSettings.value("Theme/fieldBGSELColor");//"91 101 116";
fontColor = EditorSettings.value("Theme/fieldTextColor");//"215 215 215";
fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");//"215 215 215";
fontColorSEL = EditorSettings.value("Theme/fieldTextSELColor");//"215 215 215";
fontColorNA = EditorSettings.value("Theme/fieldTextColor");//"215 215 215";
borderColor = EditorSettings.value("Theme/dividerDarkColor");
profileForChildren = GuiPopupMenuItemBorder;
category = "Core";
justify = "Left";
};
if( !isObject( GuiPopUpMenuProfile ) )
new GuiControlProfile( GuiPopUpMenuProfile : GuiPopUpMenuDefault )
singleton GuiControlProfile( GuiRemapActionMapButtonProfile : GuiMenuButtonProfile )
{
textOffset = "6 4";
bitmapAsset = "UI:dropDown_image";
hasBitmapArray = true;
border = 1;
profileForChildren = GuiPopUpMenuDefault;
category = "Core";
fillColor = "18 18 18 255";
fillColorHL = "0 0 0 255";
};
if( !isObject( GuiTabBookProfile ) )
new GuiControlProfile( GuiTabBookProfile )
{
fillColorHL = "100 100 100";
fillColorNA = "150 150 150";
fontColor = "30 30 30";
fontColorHL = "0 0 0";
fontColorNA = "50 50 50";
fontType = "Arial";
fontSize = 14;
justify = "center";
bitmapAsset = "UI:tab_image";
tabWidth = 64;
tabHeight = 24;
tabPosition = "Top";
tabRotation = "Horizontal";
textOffset = "0 -3";
tab = true;
cankeyfocus = true;
category = "Core";
};
if( !isObject( GuiTabPageProfile ) )
new GuiControlProfile( GuiTabPageProfile : GuiDefaultProfile )
{
fontType = "Arial";
fontSize = 10;
justify = "center";
bitmapAsset = "UI:tab_image";
opaque = false;
fillColor = "240 239 238";
category = "Core";
};
if( !isObject( GuiConsoleProfile ) )
new GuiControlProfile( GuiConsoleProfile )
{
fontType = ($platform $= "macos") ? "Monaco" : "Lucida Console";
fontSize = ($platform $= "macos") ? 13 : 12;
fontColor = "255 255 255";
fontColorHL = "0 255 255";
fontColorNA = "255 0 0";
fontColors[6] = "100 100 100";
fontColors[7] = "100 100 0";
fontColors[8] = "0 0 100";
fontColors[9] = "0 100 0";
category = "Core";
};
if( !isObject( GuiConsoleTextProfile ) )
new GuiControlProfile( GuiConsoleTextProfile )
{
fontColor = "0 0 0";
autoSizeWidth = true;
autoSizeHeight = true;
textOffset = "2 2";
opaque = true;
fillColor = "255 255 255";
border = true;
borderThickness = 1;
borderColor = "0 0 0";
category = "Core";
};
$ConsoleDefaultFillColor = "0 0 0 175";
if( !isObject( ConsoleScrollProfile ) )
new GuiControlProfile( ConsoleScrollProfile : GuiScrollProfile )
{
opaque = true;
fillColor = $ConsoleDefaultFillColor;
border = 1;
//borderThickness = 0;
borderColor = "0 0 0";
category = "Core";
};
if( !isObject( ConsoleTextEditProfile ) )
new GuiControlProfile( ConsoleTextEditProfile : GuiTextEditProfile )
{
fillColor = "242 241 240 255";
fillColorHL = "255 255 255";
category = "Core";
};
//-----------------------------------------------------------------------------
// Center and bottom print
//-----------------------------------------------------------------------------
if( !isObject( CenterPrintProfile ) )
new GuiControlProfile ( CenterPrintProfile )
singleton GuiControlProfile(GuiMenuScrollProfile)
{
opaque = false;
fillColor = "128 128 128";
fontColor = "0 255 0";
border = true;
borderColor = "0 255 0";
category = "Core";
};
if( !isObject( CenterPrintTextProfile ) )
new GuiControlProfile ( CenterPrintTextProfile )
{
opaque = false;
fontType = "Arial";
fontSize = 12;
fontColor = "0 255 0";
category = "Core";
};
// ----------------------------------------------------------------------------
// Radio button control
// ----------------------------------------------------------------------------
if( !isObject( GuiRadioProfile ) )
new GuiControlProfile( GuiRadioProfile )
{
fontSize = 14;
fillColor = "232 232 232";
fontColor = "20 20 20";
fontColorHL = "80 80 80";
fixedExtent = true;
bitmapAsset = "UI:radioButton_image";
hasBitmapArray = true;
category = "Core";
};
//
// Scroll Profile
//
if(!isObject(GuiMenuScrollProfile))
new GuiControlProfile(GuiMenuScrollProfile)
{
opaque = false;
fillcolor = "22 22 22";
fillcolor = "0 0 0 0";
fontColor = "200 200 200";
fontColorHL = "250 250 250";
border = false;
bitmapAsset = "UI:scrollBar_image";
hasBitmapArray = true;
category = "Core";
};
// Scroll
if(!isObject(GuiMenuScrollProfile))
new GuiControlProfile(GuiMenuScrollProfile)
{
opaque = true;
fillcolor = "128 128 128";
fontColor = "0 0 0";
fontColorHL = "150 150 150";
border = true;
bitmapAsset = "UI:scrollBar_image";
hasBitmapArray = true;
category = "Core";
};
singleton GuiControlProfile(SliderBitmapGUIProfile)
{
bitmapAsset = "UI:optionsMenuSliderBitmapArray_image";
hasBitmapArray = true;
opaque = false;
borderColor = "0 0 0 255";
};
category = "BaseUI";
};

View file

@ -1,3 +1,25 @@
function ActionMap::getCommandButtonBitmap(%this, %device, %command)
{
%binding = %this.getBinding(%command);
if(%device $= "mouse" || %device $= "")
%device = "keyboard";
%bindingCount = getFieldCount(%binding);
for(%i=0; %i < %bindingCount; %i+=2)
{
%mapDevice = stripTrailingNumber(getField(%binding, %i));
if(%mapDevice $= %device)
{
%button = getField(%binding, %i+1);
break;
}
}
%assetId = getButtonBitmap(%device, %button);
return %assetId;
}
function getButtonBitmap(%device, %button)
{
if(%device $= "gamepad")

View file

@ -302,7 +302,7 @@ new VPathEditor(EVPathEditor) {
};
new GuiPopUpMenuCtrl(EPathEditorNodeOrientationMode){
internalName = "weight";
Profile = "GuiPopUpMenuProfile";
Profile = "ToolsGuiPopUpMenuProfile";
HorizSizing = "right";
VertSizing = "bottom";
Position = "57 84";
@ -385,7 +385,7 @@ new VPathEditor(EVPathEditor) {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "1";
Profile = "GuiTransparentProfile";
Profile = "ToolsGuiTransparentProfile";
HorizSizing = "right";
VertSizing = "bottom";
Position = "1 1";

View file

@ -30,7 +30,7 @@ $guiContent = new GuiControl(VPathEditorToolbar)
new GuiTextCtrl()
{
internalName = "ToolbarLabel";
profile = "GuiTextProfile";
profile = "ToolsGuiTextProfile";
horizSizing = "right";
vertSizing = "bottom";
position = "2 7";
@ -48,7 +48,7 @@ $guiContent = new GuiControl(VPathEditorToolbar)
internalName = "PathTypeMenu";
Enabled = "1";
isContainer = "0";
Profile = "GuiPopUpMenuProfile";
Profile = "ToolsGuiPopUpMenuProfile";
HorizSizing = "right";
VertSizing = "bottom";
Position = "85 7";

View file

@ -79,7 +79,7 @@ singleton GuiControlProfile( VEditorTextEditProfile : VEditorDefaultProfile )
canKeyFocus = true;
};
singleton GuiControlProfile( VEditorPopupMenuProfile : GuiPopUpMenuProfile )
singleton GuiControlProfile( VEditorPopupMenuProfile : ToolsGuiPopUpMenuProfile )
{
FillColorHL = "90 90 90";
FillColorSEL = "0 0 0";
@ -204,7 +204,7 @@ singleton GuiControlProfile( VEditorPropertyLabelProfile : VEditorTextProfile )
//-----------------------------------------------------------------------------
singleton GuiControlProfile( VEditorPreferenceLabelProfile : GuiTextProfile )
singleton GuiControlProfile( VEditorPreferenceLabelProfile : ToolsGuiTextProfile )
{
opaque = true;
fillColor = "242 241 240";

View file

@ -2420,7 +2420,7 @@ function AssetBrowserPreviewButton::onMouseDragged(%this)
%ctrl = new GuiDragAndDropControl()
{
canSaveDynamicFields = "0";
Profile = "GuiSolidDefaultProfile";
Profile = "ToolsGuiSolidDefaultProfile";
HorizSizing = "right";
VertSizing = "bottom";
Position = %xPos SPC %yPos;

View file

@ -54,7 +54,7 @@ $guiContent = new GuiControl(IODropdownDlg) {
};
new GuiBitmapBorderCtrl() {
isContainer = "0";
profile = "GuiGroupBorderProfile";
profile = "ToolsGuiGroupBorderProfile";
horizSizing = "width";
vertSizing = "bottom";
position = "7 51";

View file

@ -5,7 +5,7 @@ $guiContent = new GuiControl(RenderTargetVisualizer) {
minExtent = "8 2";
horizSizing = "right";
vertSizing = "bottom";
profile = "GuiModelessDialogProfile";
profile = "ToolsGuiModelessDialogProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";
@ -79,7 +79,7 @@ $guiContent = new GuiControl(RenderTargetVisualizer) {
minExtent = "8 2";
horizSizing = "width";
vertSizing = "bottom";
profile = "GuiPopUpMenuProfile";
profile = "ToolsGuiPopUpMenuProfile";
visible = "1";
active = "1";
command = "RenderTargetsList.updateTarget();";

View file

@ -1,10 +1,7 @@
<LevelAsset
canSave="true"
canSaveDynamicFields="true"
AssetName="DefaultEditorLevel"
LevelFile="@assetFile=DefaultEditorLevel.mis"
LevelName="DefaultEditorLevel"
isSubScene="false"
description="An empty room"
previewImageAsset0="@asset=ToolsModule:DefaultEditorLevel_preview_image"
previewImageAsset1="@asset=ToolsModule:DefaultEditorLevel_preview_image"
@ -14,5 +11,4 @@
previewImageAsset5="@asset=ToolsModule:DefaultEditorLevel_preview_image"
previewImageAsset6="@asset=ToolsModule:DefaultEditorLevel_preview_image"
staticObjectAssetDependency0="@asset=Prototyping:FloorGray"
staticObjectAssetDependency1="@asset=FPSGameplay:soldier_rigged"
VersionId="1" />
VersionId="1"/>

View file

@ -2619,7 +2619,7 @@ $guiContent = new GuiControl(MaterialEditorGui,EditorGuiGroup) {
hovertime = "1000";
new GuiContainer(){ // enable/disable
profile="GuiTransparentProfile";
profile="ToolsGuiTransparentProfile";
isContainer = "1";
position = "0 0";
Extent = "300 24";
@ -2652,7 +2652,7 @@ $guiContent = new GuiControl(MaterialEditorGui,EditorGuiGroup) {
};
new GuiContainer(){ // scale
profile="GuiTransparentProfile";
profile="ToolsGuiTransparentProfile";
isContainer = "1";
position = "0 0";
Extent = "300 24";
@ -2735,7 +2735,7 @@ $guiContent = new GuiControl(MaterialEditorGui,EditorGuiGroup) {
};
new GuiContainer(){ // direction
profile="GuiTransparentProfile";
profile="ToolsGuiTransparentProfile";
isContainer = "1";
position = "0 0";
Extent = "300 24";
@ -2817,7 +2817,7 @@ $guiContent = new GuiControl(MaterialEditorGui,EditorGuiGroup) {
};
};
new GuiContainer(){ // strength
profile="GuiTransparentProfile";
profile="ToolsGuiTransparentProfile";
isContainer = "1";
position = "0 0";
Extent = "300 24";
@ -2899,7 +2899,7 @@ $guiContent = new GuiControl(MaterialEditorGui,EditorGuiGroup) {
};
};
new GuiContainer(){ // coverage
profile="GuiTransparentProfile";
profile="ToolsGuiTransparentProfile";
isContainer = "1";
position = "0 0";
Extent = "300 24";
@ -2981,7 +2981,7 @@ $guiContent = new GuiControl(MaterialEditorGui,EditorGuiGroup) {
};
};
new GuiContainer(){ // specular
profile="GuiTransparentProfile";
profile="ToolsGuiTransparentProfile";
isContainer = "1";
position = "0 0";
Extent = "300 24";
@ -3063,7 +3063,7 @@ $guiContent = new GuiControl(MaterialEditorGui,EditorGuiGroup) {
};
};
new GuiContainer(){ // empty space
profile="GuiTransparentProfile";
profile="ToolsGuiTransparentProfile";
isContainer = "1";
position = "0 0";
Extent = "300 10";

View file

@ -549,7 +549,7 @@ $guiContent = new GuiNavEditorCtrl(NavEditorGui, EditorGuiGroup) {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "1";
Profile = "GuiTransparentProfile";
Profile = "ToolsGuiTransparentProfile";
HorizSizing = "width";
VertSizing = "height";
Position = "1 1";

View file

@ -14,7 +14,7 @@ $guiContent = new GuiTabPageCtrl(ENavEditorSettingsPage) {
minExtent = "8 2";
horizSizing = "width";
vertSizing = "height";
profile = "GuiSolidDefaultProfile";
profile = "ToolsGuiSolidDefaultProfile";
visible = "1";
active = "1";
tooltipProfile = "GuiToolTipProfile";

View file

@ -41,7 +41,7 @@
<Setting
name="doubleClickAction">Edit Asset</Setting>
<Setting
name="LastPosExt">0 1047 2200 360</Setting>
name="LastPosExt">0 976 2200 360</Setting>
<Setting
name="previewTileSize">1</Setting>
<Setting
@ -106,7 +106,7 @@
<Setting
name="lastPath">tools/RPGDialogEditor/gui</Setting>
<Setting
name="previewResolution">1024 768</Setting>
name="previewResolution">1280 720</Setting>
<Group
name="EngineDevelopment">
<Setting
@ -125,11 +125,6 @@
<Setting
name="documentationURL">https://docs.torque3d.org</Setting>
</Group>
<Group
name="Library">
<Setting
name="viewType">Categorized</Setting>
</Group>
<Group
name="Rendering">
<Setting

View file

@ -7,7 +7,7 @@
$guiContent = new GuiControl(AL_ShadowVizOverlayCtrl) {
canSaveDynamicFields = "0";
isContainer = "1";
Profile = "GuiModelessDialogProfile";
Profile = "ToolsGuiModelessDialogProfile";
HorizSizing = "right";
VertSizing = "bottom";
Position = "0 0";