diff --git a/Engine/source/gui/buttons/guiButtonBaseCtrl.cpp b/Engine/source/gui/buttons/guiButtonBaseCtrl.cpp index e5efe0279..6477fde03 100644 --- a/Engine/source/gui/buttons/guiButtonBaseCtrl.cpp +++ b/Engine/source/gui/buttons/guiButtonBaseCtrl.cpp @@ -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); } //----------------------------------------------------------------------------- diff --git a/Engine/source/gui/buttons/guiButtonBaseCtrl.h b/Engine/source/gui/buttons/guiButtonBaseCtrl.h index 60f76ea4a..e20ebb00f 100644 --- a/Engine/source/gui/buttons/guiButtonBaseCtrl.h +++ b/Engine/source/gui/buttons/guiButtonBaseCtrl.h @@ -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); diff --git a/Engine/source/gui/buttons/guiIconButtonCtrl.cpp b/Engine/source/gui/buttons/guiIconButtonCtrl.cpp index 8196d59b0..b9288ec7e 100644 --- a/Engine/source/gui/buttons/guiIconButtonCtrl.cpp +++ b/Engine/source/gui/buttons/guiIconButtonCtrl.cpp @@ -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 ); } diff --git a/Engine/source/gui/core/guiControl.cpp b/Engine/source/gui/core/guiControl.cpp index 37102adf2..a5e21a984 100644 --- a/Engine/source/gui/core/guiControl.cpp +++ b/Engine/source/gui/core/guiControl.cpp @@ -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" ); diff --git a/Engine/source/gui/core/guiControl.h b/Engine/source/gui/core/guiControl.h index e0b3c0a76..fdd987468 100644 --- a/Engine/source/gui/core/guiControl.h +++ b/Engine/source/gui/core/guiControl.h @@ -218,6 +218,8 @@ class GuiControl : public SimGroup String mAltConsoleCommand; String mTooltip; + + StringTableEntry mCategory; /// @} diff --git a/Engine/source/sim/actionMap.cpp b/Engine/source/sim/actionMap.cpp index 19e56315d..2e9c3b0e7 100644 --- a/Engine/source/sim/actionMap.cpp +++ b/Engine/source/sim/actionMap.cpp @@ -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(*itr); + if (pMap->processAction(pEvent) == true) return true; } diff --git a/Templates/BaseGame/game/core/gui/scripts/profiles.tscript b/Templates/BaseGame/game/core/gui/scripts/profiles.tscript index 199d943eb..bd3d55604 100644 --- a/Templates/BaseGame/game/core/gui/scripts/profiles.tscript +++ b/Templates/BaseGame/game/core/gui/scripts/profiles.tscript @@ -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)) diff --git a/Templates/BaseGame/game/core/rendering/scripts/graphicsOptions.tscript b/Templates/BaseGame/game/core/rendering/scripts/graphicsOptions.tscript index 681873a01..10d883bea 100644 --- a/Templates/BaseGame/game/core/rendering/scripts/graphicsOptions.tscript +++ b/Templates/BaseGame/game/core/rendering/scripts/graphicsOptions.tscript @@ -74,6 +74,21 @@ new SimGroup(VideoSettingsGroup) OptionName = "Graphical Quality"; Description = "Controls the general graphical quality"; + new ArrayObject() + { + class = "OptionsQualityLevel"; + caseSensitive = true; + + displayName = "Medium"; + + key["$pref::TS::detailAdjust"] = 1.0; + key["$pref::TS::skipRenderDLs"] = 0; + key["$pref::useStaticObjectFade"] = true; + key["$pref::staticObjectFadeStart"] = 75; + key["$pref::staticObjectFadeEnd"] = 100; + key["$pref::staticObjectUnfadeableSize"] = 75; + }; + new ArrayObject() { class = "OptionsQualityLevel"; @@ -89,6 +104,54 @@ new SimGroup(VideoSettingsGroup) key["$pref::staticObjectUnfadeableSize"] = 75; }; }; + + new SimGroup() + { + class = "OptionsSettings"; + + OptionName = "Lighting Quality"; + Description = "Controls the lighting and shadows quality"; + + new ArrayObject() + { + class = "OptionsQualityLevel"; + caseSensitive = true; + + displayName = "High"; + + key["$pref::lightManager"] = "Advanced Lighting"; + key["$pref::Shadows::disable"] = false; + key["$pref::Shadows::textureScalar"] = 1.0; + key["$pref::PSSM::detailAdjustScale"] = 1.0; + key["$pref::allowLocalLightShadows"] = true; + }; + }; + }; + + new SimGroup(AdvancedVideoSettingsGroup) + { + class = "SubOptionsGroup"; + displayName = "Advanced"; + + new SimGroup() + { + class = "OptionsSettings"; + + OptionName = "Mesh Detail"; + Description = "Controls the max quality of mesh objects"; + + new ArrayObject() + { + class = "OptionsQualityLevel"; + caseSensitive = true; + + displayName = "High"; + + key["$pref::TS::detailAdjust"] = 1.5; + key["$pref::TS::skipRenderDLs"] = 0; + }; + + }; }; /*new SimGroup(AdvancedVideoSettingsGroup) diff --git a/Templates/BaseGame/game/data/UI/UI.tscript b/Templates/BaseGame/game/data/UI/UI.tscript index 455067910..9652b97d7 100644 --- a/Templates/BaseGame/game/data/UI/UI.tscript +++ b/Templates/BaseGame/game/data/UI/UI.tscript @@ -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,8 +54,8 @@ 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.gui"); %this.queueExec("./guis/remapConfirmDlg.gui"); @@ -73,21 +64,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 +85,8 @@ function UI::initClient(%this) function UI::onCreateClientConnection(%this){} function UI::onDestroyClientConnection(%this){} + +function UI::registerGameMenus(%this, %menusArrayObj) +{ + %menusArrayObj.add("System", SystemMenu); +} \ No newline at end of file diff --git a/Templates/BaseGame/game/data/UI/guis/ChooseLevelDlg.asset.taml b/Templates/BaseGame/game/data/UI/guis/ChooseLevelDlg.asset.taml deleted file mode 100644 index 9090ea1af..000000000 --- a/Templates/BaseGame/game/data/UI/guis/ChooseLevelDlg.asset.taml +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/Templates/BaseGame/game/data/UI/guis/ChooseLevelMenu.asset.taml b/Templates/BaseGame/game/data/UI/guis/ChooseLevelMenu.asset.taml new file mode 100644 index 000000000..7b612550f --- /dev/null +++ b/Templates/BaseGame/game/data/UI/guis/ChooseLevelMenu.asset.taml @@ -0,0 +1,5 @@ + diff --git a/Templates/BaseGame/game/data/UI/guis/ChooseLevelMenu.gui b/Templates/BaseGame/game/data/UI/guis/ChooseLevelMenu.gui new file mode 100644 index 000000000..5fe626a07 --- /dev/null +++ b/Templates/BaseGame/game/data/UI/guis/ChooseLevelMenu.gui @@ -0,0 +1,97 @@ +//--- OBJECT WRITE BEGIN --- +$guiContent = new GuiChunkedBitmapCtrl(ChooseLevelMenu) { + BitmapAsset = "UI:backgrounddark_image"; + extent = "1280 720"; + minExtent = "8 8"; + horizSizing = "width"; + vertSizing = "height"; + profile = "GuiNonModalDefaultProfile"; + 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 80"; + 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 --- diff --git a/Templates/BaseGame/game/data/UI/guis/ChooseLevelMenu.tscript b/Templates/BaseGame/game/data/UI/guis/ChooseLevelMenu.tscript new file mode 100644 index 000000000..39ecf2ef5 --- /dev/null +++ b/Templates/BaseGame/game/data/UI/guis/ChooseLevelMenu.tscript @@ -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 = LevelPreviewButtonProfile; + 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); +} \ No newline at end of file diff --git a/Templates/BaseGame/game/data/UI/guis/GameMenu.asset.taml b/Templates/BaseGame/game/data/UI/guis/GameMenu.asset.taml new file mode 100644 index 000000000..2b9ed760a --- /dev/null +++ b/Templates/BaseGame/game/data/UI/guis/GameMenu.asset.taml @@ -0,0 +1,5 @@ + diff --git a/Templates/BaseGame/game/data/UI/guis/GameMenu.gui b/Templates/BaseGame/game/data/UI/guis/GameMenu.gui new file mode 100644 index 000000000..559f8c59c --- /dev/null +++ b/Templates/BaseGame/game/data/UI/guis/GameMenu.gui @@ -0,0 +1,97 @@ +//--- OBJECT WRITE BEGIN --- +$guiContent = new GuiControl(GameMenu) { + extent = "1280 720"; + profile = "GuiDefaultProfile"; + tooltipProfile = "GuiToolTipProfile"; + isContainer = "1"; + superClass = "UINavigation"; + canSaveDynamicFields = "1"; + currentMenu = "SystemMenu"; + gameMenusArray = "17288"; + resizePages = "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 --- diff --git a/Templates/BaseGame/game/data/UI/guis/GameMenu.tscript b/Templates/BaseGame/game/data/UI/guis/GameMenu.tscript new file mode 100644 index 000000000..0b6177604 --- /dev/null +++ b/Templates/BaseGame/game/data/UI/guis/GameMenu.tscript @@ -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"); +} + +/* + +*/ \ No newline at end of file diff --git a/Templates/BaseGame/game/data/UI/guis/GuiMusicPlayer.asset.taml b/Templates/BaseGame/game/data/UI/guis/GuiMusicPlayer.asset.taml deleted file mode 100644 index 94601d7a3..000000000 --- a/Templates/BaseGame/game/data/UI/guis/GuiMusicPlayer.asset.taml +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/Templates/BaseGame/game/data/UI/guis/IODropdownDlg.asset.taml b/Templates/BaseGame/game/data/UI/guis/IODropdownDlg.asset.taml deleted file mode 100644 index d1d0c8c8e..000000000 --- a/Templates/BaseGame/game/data/UI/guis/IODropdownDlg.asset.taml +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/Templates/BaseGame/game/data/UI/guis/IODropdownDlg.ed.gui b/Templates/BaseGame/game/data/UI/guis/IODropdownDlg.ed.gui deleted file mode 100644 index 6a98fe6d7..000000000 --- a/Templates/BaseGame/game/data/UI/guis/IODropdownDlg.ed.gui +++ /dev/null @@ -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 --- diff --git a/Templates/BaseGame/game/data/UI/guis/MainMenuButtons.asset.taml b/Templates/BaseGame/game/data/UI/guis/MainMenuButtons.asset.taml deleted file mode 100644 index 2ab6cfeef..000000000 --- a/Templates/BaseGame/game/data/UI/guis/MainMenuButtons.asset.taml +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/Templates/BaseGame/game/data/UI/guis/MainMenuButtons.gui b/Templates/BaseGame/game/data/UI/guis/MainMenuButtons.gui deleted file mode 100644 index de086ec19..000000000 --- a/Templates/BaseGame/game/data/UI/guis/MainMenuButtons.gui +++ /dev/null @@ -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 --- diff --git a/Templates/BaseGame/game/data/UI/guis/MainMenuButtons.tscript b/Templates/BaseGame/game/data/UI/guis/MainMenuButtons.tscript deleted file mode 100644 index 1a79ff5fb..000000000 --- a/Templates/BaseGame/game/data/UI/guis/MainMenuButtons.tscript +++ /dev/null @@ -1,107 +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 openWorldEditorBtn() -{ - fastLoadWorldEdit(1); -} - -function openGUIEditorBtn() -{ - fastLoadGUIEdit(1); -} \ No newline at end of file diff --git a/Templates/BaseGame/game/data/UI/guis/PauseMenu.asset.taml b/Templates/BaseGame/game/data/UI/guis/PauseMenu.asset.taml deleted file mode 100644 index 08a16f03d..000000000 --- a/Templates/BaseGame/game/data/UI/guis/PauseMenu.asset.taml +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/Templates/BaseGame/game/data/UI/guis/RecordingsDlg.gui b/Templates/BaseGame/game/data/UI/guis/RecordingsDlg.gui deleted file mode 100644 index c13008f11..000000000 --- a/Templates/BaseGame/game/data/UI/guis/RecordingsDlg.gui +++ /dev/null @@ -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 --- - diff --git a/Templates/BaseGame/game/data/UI/guis/SystemMenu.asset.taml b/Templates/BaseGame/game/data/UI/guis/SystemMenu.asset.taml new file mode 100644 index 000000000..e5e752734 --- /dev/null +++ b/Templates/BaseGame/game/data/UI/guis/SystemMenu.asset.taml @@ -0,0 +1,5 @@ + diff --git a/Templates/BaseGame/game/data/UI/guis/SystemMenu.gui b/Templates/BaseGame/game/data/UI/guis/SystemMenu.gui new file mode 100644 index 000000000..d2a12bed3 --- /dev/null +++ b/Templates/BaseGame/game/data/UI/guis/SystemMenu.gui @@ -0,0 +1,53 @@ +//--- 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"; + superClass = "MenuList"; + + 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 --- diff --git a/Templates/BaseGame/game/data/UI/guis/SystemMenu.tscript b/Templates/BaseGame/game/data/UI/guis/SystemMenu.tscript new file mode 100644 index 000000000..2b6b8ed27 --- /dev/null +++ b/Templates/BaseGame/game/data/UI/guis/SystemMenu.tscript @@ -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(); +} \ No newline at end of file diff --git a/Templates/BaseGame/game/data/UI/guis/chooseLevelDlg.gui b/Templates/BaseGame/game/data/UI/guis/chooseLevelDlg.gui deleted file mode 100644 index 414f1ccb3..000000000 --- a/Templates/BaseGame/game/data/UI/guis/chooseLevelDlg.gui +++ /dev/null @@ -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 --- diff --git a/Templates/BaseGame/game/data/UI/guis/chooseLevelDlg.tscript b/Templates/BaseGame/game/data/UI/guis/chooseLevelDlg.tscript deleted file mode 100644 index b39db49d1..000000000 --- a/Templates/BaseGame/game/data/UI/guis/chooseLevelDlg.tscript +++ /dev/null @@ -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(); - } -} diff --git a/Templates/BaseGame/game/data/UI/guis/guiMusicPlayer.gui b/Templates/BaseGame/game/data/UI/guis/guiMusicPlayer.gui deleted file mode 100644 index cfd2c3e96..000000000 --- a/Templates/BaseGame/game/data/UI/guis/guiMusicPlayer.gui +++ /dev/null @@ -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 --- diff --git a/Templates/BaseGame/game/data/UI/guis/guiMusicPlayer.tscript b/Templates/BaseGame/game/data/UI/guis/guiMusicPlayer.tscript deleted file mode 100644 index 2a302e635..000000000 --- a/Templates/BaseGame/game/data/UI/guis/guiMusicPlayer.tscript +++ /dev/null @@ -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; -} diff --git a/Templates/BaseGame/game/data/UI/guis/joinServerMenu.gui b/Templates/BaseGame/game/data/UI/guis/joinServerMenu.gui index 758d1bf32..d7d787c89 100644 --- a/Templates/BaseGame/game/data/UI/guis/joinServerMenu.gui +++ b/Templates/BaseGame/game/data/UI/guis/joinServerMenu.gui @@ -1,159 +1,161 @@ //--- 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 80"; + 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 81"; + extent = "900 30"; + profile = GuiMenuPanelProfile; + tooltipProfile = "GuiToolTipProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + + new GuiTextCtrl() { + text = "Server Details"; + position = "0 0"; + extent = "730 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 = "730 0"; + extent = "50 30"; + horizSizing = "left"; + vertSizing = "center"; + profile = "MenuSubHeaderText"; 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 = "780 0"; + extent = "120 30"; + horizSizing = "left"; + vertSizing = "center"; + profile = "MenuSubHeaderText"; 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 111"; + extent = "900 601"; + 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"; + superClass = "MenuList"; }; - 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.query();"; + 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 = "817 0"; + extent = "140 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"; }; }; }; diff --git a/Templates/BaseGame/game/data/UI/guis/joinServerMenu.tscript b/Templates/BaseGame/game/data/UI/guis/joinServerMenu.tscript index c4d9fff24..d829be8ce 100644 --- a/Templates/BaseGame/game/data/UI/guis/joinServerMenu.tscript +++ b/Templates/BaseGame/game/data/UI/guis/joinServerMenu.tscript @@ -1,17 +1,19 @@ function JoinServerMenu::onWake(%this) { + $MenuList = JoinServerList; + JoinServerList.listPosition = 0; } -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();" ); } //---------------------------------------- @@ -93,19 +95,17 @@ 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::Version @ " | " @ $ServerInfo::MissionName @ " | " @ $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); } //---------------------------------------- @@ -138,3 +138,109 @@ function onServerQueryStatus(%status, %msg, %value) 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"; + }; + + new GuiTextCtrl() { + position = "0 0"; + extent = "730 20"; + profile = "MenuSubHeaderText"; + tooltipProfile = "GuiToolTipProfile"; + internalName = "serverNameTxt"; + }; + new GuiTextCtrl() { + position = $optionsEntryPad SPC 17; + extent = "730 18"; + profile = "GuiMLTextProfile"; + tooltipProfile = "GuiToolTipProfile"; + internalName = "serverDetailsTxt"; + }; + + new GuiTextCtrl() { + position = "730 0"; + extent = "50 40"; + horizSizing = "left"; + vertSizing = "center"; + profile = "MenuSubHeaderText"; + tooltipProfile = "GuiToolTipProfile"; + internalName = "pingTxt"; + }; + + new GuiTextCtrl() { + position = "780 0"; + extent = "120 40"; + horizSizing = "left"; + vertSizing = "center"; + profile = "MenuSubHeaderText"; + tooltipProfile = "GuiToolTipProfile"; + internalName = "playerCountTxt"; + }; + }; + + return %entry; +} + +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 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(BaseUIActionMap.getCommandButtonBitmap(%device, "BaseUIActivateSelected")); + JoinServerQLanBtn.setBitmap(JoinServerActionMap.getCommandButtonBitmap(%device, "JoinServerMenu.queryLan();")); + JoinServerQServerBtn.setBitmap(JoinServerActionMap.getCommandButtonBitmap(%device, "JoinServerMenu.query();")); + + //JoinServerJoinBtn.setActive($selectedLevelAsset !$= ""); +} \ No newline at end of file diff --git a/Templates/BaseGame/game/data/UI/guis/mainMenu.gui b/Templates/BaseGame/game/data/UI/guis/mainMenu.gui index 7d6374594..6ccf77732 100644 --- a/Templates/BaseGame/game/data/UI/guis/mainMenu.gui +++ b/Templates/BaseGame/game/data/UI/guis/mainMenu.gui @@ -6,22 +6,20 @@ $guiContent = new GuiChunkedBitmapCtrl(MainMenuGui) { horizSizing = "width"; vertSizing = "height"; profile = "GuiDefaultProfile"; + category = "BaseUI"; tooltipProfile = "GuiToolTipProfile"; isContainer = "1"; canSaveDynamicFields = "1"; new GuiInputCtrl(MainMenuInputHandler) { - sendAxisEvents = "0"; - sendBreakEvents = "0"; ignoreMouseEvents = "1"; + ActionMap = "BaseUIActionMap"; position = "-50 0"; extent = "2186 851"; horizSizing = "width"; vertSizing = "height"; profile = "GuiInputCtrlProfile"; tooltipProfile = "GuiToolTipProfile"; - //class = "MenuInputHandler"; - actionMap = MainMenuActionMap; }; new GuiBitmapCtrl(SideBackgroundImage) { BitmapAsset = "UI:menu_side_background_image"; @@ -33,7 +31,7 @@ $guiContent = new GuiChunkedBitmapCtrl(MainMenuGui) { }; new GuiBitmapCtrl(MainMenuAppLogo) { BitmapAsset = "UI:Torque_3D_logo_image"; - position = "462 30"; + position = "460 78"; extent = "360 100"; horizSizing = "center"; profile = "GuiDefaultProfile"; @@ -73,7 +71,7 @@ $guiContent = new GuiChunkedBitmapCtrl(MainMenuGui) { new GuiStackControl(MainMenuButtonList) { padding = "5"; dynamicSize = "0"; - position = "440 185"; + position = "440 199"; extent = "400 322"; horizSizing = "center"; vertSizing = "center"; @@ -85,7 +83,7 @@ $guiContent = new GuiChunkedBitmapCtrl(MainMenuGui) { text = "Single Player"; extent = "400 40"; profile = "GuiMenuButtonProfile"; - command = "openSinglePlayerMenu();"; + command = "$pref::HostMultiPlayer=false;\nCanvas.pushDialog(ChooseLevelMenu);"; tooltipProfile = "GuiToolTipProfile"; }; new GuiButtonCtrl(MainMenuCreateSrvrBtn) { @@ -93,7 +91,7 @@ $guiContent = new GuiChunkedBitmapCtrl(MainMenuGui) { position = "0 45"; extent = "400 40"; profile = "GuiMenuButtonProfile"; - command = "openMultiPlayerMenu();"; + command = "$pref::HostMultiPlayer=true;Canvas.pushDialog(ChooseLevelMenu);"; tooltipProfile = "GuiToolTipProfile"; }; new GuiButtonCtrl(MainMenuJoinSrvrBtn) { @@ -101,7 +99,7 @@ $guiContent = new GuiChunkedBitmapCtrl(MainMenuGui) { position = "0 90"; extent = "400 40"; profile = "GuiMenuButtonProfile"; - command = "openJoinServerMenu();"; + command = "Canvas.pushDialog(JoinServerMenu);"; tooltipProfile = "GuiToolTipProfile"; }; new GuiButtonCtrl(MainMenuOptionBtn) { @@ -117,7 +115,7 @@ $guiContent = new GuiChunkedBitmapCtrl(MainMenuGui) { position = "0 180"; extent = "400 40"; profile = "GuiMenuButtonProfile"; - command = "openWorldEditorBtn();"; + command = "fastLoadWorldEdit(1);"; tooltipProfile = "GuiToolTipProfile"; }; new GuiButtonCtrl(MainMenuGuiEditBtn) { @@ -125,7 +123,7 @@ $guiContent = new GuiChunkedBitmapCtrl(MainMenuGui) { position = "0 225"; extent = "400 40"; profile = "GuiMenuButtonProfile"; - command = "openGUIEditorBtn();"; + command = "fastLoadGUIEdit(1);"; tooltipProfile = "GuiToolTipProfile"; }; new GuiButtonCtrl(MainMenuExitBtn) { diff --git a/Templates/BaseGame/game/data/UI/guis/mainMenu.tscript b/Templates/BaseGame/game/data/UI/guis/mainMenu.tscript index 9ec352dc1..b334aeca8 100644 --- a/Templates/BaseGame/game/data/UI/guis/mainMenu.tscript +++ b/Templates/BaseGame/game/data/UI/guis/mainMenu.tscript @@ -4,60 +4,84 @@ function MainMenuGui::onAdd(%this) function MainMenuGui::onWake(%this) { - MainMenuButtonList.listPosition = 0; + $MenuList = MainMenuButtonList; + $MenuList.listPosition = 0; } -if(!isObject( MainMenuActionMap ) ) +function MainMenuGui::onSleep(%this) { - new ActionMap(MainMenuActionMap){}; - - MainMenuActionMap.bind( keyboard, w, mainMenuNavigateUp ); - MainMenuActionMap.bind( keyboard, s, mainMenuNavigateDown ); - MainMenuActionMap.bind( gamepad, yaxis, "D", "-0.23 0.23", mainMenuStickNavigate ); - MainMenuActionMap.bind( gamepad, upov, mainMenuNavigateUp ); - MainMenuActionMap.bind( gamepad, dpov, mainMenuNavigateDown ); - - MainMenuActionMap.bind( keyboard, Enter, activateSelected ); - MainMenuActionMap.bind( gamepad, btn_a, activateSelected ); } -function mainMenuNavigateUp(%val) +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) { - MainMenuButtonList.listPosition -= 1; - if(MainMenuButtonList.listPosition < 0) - MainMenuButtonList.listPosition = 0; + $MenuList.listPosition -= 1; + if($MenuList.listPosition < 0) + $MenuList.listPosition = 0; - MainMenuGUI.syncGUI(); + $MenuList.syncGUI(); } } -function mainMenuNavigateDown(%val) +function BaseUINavigateNext(%val) { if(%val) { - MainMenuButtonList.listPosition += 1; - if(MainMenuButtonList.listPosition >= MainMenuButtonList.getCount()) - MainMenuButtonList.listPosition = MainMenuButtonList.getCount()-1; + $MenuList.listPosition += 1; + if($MenuList.listPosition >= $MenuList.getCount()) + $MenuList.listPosition = $MenuList.getCount()-1; - MainMenuGUI.syncGUI(); + $MenuList.syncGUI(); } } -function mainMenuStickNavigate(%val) +function BaseUIStickNavigate(%val) { if(%val == -1) - mainMenuNavigateUp(1); + BaseUINavigateNext(1); else if(%val == 1) mainMenuNavigateDown(1); } -function MainMenuGUI::syncGUI(%this) +function BaseUIBackOut(%val) { - MainMenuButtonList.callOnChildren("setHighlighted", false); + //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 = MainMenuButtonList.getObject(MainMenuButtonList.listPosition); + %btn = %this.getObject(%this.listPosition); %btn.setHighlighted(true); // @@ -66,25 +90,13 @@ function MainMenuGUI::syncGUI(%this) if(%device $= "mouse") %device = "keyboard"; - %binding = MainMenuActionMap.getBinding("activateSelected"); - - %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); - MainMenuGoButton.setBitmap(%assetId); + MainMenuGoButton.setBitmap(BaseUIActionMap.getCommandButtonBitmap(%device, "BaseUIActivateSelected")); } -function activateSelected() +function BaseUIActivateSelected() { - %btn = MainMenuButtonList.getObject(MainMenuButtonList.listPosition); - %btn.performClick(); + %btn = $MenuList.getObject($MenuList.listPosition); + + if(%btn.isMethod("performClick")) + %btn.performClick(); } \ No newline at end of file diff --git a/Templates/BaseGame/game/data/UI/guis/messageBoxDlg.gui b/Templates/BaseGame/game/data/UI/guis/messageBoxDlg.gui index 91207adff..1923c3a11 100644 --- a/Templates/BaseGame/game/data/UI/guis/messageBoxDlg.gui +++ b/Templates/BaseGame/game/data/UI/guis/messageBoxDlg.gui @@ -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"; - }; }; }; }; diff --git a/Templates/BaseGame/game/data/UI/guis/messageBoxDlg.tscript b/Templates/BaseGame/game/data/UI/guis/messageBoxDlg.tscript new file mode 100644 index 000000000..7ef43ba05 --- /dev/null +++ b/Templates/BaseGame/game/data/UI/guis/messageBoxDlg.tscript @@ -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("" @ %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); +} \ No newline at end of file diff --git a/Templates/BaseGame/game/data/UI/guis/optionsMenu.gui b/Templates/BaseGame/game/data/UI/guis/optionsMenu.gui index 33eae9db5..522e7044a 100644 --- a/Templates/BaseGame/game/data/UI/guis/optionsMenu.gui +++ b/Templates/BaseGame/game/data/UI/guis/optionsMenu.gui @@ -6,73 +6,94 @@ $guiContent = new GuiChunkedBitmapCtrl(OptionsMenu) { horizSizing = "width"; vertSizing = "height"; profile = "GuiDefaultProfile"; + category = "BaseUI"; tooltipProfile = "GuiToolTipProfile"; isContainer = "1"; canSaveDynamicFields = "1"; - currentCategory = "Graphics"; - optionsCategories = "17233"; - unappliedChanges = "17234"; + optionsCategories = "17237"; + unappliedChanges = "17238"; - new GuiControl(OptionsMenuContainer) { - position = "208 32"; - extent = "870 655"; - horizSizing = "aspectCenter"; - vertSizing = "center"; - profile = "GuiDefaultProfile"; - tooltipProfile = "GuiToolTipProfile"; - isContainer = "1"; - }; - new GuiInputCtrl(MainMenuInputHandler) { + new GuiInputCtrl(OptionsMenuInputHandler) { ignoreMouseEvents = "1"; - ActionMap = "MainMenuActionMap"; - position = "-49 0"; + ActionMap = "OptionsMenuActionMap"; + position = "-50 0"; extent = "2186 851"; horizSizing = "width"; vertSizing = "height"; profile = "GuiInputCtrlProfile"; tooltipProfile = "GuiToolTipProfile"; }; - new GuiStackControl(OptionsMenuCategoryList) { - stackingType = "Horizontal"; - padding = "10"; - dynamicSize = "0"; - position = "398 80"; - extent = "471 40"; + new GuiControl(OptionsMenuCategoryContainer) { + position = "332 80"; + extent = "617 49"; horizSizing = "center"; profile = "GuiDefaultProfile"; tooltipProfile = "GuiToolTipProfile"; - superClass = "MenuList"; + isContainer = "1"; - new GuiButtonCtrl() { - text = "Video"; - extent = "100 40"; + new GuiIconButtonCtrl(OptionsMenuCatPrevBtn) { + BitmapAsset = "UI:Keyboard_Black_Q_image"; + iconLocation = "Center"; + makeIconSquare = "1"; + textLocation = "Center"; + bitmapMargin = "30"; + position = "1 4"; + extent = "50 40"; + vertSizing = "center"; profile = "GuiMenuButtonProfile"; - command = "populateDisplaySettingsList();"; + command = "OptionsMenuCategoryPrev();"; tooltipProfile = "GuiToolTipProfile"; + class = "MenuInputButton"; }; - new GuiButtonCtrl() { - text = "Audio"; - position = "110 0"; - extent = "100 40"; + new GuiIconButtonCtrl(OptionsMenuCatNextBtn) { + BitmapAsset = "UI:Keyboard_Black_E_image"; + iconLocation = "Center"; + makeIconSquare = "1"; + bitmapMargin = "30"; + position = "568 4"; + extent = "50 40"; + horizSizing = "left"; + vertSizing = "center"; profile = "GuiMenuButtonProfile"; - command = "populateAudioSettingsList();"; + command = "OptionsMenuCategoryNext();"; tooltipProfile = "GuiToolTipProfile"; + class = "MenuInputButton"; }; - new GuiButtonCtrl() { - text = "Keyboard & Mouse"; - position = "220 0"; - extent = "140 40"; - profile = "GuiMenuButtonProfile"; - command = "populateKeyboardMouseSettingsList();"; - tooltipProfile = "GuiToolTipProfile"; - }; - new GuiButtonCtrl() { - text = "Gamepad"; - position = "370 0"; - extent = "100 40"; - profile = "GuiMenuButtonProfile"; - command = "populateGamepadSettingsList();"; + new GuiStackControl(OptionsMenuCategoryList) { + stackingType = "Horizontal"; + padding = "10"; + dynamicSize = "0"; + position = "137 3"; + extent = "358 40"; + horizSizing = "center"; + vertSizing = "center"; + profile = "GuiDefaultProfile"; tooltipProfile = "GuiToolTipProfile"; + superClass = "MenuList"; + + new GuiButtonCtrl() { + text = "Video"; + extent = "100 40"; + profile = "GuiMenuButtonProfile"; + command = "populateDisplaySettingsList();"; + tooltipProfile = "GuiToolTipProfile"; + }; + new GuiButtonCtrl() { + text = "Audio"; + position = "110 0"; + extent = "100 40"; + profile = "GuiMenuButtonProfile"; + command = "populateAudioSettingsList();"; + tooltipProfile = "GuiToolTipProfile"; + }; + new GuiButtonCtrl() { + text = "Controls"; + position = "220 0"; + extent = "140 40"; + profile = "GuiMenuButtonProfile"; + command = "populateKeyboardMouseSettingsList();"; + tooltipProfile = "GuiToolTipProfile"; + }; }; }; new GuiScrollCtrl(OptionsMenuSettingsScroll) { @@ -89,13 +110,227 @@ $guiContent = new GuiChunkedBitmapCtrl(OptionsMenu) { padding = "5"; changeChildSizeToFit = "0"; position = "1 1"; - extent = "603 245"; + extent = "603 200"; horizSizing = "width"; vertSizing = "height"; profile = "GuiDefaultProfile"; tooltipProfile = "GuiToolTipProfile"; superClass = "MenuList"; - visible = true; + + new GuiTextCtrl() { + text = "Basic"; + extent = "500 30"; + profile = "MenuHeaderText"; + tooltipProfile = "GuiToolTipProfile"; + }; + new GuiContainer() { + position = "0 35"; + extent = "603 40"; + horizSizing = "width"; + profile = "GuiMenuDefaultProfile"; + tooltipProfile = "GuiToolTipProfile"; + class = "OptionsListEntry"; + + new GuiButtonCtrl() { + extent = "603 40"; + horizSizing = "width"; + vertSizing = "height"; + profile = "GuiMenuButtonProfile"; + tooltipProfile = "GuiToolTipProfile"; + internalName = "Button"; + class = "optionsMenuButton"; + }; + new GuiTextCtrl() { + text = "Graphical Quality"; + position = "10 -1"; + extent = "250 20"; + profile = "MenuSubHeaderText"; + tooltipProfile = "GuiToolTipProfile"; + internalName = "OptionName"; + }; + new GuiTextCtrl() { + text = "Controls the general graphical quality"; + position = "10 17"; + extent = "178 18"; + profile = "GuiMLTextProfile"; + tooltipProfile = "GuiToolTipProfile"; + internalName = "OptionDescription"; + }; + new GuiContainer() { + position = "353 0"; + extent = "250 40"; + horizSizing = "left"; + vertSizing = "height"; + profile = "GuiModelessDialogProfile"; + tooltipProfile = "GuiToolTipProfile"; + internalName = "valuesContainer"; + + new GuiButtonCtrl() { + text = "<"; + position = "160 0"; + extent = "20 40"; + profile = "GuiMenuButtonProfile"; + tooltipProfile = "GuiToolTipProfile"; + }; + new GuiTextCtrl() { + text = "High"; + position = "180 0"; + extent = "50 40"; + vertSizing = "center"; + profile = "GuiMenuTextProfile"; + tooltipProfile = "GuiToolTipProfile"; + internalName = "optionValue"; + }; + new GuiButtonCtrl() { + text = ">"; + position = "230 0"; + extent = "20 40"; + profile = "GuiMenuButtonProfile"; + tooltipProfile = "GuiToolTipProfile"; + }; + }; + }; + new GuiContainer() { + position = "0 80"; + extent = "603 40"; + horizSizing = "width"; + profile = "GuiMenuDefaultProfile"; + tooltipProfile = "GuiToolTipProfile"; + class = "OptionsListEntry"; + + new GuiButtonCtrl() { + extent = "603 40"; + horizSizing = "width"; + vertSizing = "height"; + profile = "GuiMenuButtonProfile"; + tooltipProfile = "GuiToolTipProfile"; + internalName = "Button"; + class = "optionsMenuButton"; + }; + new GuiTextCtrl() { + text = "Lighting Quality"; + position = "10 -1"; + extent = "250 20"; + profile = "MenuSubHeaderText"; + tooltipProfile = "GuiToolTipProfile"; + internalName = "OptionName"; + }; + new GuiTextCtrl() { + text = "Controls the lighting and shadows quality"; + position = "10 17"; + extent = "198 18"; + profile = "GuiMLTextProfile"; + tooltipProfile = "GuiToolTipProfile"; + internalName = "OptionDescription"; + }; + new GuiContainer() { + position = "353 0"; + extent = "250 40"; + horizSizing = "left"; + vertSizing = "height"; + profile = "GuiModelessDialogProfile"; + tooltipProfile = "GuiToolTipProfile"; + internalName = "valuesContainer"; + + new GuiButtonCtrl() { + text = "<"; + position = "160 0"; + extent = "20 40"; + profile = "GuiMenuButtonProfile"; + tooltipProfile = "GuiToolTipProfile"; + }; + new GuiTextCtrl() { + text = "High"; + position = "180 0"; + extent = "50 40"; + vertSizing = "center"; + profile = "GuiMenuTextProfile"; + tooltipProfile = "GuiToolTipProfile"; + internalName = "optionValue"; + }; + new GuiButtonCtrl() { + text = ">"; + position = "230 0"; + extent = "20 40"; + profile = "GuiMenuButtonProfile"; + tooltipProfile = "GuiToolTipProfile"; + }; + }; + }; + new GuiTextCtrl() { + text = "Advanced"; + position = "0 125"; + extent = "500 30"; + profile = "MenuHeaderText"; + tooltipProfile = "GuiToolTipProfile"; + }; + new GuiContainer() { + position = "0 160"; + extent = "603 40"; + horizSizing = "width"; + profile = "GuiMenuDefaultProfile"; + tooltipProfile = "GuiToolTipProfile"; + class = "OptionsListEntry"; + + new GuiButtonCtrl() { + extent = "603 40"; + horizSizing = "width"; + vertSizing = "height"; + profile = "GuiMenuButtonProfile"; + tooltipProfile = "GuiToolTipProfile"; + internalName = "Button"; + class = "optionsMenuButton"; + }; + new GuiTextCtrl() { + text = "Mesh Detail"; + position = "10 -1"; + extent = "250 20"; + profile = "MenuSubHeaderText"; + tooltipProfile = "GuiToolTipProfile"; + internalName = "OptionName"; + }; + new GuiTextCtrl() { + text = "Controls the max quality of mesh objects"; + position = "10 17"; + extent = "195 18"; + profile = "GuiMLTextProfile"; + tooltipProfile = "GuiToolTipProfile"; + internalName = "OptionDescription"; + }; + new GuiContainer() { + position = "353 0"; + extent = "250 40"; + horizSizing = "left"; + vertSizing = "height"; + profile = "GuiModelessDialogProfile"; + tooltipProfile = "GuiToolTipProfile"; + internalName = "valuesContainer"; + + new GuiButtonCtrl() { + text = "<"; + position = "160 0"; + extent = "20 40"; + profile = "GuiMenuButtonProfile"; + tooltipProfile = "GuiToolTipProfile"; + }; + new GuiTextCtrl() { + text = "High"; + position = "180 0"; + extent = "50 40"; + vertSizing = "center"; + profile = "GuiMenuTextProfile"; + tooltipProfile = "GuiToolTipProfile"; + internalName = "optionValue"; + }; + new GuiButtonCtrl() { + text = ">"; + position = "230 0"; + extent = "20 40"; + profile = "GuiMenuButtonProfile"; + tooltipProfile = "GuiToolTipProfile"; + }; + }; + }; }; new GuiStackControl(AudioSettingsList) { padding = "5"; @@ -105,9 +340,10 @@ $guiContent = new GuiChunkedBitmapCtrl(OptionsMenu) { horizSizing = "width"; vertSizing = "height"; profile = "GuiDefaultProfile"; + visible = "0"; tooltipProfile = "GuiToolTipProfile"; superClass = "MenuList"; - visible = false; + hidden = "1"; }; new GuiStackControl(ControlSettingsList) { padding = "5"; @@ -117,9 +353,10 @@ $guiContent = new GuiChunkedBitmapCtrl(OptionsMenu) { horizSizing = "width"; vertSizing = "height"; profile = "GuiDefaultProfile"; + visible = "0"; tooltipProfile = "GuiToolTipProfile"; superClass = "MenuList"; - visible = false; + hidden = "1"; }; }; new GuiPanel(OptionMenuTitlePanel) { @@ -136,7 +373,7 @@ $guiContent = new GuiChunkedBitmapCtrl(OptionsMenu) { tooltipProfile = "GuiToolTipProfile"; }; }; - new GuiPanel(MainMenuButtonPanel) { + new GuiPanel(OptionsMenuButtonPanel) { position = "0 683"; extent = "1281 40"; horizSizing = "width"; @@ -144,7 +381,7 @@ $guiContent = new GuiChunkedBitmapCtrl(OptionsMenu) { profile = "GuiMenuPanelProfile"; tooltipProfile = "GuiToolTipProfile"; - new GuiIconButtonCtrl() { + new GuiIconButtonCtrl(OptionsMenuApplyBtn) { BitmapAsset = "UI:Keyboard_Black_Return_image"; sizeIconToButton = "1"; makeIconSquare = "1"; @@ -155,12 +392,11 @@ $guiContent = new GuiChunkedBitmapCtrl(OptionsMenu) { horizSizing = "left"; vertSizing = "center"; profile = "GuiMenuButtonProfile"; - command = "MainMenuSelectButton(1);"; + command = "OptionsMenu.applySettings();"; tooltipProfile = "GuiToolTipProfile"; - internalName = "button4"; class = "MenuInputButton"; }; - new GuiIconButtonCtrl() { + new GuiIconButtonCtrl(OptionsMenuBackBtn) { BitmapAsset = "UI:Keyboard_Black_Escape_image"; sizeIconToButton = "1"; makeIconSquare = "1"; @@ -168,44 +404,27 @@ $guiContent = new GuiChunkedBitmapCtrl(OptionsMenu) { text = "Back"; position = "16 0"; extent = "140 40"; + vertSizing = "center"; + profile = "GuiMenuButtonProfile"; + command = "Canvas.popDialog();"; + tooltipProfile = "GuiToolTipProfile"; + class = "MenuInputButton"; + }; + new GuiIconButtonCtrl(OptionsMenuResetBtn) { + BitmapAsset = "UI:Keyboard_Black_Return_image"; + sizeIconToButton = "1"; + makeIconSquare = "1"; + textLocation = "Center"; + text = "Reset"; + position = "947 0"; + extent = "140 40"; horizSizing = "left"; vertSizing = "center"; profile = "GuiMenuButtonProfile"; - command = "MainMenuSelectButton(1);"; + command = "OptionsMenu.resetSettings();"; tooltipProfile = "GuiToolTipProfile"; - internalName = "button4"; class = "MenuInputButton"; }; }; - new GuiIconButtonCtrl() { - BitmapAsset = "UI:Keyboard_Black_E_image"; - iconLocation = "Center"; - sizeIconToButton = "1"; - makeIconSquare = "1"; - position = "899 80"; - extent = "50 40"; - horizSizing = "left"; - vertSizing = "center"; - profile = "GuiMenuButtonProfile"; - command = "MainMenuSelectButton(1);"; - tooltipProfile = "GuiToolTipProfile"; - internalName = "button4"; - class = "MenuInputButton"; - }; - new GuiIconButtonCtrl() { - BitmapAsset = "UI:Keyboard_Black_Q_image"; - iconLocation = "Center"; - sizeIconToButton = "1"; - makeIconSquare = "1"; - position = "331 80"; - extent = "50 40"; - horizSizing = "left"; - vertSizing = "center"; - profile = "GuiMenuButtonProfile"; - command = "MainMenuSelectButton(1);"; - tooltipProfile = "GuiToolTipProfile"; - internalName = "button4"; - class = "MenuInputButton"; - }; }; //--- OBJECT WRITE END --- diff --git a/Templates/BaseGame/game/data/UI/guis/optionsMenu.tscript b/Templates/BaseGame/game/data/UI/guis/optionsMenu.tscript index 5bdc09e92..9e52e4154 100644 --- a/Templates/BaseGame/game/data/UI/guis/optionsMenu.tscript +++ b/Templates/BaseGame/game/data/UI/guis/optionsMenu.tscript @@ -48,6 +48,7 @@ $yesNoList = "No\tYes"; $onOffList = "Off\tOn"; +$optionsEntryPad = 10; function OptionsMenu::onAdd(%this) { @@ -63,12 +64,6 @@ function OptionsMenu::onAdd(%this) %this.currentCategory = ""; - addOptionsMenuCategory("Display", "populateDisplaySettingsList();"); - addOptionsMenuCategory("Graphics", "populateGraphicsSettingsList();"); - addOptionsMenuCategory("Audio", "populateAudioSettingsList();"); - addOptionsMenuCategory("Keyboard & Mouse", "populateKeyboardMouseSettingsList();"); - addOptionsMenuCategory("Gamepad", "populateGamepadSettingsList();"); - callOnModules("populateOptionsMenuCategories", "Game"); } @@ -93,28 +88,147 @@ function OptionsMenu::onWake(%this) { %option = %setting.getObject(%s); - %optionsEntry = addOptionEntry(); - %optionsEntry-->optionName.text = %option.OptionName; - %optionsEntry-->optionDescription.text = %option.Description; - %optionsEntry-->optionValue.text = %option.getObject(0).displayName; - + %optionsEntry = addOptionEntry(%option); + if(isObject(%optionsEntry)) + { + %optionsEntry.resize(0, 0, VideoSettingsList.extent.x, %optionsEntry.extent.y); + VideoSettingsList.add(%optionsEntry); + } } } else if(%setting.class $= "OptionsSettings") { - %entry = addOptionEntry(); - %entry-->optionName.text = %setting.displayName; - %entry-->optionDescription.text = %setting.description; - %entry-->optionValue.text = %setting.getObject(0).displayName; - - if(isObject(%entry)) - VideoSettingsList.add(%entry); + %optionsEntry = addOptionEntry(%option); + + if(isObject(%optionsEntry)) + { + %optionsEntry.resize(0, 0, VideoSettingsList.extent.x, %optionsEntry.extent.y); + + VideoSettingsList.add(%optionsEntry); + } } } + + $MenuList = VideoSettingsList; + + //Find our first non-group entry + while($MenuList.getObject($MenuList.listPosition).class !$= OptionsListEntry && $MenuList.listPosition < $MenuList.getCount()) + { + $MenuList.listPosition += 1; + } } +if(!isObject( OptionsMenuActionMap ) ) +{ + new ActionMap(OptionsMenuActionMap){}; + + OptionsMenuActionMap.bind( keyboard, w, OptionMenuNavigatePrev ); + OptionsMenuActionMap.bind( keyboard, s, OptionMenuNavigateNext ); + OptionsMenuActionMap.bind( gamepad, yaxis, "D", "-0.23 0.23", OptionMenuStickNavigate ); + OptionsMenuActionMap.bind( gamepad, upov, OptionMenuNavigatePrev ); + OptionsMenuActionMap.bind( gamepad, dpov, OptionMenuNavigateNext ); + + OptionsMenuActionMap.bind( keyboard, a, OptionMenuPrevSetting ); + OptionsMenuActionMap.bind( keyboard, d, OptionMenuNextSetting ); + OptionsMenuActionMap.bind( gamepad, xaxis, "D", "-0.23 0.23", OptionMenuStickChangeSetting ); + OptionsMenuActionMap.bind( gamepad, lpov, OptionMenuPrevSetting ); + OptionsMenuActionMap.bind( gamepad, lpov, OptionMenuNextSetting ); + + //OptionsMenuActionMap.bind( keyboard, Enter, BaseUIActivateSelected ); + //OptionsMenuActionMap.bind( gamepad, btn_a, BaseUIActivateSelected ); +} + +function VideoSettingsList::syncGui(%this) +{ + %this.callOnChildren("setHighlighted", false); + + %btn = %this.getObject(%this.listPosition); + if(%btn.class $= "OptionsListEntry") + %btn-->button.setHighlighted(true); +} + +// +function OptionMenuNavigatePrev(%val) +{ + if(%val) + { + $MenuList.listPosition -= 1; + while( $MenuList.listPosition >= 0 && $MenuList.getObject($MenuList.listPosition).class !$= OptionsListEntry) + { + $MenuList.listPosition -= 1; + } + + if($MenuList.listPosition < 0) + $MenuList.listPosition = 0; + + $MenuList.syncGUI(); + } +} + +function OptionMenuNavigateNext(%val) +{ + if(%val) + { + $MenuList.listPosition += 1; + while($MenuList.listPosition < $MenuList.getCount() && $MenuList.getObject($MenuList.listPosition).class !$= OptionsListEntry) + { + $MenuList.listPosition += 1; + } + + if($MenuList.listPosition >= $MenuList.getCount()) + $MenuList.listPosition = $MenuList.getCount()-1; + + $MenuList.syncGUI(); + } +} + +function OptionMenuStickNavigate(%val) +{ + if(%val == -1) + BaseUINavigateNext(1); + else if(%val == 1) + mainMenuNavigateDown(1); +} + +function OptionMenuPrevSetting(%val) +{ + %option = $MenuList.getObject($MenuList.listPosition); + echo("Option: " @ %option.className); + %optionObject = %option.optionsObject; + %currentOptionLevel = %optionObject.getObject(%option.currentOptionIndex); + + echo("Changed option: " @ %optionObject.optionName @ " to level: " @ %currentOptionLevel.displayName); + /*$MenuList.listPosition -= 1; + + if($MenuList.listPosition < 0) + $MenuList.listPosition = 0;*/ + + $MenuList.syncGUI(); +} + +function OptionMenuNextSetting(%val) +{ + %option = $MenuList.getObject($MenuList.listPosition); + %optionObject = %option.optionsObject; + %currentOptionLevel = %optionObject.getObject(%option.currentOptionIndex); + + echo("Changed option: " @ %optionObject.optionName @ " to level: " @ %currentOptionLevel.displayName); + + /*$MenuList.listPosition += 1; + + if($MenuList.listPosition >= $MenuList.getCount()) + $MenuList.listPosition = $MenuList.getCount()-1;*/ + + $MenuList.syncGUI(); +} + +function OptionMenuStickChangeSetting(%val) +{ + +} +// function OptionsMenu::onOpen(%this) { OptionsMenuCategoryList.clear(); @@ -173,7 +287,7 @@ function OptionsMenu::canClose(%this) //UINavigation to not close the page if(OptionsMenuSettingsList.isActiveMenuList()) { - OptionsMenuCategoryList.setAsActiveMenuList(); + OptionsMenuCategoryList.setAsActiveMenuList(); return false; } else @@ -1238,28 +1352,66 @@ function addOptionGroup() }; return %group; - } -function addOptionEntry() +function optionsMenuButton::onHighlighted(%this, %highlighted) { + %container = %this.getParent(); + + %container-->optionName.profile = %highlighted ? MenuSubHeaderTextHighlighted : MenuSubHeaderText; + %container-->optionDescription.profile = %highlighted ? GuiMLTextProfileHighlighted : GuiMLTextProfile; + + %valuesContainer = %container-->valuesContainer; + %valuesContainer-->optionValue.profile = %highlighted ? GuiMenuTextProfileHighlighted : GuiMenuTextProfile; +} + +function optionsMenuButton::onMouseDown(%this) +{ + //check if we're clicking on the left or right of the value and adjust it accordingly +} + +function addOptionEntry(%optionObj) +{ + if(!isObject(%optionObj) || %optionObj.class !$= "OptionsSettings") + { + error("addOptionsEntry() - attempting to create a new options entry, but was provided an invalid options object"); + return 0; + } + + %qualityLevel = %optionObj.getObject(0); + %entry = new GuiContainer() { position = "0 0"; extent = "500 40"; - profile = "GuiMenuPanelProfile"; + profile = GuiMenuDefaultProfile; tooltipProfile = "GuiToolTipProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + class = "OptionsListEntry"; + optionsObject = %optionObj; + currentOptionIndex = 0; + + new GuiButtonCtrl() { + profile = GuiMenuButtonProfile; + position = "0 0"; + extent = "500 40"; + horizSizing = "width"; + vertSizing = "height"; + internalName = "button"; + class = "optionsMenuButton"; + }; new GuiTextCtrl() { - text = ""; - position = "1 -1"; + text = %optionObj.OptionName; + position = $optionsEntryPad SPC -1; extent = "250 20"; profile = "MenuSubHeaderText"; tooltipProfile = "GuiToolTipProfile"; internalName = "optionName"; }; new GuiTextCtrl() { - text = "Sets the resolution and detail of shadows"; - position = "1 17"; + text = %optionObj.Description; + position = $optionsEntryPad SPC 17; extent = "250 18"; profile = "GuiMLTextProfile"; tooltipProfile = "GuiToolTipProfile"; @@ -1273,17 +1425,32 @@ function addOptionEntry() tooltipProfile = "GuiToolTipProfile"; horizSizing = "left"; vertSizing = "height"; + internalName = "valuesContainer"; + + new GuiButtonCtrl() { + position = "160 0"; + extent = "20 40"; + text = "<"; + profile = GuiMenuButtonProfile; + }; new GuiTextCtrl() { - text = "< High >"; + text = %qualityLevel.displayName; position = "180 0"; - extent = "70 40"; + extent = "50 40"; profile = "GuiMenuTextProfile"; tooltipProfile = "GuiToolTipProfile"; - horizSizing = "left"; + horizSizing = "right"; vertSizing = "center"; internalName = "optionValue"; }; + + new GuiButtonCtrl() { + position = "230 0"; + extent = "20 40"; + text = ">"; + profile = GuiMenuButtonProfile; + }; }; }; diff --git a/Templates/BaseGame/game/data/UI/guis/pauseMenu.gui b/Templates/BaseGame/game/data/UI/guis/pauseMenu.gui deleted file mode 100644 index 59d498e28..000000000 --- a/Templates/BaseGame/game/data/UI/guis/pauseMenu.gui +++ /dev/null @@ -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 --- diff --git a/Templates/BaseGame/game/data/UI/guis/pauseMenu.tscript b/Templates/BaseGame/game/data/UI/guis/pauseMenu.tscript deleted file mode 100644 index 0c55e625f..000000000 --- a/Templates/BaseGame/game/data/UI/guis/pauseMenu.tscript +++ /dev/null @@ -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) -{ - - -} diff --git a/Templates/BaseGame/game/data/UI/guis/recordingsDlg.asset.taml b/Templates/BaseGame/game/data/UI/guis/recordingsDlg.asset.taml deleted file mode 100644 index 2b0c337b5..000000000 --- a/Templates/BaseGame/game/data/UI/guis/recordingsDlg.asset.taml +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/Templates/BaseGame/game/data/UI/images/backdrop.png b/Templates/BaseGame/game/data/UI/images/backdrop.png new file mode 100644 index 000000000..e645dfe0d Binary files /dev/null and b/Templates/BaseGame/game/data/UI/images/backdrop.png differ diff --git a/Templates/BaseGame/game/data/UI/images/backdrop_image.asset.taml b/Templates/BaseGame/game/data/UI/images/backdrop_image.asset.taml new file mode 100644 index 000000000..fb9f256dc --- /dev/null +++ b/Templates/BaseGame/game/data/UI/images/backdrop_image.asset.taml @@ -0,0 +1,3 @@ + diff --git a/Templates/BaseGame/game/data/UI/images/textEditFrame_image.asset.taml b/Templates/BaseGame/game/data/UI/images/textEditFrame_image.asset.taml new file mode 100644 index 000000000..86a29b170 --- /dev/null +++ b/Templates/BaseGame/game/data/UI/images/textEditFrame_image.asset.taml @@ -0,0 +1,3 @@ + diff --git a/Templates/BaseGame/game/data/UI/scripts/guiTreeViewCtrl.tscript b/Templates/BaseGame/game/data/UI/scripts/guiTreeViewCtrl.tscript deleted file mode 100644 index bc952dbca..000000000 --- a/Templates/BaseGame/game/data/UI/scripts/guiTreeViewCtrl.tscript +++ /dev/null @@ -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; -} diff --git a/Templates/BaseGame/game/data/UI/scripts/help.tscript b/Templates/BaseGame/game/data/UI/scripts/help.tscript deleted file mode 100644 index a305671af..000000000 --- a/Templates/BaseGame/game/data/UI/scripts/help.tscript +++ /dev/null @@ -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 ); -} - diff --git a/Templates/BaseGame/game/data/UI/scripts/menuInputHandling.tscript b/Templates/BaseGame/game/data/UI/scripts/menuInputHandling.tscript deleted file mode 100644 index 36f96568f..000000000 --- a/Templates/BaseGame/game/data/UI/scripts/menuInputHandling.tscript +++ /dev/null @@ -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); - }*/ - } - } -} \ No newline at end of file diff --git a/Templates/BaseGame/game/data/UI/scripts/menuNavigation.tscript b/Templates/BaseGame/game/data/UI/scripts/menuNavigation.tscript deleted file mode 100644 index 20ff05ff7..000000000 --- a/Templates/BaseGame/game/data/UI/scripts/menuNavigation.tscript +++ /dev/null @@ -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"); -} - diff --git a/Templates/BaseGame/game/data/UI/scripts/messageBoxes.tscript b/Templates/BaseGame/game/data/UI/scripts/messageBoxes.tscript deleted file mode 100644 index f1c3db40e..000000000 --- a/Templates/BaseGame/game/data/UI/scripts/messageBoxes.tscript +++ /dev/null @@ -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("" @ %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); -} diff --git a/Templates/BaseGame/game/data/UI/scripts/profiles.tscript b/Templates/BaseGame/game/data/UI/scripts/profiles.tscript index 8a3e1fa9e..d8d2304d3 100644 --- a/Templates/BaseGame/game/data/UI/scripts/profiles.tscript +++ b/Templates/BaseGame/game/data/UI/scripts/profiles.tscript @@ -1,8 +1,10 @@ $TextMediumEmphasisColor = "200 200 200"; +$TextMediumEmphasisColorHL = "0 0 0"; $TextHighEmphasisColor = "224 224 224"; +$TextHighEmphasisColorHL = "0 0 0"; $TextDisabledColor = "108 108 108"; -new GuiGameListMenuProfile(DefaultListMenuProfile) +singleton GuiGameListMenuProfile(DefaultListMenuProfile) { fontType = "Arial Bold"; fontSize = 20; @@ -26,12 +28,12 @@ new GuiGameListMenuProfile(DefaultListMenuProfile) canKeyFocus = true; }; -new GuiControlProfile(GamepadDefaultProfile) +singleton GuiControlProfile(GamepadDefaultProfile) { border = 0; }; -new GuiControlProfile(GamepadButtonTextLeft) +singleton GuiControlProfile(GamepadButtonTextLeft) { fontType = "Arial Bold"; fontSize = 20; @@ -39,20 +41,26 @@ new GuiControlProfile(GamepadButtonTextLeft) justify = "left"; }; -new GuiControlProfile(GamepadButtonTextRight : GamepadButtonTextLeft) +singleton GuiControlProfile(GamepadButtonTextRight : GamepadButtonTextLeft) { justify = "right"; }; -new GuiControlProfile(MenuHeaderText) +singleton GuiControlProfile(MenuHeaderText) { fontType = "Arial Bold"; fontSize = 30; fontColor = $TextHighEmphasisColor; justify = "left"; + modal = false; }; -new GuiControlProfile(MenuHeaderTextCenter) +singleton GuiControlProfile(MenuHeaderTextHighlighted : MenuHeaderText) +{ + fontColor = $TextHighEmphasisColorHL; +}; + +singleton GuiControlProfile(MenuHeaderTextCenter) { fontType = "Arial Bold"; fontSize = 30; @@ -60,15 +68,26 @@ new GuiControlProfile(MenuHeaderTextCenter) justify = "center"; }; -new GuiControlProfile(MenuSubHeaderText) +singleton GuiControlProfile(MenuSubHeaderText) { fontType = "Arial Bold"; fontSize = 20; fontColor = $TextMediumEmphasisColor; justify = "left"; + modal = false; }; -new GuiControlProfile(MenuMLSubHeaderText) +singleton GuiControlProfile(MenuSubHeaderTextHighlighted : MenuSubHeaderText) +{ + fontColor = $TextMediumEmphasisColorHL; +}; + +singleton GuiControlProfile(MenuSubHeaderCenteredText : MenuSubHeaderText) +{ + justify = "center"; +}; + +singleton GuiControlProfile(MenuMLSubHeaderText) { fontType = "Arial Bold"; fontSize = 20; @@ -76,15 +95,21 @@ new GuiControlProfile(MenuMLSubHeaderText) justify = "left"; autoSizeWidth = true; autoSizeHeight = true; + modal = false; }; -new GuiControlProfile(MenuMLSubHeaderTextCenter : MenuMLSubHeaderText) +singleton GuiControlProfile(MenuMLSubHeaderTextCenter : MenuMLSubHeaderText) { justify = "center"; }; -if( !isObject( GuiMenuButtonProfile ) ) -new GuiControlProfile( GuiMenuButtonProfile ) +singleton GuiControlProfile( GuiMenuDefaultProfile ) +{ + opaque = false; + fillColor = "0 0 0 0"; +}; + +singleton GuiControlProfile( GuiMenuButtonProfile ) { opaque = true; border = false; @@ -115,8 +140,13 @@ new GuiControlProfile( GuiMenuButtonProfile ) fontColorLinkHL = "Magenta"; }; -if( !isObject( GuiHighlightMenuButtonProfile ) ) -new GuiControlProfile( GuiHighlightMenuButtonProfile ) +singleton GuiControlProfile( LevelPreviewButtonProfile : GuiMenuButtonProfile ) +{ + fontSize = 22; + justify = "Left"; +}; + +singleton GuiControlProfile( GuiHighlightMenuButtonProfile ) { opaque = true; border = false; @@ -134,8 +164,7 @@ new GuiControlProfile( GuiHighlightMenuButtonProfile ) category = "Core"; }; -if( !isObject( GuiBlankMenuButtonProfile ) ) -new GuiControlProfile( GuiBlankMenuButtonProfile ) +singleton GuiControlProfile( GuiBlankMenuButtonProfile ) { opaque = true; border = false; @@ -155,14 +184,12 @@ new GuiControlProfile( GuiBlankMenuButtonProfile ) category = "Core"; }; -if( !isObject( GuiJoinServerButtonProfile ) ) -new GuiControlProfile( GuiJoinServerButtonProfile : GuiMenuButtonProfile ) +singleton GuiControlProfile( GuiJoinServerButtonProfile : GuiMenuButtonProfile ) { justify = "left"; }; -if( !isObject( GuiMenuTextProfile ) ) -new GuiControlProfile( GuiMenuTextProfile ) +singleton GuiControlProfile( GuiMenuTextProfile ) { opaque = true; border = false; @@ -173,27 +200,30 @@ new GuiControlProfile( GuiMenuTextProfile ) fontColorNA = "125 125 125"; fixedExtent = false; justify = "center"; - category = "Core"; + category = "BaseUI"; + modal = false; }; -if( !isObject( GuiSolidDefaultProfile ) ) -new GuiControlProfile (GuiSolidDefaultProfile) +singleton GuiControlProfile( GuiMenuTextProfileHighlighted : GuiMenuTextProfile ) +{ + fontColor = "0 0 0"; +}; + +singleton GuiControlProfile (GuiSolidDefaultProfile) { opaque = true; border = true; category = "Core"; }; -if( !isObject( GuiTransparentProfile ) ) -new GuiControlProfile (GuiTransparentProfile) +singleton GuiControlProfile (GuiTransparentProfile) { opaque = false; border = false; category = "Core"; }; -if( !isObject( GuiGroupBorderProfile ) ) -new GuiControlProfile( GuiGroupBorderProfile ) +singleton GuiControlProfile( GuiGroupBorderProfile ) { border = false; opaque = false; @@ -202,8 +232,7 @@ new GuiControlProfile( GuiGroupBorderProfile ) category = "Core"; }; -if( !isObject( GuiTabBorderProfile ) ) -new GuiControlProfile( GuiTabBorderProfile ) +singleton GuiControlProfile( GuiTabBorderProfile ) { border = false; opaque = false; @@ -212,15 +241,13 @@ new GuiControlProfile( GuiTabBorderProfile ) category = "Core"; }; -if( !isObject( GuiModelessDialogProfile ) ) -new GuiControlProfile( GuiModelessDialogProfile ) +singleton GuiControlProfile( GuiModelessDialogProfile ) { modal = false; category = "Core"; }; -if( !isObject( GuiFrameSetProfile ) ) -new GuiControlProfile (GuiFrameSetProfile) +singleton GuiControlProfile (GuiFrameSetProfile) { fillcolor = "255 255 255"; borderColor = "246 245 244"; @@ -230,31 +257,27 @@ new GuiControlProfile (GuiFrameSetProfile) category = "Core"; }; -if( !isObject( GuiInputCtrlProfile ) ) -new GuiControlProfile( GuiInputCtrlProfile ) +singleton GuiControlProfile( GuiInputCtrlProfile ) { tab = true; canKeyFocus = true; category = "Core"; }; -if( !isObject( GuiTextProfile ) ) -new GuiControlProfile (GuiTextProfile) +singleton GuiControlProfile (GuiTextProfile) { justify = "left"; fontColor = "20 20 20"; category = "Core"; }; -if( !isObject( GuiTextRightProfile ) ) -new GuiControlProfile (GuiTextRightProfile : GuiTextProfile) +singleton GuiControlProfile (GuiTextRightProfile : GuiTextProfile) { justify = "right"; category = "Core"; }; -if( !isObject( GuiAutoSizeTextProfile ) ) -new GuiControlProfile (GuiAutoSizeTextProfile) +singleton GuiControlProfile (GuiAutoSizeTextProfile) { fontColor = "0 0 0"; autoSizeWidth = true; @@ -262,22 +285,19 @@ new GuiControlProfile (GuiAutoSizeTextProfile) category = "Core"; }; -if( !isObject( GuiMediumTextProfile ) ) -new GuiControlProfile( GuiMediumTextProfile : GuiTextProfile ) +singleton GuiControlProfile( GuiMediumTextProfile : GuiTextProfile ) { fontSize = 24; category = "Core"; }; -if( !isObject( GuiBigTextProfile ) ) -new GuiControlProfile( GuiBigTextProfile : GuiTextProfile ) +singleton GuiControlProfile( GuiBigTextProfile : GuiTextProfile ) { fontSize = 36; category = "Core"; }; -if( !isObject( GuiMLTextProfile ) ) -new GuiControlProfile( GuiMLTextProfile ) +singleton GuiControlProfile( GuiMLTextProfile ) { fontColor = $TextMediumEmphasisColor; fontColorHL = $TextMediumEmphasisColor; @@ -289,11 +309,16 @@ new GuiControlProfile( GuiMLTextProfile ) autoSizeWidth = true; autoSizeHeight = true; border = false; - category = "Core"; + modal = false; + category = "BaseUI"; }; -if( !isObject( GuiMLWhiteTextProfile ) ) -new GuiControlProfile( GuiMLWhiteTextProfile ) +singleton GuiControlProfile( GuiMLTextProfileHighlighted : GuiMLTextProfile ) +{ + fontColor = $TextMediumEmphasisColorHL; +}; + +singleton GuiControlProfile( GuiMLWhiteTextProfile ) { fontColor = "220 220 220"; fontColorHL = $TextMediumEmphasisColor; @@ -303,8 +328,7 @@ new GuiControlProfile( GuiMLWhiteTextProfile ) category = "Core"; }; -if( !isObject( GuiTextArrayProfile ) ) -new GuiControlProfile( GuiTextArrayProfile : GuiTextProfile ) +singleton GuiControlProfile( GuiTextArrayProfile : GuiTextProfile ) { fontColor = $TextMediumEmphasisColor; fontColorHL = $TextMediumEmphasisColor; @@ -324,8 +348,7 @@ new GuiControlProfile( GuiTextArrayProfile : GuiTextProfile ) canKeyFocus = true; }; -if( !isObject( GuiMenuTextEditProfile ) ) -new GuiControlProfile( GuiMenuTextEditProfile : GuiTextEditProfile ) +singleton GuiControlProfile( GuiMenuTextEditProfile : GuiTextEditProfile ) { fontColor = $TextMediumEmphasisColor; fontColorHL = $TextMediumEmphasisColor; @@ -347,8 +370,7 @@ new GuiControlProfile( GuiMenuTextEditProfile : GuiTextEditProfile ) // TODO: Revisit Popupmenu // ---------------------------------------------------------------------------- -if( !isObject( GuiPopupMenuItemBorder ) ) -new GuiControlProfile( GuiPopupMenuItemBorder : GuiButtonProfile ) +singleton GuiControlProfile( GuiPopupMenuItemBorder : GuiButtonProfile ) { opaque = true; border = true; @@ -362,8 +384,7 @@ new GuiControlProfile( GuiPopupMenuItemBorder : GuiButtonProfile ) category = "Core"; }; -if( !isObject( GuiPopUpMenuDefault ) ) -new GuiControlProfile( GuiPopUpMenuDefault : GuiDefaultProfile ) +singleton GuiControlProfile( GuiPopUpMenuDefault : GuiDefaultProfile ) { opaque = true; mouseOverSelected = true; @@ -385,8 +406,7 @@ new GuiControlProfile( GuiPopUpMenuDefault : GuiDefaultProfile ) category = "Core"; }; -if( !isObject( GuiPopUpMenuProfile ) ) -new GuiControlProfile( GuiPopUpMenuProfile : GuiPopUpMenuDefault ) +singleton GuiControlProfile( GuiPopUpMenuProfile : GuiPopUpMenuDefault ) { textOffset = "6 4"; bitmapAsset = "UI:dropDown_image"; @@ -396,8 +416,7 @@ new GuiControlProfile( GuiPopUpMenuProfile : GuiPopUpMenuDefault ) category = "Core"; }; -if( !isObject( GuiTabBookProfile ) ) -new GuiControlProfile( GuiTabBookProfile ) +singleton GuiControlProfile( GuiTabBookProfile ) { fillColorHL = "100 100 100"; fillColorNA = "150 150 150"; @@ -418,8 +437,7 @@ new GuiControlProfile( GuiTabBookProfile ) category = "Core"; }; -if( !isObject( GuiTabPageProfile ) ) -new GuiControlProfile( GuiTabPageProfile : GuiDefaultProfile ) +singleton GuiControlProfile( GuiTabPageProfile : GuiDefaultProfile ) { fontType = "Arial"; fontSize = 10; @@ -430,8 +448,7 @@ new GuiControlProfile( GuiTabPageProfile : GuiDefaultProfile ) category = "Core"; }; -if( !isObject( GuiConsoleProfile ) ) -new GuiControlProfile( GuiConsoleProfile ) +singleton GuiControlProfile( GuiConsoleProfile ) { fontType = ($platform $= "macos") ? "Monaco" : "Lucida Console"; fontSize = ($platform $= "macos") ? 13 : 12; @@ -445,8 +462,7 @@ new GuiControlProfile( GuiConsoleProfile ) category = "Core"; }; -if( !isObject( GuiConsoleTextProfile ) ) -new GuiControlProfile( GuiConsoleTextProfile ) +singleton GuiControlProfile( GuiConsoleTextProfile ) { fontColor = "0 0 0"; autoSizeWidth = true; @@ -462,8 +478,7 @@ new GuiControlProfile( GuiConsoleTextProfile ) $ConsoleDefaultFillColor = "0 0 0 175"; -if( !isObject( ConsoleScrollProfile ) ) -new GuiControlProfile( ConsoleScrollProfile : GuiScrollProfile ) +singleton GuiControlProfile( ConsoleScrollProfile : GuiScrollProfile ) { opaque = true; fillColor = $ConsoleDefaultFillColor; @@ -473,8 +488,7 @@ new GuiControlProfile( ConsoleScrollProfile : GuiScrollProfile ) category = "Core"; }; -if( !isObject( ConsoleTextEditProfile ) ) -new GuiControlProfile( ConsoleTextEditProfile : GuiTextEditProfile ) +singleton GuiControlProfile( ConsoleTextEditProfile : GuiTextEditProfile ) { fillColor = "242 241 240 255"; fillColorHL = "255 255 255"; @@ -485,8 +499,7 @@ new GuiControlProfile( ConsoleTextEditProfile : GuiTextEditProfile ) // Center and bottom print //----------------------------------------------------------------------------- -if( !isObject( CenterPrintProfile ) ) -new GuiControlProfile ( CenterPrintProfile ) +singleton GuiControlProfile ( CenterPrintProfile ) { opaque = false; fillColor = "128 128 128"; @@ -496,8 +509,7 @@ new GuiControlProfile ( CenterPrintProfile ) category = "Core"; }; -if( !isObject( CenterPrintTextProfile ) ) -new GuiControlProfile ( CenterPrintTextProfile ) +singleton GuiControlProfile ( CenterPrintTextProfile ) { opaque = false; fontType = "Arial"; @@ -509,9 +521,7 @@ new GuiControlProfile ( CenterPrintTextProfile ) // ---------------------------------------------------------------------------- // Radio button control // ---------------------------------------------------------------------------- - -if( !isObject( GuiRadioProfile ) ) -new GuiControlProfile( GuiRadioProfile ) +singleton GuiControlProfile( GuiRadioProfile ) { fontSize = 14; fillColor = "232 232 232"; @@ -526,31 +536,16 @@ new GuiControlProfile( GuiRadioProfile ) // // Scroll Profile // -if(!isObject(GuiMenuScrollProfile)) -new GuiControlProfile(GuiMenuScrollProfile) +singleton 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"; + category = "BaseUI"; }; singleton GuiControlProfile(SliderBitmapGUIProfile) @@ -561,9 +556,23 @@ singleton GuiControlProfile(SliderBitmapGUIProfile) borderColor = "0 0 0 255"; }; +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"; +}; \ No newline at end of file diff --git a/Templates/BaseGame/game/data/UI/scripts/utility.tscript b/Templates/BaseGame/game/data/UI/scripts/utility.tscript index 4245651f0..a0870f54d 100644 --- a/Templates/BaseGame/game/data/UI/scripts/utility.tscript +++ b/Templates/BaseGame/game/data/UI/scripts/utility.tscript @@ -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") diff --git a/Templates/BaseGame/game/tools/settings.xml b/Templates/BaseGame/game/tools/settings.xml index 3d22b0ffd..ede1a4e14 100644 --- a/Templates/BaseGame/game/tools/settings.xml +++ b/Templates/BaseGame/game/tools/settings.xml @@ -41,7 +41,7 @@ Edit Asset 0 1047 2200 360 + name="LastPosExt">0 976 2016 360 1 tools/RPGDialogEditor/gui 1024 768 + name="previewResolution">1280 720 https://docs.torque3d.org - - Categorized -