1
0
forked from 0ad/0ad

Converted menu hotkey and ai config to new style. Added basic sliding menus. (Need to evaluate potential performance issues here.)

This was SVN commit r10146.
This commit is contained in:
WhiteTreePaladin 2011-08-31 02:41:21 +00:00
parent b48c35c512
commit 9a00398e24
11 changed files with 830 additions and 689 deletions

View File

@ -5,54 +5,50 @@
<script file="gui/aiconfig/aiconfig.js"/> <script file="gui/aiconfig/aiconfig.js"/>
<!-- Add a translucent black background to fade out the menu page --> <!-- Add a translucent black background to fade out the menu page -->
<object type="image" z="0" sprite="bkTranslucent"/> <object type="image" z="0" sprite="BackgroundTranslucent"/>
<object type="image" style="wheatWindow" size="50%-250 50%-100 50%+250 50%+100"> <object type="image" style="StonePanelLight" size="50%-250 50%-100 50%+250 50%+100">
<object style="wheatWindowTitleBar" type="text">AI configuration</object> <object style="StoneDialogTitleBar" type="text" size="50%-128 -16 50%+128 16">AI Configuration</object>
<object type="button" style="wheatExit" tooltip_style="snToolTip"> <object type="button" style="StoneExit" tooltip_style="snToolTip">
<action on="Press"><![CDATA[ <action on="Press"><![CDATA[
Engine.PopGuiPage(); Engine.PopGuiPage();
]]></action> ]]></action>
</object> </object>
<object size="25 10 100%-25 40"> <object size="50%-128 46 50%+128 66">
<object <object type="text" style="RightLabelText" size="0 0 100 100%">
type="text"
font="serif-bold-18"
text_align="right"
size="0 0 100 100%">
AI Player AI Player
</object> </object>
<object name="aiSelection" type="dropdown" style="wheatDropDown" size="110 0 310 30"> <object name="aiSelection" type="dropdown" style="StoneDropDown" size="110 0 310 28">
<action on="SelectionChange">selectAI(this.selected);</action> <action on="SelectionChange">selectAI(this.selected);</action>
</object> </object>
</object> </object>
<object size="25 50 100%-25 65%-5"> <object size="50%-192 66 50%+192 100%-52">
<object name="aiDescription" type="text" size="0 0 100% 100%"/> <object name="aiDescription" type="text" style="CenteredLabelText" size="0 0 100% 100%"/>
<!-- TODO: we might want to add things like difficulty controls into here --> <!-- TODO: we might want to add things like difficulty controls into here -->
</object> </object>
<object type="button" style="wheatButton" size="100%-203 100%-33 100%-103 100%-3"> <object type="button" style="StoneButton" size="100%-280 100%-48 100%-154 100%-20">
OK
<action on="Press"><![CDATA[
returnAI();
]]></action>
</object>
<object type="button" style="wheatButton" size="100%-103 100%-33 100%-3 100%-3">
Cancel Cancel
<action on="Press"><![CDATA[ <action on="Press"><![CDATA[
Engine.PopGuiPage(); Engine.PopGuiPage();
]]></action> ]]></action>
</object> </object>
<object type="button" style="StoneButton" size="100%-146 100%-48 100%-20 100%-20">
OK
<action on="Press"><![CDATA[
returnAI();
]]></action>
</object>
</object> </object>
</objects> </objects>

View File

