mirror of
https://gitea.wildfiregames.com/0ad/0ad
synced 2026-07-10 08:55:48 -07:00
Support writing zip files based on in-memory data. Fix menu sliding animations to be framerate independent. This was SVN commit r10454.
248 lines
No EOL
5.2 KiB
JavaScript
248 lines
No EOL
5.2 KiB
JavaScript
const PAUSE = "Pause";
|
|
const RESUME = "Resume";
|
|
|
|
/*
|
|
* MENU POSITION CONSTANTS
|
|
*/
|
|
|
|
// Menu / panel border size
|
|
const MARGIN = 4;
|
|
|
|
// Includes the main menu button
|
|
const NUM_BUTTONS = 6;
|
|
|
|
// 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 = 0;
|
|
|
|
// Menu starting position: top
|
|
const MENU_TOP = MENU_BOTTOM - END_MENU_POSITION;
|
|
|
|
// Menu starting position: overall
|
|
const INITIAL_MENU_POSITION = "100%-164 " + MENU_TOP + " 100% " + MENU_BOTTOM;
|
|
|
|
// Number of pixels per millisecond to move
|
|
const MENU_SPEED = 1.2;
|
|
|
|
var isMenuOpen = false;
|
|
var menu;
|
|
|
|
// Ignore size defined in XML and set the actual menu size here
|
|
function initMenuPosition()
|
|
{
|
|
menu = getGUIObjectByName("menu");
|
|
menu.size = INITIAL_MENU_POSITION;
|
|
}
|
|
|
|
|
|
// =============================================================================
|
|
// Overall Menu
|
|
// =============================================================================
|
|
//
|
|
// Slide menu
|
|
function updateMenuPosition(dt)
|
|
{
|
|
if (isMenuOpen)
|
|
{
|
|
var maxOffset = END_MENU_POSITION - menu.size.bottom;
|
|
if (maxOffset > 0)
|
|
{
|
|
var offset = Math.min(MENU_SPEED * dt, maxOffset);
|
|
var size = menu.size;
|
|
size.top += offset;
|
|
size.bottom += offset;
|
|
menu.size = size;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var maxOffset = menu.size.top - MENU_TOP;
|
|
if (maxOffset > 0)
|
|
{
|
|
var offset = Math.min(MENU_SPEED * dt, maxOffset);
|
|
var size = menu.size;
|
|
size.top -= offset;
|
|
size.bottom -= offset;
|
|
menu.size = size;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Opens the menu by revealing the screen which contains the menu
|
|
function openMenu()
|
|
{
|
|
// playButtonSound();
|
|
isMenuOpen = true;
|
|
}
|
|
|
|
// Closes the menu and resets position
|
|
function closeMenu()
|
|
{
|
|
// playButtonSound();
|
|
isMenuOpen = false;
|
|
}
|
|
|
|
function toggleMenu()
|
|
{
|
|
if (isMenuOpen == true)
|
|
closeMenu();
|
|
else
|
|
openMenu();
|
|
}
|
|
|
|
// Menu buttons
|
|
// =============================================================================
|
|
function settingsMenuButton()
|
|
{
|
|
closeMenu();
|
|
closeOpenDialogs();
|
|
openSettings(true);
|
|
}
|
|
|
|
function chatMenuButton()
|
|
{
|
|
closeMenu();
|
|
closeOpenDialogs();
|
|
openChat();
|
|
}
|
|
|
|
function pauseMenuButton()
|
|
{
|
|
togglePause();
|
|
}
|
|
|
|
function exitMenuButton()
|
|
{
|
|
closeMenu();
|
|
closeOpenDialogs();
|
|
pauseGame();
|
|
var btCaptions = ["Yes", "No"];
|
|
var btCode = [leaveGame, resumeGame];
|
|
messageBox(400, 200, "Are you sure you want to quit?", "Confirmation", 0, btCaptions, btCode);
|
|
}
|
|
|
|
function openDeleteDialog(selection)
|
|
{
|
|
closeMenu();
|
|
closeOpenDialogs();
|
|
|
|
var deleteSelectedEntities = function ()
|
|
{
|
|
Engine.PostNetworkCommand({"type": "delete-entities", "entities": selection});
|
|
};
|
|
|
|
var btCaptions = ["Yes", "No"];
|
|
var btCode = [deleteSelectedEntities, resumeGame];
|
|
|
|
messageBox(400, 200, "Destroy everything currently selected?", "Delete", 0, btCaptions, btCode);
|
|
}
|
|
|
|
// Menu functions
|
|
// =============================================================================
|
|
|
|
function openSettings(pause)
|
|
{
|
|
getGUIObjectByName("settingsDialogPanel").hidden = false;
|
|
if (pause)
|
|
pauseGame();
|
|
}
|
|
|
|
function closeSettings(resume)
|
|
{
|
|
getGUIObjectByName("settingsDialogPanel").hidden = true;
|
|
if (resume)
|
|
resumeGame();
|
|
}
|
|
|
|
function openChat()
|
|
{
|
|
getGUIObjectByName("chatInput").focus(); // Grant focus to the input area
|
|
getGUIObjectByName("chatDialogPanel").hidden = false;
|
|
|
|
}
|
|
|
|
function closeChat()
|
|
{
|
|
getGUIObjectByName("chatInput").caption = ""; // Clear chat input
|
|
getGUIObjectByName("chatDialogPanel").hidden = true;
|
|
}
|
|
|
|
function toggleChatWindow()
|
|
{
|
|
closeSettings();
|
|
|
|
var chatWindow = getGUIObjectByName("chatDialogPanel");
|
|
var chatInput = getGUIObjectByName("chatInput");
|
|
|
|
if (chatWindow.hidden)
|
|
chatInput.focus(); // Grant focus to the input area
|
|
else
|
|
chatInput.caption = ""; // Clear chat input
|
|
|
|
chatWindow.hidden = !chatWindow.hidden;
|
|
}
|
|
|
|
function pauseGame()
|
|
{
|
|
getGUIObjectByName("pauseButtonText").caption = RESUME;
|
|
getGUIObjectByName("pauseOverlay").hidden = false;
|
|
setPaused(true);
|
|
}
|
|
|
|
function resumeGame()
|
|
{
|
|
getGUIObjectByName("pauseButtonText").caption = PAUSE;
|
|
getGUIObjectByName("pauseOverlay").hidden = true;
|
|
setPaused(false);
|
|
}
|
|
|
|
function togglePause()
|
|
{
|
|
closeMenu();
|
|
closeOpenDialogs();
|
|
|
|
var pauseOverlay = getGUIObjectByName("pauseOverlay");
|
|
|
|
if (pauseOverlay.hidden)
|
|
{
|
|
getGUIObjectByName("pauseButtonText").caption = RESUME;
|
|
setPaused(true);
|
|
|
|
}
|
|
else
|
|
{
|
|
setPaused(false);
|
|
getGUIObjectByName("pauseButtonText").caption = PAUSE;
|
|
}
|
|
|
|
pauseOverlay.hidden = !pauseOverlay.hidden;
|
|
}
|
|
|
|
function toggleDeveloperOverlay()
|
|
{
|
|
var devCommands = getGUIObjectByName("devCommands");
|
|
var text = devCommands.hidden? "opened." : "closed.";
|
|
submitChatDirectly("The Developer Overlay was " + text);
|
|
devCommands.hidden = !devCommands.hidden;
|
|
}
|
|
|
|
function closeOpenDialogs()
|
|
{
|
|
closeMenu();
|
|
closeChat();
|
|
closeSettings(false);
|
|
}
|
|
|
|
|
|
// Temporarily adding this here
|
|
//function playButtonSound()
|
|
//{
|
|
// const BUTTON_SOUND = "audio/interface/ui/ui_button_longclick.ogg";
|
|
// var buttonSound = new Sound(BUTTON_SOUND);
|
|
// buttonSound.play();
|
|
//}
|