Ticket #2749: t2749_ceasefire_cleanup_v2.patch
File t2749_ceasefire_cleanup_v2.patch, 7.1 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++) 89 { 74 for (var i = 1; i < playerEntities.length; ++i) 90 75 // Copy array with slice(), otherwise it will change 91 var cmpPlayer = Engine.QueryInterface(playerEntities[i], IID_Player); 92 this.diplomacyBeforeCeasefire.push(cmpPlayer.GetDiplomacy().slice()); 93 } 76 this.diplomacyBeforeCeasefire.push(Engine.QueryInterface(playerEntities[i], IID_Player).GetDiplomacy().slice()); 94 77 95 78 // Set every enemy (except gaia) to neutral 96 for (var i = 1; i < playerEntities.length; i++) 97 { 98 var cmpPlayer = Engine.QueryInterface(playerEntities[i], IID_Player); 99 for (var j = 1; j < playerEntities.length; j++) 100 { 79 for (var i = 1; i < playerEntities.length; ++i) 80 for (var j = 1; j < playerEntities.length; ++j) 101 81 if (this.diplomacyBeforeCeasefire[i-1][j] < 0) 102 cmpPlayer.SetNeutral(j); 103 } 104 } 82 Engine.QueryInterface(playerEntities[i], IID_Player).SetNeutral(j); 105 83 } 106 84 107 85 // Save other data 108 86 this.ceasefireIsActive = true; 109 87 this.ceasefireTime = ceasefireTime; … … 113 91 Engine.PostMessage(SYSTEM_ENTITY, MT_CeasefireStarted); 114 92 115 93 // Add timers for countdown message and reseting diplomacy 116 94 this.stopCeasefireTimer = cmpTimer.SetTimeout(SYSTEM_ENTITY, IID_CeasefireManager, "StopCeasefire", this.ceasefireTime); 117 95 this.ceasefireCountdownMessageTimer = cmpTimer.SetTimeout(SYSTEM_ENTITY, IID_CeasefireManager, "ShowCeasefireCountdownMessage", 118 this.ceasefireTime - this.countdownMessageDuration , this.countdownMessageDuration);96 this.ceasefireTime - this.countdownMessageDuration); 119 97 }; 120 98 121 CeasefireManager.prototype.ShowCeasefireCountdownMessage = function( duration)99 CeasefireManager.prototype.ShowCeasefireCountdownMessage = function() 122 100 { 123 101 var cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface); 124 102 this.ceasefireCountdownMessage = cmpGuiInterface.AddTimeNotification({ 125 103 "message": markForTranslation("You can attack in %(time)s"), 126 104 "translateMessage": true 127 }, duration);105 }, this.countdownMessageDuration); 128 106 }; 129 107 130 108 CeasefireManager.prototype.StopCeasefire = function() 131 109 { 132 110 var cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface); … … 140 118 "message": markForTranslation("You can attack now!"), 141 119 "translateMessage": true 142 120 }, this.postCountdownMessageDuration); 143 121 144 122 // Reset diplomacies to original settings 145 var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);146 123 var playerEntities = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetAllPlayerEntities(); 147 for (var i = 1; i < playerEntities.length; i++) 148 { 149 var cmpPlayer = Engine.QueryInterface(playerEntities[i], IID_Player); 150 cmpPlayer.SetDiplomacy(this.diplomacyBeforeCeasefire[i-1]); 151 } 124 for (var i = 1; i < playerEntities.length; ++i) 125 Engine.QueryInterface(playerEntities[i], IID_Player).SetDiplomacy(this.diplomacyBeforeCeasefire[i-1]); 152 126 153 127 // Send chat notifications and update the diplomacy screen 154 for (var i = 1; i < playerEntities.length; i++) 155 { 156 var cmpPlayer = Engine.QueryInterface(playerEntities[i], IID_Player); 157 for (var j = 1; j < playerEntities.length; j++) 158 { 128 for (var i = 1; i < playerEntities.length; ++i) 129 for (var j = 1; j < playerEntities.length; ++j) 159 130 if (i != j && this.diplomacyBeforeCeasefire[i-1][j] == -1) 160 131 cmpGuiInterface.PushNotification({"type": "diplomacy", "players": [j], "player1": [i], "status": "enemy"}); 161 }162 }163 132 164 133 // Reset values 165 134 this.ceasefireIsActive = false; 166 135 this.ceasefireTime = 0; 167 136 this.ceasefireStartedTime = 0; -
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");