@ -23,7 +23,7 @@
</object> </object>
<object type="image" style="StonePanelLight" size="0 16 100% 100%" hidden="true" name="setupWindow"> <object type="image" style="StonePanelLight" size="24 24 100%-24 100%-24" hidden="true" name="setupWindow">
<action on="Tick"> <action on="Tick">
onTick(); onTick();
@ -34,7 +34,7 @@
</object> </object>
<!-- Map selection --> <!-- Map selection -->
<object size="20 64 250 100%-20"> <object size="20 64 300 100%-20">
<object size="0 0 40% 100%"> <object size="0 0 40% 100%">
<object name="mapTypeHeading" type="text" style="RightLabelText" size="0 0 100% 28">Match Type:</object> <object name="mapTypeHeading" type="text" style="RightLabelText" size="0 0 100% 28">Match Type:</object>
@ -76,7 +76,7 @@
</object> </object>
<!-- Player assignments --> <!-- Player assignments -->
<object name="numPlayersBox" size="260 28 100% 30" hidden="true"> <object name="numPlayersBox" size="320 28 100% 30" hidden="true">
<object name="numPlayersSelectionHeading" type="text" style="LeftLabelText" size="160 0 100% 32">Number of Players</object> <object name="numPlayersSelectionHeading" type="text" style="LeftLabelText" size="160 0 100% 32">Number of Players</object>
<object name="numPlayersSelection" <object name="numPlayersSelection"
type="dropdown" type="dropdown"
@ -88,7 +88,7 @@
</object> </object>
</object> </object>
<object size="260 64 100%-20 100%-260" type="image" sprite="BackgroundIndentFillDark"> <object size="320 64 100%-20 100%-260" type="image" sprite="BackgroundIndentFillDark">
<object size="0 6 100% 30"> <object size="0 6 100% 30">
<object name="playerNameHeading" type="text" style="CenteredLabelText" size="100 0 250 100%">Player Name</object> <object name="playerNameHeading" type="text" style="CenteredLabelText" size="100 0 250 100%">Player Name</object>
<object name="playerCivHeading" type="text" style="CenteredLabelText" size="250 0 400 100%">Civilization</object> <object name="playerCivHeading" type="text" style="CenteredLabelText" size="250 0 400 100%">Civilization</object>
@ -127,7 +127,7 @@
<!-- Options --> <!-- Options -->
<object name="gameOptionsBox" size="260 100%-260 100% 100%-190"> <object name="gameOptionsBox" size="320 100%-260 100% 100%-190">
<object size="2 2 100% 50%-2"> <!-- Top row --> <object size="2 2 100% 50%-2"> <!-- Top row -->
<object name="mapSizeText" size="0 0 175 100%" type="text" style="LeftLabelText">Map size:</object> <object name="mapSizeText" size="0 0 175 100%" type="text" style="LeftLabelText">Map size:</object>
<object name="mapSize" size="75 -2 225 100%-6" type="dropdown" style="StoneDropDown" hidden="true" tooltip_style="onscreenToolTip" tooltip="Select map size (larger may reduce performance)"/> <object name="mapSize" size="75 -2 225 100%-6" type="dropdown" style="StoneDropDown" hidden="true" tooltip_style="onscreenToolTip" tooltip="Select map size (larger may reduce performance)"/>
@ -144,7 +144,7 @@
<!-- Chat window --> <!-- Chat window -->
<object name="chatPanel" size="260 100%-190 100%-20 100%-58" type="image" sprite="BackgroundIndentFillDark"> <object name="chatPanel" size="320 100%-190 100%-20 100%-64" type="image" sprite="BackgroundIndentFillDark">
<object name="chatText" size="3 1 100%-1 100%-25" type="text" style="chatPanel"/> <object name="chatText" size="3 1 100%-1 100%-25" type="text" style="chatPanel"/>
@ -160,16 +160,17 @@
</object> </object>
<!-- Other things --> <!-- Tooltip -->
<object name="onscreenToolTip" <object name="onscreenToolTip"
type="text" type="text"
font="serif-14" font="serif-14"
textcolor="white" textcolor="white"
sprite="BackgroundTranslucent" sprite="BackgroundTranslucent"
hidden="true" hidden="true"
size="260 100%-64 100%-310 100%-16" size="100%-656 100%-64 100%-304 100%-16"
>[Tooltip text]</object> >[Tooltip text]</object>
<!-- Cancel Button -->
<object <object
name="cancelGame" name="cancelGame"
type="button" type="button"
@ -184,6 +185,7 @@
]]></action> ]]></action>
</object> </object>
<!-- Start Button -->
<object <object
name="startGame" name="startGame"
type="button" type="button"

View File

@ -3,5 +3,9 @@
<include>common/setup.xml</include> <include>common/setup.xml</include>
<include>common/sprite1.xml</include> <include>common/sprite1.xml</include>
<include>common/styles.xml</include> <include>common/styles.xml</include>
<include>common/common_sprites.xml</include>
<include>common/common_styles.xml</include>
<include>aiconfig/aiconfig.xml</include> <include>aiconfig/aiconfig.xml</include>
</page> </page>

View File

