Ticket #2749: t2749_ceasefire_cleanup.patch
File t2749_ceasefire_cleanup.patch, 6.6 KB (added by , 9 years ago) |
---|
-
binaries/data/mods/public/simulation/components/CeasefireManager.js
1 1 function CeasefireManager() {} 2 2 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>"; 3 CeasefireManager.prototype.Schema = "<a:component type='system'/><empty/>"; 18 4 19 5 CeasefireManager.prototype.Init = function() 20 6 { 21 7 // Weather or not ceasefire is active currently. 22 8 this.ceasefireIsActive = false; … … 83 69 // Save diplomacy and set everyone neutral 84 70 if (!this.ceasefireIsActive) 85 71 { 86 72 // Save diplomacy 87 73 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) 89 75 { 90 76 // Copy array with slice(), otherwise it will change 91 77 var cmpPlayer = Engine.QueryInterface(playerEntities[i], IID_Player); 92 78 this.diplomacyBeforeCeasefire.push(cmpPlayer.GetDiplomacy().slice()); 93 79 } 94 80 95 81 // 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) 97 83 { 98 84 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) 100 86 { 101 87 if (this.diplomacyBeforeCeasefire[i-1][j] < 0) 102 88 cmpPlayer.SetNeutral(j); 103 89 } 104 90 } … … 113 99 Engine.PostMessage(SYSTEM_ENTITY, MT_CeasefireStarted); 114 100 115 101 // Add timers for countdown message and reseting diplomacy 116 102 this.stopCeasefireTimer = cmpTimer.SetTimeout(SYSTEM_ENTITY, IID_CeasefireManager, "StopCeasefire", this.ceasefireTime); 117 103 this.ceasefireCountdownMessageTimer = cmpTimer.SetTimeout(SYSTEM_ENTITY, IID_CeasefireManager, "ShowCeasefireCountdownMessage", 118 this.ceasefireTime - this.countdownMessageDuration , this.countdownMessageDuration);104 this.ceasefireTime - this.countdownMessageDuration); 119 105 }; 120 106 121 CeasefireManager.prototype.ShowCeasefireCountdownMessage = function( duration)107 CeasefireManager.prototype.ShowCeasefireCountdownMessage = function() 122 108 { 123 109 var cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface); 124 110 this.ceasefireCountdownMessage = cmpGuiInterface.AddTimeNotification({ 125 111 "message": markForTranslation("You can attack in %(time)s"), 126 112 "translateMessage": true 127 }, duration);113 }, this.countdownMessageDuration); 128 114 }; 129 115 130 116 CeasefireManager.prototype.StopCeasefire = function() 131 117 { 132 118 var cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface); … … 142 128 }, this.postCountdownMessageDuration); 143 129 144 130 // Reset diplomacies to original settings 145 131 var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); 146 132 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) 148 134 { 149 135 var cmpPlayer = Engine.QueryInterface(playerEntities[i], IID_Player); 150 136 cmpPlayer.SetDiplomacy(this.diplomacyBeforeCeasefire[i-1]); 151 137 } 152 138 153 139 // 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) 155 141 { 156 142 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) 158 144 { 159 145 if (i != j && this.diplomacyBeforeCeasefire[i-1][j] == -1) 160 146 cmpGuiInterface.PushNotification({"type": "diplomacy", "players": [j], "player1": [i], "status": "enemy"}); 161 147 } 162 148 } -
binaries/data/mods/public/simulation/components/GuiInterface.js
694 694 { 695 695 var cmpTimer = Engine.QueryInterface(SYSTEM_ENTITY, IID_Timer); 696 696 notification.endTime = duration + cmpTimer.GetTime(); 697 697 notification.id = ++this.timeNotificationID; 698 698 699 // Let all players receive the notification by default699 // Let all players and observers receive the notification by default 700 700 if (notification.players == undefined) 701 701 { 702 702 var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); 703 703 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) 706 706 notification.players.push(i); 707 707 } 708 709 708 this.timeNotifications.push(notification); 710 709 this.timeNotifications.sort(function (n1, n2){return n2.endTime - n1.endTime}); 711 710 712 711 cmpTimer.SetTimeout(this.entity, IID_GuiInterface, "DeleteTimeNotification", duration, this.timeNotificationID); 713 712 -
binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
3 3 Engine.LoadComponentScript("interfaces/AlertRaiser.js"); 4 4 Engine.LoadComponentScript("interfaces/Auras.js"); 5 5 Engine.LoadComponentScript("interfaces/Barter.js"); 6 6 Engine.LoadComponentScript("interfaces/Builder.js"); 7 7 Engine.LoadComponentScript("interfaces/Capturable.js"); 8 Engine.LoadComponentScript("interfaces/CeasefireManager.js"); 8 9 Engine.LoadComponentScript("interfaces/DamageReceiver.js"); 9 10 Engine.LoadComponentScript("interfaces/EndGameManager.js"); 10 11 Engine.LoadComponentScript("interfaces/EntityLimits.js"); 11 12 Engine.LoadComponentScript("interfaces/Foundation.js"); 12 13 Engine.LoadComponentScript("interfaces/GarrisonHolder.js");