Ticket #2640: 2640_4.patch

File 2640_4.patch, 15.5 KB (added by Matt Doerksen, 9 years ago)

New file (functions_chat.js) for chat stuff. Currently only constants.

  • binaries/data/mods/public/gui/common/functions_chat.js

     
     1const INVALID_MESSAGE = "Invalid chat message ";
     2
     3// GAMESETUP CONSTANTS
     4const CONNECT_TEXT = " has joined";
     5const DISCONNECT_TEXT = " has left";
     6const USER_READY_TEXT = " is ready!";
     7const USER_NOT_READY_TEXT = " is not ready.";
     8const SETTINGS_CHANGED_TEXT = "Game settings have been changed";
     9
     10// IN-GAME CONSTANTS
     11const CONNECT_TEXT_INGAME = " has joined the game.";
     12const DISCONNECT_TEXT_INGAME = " has left the game.";
     13
     14const DEFEATED_TEXT_PLAYER_1 = "You have been defeated."
     15const DEFEATED_TEXT_PLAYER_X = " has been defeated."
     16
     17const DIPLOMACY_ALLY_TEXT = "You are now allied with ";
     18const DIPLOMACY_ENEMY_TEXT = "You are now at war with ";
     19const DIPLOMACY_NEUTRAL_TEXT = "You are now neutral with ";
     20const DIPLOMACY_ALLY_TEXT_2 = " is now allied with you.";
     21const DIPLOMACY_ENEMY_TEXT_2 = " is now at war with you.";
     22const DIPLOMACY_NEUTRAL_TEXT_2 = " is now neutral with you.";
     23
     24const TRIBUTE_TEXT = " has sent you ";
     25const ATTACK_TEXT = "You have been attacked by ";
     26
     27
     28// GAMESETUP MESSAGE TYPES and IN-GAME MESSAGE TYPES
     29const CONNECT_STR = "connect";
     30const DISCONNECT_STR = "disconnect";
     31const MESSAGE_STR = "message";
     32
     33// GAMESETUP MESSAGE TYPES
     34const READY_STR = "ready";
     35const SETTINGS_STR = "settings";
     36
     37
     38// IN-GAME MESSAGE TYPES
     39const DEFEAT_STR = "defeat";
     40const DIPLOMACY_STR = "diplomacy";
     41const TRIBUTE_STR = "tribute";
     42const ATTACK_STR = "attack";
     43
     44
     45
     46// other miscellaneous constants
     47const ALLY_STR = "ally";
     48const ENEMY_STR = "enemy";
     49const NEUTRAL_STR = "neutral";
     50 No newline at end of file
  • binaries/data/mods/public/gui/common/functions_utility.js

     
    284284    input.caption = newText + text.substring(bufferPosition);
    285285    input.buffer_position = bufferPosition + (newText.length - textTillBufferPosition.length);
    286286}
     287
     288function colorText(text, color)
     289{
     290    return '[color="'+ color +'"]' + text + '[/color]';
     291}
     292
     293function boldText(text)
     294{
     295    return '[font="sans-bold-13"] ' + text + '[/font]';
     296}
     297
     298function prependText(text, textToPrepend)
     299{
     300    return textToPrepend + text;
     301}
     302
     303function postpendText(text, textToPostpend)
     304{
     305    return text + textToPostpend;
     306}
  • binaries/data/mods/public/gui/gamesetup/gamesetup.js

     
    16601660
    16611661        color = rgbToGuiColor(getSetting(pData, pDefs, "Color"));
    16621662    }
     1663   
     1664    username = colorText(username, color);
    16631665
    16641666    var formatted;
    16651667    switch (msg.type)
    16661668    {
    1667     case "connect":
    1668         var formattedUsername = '[color="'+ color +'"]' + username + '[/color]';
    1669         formatted = '[font="sans-bold-13"] ' + sprintf(translate("== %(message)s"), { message: sprintf(translate("%(username)s has joined"), { username: formattedUsername }) }) + '[/font]';
     1669    case CONNECT_STR:
     1670        formatted = boldText(sprintf(translate("== %(message)s"), { message: sprintf(translate("%(username)s" + CONNECT_TEXT), {username : username})}));
    16701671        break;
    16711672
    1672     case "disconnect":
    1673         var formattedUsername = '[color="'+ color +'"]' + username + '[/color]';
    1674         formatted = '[font="sans-bold-13"] ' + sprintf(translate("== %(message)s"), { message: sprintf(translate("%(username)s has left"), { username: formattedUsername }) }) + '[/font]';
     1673    case DISCONNECT_STR:
     1674        formatted = boldText(sprintf(translate("== %(message)s"), { message: sprintf(translate("%(username)s" + DISCONNECT_TEXT), {username : username})}));
    16751675        break;
    16761676
    1677     case "message":
    1678         var formattedUsername = '[color="'+ color +'"]' + username + '[/color]';
    1679         var formattedUsernamePrefix = '[font="sans-bold-13"]' + sprintf(translate("<%(username)s>"), { username: formattedUsername }) + '[/font]'
     1677    case MESSAGE_STR:
     1678        var formattedUsernamePrefix = boldText(sprintf(translate("<%(username)s>"), {username : username}));
    16801679        formatted = sprintf(translate("%(username)s %(message)s"), { username: formattedUsernamePrefix, message: message });
    16811680        break;
    16821681
    1683     case "ready":
    1684         var formattedUsername = '[font="sans-bold-13"][color="'+ color +'"]' + username + '[/color][/font]'
     1682    case READY_STR:
    16851683        if (msg.ready)
    1686             formatted = ' ' + sprintf(translate("* %(username)s is ready!"), { username: formattedUsername });
     1684            formatted = ' ' + sprintf(translate("* %(username)s is ready!"), {username: boldText(username)});
    16871685        else
    1688             formatted = ' ' + sprintf(translate("* %(username)s is not ready."), { username: formattedUsername });
     1686            formatted = ' ' + sprintf(translate("* %(username)s is not ready."), {username: boldText(username)});
    16891687        break;
    16901688
    1691     case "settings":
    1692         formatted = '[font="sans-bold-13"] ' + sprintf(translate("== %(message)s"), { message: translate('Game settings have been changed') }) + '[/font]';
     1689    case SETTINGS_STR:
     1690        formatted = boldText(sprintf(translate("== %(message)s"), { message: translate(SETTINGS_CHANGED_TEXT) }));
    16931691        break;
    16941692
    16951693    default:
    1696         error(sprintf("Invalid chat message '%(message)s'", { message: uneval(msg) }));
     1694        error(sprintf(INVALID_MESSAGE + "'%(message)s'", { message: uneval(msg) }));
    16971695        return;
    16981696    }
    16991697
  • binaries/data/mods/public/gui/gamesetup/gamesetup.xml

     
    33<objects>
    44
    55    <script file="gui/common/network.js"/>
     6    <script file="gui/common/functions_chat.js"/>
    67    <script file="gui/common/functions_civinfo.js"/>
    78    <script file="gui/common/functions_global_object.js"/>
    89    <script file="gui/common/functions_utility.js"/>
  • binaries/data/mods/public/gui/session/messages.js

     
    388388
    389389function addChatMessage(msg, playerAssignments)
    390390{
     391    // take care of exit cases early so it cleans up the logic below
     392    if ((msg.type == "tribute" || msg.type == "attack") && msg.player != Engine.GetPlayerID())
     393        return;
     394    // May have been hidden by the 'team' command.
     395    if (msg.type == "message" && msg.hide)
     396        return;
     397    // Don't need to alert diplomacy if we're not involved
     398    if (msg.type == "diplomacy" && (msg.player != Engine.GetPlayerID() && msg.player1 != Engine.GetPlayerID()))
     399        return;
     400
    391401    // Default to global assignments, but allow overriding for when reporting
    392402    // new players joining
    393403    if (!playerAssignments)
     
    408418        username = escapeText(playerAssignments[msg.guid].name);
    409419
    410420        // Parse in-line commands in regular messages.
    411         if (msg.type == "message")
     421        if (msg.type == MESSAGE_STR)
    412422            parseChatCommands(msg, playerAssignments);
    413423    }
    414     else if (msg.type == "defeat" && msg.player)
     424    else if (msg.type == DEFEAT_STR && msg.player)
    415425    {
    416426        [username, playerColor] = getUsernameAndColor(msg.player);
    417427    }
    418     else if (msg.type == "message")
     428    else if (msg.type == MESSAGE_STR)
    419429    {
    420430        [username, playerColor] = getUsernameAndColor(msg.player);
    421431        parseChatCommands(msg, playerAssignments);
     
    427437    }
    428438
    429439    var formatted;
    430 
     440    var formattedUserName = colorText(username, playerColor);
     441   
    431442    switch (msg.type)
    432443    {
    433     case "connect":
    434         formatted = sprintf(translate("%(player)s has joined the game."), { player: "[color=\"" + playerColor + "\"]" + username + "[/color]" });
     444    case CONNECT_STR:
     445        formatted = sprintf(translate("%(player)s" + CONNECT_TEXT_INGAME), {player : formattedUserName});
    435446        break;
    436     case "disconnect":
    437         formatted = sprintf(translate("%(player)s has left the game."), { player: "[color=\"" + playerColor + "\"]" + username + "[/color]" });
     447    case DISCONNECT_STR:
     448        formatted = sprintf(translate("%(player)s" + DISCONNECT_TEXT_INGAME), {player : formattedUserName});
    438449        break;
    439     case "defeat":
     450    case DEFEAT_STR:
    440451        // In singleplayer, the local player is "You". "You has" is incorrect.
    441452        if (!g_IsNetworked && msg.player == Engine.GetPlayerID())
    442             formatted = translate("You have been defeated.");
     453            formatted = translate(DEFEATED_TEXT_PLAYER_1);
    443454        else
    444             formatted = sprintf(translate("%(player)s has been defeated."), { player: "[color=\"" + playerColor + "\"]" + username + "[/color]" });
     455            formatted = sprintf(translate("%(player)s" + DEFEATED_TEXT_PLAYER_X), {player : formattedUserName});
    445456        break;
    446     case "diplomacy":
    447         var status = (msg.status == "ally" ? "allied" : (msg.status == "enemy" ? "at war" : "neutral"));
     457    case DIPLOMACY_STR:
    448458        if (msg.player == Engine.GetPlayerID())
    449459        {
    450460            [username, playerColor] = getUsernameAndColor(msg.player1);
    451             if (msg.status == "ally")
    452                 formatted = sprintf(translate("You are now allied with %(player)s."), { player: "[color=\"" + playerColor + "\"]" + username + "[/color]" });
    453             else if (msg.status == "enemy")
    454                 formatted = sprintf(translate("You are now at war with %(player)s."), { player: "[color=\"" + playerColor + "\"]" + username + "[/color]" });
    455             else // (msg.status == "neutral")
    456                 formatted = sprintf(translate("You are now neutral with %(player)s."), { player: "[color=\"" + playerColor + "\"]" + username + "[/color]" });
     461            if (msg.status == ALLY_STR)
     462                formatted = sprintf(translate(DIPLOMACY_ALLY_TEXT + "%(player)s."), {player : formattedUserName});
     463            else if (msg.status == ENEMY_STR)
     464                formatted = sprintf(translate(DIPLOMACY_ENEMY_TEXT + "%(player)s."), {player : formattedUserName});
     465            else
     466                formatted = sprintf(translate(DIPLOMACY_NEUTRAL_TEXT + "%(player)s."), {player : formattedUserName});
    457467        }
    458468        else if (msg.player1 == Engine.GetPlayerID())
    459469        {
    460470            [username, playerColor] = getUsernameAndColor(msg.player);
    461             if (msg.status == "ally")
    462                 formatted = sprintf(translate("%(player)s is now allied with you."), { player: "[color=\"" + playerColor + "\"]" + username + "[/color]" });
    463             else if (msg.status == "enemy")
    464                 formatted = sprintf(translate("%(player)s is now at war with you."), { player: "[color=\"" + playerColor + "\"]" + username + "[/color]" });
    465             else // (msg.status == "neutral")
    466                 formatted = sprintf(translate("%(player)s is now neutral with you."), { player: "[color=\"" + playerColor + "\"]" + username + "[/color]" });
     471            if (msg.status == ALLY_STR)
     472                formatted = sprintf(translate("%(player)s" + DIPLOMACY_ALLY_TEXT_2), {player : formattedUserName});
     473            else if (msg.status == ENEMY_STR)
     474                formatted = sprintf(translate("%(player)s" + DIPLOMACY_ENEMY_TEXT_2), {player : formattedUserName});
     475            else
     476                formatted = sprintf(translate("%(player)s" + DIPLOMACY_NEUTRAL_TEXT_2), {player : formattedUserName});
    467477        }
    468         else // No need for other players to know of this.
    469             return;
    470         break;
    471     case "tribute":
    472         if (msg.player != Engine.GetPlayerID())
    473             return;
    474 
     478    case TRIBUTE_STR:
    475479        [username, playerColor] = getUsernameAndColor(msg.player1);
    476480
    477         // Format the amounts to proper English: 200 food, 100 wood, and 300 metal; 100 food; 400 wood and 200 stone
    478         let amounts = Object.keys(msg.amounts)
    479             .filter(function (type) { return msg.amounts[type] > 0; })
    480             .map(function (type) { return sprintf(translate("%(amount)s %(resourceType)s"), {
    481                 "amount": msg.amounts[type],
    482                 "resourceType": getLocalizedResourceName(type, "withinSentence")});
    483             });
     481        let amounts = getTributeAmounts(msg);
    484482
    485         if (amounts.length > 1)
    486         {
    487             let lastAmount = amounts.pop();
    488             amounts = sprintf(translate("%(previousAmounts)s and %(lastAmount)s"), {
    489                 previousAmounts: amounts.join(translate(", ")),
    490                 lastAmount: lastAmount
    491             });
    492         }
    493 
    494         formatted = sprintf(translate("%(player)s has sent you %(amounts)s."), {
    495             player: "[color=\"" + playerColor + "\"]" + username + "[/color]",
     483        formatted = sprintf(translate("%(player)s" + TRIBUTE_TEXT + "%(amounts)s."), {
     484            player: formattedUserName,
    496485            amounts: amounts
    497486        });
    498487        break;
    499     case "attack":
    500         if (msg.player != Engine.GetPlayerID())
    501             return;
    502 
     488    case ATTACK_STR:
    503489        [username, playerColor] = getUsernameAndColor(msg.attacker);
    504         formatted = sprintf(translate("You have been attacked by %(attacker)s!"), { attacker: "[color=\"" + playerColor + "\"]" + username + "[/color]" });
     490        formatted = sprintf(translate(ATTACK_TEXT + "%(attacker)s!"), {attacker : colorText(username, playerColor)});
    505491        break;
    506     case "message":
    507         // May have been hidden by the 'team' command.
    508         if (msg.hide)
    509             return;
    510 
     492    case MESSAGE_STR:
    511493        var message;
    512494        if ("translate" in msg && msg.translate)
    513495        {
     
    528510            {
    529511                formatted = sprintf(translate("(%(context)s) * %(user)s %(message)s"), {
    530512                    context: msg.context,
    531                     user: "[color=\"" + playerColor + "\"]" + username + "[/color]",
     513                    user: formattedUserName,
    532514                    message: message
    533515                });
    534516            }
     
    535517            else
    536518            {
    537519                formatted = sprintf(translate("* %(user)s %(message)s"), {
    538                     user: "[color=\"" + playerColor + "\"]" + username + "[/color]",
     520                    user: formattedUserName,
    539521                    message: message
    540522                });
    541523            }
     
    542524        }
    543525        else
    544526        {
    545             var userTag = sprintf(translate("<%(user)s>"), { user: username })
    546             var formattedUserTag = sprintf(translate("<%(user)s>"), { user: "[color=\"" + playerColor + "\"]" + username + "[/color]" })
     527            var userTag = sprintf(translate("<%(user)s>"), {user : username})
     528            var formattedUserTag = sprintf(translate("<%(user)s>"), {user : formattedUserName})
    547529            if (msg.context !== "")
    548530            {
    549531                formatted = sprintf(translate("(%(context)s) %(userTag)s %(message)s"), {
     
    559541        }
    560542        break;
    561543    default:
    562         error(sprintf("Invalid chat message '%(message)s'", { message: uneval(msg) }));
     544        error(sprintf(INVALID_MESSAGE + "'%(message)s'", { message: uneval(msg) }));
    563545        return;
    564546    }
    565547
     
    572554        Engine.GetGUIObjectByName("chatText").caption = chatMessages.join("\n");
    573555}
    574556
     557function getTributeAmounts(msg) {       
     558    // Format the amounts to proper English: 200 food, 100 wood, and 300 metal; 100 food; 400 wood and 200 stone
     559    let amounts = Object.keys(msg.amounts)
     560        .filter(function (type) { return msg.amounts[type] > 0; })
     561        .map(function (type) { return sprintf(translate("%(amount)s %(resourceType)s"), {
     562            amount: msg.amounts[type],
     563            resourceType: getLocalizedResourceName(type, "withinSentence")});
     564        });
     565
     566    if (amounts.length > 1)
     567    {
     568        let lastAmount = amounts.pop();
     569        amounts = sprintf(translate("%(previousAmounts)s and %(lastAmount)s"), {
     570            previousAmounts: amounts.join(translate(", ")),
     571            lastAmount: lastAmount
     572        });
     573    }
     574    return amounts;
     575}
     576
    575577function removeOldChatMessages()
    576578{
    577579    clearTimeout(chatTimers[0]); // The timer only needs to be cleared when new messages bump old messages off
  • binaries/data/mods/public/gui/session/session.xml

     
    33<objects>
    44
    55<script file="gui/common/colorFades.js"/>
     6<script file="gui/common/functions_chat.js"/>
    67<script file="gui/common/functions_civinfo.js"/>
    78<script file="gui/common/functions_global_object.js"/>
    89<script file="gui/common/functions_utility.js"/>