@ -83,8 +83,12 @@ function formatUserReportStatus(status)
function onTick() function onTick()
{ {
// Animate backgrounds
scrollBackgrounds(); scrollBackgrounds();
// Animate submenu
updateMenuPosition();
if (Engine.IsUserReportEnabled()) if (Engine.IsUserReportEnabled())
{ {
getGUIObjectByName("userReportDisabled").hidden = true; getGUIObjectByName("userReportDisabled").hidden = true;
@ -101,19 +105,36 @@ function onTick()
} }
} }
// Sizes right border on main menu panel to match the submenu
function blendSubmenuIntoMain(topPosition, bottomPosition)
{
var topSprite = getGUIObjectByName("MainMenuPanelRightBorderTop");
topSprite.size = "100%-2 0 100% " + (topPosition + MARGIN);
console.write(topSprite.size);
var bottomSprite = getGUIObjectByName("MainMenuPanelRightBorderBottom"); /*
bottomSprite.size = "100%-2 " + (bottomPosition) + " 100% 100%"; * MENU FUNCTIONS
*/
// Slide menu
function updateMenuPosition()
{
if (getGUIObjectByName("submenuScreen").hidden == false)
{
var submenu = getGUIObjectByName("submenu");
// The offset is the increment or number of units/pixels to move
// the menu. An offset of one is always accurate, but it is too
// slow. The offset must divide into the travel distance evenly
// in order for the menu to end up at the right spot. The travel
// distance is the max-initial. The travel distance in this
// example is 300-60 = 240. We choose an offset of 5 because it
// divides into 240 evenly and provided the speed we wanted.
var OFFSET = 5;
if (submenu.size.left < getGUIObjectByName("mainMenu").size.right)
{
submenu.size = (submenu.size.left + OFFSET) + " " + submenu.size.top + " " + (submenu.size.right + OFFSET) + " " + submenu.size.bottom;
}
}
} }
// Update the submenu // Opens the menu by revealing the screen which contains the menu
function updateSubmenu(newSubmenu, position, buttonHeight, numButtons) function openMenu(newSubmenu, position, buttonHeight, numButtons)
{ {
// remove old submenu // remove old submenu
getGUIObjectByName(currentSubmenu).hidden = true; getGUIObjectByName(currentSubmenu).hidden = true;
@ -127,29 +148,54 @@ function updateSubmenu(newSubmenu, position, buttonHeight, numButtons)
var top = position - MARGIN; var top = position - MARGIN;
var bottom = position + ((buttonHeight + MARGIN) * numButtons); var bottom = position + ((buttonHeight + MARGIN) * numButtons);
submenu.size = submenu.size.left + " " + top + " " + submenu.size.right + " " + bottom; submenu.size = submenu.size.left + " " + top + " " + submenu.size.right + " " + bottom;
submenu.hidden = false;
// Blend in right border of main menu into the left border of the submenu // Blend in right border of main menu into the left border of the submenu
blendSubmenuIntoMain(top, bottom); blendSubmenuIntoMain(top, bottom);
// prepare to hide the submenu when the mouse moves off of the submenu // prepare to hide the submenu when the mouse moves off of the submenu
getGUIObjectByName("submenuScreen").hidden = false; getGUIObjectByName("submenuScreen").hidden = false;
getGUIObjectByName("secondarySubmenuScreen").hidden = false;
} }
// Helper function that enables the dark background mask, then reveals a given subwindow object. // Closes the menu and resets position
function closeMenu()
{
getGUIObjectByName("submenuScreen").hidden = true;
getGUIObjectByName("secondarySubmenuScreen").hidden = true;
getGUIObjectByName("submenu").size = getGUIObjectByName("mainMenu").size;
getGUIObjectByName("MainMenuPanelRightBorderTop").size = "100%-2 0 100% 100%";
}
// Sizes right border on main menu panel to match the submenu
function blendSubmenuIntoMain(topPosition, bottomPosition)
{
var topSprite = getGUIObjectByName("MainMenuPanelRightBorderTop");
topSprite.size = "100%-2 0 100% " + (topPosition + MARGIN);
var bottomSprite = getGUIObjectByName("MainMenuPanelRightBorderBottom");
bottomSprite.size = "100%-2 " + (bottomPosition) + " 100% 100%";
}
// Reveals submenu
function openMainMenuSubWindow (windowName) function openMainMenuSubWindow (windowName)
{ {
guiUnHide("pgSubWindow"); guiUnHide("pgSubWindow");
guiUnHide(windowName); guiUnHide(windowName);
} }
// Helper function that disables the dark background mask, then hides a given subwindow object. // Hides submenu
function closeMainMenuSubWindow (windowName) function closeMainMenuSubWindow (windowName)
{ {
guiHide("pgSubWindow"); guiHide("pgSubWindow");
guiHide(windowName); guiHide(windowName);
} }
/*
* FUNCTIONS BELOW DO NOT WORK YET
*/
// Switch to a given options tab window. // Switch to a given options tab window.
function openOptionsTab(tabName) function openOptionsTab(tabName)
{ {

View File

@ -146,16 +146,184 @@ Status: $status.
</object> </object>
</object> </object>
<!--
==========================================
- SUBMENU
==========================================
-->
<object name="submenuScreen"
type="image"
hidden="true"
>
<!-- hides the submenu when the mouse leaves the mainMenuButtons or submenu -->
<action on="MouseEnter">
closeMenu();
</action>
<!-- submenu -->
<object name="submenu"
type="image"
style="SubmenuPanel"
size="60 50%-100 300 50%+100"
>
<!-- submenuSinglePlayer -->
<object name="submenuSinglePlayer"
type="image"
size="0 4 100%-4 100%-4"
tooltip_style="pgToolTip"
tooltip="The 0 A.D. Game Manual."
hidden="true"
>
<object name="subMenuSinglePlayerButton"
type="button"
style="StoneButtonFancy"
size="0 0 100% 28"
tooltip_style="pgToolTip"
tooltip="Click here to start a new single player game."
>
Matches
<action on="Press">
closeMenu();
Engine.PushGuiPage("page_gamesetup.xml", { type: "offline" });
</action>
</object>
<object name="subMenuCampaignButton"
type="button"
style="StoneButtonFancy"
size="0 32 100% 60"
tooltip_style="pgToolTip"
tooltip="Relive history through historical military campaigns. [NOT YET IMPLEMENTED]"
enabled="false"
>
Campaigns
<action on="Press">
closeMenu();
<![CDATA[
// Open Campaigns window.
// NOT IMPLEMENTED YET
]]>
</action>
</object>
</object>
<!-- submenuMultiplayer -->
<object name="submenuMultiplayer"
type="image"
size="0 4 100%-4 100%-4"
tooltip_style="pgToolTip"
tooltip="The 0 A.D. Game Manual"
hidden="true"
>
<object name="subMenuMultiplayerJoinButton"
type="button"
style="StoneButtonFancy"
size="0 0 100% 28"
tooltip_style="pgToolTip"
tooltip="Joining an existing multiplayer game."
>
Join Game
<action on="Press">
closeMenu();
// Open Multiplayer connection window with join option.
Engine.PushGuiPage("page_gamesetup_mp.xml", "join");
</action>
</object>
<object name="subMenuMultiplayerHostButton"
type="button"
style="StoneButtonFancy"
size="0 32 100% 60"
tooltip_style="pgToolTip"
tooltip="Host a multiplayer game."
>
Host Game
<action on="Press">
closeMenu();
// Open Multiplayer connection window with host option.
Engine.PushGuiPage("page_gamesetup_mp.xml", "host");
</action>
</object>
</object>
<!-- submenuToolsAndOptions -->
<object name="submenuToolsAndOptions"
type="image"
size="0 4 100%-4 100%-4"
tooltip_style="pgToolTip"
tooltip="The 0 A.D. Game Manual"
hidden="true"
>
<object name="submenuOptionsButton"
style="StoneButtonFancy"
type="button"
size="0 0 100% 28"
tooltip_style="pgToolTip"
tooltip="Adjust game settings. [NOT YET IMPLEMENTED]"
enabled="false"
>
Options
<action on="Press">
closeMenu();
<![CDATA[
// Open Options window.
Engine.PushGuiPage("page_options.xml");
]]>
</action>
</object>
<object name="submenuEditorButton"
style="StoneButtonFancy"
type="button"
size="0 32 100% 60"
tooltip_style="pgToolTip"
tooltip="Open the Atlas Scenario Editor in a new window. You can run this more reliably by starting the game with the command-line argument &quot;-editor&quot;."
>
Scenario Editor
<action on="Press">
closeMenu();
<![CDATA[
// Start Atlas
if (Engine.AtlasIsAvailable())
Engine.RestartInAtlas();
else
messageBox(400, 200, "The scenario editor is not available or failed to load.", "Error", 2);
]]>
</action>
</object>
</object>
</object><!-- end of submenu -->
</object><!-- end of submenu screen -->
<!-- <!--
========================================== ==========================================
- MAIN MENU PANEL - MAIN MENU PANEL
========================================== ==========================================
--> -->
<object type="image" <object name="mainMenu"
type="image"
style="MainMenuPanel" style="MainMenuPanel"
size="60 -2 300 100%+2" size="60 -2 300 100%+2"
z="50"
> >
<!-- These hides the submenu if you move the mouse over
the main menu panel. The regular submenu screen canot
handle this because it must be below the main menu panel
in order for the submenu to slide out from behind the
main menu panel. -->
<object name="secondarySubmenuScreen"
type="image"
hidden="true"
size="0 0 100% 100%"
>
<!-- hides the submenu when the mouse leaves the mainMenuButtons or submenu -->
<action on="MouseEnter">
closeMenu();
</action>
</object>
<!-- These are used to make the right side blend in with the submenu --> <!-- These are used to make the right side blend in with the submenu -->
<object name="MainMenuPanelRightBorderTop" <object name="MainMenuPanelRightBorderTop"
type="image" type="image"
@ -182,7 +350,11 @@ Status: $status.
size="8 156 100%-8 356" size="8 156 100%-8 356"
ghost="false" ghost="false"
> >
<!-- Allows sliding the mouse over to submenu without it closing automatically --> <!-- Allows sliding the mouse over to the submenu.
Without this, the submenu will close automatically
when the mouse encounters the "secondarySubmenuScreen"
in the thin space between the main menu buttons
and the submenu buttons. -->
<object <object
type="image" type="image"
size="100% 0 100%+8 100%" size="100% 0 100%+8 100%"
@ -199,7 +371,7 @@ Status: $status.
> >
Learn To Play Learn To Play
<action on="Press"> <action on="Press">
getGUIObjectByName("submenu").hidden = true; closeMenu();
<![CDATA[ <![CDATA[
Engine.PushGuiPage("page_manual.xml", { "page": "intro" }); Engine.PushGuiPage("page_manual.xml", { "page": "intro" });
]]> ]]>
@ -216,9 +388,8 @@ Status: $status.
> >
Single Player Single Player
<action on="Press"> <action on="Press">
<![CDATA[ closeMenu();
updateSubmenu("submenuSinglePlayer", (this.parent.size.top+this.size.top), (this.size.bottom-this.size.top), 2); openMenu("submenuSinglePlayer", (this.parent.size.top+this.size.top), (this.size.bottom-this.size.top), 2);
]]>
</action> </action>
</object> </object>
@ -232,9 +403,8 @@ Status: $status.
> >
Multiplayer Multiplayer
<action on="Press"> <action on="Press">
<![CDATA[ closeMenu();
updateSubmenu("submenuMultiplayer", (this.parent.size.top+this.size.top), (this.size.bottom-this.size.top), 2); openMenu("submenuMultiplayer", (this.parent.size.top+this.size.top), (this.size.bottom-this.size.top), 2);
]]>
</action> </action>
</object> </object>
@ -248,9 +418,8 @@ Status: $status.
> >
Tools <![CDATA[&]]> Options Tools <![CDATA[&]]> Options
<action on="Press"> <action on="Press">
<![CDATA[ closeMenu();
updateSubmenu("submenuToolsAndOptions", (this.parent.size.top+this.size.top), (this.size.bottom-this.size.top), 2); openMenu("submenuToolsAndOptions", (this.parent.size.top+this.size.top), (this.size.bottom-this.size.top), 2);
]]>
</action> </action>
</object> </object>
@ -264,7 +433,7 @@ Status: $status.
> >
History History
<action on="Press"> <action on="Press">
getGUIObjectByName("submenu").hidden = true; closeMenu();
<![CDATA[ <![CDATA[
Engine.PushGuiPage("page_civinfo.xml"); Engine.PushGuiPage("page_civinfo.xml");
]]> ]]>
@ -281,7 +450,7 @@ Status: $status.
> >
Exit Exit
<action on="Press"> <action on="Press">
getGUIObjectByName("submenu").hidden = true; closeMenu();
<![CDATA[ <![CDATA[
var btCaptions = ["Yes", "No"]; var btCaptions = ["Yes", "No"];
var btCode = [exit, null]; var btCode = [exit, null];
@ -379,158 +548,7 @@ Get involved at: wildfiregames.com/0ad
</object> </object>
<!--
==========================================
- SUBMENU
==========================================
-->
<object name="submenuScreen"
type="image"
hidden="true"
>
<!-- hides the submenu when the mouse leaves the mainMenuButtons or submenu -->
<action on="MouseEnter">
getGUIObjectByName("submenu").hidden = true;
getGUIObjectByName("MainMenuPanelRightBorderTop").size = "100%-2 0 100% 100%";
</action>
<!-- submenu -->
<object name="submenu"
type="image"
style="SubmenuPanel"
size="300 50%-100 536 50%+100"
>
<!-- submenuSinglePlayer -->
<object name="submenuSinglePlayer"
type="image"
size="0 4 100%-4 100%-4"
tooltip_style="pgToolTip"
tooltip="The 0 A.D. Game Manual."
hidden="true"
>
<object name="subMenuSinglePlayerButton"
type="button"
style="StoneButtonFancy"
size="0 0 100% 28"
tooltip_style="pgToolTip"
tooltip="Click here to start a new single player game."
>
Matches
<action on="Press"><![CDATA[
// Hide submenu
this.parent.parent.hidden = true;
// Open Session Setup window.
Engine.PushGuiPage("page_gamesetup.xml", { type: "offline" });
]]></action>
</object>
<object name="subMenuCampaignButton"
type="button"
style="StoneButtonFancy"
size="0 32 100% 60"
tooltip_style="pgToolTip"
tooltip="Relive history through historical military campaigns. [NOT YET IMPLEMENTED]"
enabled="false"
>
Campaigns
<action on="Press"><![CDATA[
// Hide submenu
this.parent.parent.hidden = true;
// Open Campaigns window.
// NOT IMPLEMENTED YET
]]></action>
</object>
</object>
<!-- submenuMultiplayer -->
<object name="submenuMultiplayer"
type="image"
size="0 4 100%-4 100%-4"
tooltip_style="pgToolTip"
tooltip="The 0 A.D. Game Manual"
hidden="true"
>
<object name="subMenuMultiplayerJoinButton"
type="button"
style="StoneButtonFancy"
size="0 0 100% 28"
tooltip_style="pgToolTip"
tooltip="Joining an existing multiplayer game."
>
Join Game
<action on="Press"><![CDATA[
// Hide submenu
this.parent.parent.hidden = true;
// Open Multiplayer connection window with join option.
Engine.PushGuiPage("page_gamesetup_mp.xml", "join");
]]></action>
</object>
<object name="subMenuMultiplayerHostButton"
type="button"
style="StoneButtonFancy"
size="0 32 100% 60"
tooltip_style="pgToolTip"
tooltip="Host a multiplayer game."
>
Host Game
<action on="Press"><![CDATA[
// Hide submenu
this.parent.parent.hidden = true;
// Open Multiplayer connection window with host option.
Engine.PushGuiPage("page_gamesetup_mp.xml", "host");
]]></action>
</object>
</object>
<!-- submenuToolsAndOptions -->
<object name="submenuToolsAndOptions"
type="image"
size="0 4 100%-4 100%-4"
tooltip_style="pgToolTip"
tooltip="The 0 A.D. Game Manual"
hidden="true"
>
<object name="submenuOptionsButton"
style="StoneButtonFancy"
type="button"
size="0 0 100% 28"
tooltip_style="pgToolTip"
tooltip="Adjust game settings. [NOT YET IMPLEMENTED]"
enabled="false"
>
Options
<action on="Press"><![CDATA[
// Hide submenu
this.parent.parent.hidden = true;
// Open Options window.
Engine.PushGuiPage("page_options.xml");
]]></action>
</object>
<object name="submenuEditorButton"
style="StoneButtonFancy"
type="button"
size="0 32 100% 60"
tooltip_style="pgToolTip"
tooltip="Open the Atlas Scenario Editor in a new window. You can run this more reliably by starting the game with the command-line argument &quot;-editor&quot;."
>
Scenario Editor
<action on="Press"><![CDATA[
// Hide submenu
this.parent.parent.hidden = true;
// Start Atlas
if (Engine.AtlasIsAvailable())
Engine.RestartInAtlas();
else
messageBox(400, 200, "The scenario editor is not available or failed to load.", "Error", 2);
]]></action>
</object>
</object>
</object><!-- end of submenu -->
</object><!-- end of submenu screen -->

View File

@ -1,13 +1,63 @@
/*
* MENU POSITION CONSTANTS
*/
// Menu / panel border size
const MARGIN = 4;
// Includes the main menu button
const NUM_BUTTONS = 5;
// Regular menu buttons
const BUTTON_HEIGHT = 32;
// The position where the bottom of the menu will end up (currently 164)
const END_MENU_POSITION = (BUTTON_HEIGHT * NUM_BUTTONS) + MARGIN;
// Menu starting position - bottom
const MENU_BOTTOM = 36;
// Menu starting position - top
const MENU_TOP = MENU_BOTTOM - END_MENU_POSITION;
// Menu starting position - overall
const INITIAL_MENU_POSITION = "100%-" + END_MENU_POSITION + " " + MENU_TOP + " 100% " + MENU_BOTTOM;
// Slide menu
function updateMenuPosition()
{
if (getGUIObjectByName("menuScreen").hidden == false)
{
var menu = getGUIObjectByName("menu");
// The offset is the increment or number of units/pixels to move
// the menu. An offset of one is always accurate, but it is too
// slow. The offset must divide into the travel distance evenly
// in order for the menu to end up at the right spot. The travel
// distance is the max-initial. The travel distance in this
// example is 164-36 = 128. We choose an offset of 8 because it
// divides into 128 evenly and provided the speed we wanted.
var OFFSET = 8;
if (menu.size.bottom < END_MENU_POSITION)
{
menu.size = "100%-" + END_MENU_POSITION + " " + (menu.size.top + OFFSET) + " 100% " + (menu.size.bottom + OFFSET);
}
}
}
// Opens the menu by revealing the screen which contains the menu
function openMenu() function openMenu()
{ {
getGUIObjectByName("menuScreen").hidden = false; getGUIObjectByName("menuScreen").hidden = false;
getGUIObjectByName("menu").hidden = false;
} }
// Closes the menu and resets position
function closeMenu() function closeMenu()
{ {
getGUIObjectByName("menuScreen").hidden = true; getGUIObjectByName("menuScreen").hidden = true;
getGUIObjectByName("menu").hidden = true; getGUIObjectByName("menu").size = INITIAL_MENU_POSITION;
} }
function openSettings() function openSettings()

View File

@ -174,6 +174,9 @@ function onTick()
// Run timers // Run timers
updateTimers(); updateTimers();
// Animate menu
updateMenuPosition();
// When training is blocked, flash population (alternates colour every 500msec) // When training is blocked, flash population (alternates colour every 500msec)
if (g_IsTrainingQueueBlocked && (Date.now() % 1000) < 500) if (g_IsTrainingQueueBlocked && (Date.now() % 1000) < 500)
getGUIObjectByName("resourcePop").textcolor = "255 165 0"; getGUIObjectByName("resourcePop").textcolor = "255 165 0";

View File

@ -52,7 +52,7 @@
<!-- Menu --> <!-- Menu -->
<object hotkey="menu.toggle"> <object hotkey="menu.toggle">
<action on="Press">openMenuDialog();</action> <action on="Press">openMenu();</action>
</object> </object>
<!-- Pause --> <!-- Pause -->
@ -195,83 +195,6 @@
</object> </object>
<!-- ================================ ================================ -->
<!-- Menu -->
<!-- ================================ ================================ -->
<object name="menuScreen"
type="image"
hidden="true"
>
<!-- hides the submenu when the mouse leaves the mainMenuButtons or submenu -->
<action on="MouseEnter">
closeMenu();
</action>
<object name="menu"
style="StonePanelThinBorder"
type="image"
size="100%-164 0 100% 164"
hidden="true"
>
<object size="4 36 100%-4 50%+20">
<!-- Settings button -->
<object type="button"
name="settingsButton"
style="StoneButtonFancy"
size="0 0 100% 28"
tooltip_style="sessionToolTip"
>
Settings
<action on="Press">
openSettings();
</action>
</object>
<!-- Chat button -->
<object type="button"
name="chatButton"
style="StoneButtonFancy"
size="0 32 100% 60"
tooltip_style="sessionToolTip"
>
Chat
<action on="Press">
openChat();
</action>
</object>
<!-- Pause Button -->
<object type="button"
name="pauseButton"
style="StoneButtonFancy"
size="0 64 100% 92"
tooltip_style="sessionToolTip"
>
<object name="pauseButtonText" type="text" style="CenteredButtonText" ghost="true">Pause</object>
<action on="Press">
togglePause();
</action>
</object>
<!-- Exit button -->
<object type="button"
name="menuExitButton"
style="StoneButtonFancy"
size="0 96 100% 124"
tooltip_style="sessionToolTip"
>
Exit
<action on="Press">escapeKeyAction();<![CDATA[
var btCaptions = ["Yes", "No"];
var btCode = [leaveGame, null];
messageBox(400, 200, "Are you sure you want to quit?", "Confirmation", 0, btCaptions, btCode);
]]></action>
</object>
</object>
</object>
</object>
<!-- ================================ ================================ --> <!-- ================================ ================================ -->
<!-- Settings Window --> <!-- Settings Window -->
<!-- ================================ ================================ --> <!-- ================================ ================================ -->
@ -412,13 +335,104 @@
size="100%-164 4 100%-8 32" size="100%-164 4 100%-8 32"
style="StoneButtonFancy" style="StoneButtonFancy"
tooltip_style="sessionToolTip" tooltip_style="sessionToolTip"
z="50"
> >
<object size="50%-32 50%-16 50%+32 50%+16" type="image" sprite="menuButton" name="menuButtonText" ghost="true">MENU</object> <!-- This object covers up the text on the menu
<action on="Press">openMenu();</action> buttons as they slide by so that you don't see
</object> <!-- END OF MENU BUTTON --> them on top of the main menu button -->
<object size="0 -4 100% 0" type="image" sprite="horizontalThinBorder" ghost="true"/>
<object size="50%-32 50%-16 50%+32 50%+16" type="image" sprite="menuButton" ghost="true">MENU</object>
<action on="Press">
openMenu();
</action>
</object> <!-- END OF MENU BUTTON -->
</object> <!-- END OF TOP PANEL --> </object> <!-- END OF TOP PANEL -->
<!-- ================================ ================================ -->
<!-- Menu -->
<!-- ================================ ================================ -->
<object name="menuScreen"
type="image"
hidden="true"
size="0 0 100% 100%"
>
<!-- hides the menu when the mouse leaves the menu -->
<action on="MouseEnter">
closeMenu();
</action>
<object name="menu"
style="StonePanelThinBorder"
type="image"
size="100%-164 -128 100% 36"
>
<object size="4 36 100%-4 50%+20">
<!-- Settings button -->
<object type="button"
name="settingsButton"
style="StoneButtonFancy"
size="0 0 100% 28"
tooltip_style="sessionToolTip"
>
Settings
<action on="Press">
closeMenu();
openSettings();
</action>
</object>
<!-- Chat button -->
<object type="button"
name="chatButton"
style="StoneButtonFancy"
size="0 32 100% 60"
tooltip_style="sessionToolTip"
>
Chat
<action on="Press">
closeMenu();
openChat();
</action>
</object>
<!-- Pause Button -->
<object type="button"
name="pauseButton"
style="StoneButtonFancy"
size="0 64 100% 92"
tooltip_style="sessionToolTip"
>
<object name="pauseButtonText" type="text" style="CenteredButtonText" ghost="true">Pause</object>
<action on="Press">
closeMenu();
togglePause();
</action>
</object>
<!-- Exit button -->
<object type="button"
name="menuExitButton"
style="StoneButtonFancy"
size="0 96 100% 124"
tooltip_style="sessionToolTip"
>
Exit
<action on="Press">
closeMenu();
escapeKeyAction();
<![CDATA[
var btCaptions = ["Yes", "No"];
var btCode = [leaveGame, null];
messageBox(400, 200, "Are you sure you want to quit?", "Confirmation", 0, btCaptions, btCode);
]]>
</action>
</object>
</object>
</object>
</object>
<!-- ================================ ================================ --> <!-- ================================ ================================ -->
<!-- Unit Selection Groups --> <!-- Unit Selection Groups -->
<!-- ================================ ================================ --> <!-- ================================ ================================ -->

View File

@ -50,7 +50,15 @@
<sprite name="menuButton"> <sprite name="menuButton">
<image <image
texture="session/icons/single/menu.png" texture="session/icons/single/menu.png"
size="0 0 100% 100%" real_texture_placement="6 10 60 23"
size="6 10 60 23"
/>
</sprite>
<sprite name="horizontalThinBorder">
<image
texture="global/border/line_horiz.png"
texture_size="0 0 64 4"
/> />
</sprite> </sprite>

View File

@ -13,7 +13,7 @@
<object type="image" <object type="image"
style="StonePanelLight" style="StonePanelLight"
size="25 35 100%-25 100%-25" size="24 24 100%-24 100%-24"
> >
<object style="StoneDialogTitleBar" type="text" size="50%-128 0%-16 50%+128 16"> <object style="StoneDialogTitleBar" type="text" size="50%-128 0%-16 50%+128 16">
Summary Summary