1
0
forked from mirrors/0ad

Session cleanup.

Move formating of resource-amounts to new function
translateResourceAmounts.
Rename player/player1 to sourcePlayer/targetPlayer.
Inline colorizedPlayername.

This was SVN commit r17556.
This commit is contained in:
elexis
2015-12-26 01:40:50 +00:00
parent 5d56ee0449
commit 0d41806e99
3 changed files with 46 additions and 42 deletions
@@ -71,3 +71,28 @@ function getLocalizedResourceName(resourceCode, context)
}
return localisedResourceNames[context][resourceCode];
}
/**
* Format resource amounts to proper english and translate (for example: "200 food, 100 wood, and 300 metal").
*/
function getLocalizedResourceAmounts(resources)
{
let amounts = Object.keys(resources)
.filter(type => resources[type] > 0)
.map(type => sprintf(translate("%(amount)s %(resourceType)s"), {
"amount": resources[type],
"resourceType": getLocalizedResourceName(type, "withinSentence")
}));
if (amounts.length > 1)
{
let lastAmount = amounts.pop();
amounts = sprintf(translate("%(previousAmounts)s and %(lastAmount)s"), {
// Translation: This comma is used for separating first to penultimate elements in an enumeration.
"previousAmounts": amounts.join(translate(", ")),
"lastAmount": lastAmount
});
}
return amounts;
}
@@ -175,8 +175,8 @@ var g_NotificationsTypes =
{
addChatMessage({
"type": "diplomacy",
"player": player,
"player1": notification.player1,
"sourcePlayer": player,
"targetPlayer": notification.targetPlayer,
"status": notification.status
});
@@ -190,8 +190,8 @@ var g_NotificationsTypes =
{
addChatMessage({
"type": "tribute",
"player": player,
"player1": notification.donator,
"sourcePlayer": notification.donator,
"targetPlayer": player,
"amounts": notification.amounts
});
},
@@ -513,14 +513,12 @@ function formatChatMessage(msg)
// No context by default. May be set by parseChatCommands().
msg.context = "";
let colorizedPlayername = { "player": colorizePlayernameByGUID(msg.guid || -1) };
switch (msg.type)
{
case "system": return msg.text;
case "connect": return sprintf(translate("%(player)s is starting to rejoin the game."), colorizedPlayername);
case "disconnect": return sprintf(translate("%(player)s has left the game."), colorizedPlayername);
case "rejoined": return sprintf(translate("%(player)s has rejoined the game."), colorizedPlayername);
case "connect": return sprintf(translate("%(player)s is starting to rejoin the game."), { "player": colorizePlayernameByGUID(msg.guid) });
case "disconnect": return sprintf(translate("%(player)s has left the game."), { "player": colorizePlayernameByGUID(msg.guid) });
case "rejoined": return sprintf(translate("%(player)s has rejoined the game."), { "player": colorizePlayernameByGUID(msg.guid) });
case "clientlist": return getUsernameList();
case "defeat": return formatDefeatMessage(msg);
case "diplomacy": return formatDiplomacyMessage(msg);
@@ -560,14 +558,11 @@ function formatDefeatMessage(msg)
function formatDiplomacyMessage(msg)
{
let sourcePlayerID = msg.player;
let targetPlayerID = msg.player1;
// Check observer first
let use = {
"observer": g_IsObserver,
"active": Engine.GetPlayerID() == sourcePlayerID,
"passive": Engine.GetPlayerID() == targetPlayerID
"active": Engine.GetPlayerID() == msg.sourcePlayer,
"passive": Engine.GetPlayerID() == msg.targetPlayer
};
let messageType = Object.keys(use).find(v => use[v]);
@@ -575,43 +570,22 @@ function formatDiplomacyMessage(msg)
return "";
return sprintf(g_DiplomacyMessages[messageType][msg.status], {
"player": colorizePlayernameByID(messageType == "active" ? targetPlayerID : sourcePlayerID),
"player2": colorizePlayernameByID(messageType == "active" ? sourcePlayerID : targetPlayerID)
"player": colorizePlayernameByID(messageType == "active" ? msg.targetPlayer : msg.sourcePlayer),
"player2": colorizePlayernameByID(messageType == "active" ? msg.sourcePlayer : msg.targetPlayer)
});
}
function formatTributeMessage(msg)
{
let sourcePlayerID = msg.player1;
let targetPlayerID = msg.player;
// As observer we also want to see if the selected player in the developer-overlay has sent tributes
let messageType = g_IsObserver ? "observer" : (targetPlayerID == Engine.GetPlayerID() ? "passive" : "");
let messageType = g_IsObserver ? "observer" : (msg.targetPlayer == Engine.GetPlayerID() ? "passive" : "");
if (!g_TributeMessages[messageType])
return "";
// Format the amounts to proper English: 200 food, 100 wood, and 300 metal; 100 food; 400 wood and 200 stone
let amounts = Object.keys(msg.amounts)
.filter(type => msg.amounts[type] > 0)
.map(type => sprintf(translate("%(amount)s %(resourceType)s"), {
"amount": msg.amounts[type],
"resourceType": getLocalizedResourceName(type, "withinSentence")
}));
if (amounts.length > 1)
{
let lastAmount = amounts.pop();
amounts = sprintf(translate("%(previousAmounts)s and %(lastAmount)s"), {
// Translation: This comma is used for separating first to penultimate elements in an enumeration.
"previousAmounts": amounts.join(translate(", ")),
"lastAmount": lastAmount
});
}
return sprintf(g_TributeMessages[messageType], {
"player": colorizePlayernameByID(sourcePlayerID),
"player2": colorizePlayernameByID(targetPlayerID),
"amounts": amounts
"player": colorizePlayernameByID(msg.sourcePlayer),
"player2": colorizePlayernameByID(msg.targetPlayer),
"amounts": getLocalizedResourceAmounts(msg.amounts)
});
}
@@ -90,7 +90,12 @@ var g_Commands = {
warn("Invalid command: Could not set "+player+" diplomacy status of player "+cmd.player+" to "+cmd.to);
}
var cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
cmpGuiInterface.PushNotification({"type": "diplomacy", "players": [player], "player1": cmd.player, "status": cmd.to});
cmpGuiInterface.PushNotification({
"type": "diplomacy",
"players": [player],
"targetPlayer": cmd.player,
"status": cmd.to
});
},
"tribute": function(player, cmd, data)