Ticket #2749: t2749_ceasefire_cleanup.patch

File t2749_ceasefire_cleanup.patch, 6.6 KB (added by elexis, 9 years ago)

(1) Shows ceasefire message for observers; (2) fixes GuiInterface test error caused by missing CeasefireManager; (3) cleans some code in CeasefireManager.

  • binaries/data/mods/public/simulation/components/CeasefireManager.js

     
    11function CeasefireManager() {}
    22
    3 CeasefireManager.prototype.Schema =
    4     "<a:help>Lists the sound groups associated with this unit.</a:help>" +
    5     "<a:example>" +
    6         "<SoundGroups>" +
    7             "<ceasefire>interface/alarm/alarm_alert_0.xml</ceasefire>" +
    8         "</SoundGroups>" +
    9     "</a:example>" +
    10     "<element name='SoundGroups'>" +
    11         "<zeroOrMore>" + /* TODO: make this more specific, like a list of specific elements */
    12             "<element>" +
    13                 "<anyName/>" +
    14                 "<text/>" +
    15             "</element>" +
    16         "</zeroOrMore>" +
    17     "</element>";
     3CeasefireManager.prototype.Schema = "<a:component type='system'/><empty/>";
    184
    195CeasefireManager.prototype.Init = function()
    206{
    217    // Weather or not ceasefire is active currently.
    228    this.ceasefireIsActive = false;
     
    8369    // Save diplomacy and set everyone neutral
    8470    if (!this.ceasefireIsActive)
    8571    {
    8672        // Save diplomacy
    8773        var playerEntities = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetAllPlayerEntities();
    88         for (var i = 1; i < playerEntities.length; i++)
     74        for (var i = 1; i < playerEntities.length; ++i)
    8975        {
    9076            // Copy array with slice(), otherwise it will change
    9177            var cmpPlayer = Engine.QueryInterface(playerEntities[i], IID_Player);
    9278            this.diplomacyBeforeCeasefire.push(cmpPlayer.GetDiplomacy().slice());
    9379        }
    9480
    9581        // Set every enemy (except gaia) to neutral
    96         for (var i = 1; i < playerEntities.length; i++)
     82        for (var i = 1; i < playerEntities.length; ++i)
    9783        {
    9884            var cmpPlayer = Engine.QueryInterface(playerEntities[i], IID_Player);
    99             for (var j = 1; j < playerEntities.length; j++)
     85            for (var j = 1; j < playerEntities.length; ++j)
    10086            {
    10187                if (this.diplomacyBeforeCeasefire[i-1][j] < 0)
    10288                    cmpPlayer.SetNeutral(j);
    10389            }
    10490        }
     
    11399    Engine.PostMessage(SYSTEM_ENTITY, MT_CeasefireStarted);
    114100
    115101    // Add timers for countdown message and reseting diplomacy
    116102    this.stopCeasefireTimer = cmpTimer.SetTimeout(SYSTEM_ENTITY, IID_CeasefireManager, "StopCeasefire", this.ceasefireTime);
    117103    this.ceasefireCountdownMessageTimer = cmpTimer.SetTimeout(SYSTEM_ENTITY, IID_CeasefireManager, "ShowCeasefireCountdownMessage",
    118             this.ceasefireTime - this.countdownMessageDuration, this.countdownMessageDuration);
     104            this.ceasefireTime - this.countdownMessageDuration);
    119105};
    120106
    121 CeasefireManager.prototype.ShowCeasefireCountdownMessage = function(duration)
     107CeasefireManager.prototype.ShowCeasefireCountdownMessage = function()
    122108{
    123109    var cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
    124110    this.ceasefireCountdownMessage = cmpGuiInterface.AddTimeNotification({
    125111        "message": markForTranslation("You can attack in %(time)s"),
    126112        "translateMessage": true
    127     }, duration);
     113    }, this.countdownMessageDuration);
    128114};
    129115
    130116CeasefireManager.prototype.StopCeasefire = function()
    131117{
    132118    var cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
     
    142128    }, this.postCountdownMessageDuration);
    143129   
    144130    // Reset diplomacies to original settings
    145131    var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
    146132    var playerEntities = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetAllPlayerEntities();
    147     for (var i = 1; i < playerEntities.length; i++)
     133    for (var i = 1; i < playerEntities.length; ++i)
    148134    {
    149135        var cmpPlayer = Engine.QueryInterface(playerEntities[i], IID_Player);
    150136        cmpPlayer.SetDiplomacy(this.diplomacyBeforeCeasefire[i-1]);
    151137    }       
    152138
    153139    // Send chat notifications and update the diplomacy screen
    154     for (var i = 1; i < playerEntities.length; i++)
     140    for (var i = 1; i < playerEntities.length; ++i)
    155141    {
    156142        var cmpPlayer = Engine.QueryInterface(playerEntities[i], IID_Player);
    157         for (var j = 1; j < playerEntities.length; j++)
     143        for (var j = 1; j < playerEntities.length; ++j)
    158144        {
    159145            if (i != j && this.diplomacyBeforeCeasefire[i-1][j] == -1)
    160146                cmpGuiInterface.PushNotification({"type": "diplomacy", "players": [j], "player1": [i], "status": "enemy"});
    161147        }
    162148    }   
  • binaries/data/mods/public/simulation/components/GuiInterface.js

     
    694694{
    695695    var cmpTimer = Engine.QueryInterface(SYSTEM_ENTITY, IID_Timer);
    696696    notification.endTime = duration + cmpTimer.GetTime();
    697697    notification.id = ++this.timeNotificationID;
    698698
    699     // Let all players receive the notification by default
     699    // Let all players and observers receive the notification by default
    700700    if (notification.players == undefined)
    701701    {
    702702        var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
    703703        var numPlayers = cmpPlayerManager.GetNumPlayers();
    704         notification.players = [];
    705         for (var i = 1; i < numPlayers; i++)
     704        notification.players = [-1];
     705        for (var i = 1; i < numPlayers; ++i)
    706706            notification.players.push(i);
    707707    }
    708    
    709708    this.timeNotifications.push(notification);
    710709    this.timeNotifications.sort(function (n1, n2){return n2.endTime - n1.endTime});
    711710
    712711    cmpTimer.SetTimeout(this.entity, IID_GuiInterface, "DeleteTimeNotification", duration, this.timeNotificationID);
    713712
  • binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js

     
    33Engine.LoadComponentScript("interfaces/AlertRaiser.js");
    44Engine.LoadComponentScript("interfaces/Auras.js");
    55Engine.LoadComponentScript("interfaces/Barter.js");
    66Engine.LoadComponentScript("interfaces/Builder.js");
    77Engine.LoadComponentScript("interfaces/Capturable.js");
     8Engine.LoadComponentScript("interfaces/CeasefireManager.js");
    89Engine.LoadComponentScript("interfaces/DamageReceiver.js");
    910Engine.LoadComponentScript("interfaces/EndGameManager.js");
    1011Engine.LoadComponentScript("interfaces/EntityLimits.js");
    1112Engine.LoadComponentScript("interfaces/Foundation.js");
    1213Engine.LoadComponentScript("interfaces/GarrisonHolder.js");