2011-09-06 20:15:27 +02:00
|
|
|
const PAUSE = "Pause";
|
|
|
|
const RESUME = "Resume";
|
|
|
|
|
2011-08-31 04:41:21 +02:00
|
|
|
/*
|
|
|
|
* MENU POSITION CONSTANTS
|
|
|
|
*/
|
|
|
|
|
|
|
|
// Menu / panel border size
|
|
|
|
const MARGIN = 4;
|
|
|
|
|
|
|
|
// Includes the main menu button
|
2012-08-05 20:07:56 +02:00
|
|
|
const NUM_BUTTONS = 7;
|
2011-08-31 04:41:21 +02:00
|
|
|
|
|
|
|
// Regular menu buttons
|
|
|
|
const BUTTON_HEIGHT = 32;
|
|
|
|
|
2012-08-05 20:07:56 +02:00
|
|
|
// The position where the bottom of the menu will end up (currently 228)
|
2011-08-31 04:41:21 +02:00
|
|
|
const END_MENU_POSITION = (BUTTON_HEIGHT * NUM_BUTTONS) + MARGIN;
|
|
|
|
|
2011-09-06 20:15:27 +02:00
|
|
|
// Menu starting position: bottom
|
2011-09-08 02:19:38 +02:00
|
|
|
const MENU_BOTTOM = 0;
|
2011-08-31 04:41:21 +02:00
|
|
|
|
2011-09-06 20:15:27 +02:00
|
|
|
// Menu starting position: top
|
2011-08-31 04:41:21 +02:00
|
|
|
const MENU_TOP = MENU_BOTTOM - END_MENU_POSITION;
|
|
|
|
|
2011-09-06 20:15:27 +02:00
|
|
|
// Menu starting position: overall
|
2011-09-01 04:36:38 +02:00
|
|
|
const INITIAL_MENU_POSITION = "100%-164 " + MENU_TOP + " 100% " + MENU_BOTTOM;
|
2011-08-31 04:41:21 +02:00
|
|
|
|
2011-10-30 02:07:28 +02:00
|
|
|
// Number of pixels per millisecond to move
|
|
|
|
const MENU_SPEED = 1.2;
|
2011-09-06 20:15:27 +02:00
|
|
|
|
|
|
|
var isMenuOpen = false;
|
|
|
|
var menu;
|
|
|
|
|
2012-10-23 18:31:07 +02:00
|
|
|
var isDiplomacyOpen = false;
|
|
|
|
|
2011-09-06 20:15:27 +02:00
|
|
|
// Ignore size defined in XML and set the actual menu size here
|
|
|
|
function initMenuPosition()
|
|
|
|
{
|
|
|
|
menu = getGUIObjectByName("menu");
|
|
|
|
menu.size = INITIAL_MENU_POSITION;
|
|
|
|
}
|
2011-08-31 04:41:21 +02:00
|
|
|
|
2011-09-11 05:30:41 +02:00
|
|
|
|
2011-09-06 20:15:27 +02:00
|
|
|
// =============================================================================
|
|
|
|
// Overall Menu
|
|
|
|
// =============================================================================
|
|
|
|
//
|
2011-08-31 04:41:21 +02:00
|
|
|
// Slide menu
|
2011-10-30 02:07:28 +02:00
|
|
|
function updateMenuPosition(dt)
|
2011-08-31 04:41:21 +02:00
|
|
|
{
|
2011-09-06 20:15:27 +02:00
|
|
|
if (isMenuOpen)
|
|
|
|
{
|
2011-10-30 02:07:28 +02:00
|
|
|
var maxOffset = END_MENU_POSITION - menu.size.bottom;
|
|
|
|
if (maxOffset > 0)
|
2011-09-06 20:15:27 +02:00
|
|
|
{
|
2011-10-30 02:07:28 +02:00
|
|
|
var offset = Math.min(MENU_SPEED * dt, maxOffset);
|
|
|
|
var size = menu.size;
|
|
|
|
size.top += offset;
|
|
|
|
size.bottom += offset;
|
|
|
|
menu.size = size;
|
2011-09-06 20:15:27 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2011-10-30 02:07:28 +02:00
|
|
|
var maxOffset = menu.size.top - MENU_TOP;
|
|
|
|
if (maxOffset > 0)
|
2011-09-06 20:15:27 +02:00
|
|
|
{
|
2011-10-30 02:07:28 +02:00
|
|
|
var offset = Math.min(MENU_SPEED * dt, maxOffset);
|
|
|
|
var size = menu.size;
|
|
|
|
size.top -= offset;
|
|
|
|
size.bottom -= offset;
|
|
|
|
menu.size = size;
|
2011-09-06 20:15:27 +02:00
|
|
|
}
|
|
|
|
}
|
2011-08-31 04:41:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// Opens the menu by revealing the screen which contains the menu
|
2011-08-28 00:44:08 +02:00
|
|
|
function openMenu()
|
2010-07-01 22:31:47 +02:00
|
|
|
{
|
2011-09-11 05:30:41 +02:00
|
|
|
// playButtonSound();
|
2011-09-06 20:15:27 +02:00
|
|
|
isMenuOpen = true;
|
2010-08-13 18:05:06 +02:00
|
|
|
}
|
|
|
|
|
2011-08-31 04:41:21 +02:00
|
|
|
// Closes the menu and resets position
|
2011-08-28 00:44:08 +02:00
|
|
|
function closeMenu()
|
2010-08-13 18:05:06 +02:00
|
|
|
{
|
2011-09-11 05:30:41 +02:00
|
|
|
// playButtonSound();
|
2011-09-06 20:15:27 +02:00
|
|
|
isMenuOpen = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
function toggleMenu()
|
|
|
|
{
|
|
|
|
if (isMenuOpen == true)
|
|
|
|
closeMenu();
|
|
|
|
else
|
|
|
|
openMenu();
|
|
|
|
}
|
|
|
|
|
|
|
|
// Menu buttons
|
|
|
|
// =============================================================================
|
|
|
|
function settingsMenuButton()
|
|
|
|
{
|
|
|
|
closeMenu();
|
|
|
|
closeOpenDialogs();
|
|
|
|
openSettings(true);
|
|
|
|
}
|
|
|
|
|
|
|
|
function chatMenuButton()
|
|
|
|
{
|
|
|
|
closeMenu();
|
|
|
|
closeOpenDialogs();
|
|
|
|
openChat();
|
|
|
|
}
|
|
|
|
|
2012-10-23 18:31:07 +02:00
|
|
|
function diplomacyMenuButton()
|
|
|
|
{
|
|
|
|
closeMenu();
|
|
|
|
closeOpenDialogs();
|
|
|
|
openDiplomacy();
|
|
|
|
}
|
|
|
|
|
2011-09-06 20:15:27 +02:00
|
|
|
function pauseMenuButton()
|
|
|
|
{
|
|
|
|
togglePause();
|
2010-07-01 22:31:47 +02:00
|
|
|
}
|
|
|
|
|
2012-08-05 20:07:56 +02:00
|
|
|
function resignMenuButton()
|
|
|
|
{
|
|
|
|
closeMenu();
|
|
|
|
closeOpenDialogs();
|
|
|
|
pauseGame();
|
|
|
|
var btCaptions = ["Yes", "No"];
|
|
|
|
var btCode = [resignGame, resumeGame];
|
|
|
|
messageBox(400, 200, "Are you sure you want to resign?", "Confirmation", 0, btCaptions, btCode);
|
|
|
|
}
|
|
|
|
|
2011-09-06 20:15:27 +02:00
|
|
|
function exitMenuButton()
|
2010-07-01 22:31:47 +02:00
|
|
|
{
|
2011-09-06 20:15:27 +02:00
|
|
|
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);
|
2011-08-28 00:44:08 +02:00
|
|
|
}
|
|
|
|
|
2011-09-06 20:15:27 +02:00
|
|
|
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)
|
2012-10-23 18:31:07 +02:00
|
|
|
pauseGame();
|
2011-09-06 20:15:27 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function closeSettings(resume)
|
2011-08-28 00:44:08 +02:00
|
|
|
{
|
2012-10-23 18:31:07 +02:00
|
|
|
getGUIObjectByName("settingsDialogPanel").hidden = true;
|
2011-09-06 20:15:27 +02:00
|
|
|
if (resume)
|
2012-10-23 18:31:07 +02:00
|
|
|
resumeGame();
|
2010-11-27 20:46:12 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
function openChat()
|
|
|
|
{
|
|
|
|
getGUIObjectByName("chatInput").focus(); // Grant focus to the input area
|
|
|
|
getGUIObjectByName("chatDialogPanel").hidden = false;
|
2011-08-31 04:41:21 +02:00
|
|
|
|
2010-11-27 20:46:12 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
function closeChat()
|
|
|
|
{
|
|
|
|
getGUIObjectByName("chatInput").caption = ""; // Clear chat input
|
2012-08-18 23:35:52 +02:00
|
|
|
getGUIObjectByName("chatInput").blur(); // Remove focus
|
2010-11-27 20:46:12 +01:00
|
|
|
getGUIObjectByName("chatDialogPanel").hidden = true;
|
2010-08-13 18:05:06 +02:00
|
|
|
}
|
|
|
|
|
2012-08-12 01:59:28 +02:00
|
|
|
function toggleChatWindow(teamChat)
|
2010-08-13 18:05:06 +02:00
|
|
|
{
|
2011-09-06 20:15:27 +02:00
|
|
|
closeSettings();
|
2011-08-31 04:41:21 +02:00
|
|
|
|
2010-11-27 20:46:12 +01:00
|
|
|
var chatWindow = getGUIObjectByName("chatDialogPanel");
|
|
|
|
var chatInput = getGUIObjectByName("chatInput");
|
|
|
|
|
2010-08-13 18:05:06 +02:00
|
|
|
if (chatWindow.hidden)
|
|
|
|
chatInput.focus(); // Grant focus to the input area
|
2010-07-01 22:31:47 +02:00
|
|
|
else
|
2012-08-19 02:28:46 +02:00
|
|
|
{
|
|
|
|
if (chatInput.caption.length)
|
|
|
|
{
|
|
|
|
submitChatInput();
|
|
|
|
return;
|
|
|
|
}
|
2010-08-13 18:05:06 +02:00
|
|
|
chatInput.caption = ""; // Clear chat input
|
2012-08-19 02:28:46 +02:00
|
|
|
}
|
2010-07-01 22:31:47 +02:00
|
|
|
|
2012-08-12 01:59:28 +02:00
|
|
|
getGUIObjectByName("toggleTeamChat").checked = teamChat;
|
2010-08-13 18:05:06 +02:00
|
|
|
chatWindow.hidden = !chatWindow.hidden;
|
2010-07-01 22:31:47 +02:00
|
|
|
}
|
|
|
|
|
2012-10-23 18:31:07 +02:00
|
|
|
function setDiplomacy(data)
|
|
|
|
{
|
|
|
|
Engine.PostNetworkCommand({"type": "diplomacy", "to": data.to, "player": data.player});
|
|
|
|
}
|
|
|
|
|
|
|
|
function tributeResource(data)
|
|
|
|
{
|
|
|
|
Engine.PostNetworkCommand({"type": "tribute", "player": data.player, "amounts": data.amounts});
|
|
|
|
}
|
|
|
|
|
|
|
|
function openDiplomacy()
|
|
|
|
{
|
|
|
|
isDiplomacyOpen = true;
|
|
|
|
|
|
|
|
var we = Engine.GetPlayerID();
|
|
|
|
var players = getPlayerData(g_PlayerAssignments);
|
|
|
|
|
|
|
|
// Get offset for one line
|
|
|
|
var onesize = getGUIObjectByName("diplomacyPlayer[0]").size;
|
|
|
|
var rowsize = onesize.bottom - onesize.top;
|
|
|
|
|
|
|
|
// We don't include gaia
|
|
|
|
for (var i = 1; i < players.length; i++)
|
|
|
|
{
|
|
|
|
// Apply offset
|
|
|
|
var row = getGUIObjectByName("diplomacyPlayer["+(i-1)+"]");
|
|
|
|
var size = row.size;
|
|
|
|
size.top = rowsize*(i-1);
|
|
|
|
size.bottom = rowsize*i;
|
|
|
|
row.size = size;
|
|
|
|
|
|
|
|
// Set background colour
|
|
|
|
var playerColor = players[i].color.r+" "+players[i].color.g+" "+players[i].color.b;
|
|
|
|
row.sprite = "colour: "+playerColor + " 32";
|
|
|
|
|
|
|
|
getGUIObjectByName("diplomacyPlayerName["+(i-1)+"]").caption = "[color=\"" + playerColor + "\"]" + players[i].name + "[/color]";
|
|
|
|
getGUIObjectByName("diplomacyPlayerCiv["+(i-1)+"]").caption = g_CivData[players[i].civ].Name;
|
|
|
|
|
|
|
|
getGUIObjectByName("diplomacyPlayerTeam["+(i-1)+"]").caption = (players[i].team < 0) ? "None" : players[i].team+1;
|
|
|
|
|
|
|
|
// Don't display this for ourself and our locked team members
|
|
|
|
if (i != we && !(players[we].teamsLocked && players[we].team != -1 && players[we].team == players[i].team))
|
|
|
|
{
|
2012-11-05 21:16:35 +01:00
|
|
|
getGUIObjectByName("diplomacyPlayerTheirs["+(i-1)+"]").caption = (players[i].isAlly[we] ? "Ally" : (players[i].isNeutral[we] ? "Neutral" : "Enemy"));
|
|
|
|
|
2012-10-23 18:31:07 +02:00
|
|
|
// Set up the buttons
|
|
|
|
for each (var setting in ["ally", "neutral", "enemy"])
|
|
|
|
{
|
|
|
|
var button = getGUIObjectByName("diplomacyPlayer"+toTitleCase(setting)+"["+(i-1)+"]");
|
2012-11-02 14:44:35 +01:00
|
|
|
|
|
|
|
if (setting == "ally")
|
|
|
|
{
|
|
|
|
if (players[we].isAlly[i])
|
|
|
|
button.caption = "x";
|
|
|
|
else
|
|
|
|
button.caption = "";
|
|
|
|
}
|
|
|
|
else if (setting == "neutral")
|
|
|
|
{
|
|
|
|
if (players[we].isNeutral[i])
|
|
|
|
button.caption = "x";
|
|
|
|
else
|
|
|
|
button.caption = "";
|
|
|
|
}
|
|
|
|
else // "enemy"
|
|
|
|
{
|
|
|
|
if (players[we].isEnemy[i])
|
2012-11-05 21:16:35 +01:00
|
|
|
button.caption = "x";
|
2012-11-02 14:44:35 +01:00
|
|
|
else
|
|
|
|
button.caption = "";
|
|
|
|
}
|
|
|
|
|
2012-10-23 18:31:07 +02:00
|
|
|
button.onpress = (function(e){ return function() { setDiplomacy(e) } })({"player": i, "to": setting});
|
|
|
|
button.hidden = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Tributes (you can't tribute to yourself)
|
|
|
|
if (i != we)
|
|
|
|
{
|
|
|
|
for each (var resource in ["food", "wood", "stone", "metal"])
|
|
|
|
{
|
|
|
|
var button = getGUIObjectByName("diplomacyPlayerTribute"+toTitleCase(resource)+"["+(i-1)+"]");
|
|
|
|
// TODO: Make amounts changeable or change to 500 if shift is pressed
|
|
|
|
var amounts = {
|
|
|
|
"food": (resource=="food")?100:0,
|
|
|
|
"wood": (resource=="wood")?100:0,
|
|
|
|
"stone": (resource=="stone")?100:0,
|
|
|
|
"metal": (resource=="metal")?100:0,
|
|
|
|
};
|
|
|
|
button.onpress = (function(e){ return function() { tributeResource(e) } })({"player": i, "amounts": amounts});
|
|
|
|
button.hidden = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
getGUIObjectByName("diplomacyDialogPanel").hidden = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
function closeDiplomacy()
|
|
|
|
{
|
|
|
|
isDiplomacyOpen = false;
|
|
|
|
getGUIObjectByName("diplomacyDialogPanel").hidden = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
function toggleDiplomacy()
|
|
|
|
{
|
|
|
|
if (isDiplomacyOpen)
|
|
|
|
closeDiplomacy();
|
|
|
|
else
|
|
|
|
openDiplomacy();
|
|
|
|
};
|
|
|
|
|
2011-09-06 20:15:27 +02:00
|
|
|
function pauseGame()
|
|
|
|
{
|
|
|
|
getGUIObjectByName("pauseButtonText").caption = RESUME;
|
|
|
|
getGUIObjectByName("pauseOverlay").hidden = false;
|
|
|
|
setPaused(true);
|
|
|
|
}
|
|
|
|
|
|
|
|
function resumeGame()
|
|
|
|
{
|
|
|
|
getGUIObjectByName("pauseButtonText").caption = PAUSE;
|
|
|
|
getGUIObjectByName("pauseOverlay").hidden = true;
|
|
|
|
setPaused(false);
|
|
|
|
}
|
|
|
|
|
2010-07-01 22:31:47 +02:00
|
|
|
function togglePause()
|
|
|
|
{
|
2011-09-06 20:15:27 +02:00
|
|
|
closeMenu();
|
|
|
|
closeOpenDialogs();
|
2011-08-31 04:41:21 +02:00
|
|
|
|
2010-11-27 20:46:12 +01:00
|
|
|
var pauseOverlay = getGUIObjectByName("pauseOverlay");
|
|
|
|
|
2010-08-13 18:05:06 +02:00
|
|
|
if (pauseOverlay.hidden)
|
2010-11-27 20:46:12 +01:00
|
|
|
{
|
2011-09-06 20:15:27 +02:00
|
|
|
getGUIObjectByName("pauseButtonText").caption = RESUME;
|
2010-07-01 22:31:47 +02:00
|
|
|
setPaused(true);
|
2011-09-06 20:15:27 +02:00
|
|
|
|
2010-11-27 20:46:12 +01:00
|
|
|
}
|
2010-07-01 22:31:47 +02:00
|
|
|
else
|
2010-11-27 20:46:12 +01:00
|
|
|
{
|
2010-07-01 22:31:47 +02:00
|
|
|
setPaused(false);
|
2011-09-06 20:15:27 +02:00
|
|
|
getGUIObjectByName("pauseButtonText").caption = PAUSE;
|
2010-11-27 20:46:12 +01:00
|
|
|
}
|
2010-07-01 22:31:47 +02:00
|
|
|
|
2010-08-13 18:05:06 +02:00
|
|
|
pauseOverlay.hidden = !pauseOverlay.hidden;
|
2010-07-01 22:31:47 +02:00
|
|
|
}
|
2010-10-04 00:42:15 +02:00
|
|
|
|
2011-08-28 00:44:08 +02:00
|
|
|
function toggleDeveloperOverlay()
|
2010-11-27 18:06:32 +01:00
|
|
|
{
|
2011-08-28 00:44:08 +02:00
|
|
|
var devCommands = getGUIObjectByName("devCommands");
|
|
|
|
var text = devCommands.hidden? "opened." : "closed.";
|
|
|
|
submitChatDirectly("The Developer Overlay was " + text);
|
|
|
|
devCommands.hidden = !devCommands.hidden;
|
2010-11-27 18:06:32 +01:00
|
|
|
}
|
|
|
|
|
2011-08-31 04:58:57 +02:00
|
|
|
function closeOpenDialogs()
|
2010-10-04 00:42:15 +02:00
|
|
|
{
|
2011-09-06 20:15:27 +02:00
|
|
|
closeMenu();
|
|
|
|
closeChat();
|
2012-10-23 18:31:07 +02:00
|
|
|
closeDiplomacy();
|
2011-09-06 20:15:27 +02:00
|
|
|
closeSettings(false);
|
2011-09-11 05:30:41 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Temporarily adding this here
|
|
|
|
//function playButtonSound()
|
|
|
|
//{
|
|
|
|
// const BUTTON_SOUND = "audio/interface/ui/ui_button_longclick.ogg";
|
|
|
|
// var buttonSound = new Sound(BUTTON_SOUND);
|
|
|
|
// buttonSound.play();
|
2012-08-05 20:07:56 +02:00
|
|
|
//}
|