Ticket #2749: t2749_ceasefire_v2.patch
File t2749_ceasefire_v2.patch, 34.0 KB (added by , 9 years ago) |
---|
-
binaries/data/mods/public/gui/gamesetup/gamesetup.js
12 12 const POPULATION_CAP_DEFAULTIDX = 5; 13 13 // Translation: Amount of starting resources. 14 14 const STARTING_RESOURCES = [translateWithContext("startingResources", "Very Low"), translateWithContext("startingResources", "Low"), translateWithContext("startingResources", "Medium"), translateWithContext("startingResources", "High"), translateWithContext("startingResources", "Very High"), translateWithContext("startingResources", "Deathmatch")]; 15 15 const STARTING_RESOURCES_DATA = [100, 300, 500, 1000, 3000, 50000]; 16 16 const STARTING_RESOURCES_DEFAULTIDX = 1; 17 // Translation: Ceasefire. 18 const CEASEFIRE = [translateWithContext("ceasefire", "No ceasefire"), translateWithContext("ceasefire", "15 seconds"), translateWithContext("ceasefire", "5 minutes"), translateWithContext("ceasefire", "10 minutes"), translateWithContext("ceasefire", "15 minutes"), translateWithContext("ceasefire", "20 minutes"), translateWithContext("ceasefire", "30 minutes"), translateWithContext("ceasefire", "45 minutes"), translateWithContext("ceasefire", "60 minutes")]; 19 const CEASEFIRE_DATA = [0, 0.25, 5, 10, 15, 20, 30, 45, 60]; 20 const CEASEFIRE_DEFAULTIDX = 0; 17 21 // Max number of players for any map 18 22 const MAX_PLAYERS = 8; 19 23 20 24 //////////////////////////////////////////////////////////////////////////////////////////////// 21 25 … … 203 207 g_GameAttributes.settings.StartingResources = STARTING_RESOURCES_DATA[this.selected]; 204 208 205 209 updateGameAttributes(); 206 210 } 207 211 212 var ceasefireL = Engine.GetGUIObjectByName("ceasefire"); 213 ceasefireL.list = CEASEFIRE; 214 ceasefireL.list_data = CEASEFIRE_DATA; 215 ceasefireL.selected = CEASEFIRE_DEFAULTIDX; 216 ceasefireL.onSelectionChange = function() { 217 if (this.selected != -1) 218 g_GameAttributes.settings.Ceasefire = CEASEFIRE_DATA[this.selected]; 219 220 updateGameAttributes(); 221 } 222 208 223 var victoryConditions = Engine.GetGUIObjectByName("victoryCondition"); 209 224 var victories = getVictoryConditions(); 210 225 victoryConditions.list = victories.text; 211 226 victoryConditions.list_data = victories.data; 212 227 victoryConditions.onSelectionChange = function() { … … 738 753 { 739 754 var startingResourcesBox = Engine.GetGUIObjectByName("startingResources"); 740 755 startingResourcesBox.selected = startingResourcesBox.list_data.indexOf(mapSettings.StartingResources); 741 756 } 742 757 758 if (mapSettings.Ceasefire) 759 { 760 var ceasefireBox = Engine.GetGUIObjectByName("ceasefire"); 761 ceasefireBox.selected = ceasefireBox.list_data.indexOf(mapSettings.Ceasefire); 762 } 763 743 764 if (attrs.gameSpeed) 744 765 { 745 766 var gameSpeedBox = Engine.GetGUIObjectByName("gameSpeed"); 746 767 gameSpeedBox.selected = g_GameSpeeds.speeds.indexOf(attrs.gameSpeed); 747 768 } … … 1028 1049 } 1029 1050 if (!g_GameAttributes.settings.TriggerScripts) 1030 1051 g_GameAttributes.settings.TriggerScripts = g_GameAttributes.settings.VictoryScripts; 1031 1052 else 1032 1053 g_GameAttributes.settings.TriggerScripts = g_GameAttributes.settings.VictoryScripts.concat(g_GameAttributes.settings.TriggerScripts); 1054 1033 1055 g_GameStarted = true; 1034 1056 g_GameAttributes.settings.mapType = g_GameAttributes.mapType; 1035 1057 var numPlayers = g_GameAttributes.settings.PlayerData.length; 1036 1058 // Assign random civilizations to players with that choice 1037 1059 // (this is synchronized because we're the host) … … 1141 1163 { 1142 1164 var startingResourcesBox = Engine.GetGUIObjectByName("startingResources"); 1143 1165 startingResourcesBox.selected = startingResourcesBox.list_data.indexOf(mapSettings.StartingResources); 1144 1166 } 1145 1167 1168 if (mapSettings.Ceasefire) 1169 { 1170 var ceasefireBox = Engine.GetGUIObjectByName("ceasefire"); 1171 ceasefireBox.selected = ceasefireBox.list_data.indexOf(mapSettings.Ceasefire); 1172 } 1173 1146 1174 initMapNameList(); 1147 1175 } 1148 1176 1149 1177 // Controls common to all map types 1150 1178 var numPlayersSelection = Engine.GetGUIObjectByName("numPlayersSelection"); … … 1156 1184 var mapSize = Engine.GetGUIObjectByName("mapSize"); 1157 1185 var enableCheats = Engine.GetGUIObjectByName("enableCheats"); 1158 1186 var enableRating = Engine.GetGUIObjectByName("enableRating"); 1159 1187 var populationCap = Engine.GetGUIObjectByName("populationCap"); 1160 1188 var startingResources = Engine.GetGUIObjectByName("startingResources"); 1189 var ceasefire = Engine.GetGUIObjectByName("ceasefire"); 1161 1190 1162 1191 var numPlayersText= Engine.GetGUIObjectByName("numPlayersText"); 1163 1192 var mapSizeDesc = Engine.GetGUIObjectByName("mapSizeDesc"); 1164 1193 var mapSizeText = Engine.GetGUIObjectByName("mapSizeText"); 1165 1194 var revealMapText = Engine.GetGUIObjectByName("revealMapText"); … … 1169 1198 var lockTeamsText = Engine.GetGUIObjectByName("lockTeamsText"); 1170 1199 var enableCheatsText = Engine.GetGUIObjectByName("enableCheatsText"); 1171 1200 var enableRatingText = Engine.GetGUIObjectByName("enableRatingText"); 1172 1201 var populationCapText = Engine.GetGUIObjectByName("populationCapText"); 1173 1202 var startingResourcesText = Engine.GetGUIObjectByName("startingResourcesText"); 1203 var ceasefireText = Engine.GetGUIObjectByName("ceasefireText"); 1174 1204 var gameSpeedText = Engine.GetGUIObjectByName("gameSpeedText"); 1175 1205 var gameSpeedBox = Engine.GetGUIObjectByName("gameSpeed"); 1176 1206 1177 1207 // We have to check for undefined on these properties as not all maps define them. 1178 1208 var sizeIdx = (mapSettings.Size !== undefined && g_MapSizes.tiles.indexOf(mapSettings.Size) != -1 ? g_MapSizes.tiles.indexOf(mapSettings.Size) : g_MapSizes["default"]); … … 1195 1225 gameSpeedBox.selected = speedIdx; 1196 1226 populationCap.selected = (mapSettings.PopulationCap !== undefined && POPULATION_CAP_DATA.indexOf(mapSettings.PopulationCap) != -1 ? POPULATION_CAP_DATA.indexOf(mapSettings.PopulationCap) : POPULATION_CAP_DEFAULTIDX); 1197 1227 populationCapText.caption = POPULATION_CAP[populationCap.selected]; 1198 1228 startingResources.selected = (mapSettings.StartingResources !== undefined && STARTING_RESOURCES_DATA.indexOf(mapSettings.StartingResources) != -1 ? STARTING_RESOURCES_DATA.indexOf(mapSettings.StartingResources) : STARTING_RESOURCES_DEFAULTIDX); 1199 1229 startingResourcesText.caption = STARTING_RESOURCES[startingResources.selected]; 1230 ceasefire.selected = (mapSettings.Ceasefire !== undefined && CEASEFIRE_DATA.indexOf(mapSettings.Ceasefire) != -1 ? CEASEFIRE_DATA.indexOf(mapSettings.Ceasefire) : CEASEFIRE_DEFAULTIDX); 1231 ceasefireText.caption = CEASEFIRE[ceasefire.selected]; 1200 1232 1201 1233 // Update map preview 1202 1234 Engine.GetGUIObjectByName("mapPreview").sprite = "cropped:(0.78125,0.5859375)session/icons/mappreview/" + getMapPreview(mapName); 1203 1235 1204 1236 // Hide/show settings depending on whether we can change them or not … … 1220 1252 updateDisplay(disableTreasures, disableTreasuresText, g_IsController); 1221 1253 updateDisplay(victoryCondition, victoryConditionText, g_IsController); 1222 1254 updateDisplay(lockTeams, lockTeamsText, g_IsController); 1223 1255 updateDisplay(populationCap, populationCapText, g_IsController); 1224 1256 updateDisplay(startingResources, startingResourcesText, g_IsController); 1257 updateDisplay(ceasefire, ceasefireText, g_IsController); 1225 1258 1226 1259 if (g_IsController) 1227 1260 { 1228 1261 //Host 1229 1262 numPlayersSelection.selected = numPlayers - 1; … … 1262 1295 updateDisplay(disableTreasures, disableTreasuresText, g_IsController); 1263 1296 updateDisplay(victoryCondition, victoryConditionText, g_IsController); 1264 1297 updateDisplay(lockTeams, lockTeamsText, g_IsController); 1265 1298 updateDisplay(populationCap, populationCapText, g_IsController); 1266 1299 updateDisplay(startingResources, startingResourcesText, g_IsController); 1300 updateDisplay(ceasefire, ceasefireText, g_IsController); 1267 1301 1268 1302 if (g_IsController) 1269 1303 { 1270 1304 //Host 1271 1305 revealMap.checked = (mapSettings.RevealMap ? true : false); … … 1288 1322 1289 1323 1290 1324 case "scenario": 1291 1325 // For scenario just reflect settings for the current map 1292 1326 numPlayersSelection.hidden = true; 1293 mapSize.hidden = true;1294 revealMap.hidden = true;1295 exploreMap.hidden = true;1296 disableTreasures.hidden = true;1297 victoryCondition.hidden = true;1298 lockTeams.hidden = true;1299 1327 numPlayersText.hidden = false; 1328 mapSize.hidden = true; 1300 1329 mapSizeText.hidden = true; 1301 1330 mapSizeDesc.hidden = true; 1331 revealMap.hidden = true; 1302 1332 revealMapText.hidden = false; 1333 exploreMap.hidden = true; 1303 1334 exploreMapText.hidden = false; 1335 disableTreasures.hidden = true; 1304 1336 disableTreasuresText.hidden = false; 1337 victoryCondition.hidden = true; 1305 1338 victoryConditionText.hidden = false; 1339 lockTeams.hidden = true; 1306 1340 lockTeamsText.hidden = false; 1307 populationCap.hidden = true;1308 populationCapText.hidden = false;1309 1341 startingResources.hidden = true; 1310 1342 startingResourcesText.hidden = false; 1311 1343 populationCap.hidden = true; 1344 populationCapText.hidden = false; 1345 ceasefire.hidden = true; 1346 ceasefireText.hidden = false; 1347 1312 1348 numPlayersText.caption = numPlayers; 1313 1349 mapSizeText.caption = translate("Default"); 1314 1350 revealMapText.caption = (mapSettings.RevealMap ? translate("Yes") : translate("No")); 1315 1351 exploreMapText.caption = (mapSettings.ExploreMap ? translate("Yes") : translate("No")); 1316 1352 disableTreasuresText.caption = translate("No"); 1317 1353 victoryConditionText.caption = victories.text[victoryIdx]; 1318 1354 lockTeamsText.caption = (mapSettings.LockTeams ? translate("Yes") : translate("No")); 1319 Engine.GetGUIObjectByName("populationCap").selected = POPULATION_CAP_DEFAULTIDX;1320 1355 1356 startingResourcesText.caption = translate("Determined by scenario"); 1357 populationCapText.caption = translate("Determined by scenario"); 1358 ceasefireText.caption = translate("Determined by scenario"); 1321 1359 break; 1322 1360 1323 1361 default: 1324 1362 error(sprintf("onGameAttributesChange: Unexpected map type '%(mapType)s'", { mapType: g_GameAttributes.mapType })); 1325 1363 return; -
binaries/data/mods/public/gui/gamesetup/gamesetup.xml
268 268 <!-- End Options --> 269 269 </object> 270 270 271 271 <!-- More Options --> 272 272 <object hidden="true" name="moreOptionsFade" type="image" z="60" sprite="ModernFade"/> 273 <object name="moreOptions" type="image" sprite="ModernDialog" size="50%-200 50%-195 50%+200 50%+ 190" z="70" hidden="true">273 <object name="moreOptions" type="image" sprite="ModernDialog" size="50%-200 50%-195 50%+200 50%+220" z="70" hidden="true"> 274 274 <object style="ModernLabelText" type="text" size="50%-128 -18 50%+128 14"> 275 275 <translatableAttribute id="caption">More Options</translatableAttribute> 276 276 </object> 277 277 278 278 <object size="14 38 94% 66"> … … 315 315 </object> 316 316 </object> 317 317 318 318 <object size="14 158 94% 186"> 319 319 <object size="0 0 40% 28" type="text" style="ModernRightLabelText"> 320 <translatableAttribute id="caption">Ceasefire:</translatableAttribute> 321 </object> 322 <object name="ceasefireText" size="40% 0 100% 100%" type="text" style="ModernLeftLabelText"/> 323 <object name="ceasefire" size="40%+10 0 100% 28" type="dropdown" style="ModernDropDown" hidden="true" tooltip_style="onscreenToolTip"> 324 <translatableAttribute id="tooltip">Set time where no attacks are possible.</translatableAttribute> 325 </object> 326 </object> 327 328 <object size="14 188 94% 216"> 329 <object size="0 0 40% 28" type="text" style="ModernRightLabelText"> 320 330 <translatableAttribute id="caption" comment="Make sure to differentiate between the revealed map and explored map options!">Revealed Map:</translatableAttribute> 321 331 </object> 322 332 <object name="revealMapText" size="40% 0 100% 28" type="text" style="ModernLeftLabelText"/> 323 333 <object name="revealMap" size="40%+10 5 40%+30 100%-5" type="checkbox" style="ModernTickBox" hidden="true" tooltip_style="onscreenToolTip"> 324 334 <translatableAttribute id="tooltip" comment="Make sure to differentiate between the revealed map and explored map options!">Toggle revealed map (see everything).</translatableAttribute> 325 335 </object> 326 336 </object> 327 337 328 <object size="14 188 94% 216">338 <object size="14 218 94% 246"> 329 339 <object size="0 0 40% 28" type="text" style="ModernRightLabelText"> 330 340 <translatableAttribute id="caption" comment="Make sure to differentiate between the revealed map and explored map options!">Explored Map:</translatableAttribute> 331 341 </object> 332 342 <object name="exploreMapText" size="40% 0 100% 28" type="text" style="ModernLeftLabelText"/> 333 343 <object name="exploreMap" size="40%+10 5 40%+30 100%-5" type="checkbox" style="ModernTickBox" hidden="true" tooltip_style="onscreenToolTip"> 334 344 <translatableAttribute id="tooltip" comment="Make sure to differentiate between the revealed map and explored map options!">Toggle explored map (see initial map).</translatableAttribute> 335 345 </object> 336 346 </object> 337 347 338 <object size="14 2 18 94% 246">348 <object size="14 248 94% 276"> 339 349 <object size="0 0 40% 28" type="text" style="ModernRightLabelText"> 340 350 <translatableAttribute id="caption">Disable Treasures:</translatableAttribute> 341 351 </object> 342 352 <object name="disableTreasuresText" size="40% 0 100% 28" type="text" style="ModernLeftLabelText"/> 343 353 <object name="disableTreasures" size="40%+10 5 40%+30 100%-5" type="checkbox" style="ModernTickBox" hidden="true" tooltip_style="onscreenToolTip"> 344 354 <translatableAttribute id="tooltip">Disable all treasures on the map.</translatableAttribute> 345 355 </object> 346 356 </object> 347 357 348 <object size="14 2 48 94% 276">358 <object size="14 278 94% 306"> 349 359 <object size="0 0 40% 28" type="text" style="ModernRightLabelText"> 350 360 <translatableAttribute id="caption">Teams Locked:</translatableAttribute> 351 361 </object> 352 362 <object name="lockTeamsText" size="40% 0 100% 28" type="text" style="ModernLeftLabelText"/> 353 363 <object name="lockTeams" size="40%+10 5 40%+30 100%-5" type="checkbox" style="ModernTickBox" hidden="true" tooltip_style="onscreenToolTip"> 354 364 <translatableAttribute id="tooltip">Toggle locked teams.</translatableAttribute> 355 365 </object> 356 366 </object> 357 367 358 <object name="optionCheats" size="14 278 94% 306" hidden="true">368 <object name="optionCheats" size="14 308 94% 336" hidden="true"> 359 369 <object size="0 0 40% 28" type="text" style="ModernRightLabelText"> 360 370 <translatableAttribute id="caption">Cheats:</translatableAttribute> 361 371 </object> 362 372 <object name="enableCheatsText" size="40% 0 100% 28" type="text" style="ModernLeftLabelText"/> 363 373 <object name="enableCheats" size="40%+10 5 40%+30 100%-5" type="checkbox" style="ModernTickBox" hidden="true" tooltip_style="onscreenToolTip"> 364 374 <translatableAttribute id="tooltip">Toggle the usability of cheats.</translatableAttribute> 365 375 </object> 366 376 </object> 367 377 368 <object name="optionRating" size="14 3 08 94% 336" hidden="true">378 <object name="optionRating" size="14 338 94% 366" hidden="true"> 369 379 <object size="0 0 40% 28" hidden="false" type="text" style="ModernRightLabelText"> 370 380 <translatableAttribute id="caption">Rated Game:</translatableAttribute> 371 381 </object> 372 382 <object name="enableRatingText" size="40% 0 100% 28" type="text" style="ModernLeftLabelText"/> 373 383 <object name="enableRating" size="40%+10 5 40%+30 100%-5" type="checkbox" style="ModernTickBox" hidden="true" tooltip_style="onscreenToolTip"> … … 378 388 <!-- Hide More Options Button --> 379 389 <object 380 390 name="hideMoreOptions" 381 391 type="button" 382 392 style="StoneButton" 383 size="50%-70 3 40 50%+70 366"393 size="50%-70 370 50%+70 396" 384 394 tooltip_style="onscreenToolTip" 385 395 > 386 396 <translatableAttribute id="caption">OK</translatableAttribute> 387 397 <translatableAttribute id="tooltip">Close more game options window</translatableAttribute> 388 398 <action on="Press">toggleMoreOptions();</action> -
binaries/data/mods/public/gui/options/options.js
11 11 [translate("Disable Welcome Screen"), translate("If you disable this screen completely, you may miss important announcements.\nYou can still launch it using the main menu."), {"config":"splashscreendisable"}, "boolean"], 12 12 [translate("Detailed Tooltips"), translate("Show detailed tooltips for trainable units in unit-producing buildings."), {"config":"showdetailedtooltips"}, "boolean"], 13 13 [translate("FPS Overlay"), translate("Show frames per second in top right corner."), {"config":"overlay.fps"}, "boolean"], 14 14 [translate("Realtime Overlay"), translate("Show current system time in top right corner."), {"config":"overlay.realtime"}, "boolean"], 15 15 [translate("Gametime Overlay"), translate("Show current simulation time in top right corner."), {"config":"gui.session.timeelapsedcounter"}, "boolean"], 16 [translate("Ceasefire Time Overlay"), translate("Always show the remaining ceasefire time."), {"config":"gui.session.ceasefirecounter"}, "boolean"], 16 17 [translate("Persist match settings"), translate("Save and restore match settings for quick reuse when hosting another game"), {"config":"persistmatchsettings"}, "boolean"], 17 18 ], 18 19 "graphicsSetting": 19 20 [ 20 21 [translate("Prefer GLSL"), translate("Use OpenGL 2.0 shaders (recommended)"), {"renderer":"PreferGLSL", "config":"preferglsl"}, "boolean"], -
binaries/data/mods/public/gui/session/diplomacy_window.xml
70 70 <object name="diplomacyAttackRequestImage[n]" type="image" size="0 0 100% 100%" sprite="stretched:session/icons/attack-request.png" ghost="true"/> 71 71 </object> 72 72 </object> 73 73 </repeat> 74 74 </object> 75 75 76 <object name="diplomacyCeasefireCounter" size="32 100%-90 100%-32 100%-62" type="text" style="chatPanel" ghost="true"></object> 77 76 78 <object size="50%-64 100%-50 50%+64 100%-22" type="button" style="StoneButton"> 77 79 <translatableAttribute id="caption">Close</translatableAttribute> 78 80 <action on="Press">closeDiplomacy();</action> 79 81 </object> 80 82 </object> -
binaries/data/mods/public/gui/session/menu.js
341 341 button.hidden = false; 342 342 button.tooltip = formatTributeTooltip(g_Players[i], resource, 100); 343 343 } 344 344 345 345 // Attack Request 346 var simState = GetSimState(); 346 347 let button = Engine.GetGUIObjectByName("diplomacyAttackRequest["+(i-1)+"]"); 347 button.hidden = !(g_Players[i].isEnemy[we]);348 button.hidden = simState.ceasefireActive && !(g_Players[i].isEnemy[we]); 348 349 button.tooltip = translate("request for your allies to attack this enemy"); 349 350 button.onpress = (function(i, we){ return function() { 350 351 Engine.PostNetworkCommand({"type": "attack-request", "source": we, "target": i}); 351 352 } })(i, we); 352 353 … … 360 361 { 361 362 let button = Engine.GetGUIObjectByName("diplomacyPlayer"+setting+"["+(i-1)+"]"); 362 363 363 364 button.caption = g_Players[we]["is"+setting][i] ? translate("x") : ""; 364 365 button.onpress = (function(e){ return function() { setDiplomacy(e) } })({"player": i, "to": setting.toLowerCase()}); 365 button.hidden = false;366 button.hidden = simState.ceasefireActive; 366 367 } 367 368 } 368 369 369 370 Engine.GetGUIObjectByName("diplomacyDialogPanel").hidden = false; 370 371 } -
binaries/data/mods/public/gui/session/session.js
537 537 updateDebug(); 538 538 updatePlayerDisplay(); 539 539 updateSelectionDetails(); 540 540 updateBuildingPlacementPreview(); 541 541 updateTimeElapsedCounter(); 542 updateCeasefireCounter(); 542 543 updateTimeNotifications(); 543 544 if (!g_IsObserver) 544 545 updateResearchDisplay(); 545 546 546 547 if (!g_IsObserver && !g_GameEnded) … … 778 779 // Hide unused buttons. 779 780 for (var i = numButtons; i < 10; ++i) 780 781 Engine.GetGUIObjectByName("researchStartedButton[" + i + "]").hidden = true; 781 782 } 782 783 784 function updateCeasefireCounter() 785 { 786 var simState = GetSimState(); 787 var isActive = simState.ceasefireActive; 788 var remainingTimeString = timeToString(simState.ceasefireTimeRemaining); 789 790 var ceasefireCounter = Engine.GetGUIObjectByName("ceasefireCounter"); 791 var diplomacyCeasefireCounter = Engine.GetGUIObjectByName("diplomacyCeasefireCounter"); 792 793 ceasefireCounter.hidden = !isActive || Engine.ConfigDB_GetValue("user", "gui.session.ceasefirecounter") !== "true"; 794 diplomacyCeasefireCounter.hidden = !isActive; 795 796 ceasefireCounter.caption = remainingTimeString; 797 diplomacyCeasefireCounter.caption = sprintf(translateWithContext("ceasefire", "Time remaining until ceasefire is over: %(time)s."), {"time": remainingTimeString}); 798 } 799 783 800 function updateTimeElapsedCounter() 784 801 { 785 802 var simState = GetSimState(); 786 803 var timeElapsedCounter = Engine.GetGUIObjectByName("timeElapsedCounter"); 787 804 if (g_CurrentSpeed != 1.0) … … 1042 1059 reportObject.playerID = Engine.GetPlayerID(); 1043 1060 reportObject.matchID = g_MatchID; 1044 1061 reportObject.civs = playerCivs; 1045 1062 reportObject.teams = teams; 1046 1063 reportObject.teamsLocked = String(teamsLocked); 1064 reportObject.ceasefireActive = String(extendedSimState.ceasefireActive); 1065 reportObject.ceasefireTimeRemaining = String(extendedSimState.ceasefireTimeRemaining); 1047 1066 reportObject.mapName = mapName; 1048 1067 reportObject.economyScore = playerStatistics.economyScore; 1049 1068 reportObject.militaryScore = playerStatistics.militaryScore; 1050 1069 reportObject.totalScore = playerStatistics.totalScore; 1051 1070 for each (var rct in resourcesCounterTypes) -
binaries/data/mods/public/gui/session/session.xml
153 153 </action> 154 154 <action on="Press"> 155 155 Engine.ConfigDB_CreateValue("user", "gui.session.timeelapsedcounter", ""+this.hidden); 156 156 </action> 157 157 </object> 158 <object size="100%-120 125 100%-10 145" type="text" name="ceasefireCounter" style="SettingsText" hotkey="ceasefirecounter.toggle" hidden="true"> 159 <action on="Press"> 160 Engine.ConfigDB_CreateValue("user", "gui.session.ceasefirecounter", ""+this.hidden); 161 </action> 162 </object> 158 163 159 164 <!-- ================================ ================================ --> 160 165 <!-- Pause Overlay --> 161 166 <!-- ================================ ================================ --> 162 167 <object type="button" -
binaries/data/mods/public/simulation/components/Capturable.js
67 67 // Before changing the value, activate Fogging if necessary to hide changes 68 68 var cmpFogging = Engine.QueryInterface(this.entity, IID_Fogging); 69 69 if (cmpFogging) 70 70 cmpFogging.Activate(); 71 71 72 var enemiesFilter = function(v, i) { return v > 0 && !cmpPlayerSource.IsAlly(i); };72 var enemiesFilter = function(v, i) { return v > 0 && cmpPlayerSource.IsEnemy(i); }; 73 73 var numberOfEnemies = this.cp.filter(enemiesFilter).length; 74 74 75 75 if (numberOfEnemies == 0) 76 76 return 0; 77 77 78 78 // distribute the capture points over all enemies 79 79 var distributedAmount = amount / numberOfEnemies; 80 80 for (let i in this.cp) 81 81 { 82 if ( cmpPlayerSource.IsAlly(i))82 if (!cmpPlayerSource.IsEnemy(i)) 83 83 continue; 84 84 if (this.cp[i] > distributedAmount) 85 85 this.cp[i] -= distributedAmount; 86 86 else 87 87 this.cp[i] = 0; … … 119 119 if (!cmpPlayerSource) 120 120 warn(playerID + " has no player component defined on its id"); 121 121 var cp = this.GetCapturePoints() 122 122 var sourceEnemyCp = 0; 123 123 for (let i in this.GetCapturePoints()) 124 if ( !cmpPlayerSource.IsAlly(i))124 if (cmpPlayerSource.IsEnemy(i)) 125 125 sourceEnemyCp += cp[i]; 126 126 return sourceEnemyCp > 0; 127 127 }; 128 128 129 129 //// Private functions //// -
binaries/data/mods/public/simulation/components/CeasefireManager.js
1 function CeasefireManager() {} 2 3 CeasefireManager.prototype.Schema = 4 "<a:component type='system'/><empty/>"; 5 6 CeasefireManager.prototype.Init = function() 7 { 8 // Weather or not ceasefire is active currently. 9 this.ceasefireIsActive = false; 10 11 // Ceasefire timeout in milliseconds 12 this.ceasefireTime = 0; 13 14 // Time elapsed when the ceasefire was started 15 this.ceasefireStartedTime = 0; 16 17 // diplomacy states before the ceasefire started 18 this.diplomacyBeforeCeasefire = []; 19 20 // Message duration for the countdown in milliseconds 21 this.countdownMessageDuration = 10000; 22 23 // Duration for the post ceasefire message in milliseconds 24 this.postCountdownMessageDuration = 5000; 25 } 26 27 CeasefireManager.prototype.IsCeasefireActive = function() 28 { 29 return this.ceasefireIsActive; 30 }; 31 32 CeasefireManager.prototype.GetCeasefireStartedTime = function() 33 { 34 return this.ceasefireStartedTime; 35 }; 36 37 CeasefireManager.prototype.GetCeasefireTime = function() 38 { 39 return this.ceasefireTime; 40 }; 41 42 CeasefireManager.prototype.GetDiplomacyBeforeCeasefire = function() 43 { 44 return this.diplomacyBeforeCeasefire; 45 }; 46 47 CeasefireManager.prototype.StartCeasefire = function(ceasefireTime) 48 { 49 // if invalid timeout given or already running, return 50 if (ceasefireTime <= 0) 51 return; 52 53 // Remove existing timers 54 var cmpTimer = Engine.QueryInterface(SYSTEM_ENTITY, IID_Timer); 55 if (this.ceasefireCountdownMessageTimer) 56 cmpTimer.CancelTimer(this.ceasefireCountdownMessageTimer); 57 58 if (this.stopCeasefireTimer) 59 cmpTimer.CancelTimer(this.stopCeasefireTimer); 60 61 // Remove existing messages 62 var cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface); 63 if (this.ceasefireCountdownMessage) 64 cmpGuiInterface.DeleteTimeNotification(this.ceasefireCountdownMessage); 65 66 if (this.ceasefireEndedMessage) 67 cmpGuiInterface.DeleteTimeNotification(this.ceasefireEndedMessage); 68 69 70 // Save diplomacy and set everyone neutral 71 if (!this.ceasefireIsActive) 72 { 73 // Save diplomacy 74 var playerEntities = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetAllPlayerEntities(); 75 for (var i = 1; i < playerEntities.length; i++) 76 { 77 // Copy array with slice(), otherwise it will change 78 var cmpPlayer = Engine.QueryInterface(playerEntities[i], IID_Player); 79 this.diplomacyBeforeCeasefire.push(cmpPlayer.GetDiplomacy().slice()); 80 } 81 82 // Set every enemy (except gaia) to neutral 83 for (var i = 1; i < playerEntities.length; i++) 84 { 85 var cmpPlayer = Engine.QueryInterface(playerEntities[i], IID_Player); 86 for (var j = 1; j < playerEntities.length; j++) 87 { 88 if (this.diplomacyBeforeCeasefire[i-1][j] < 0) 89 cmpPlayer.SetNeutral(j); 90 } 91 } 92 } 93 94 // Save other data 95 this.ceasefireIsActive = true; 96 this.ceasefireTime = ceasefireTime; 97 this.ceasefireStartedTime = (typeof GetSimState == 'function') ? GetSimState().timeElapsed : 0; 98 99 // Add timers for countdown message and reseting diplomacy 100 this.stopCeasefireTimer = cmpTimer.SetTimeout(SYSTEM_ENTITY, IID_CeasefireManager, "StopCeasefire", this.ceasefireTime); 101 this.ceasefireCountdownMessageTimer = cmpTimer.SetTimeout(SYSTEM_ENTITY, IID_CeasefireManager, "ShowCeasefireCountdownMessage", 102 this.ceasefireTime - this.countdownMessageDuration, this.countdownMessageDuration); 103 }; 104 105 CeasefireManager.prototype.ShowCeasefireCountdownMessage = function(duration) 106 { 107 var cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface); 108 this.ceasefireCountdownMessage = cmpGuiInterface.AddTimeNotification({ 109 "message": markForTranslation("Ceasefire will end in %(time)s"), 110 "translateMessage": true 111 }, duration); 112 } 113 114 CeasefireManager.prototype.StopCeasefire = function() 115 { 116 var cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface); 117 118 // Remove previous message 119 if (this.ceasefireCountdownMessage) 120 cmpGuiInterface.DeleteTimeNotification(this.ceasefireCountdownMessage); 121 122 // Show new message 123 this.ceasefireEndedMessage = cmpGuiInterface.AddTimeNotification({ 124 "message": markForTranslation("Ceasefire has ended!"), 125 "translateMessage": true 126 }, this.postCountdownMessageDuration); 127 128 // Reset diplomacies to original settings 129 var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); 130 var playerEntities = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetAllPlayerEntities(); 131 for (var i = 1; i < playerEntities.length; i++) 132 { 133 var cmpPlayer = Engine.QueryInterface(playerEntities[i], IID_Player); 134 cmpPlayer.SetDiplomacy(this.diplomacyBeforeCeasefire[i-1]); 135 } 136 137 // Send messages in order to update the diplomacy screen 138 for (var i = 1; i < playerEntities.length; i++) 139 { 140 var cmpPlayer = Engine.QueryInterface(playerEntities[i], IID_Player); 141 for (var j = 1; j < playerEntities.length; j++) 142 if (i != j && this.diplomacyBeforeCeasefire[i-1][j] != -1) 143 cmpGuiInterface.PushNotification({"type": "diplomacy", "players": [j], "player1": [i], "status": "enemy"}); 144 } 145 146 // reset values 147 this.ceasefireIsActive = false; 148 this.ceasefireTime = 0; 149 this.ceasefireStartedTime = 0; 150 this.diplomacyBeforeCeasefire = []; 151 } 152 153 Engine.RegisterSystemComponentType(IID_CeasefireManager, "CeasefireManager", CeasefireManager); -
binaries/data/mods/public/simulation/components/GuiInterface.js
116 116 "classCounts": cmpTechnologyManager ? cmpTechnologyManager.GetClassCounts() : null, 117 117 "typeCountsByClass": cmpTechnologyManager ? cmpTechnologyManager.GetTypeCountsByClass() : null 118 118 }; 119 119 ret.players.push(playerData); 120 120 } 121 121 122 122 var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); 123 123 if (cmpRangeManager) 124 124 ret.circularMap = cmpRangeManager.GetLosCircular(); 125 125 126 126 var cmpTerrain = Engine.QueryInterface(SYSTEM_ENTITY, IID_Terrain); … … 128 128 ret.mapSize = 4 * cmpTerrain.GetTilesPerSide(); 129 129 130 130 // Add timeElapsed 131 131 var cmpTimer = Engine.QueryInterface(SYSTEM_ENTITY, IID_Timer); 132 132 ret.timeElapsed = cmpTimer.GetTime(); 133 133 134 // Add ceasefire info 135 var cmpCeasefireManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_CeasefireManager); 136 if (cmpCeasefireManager) 137 { 138 ret.ceasefireActive = cmpCeasefireManager.IsCeasefireActive(); 139 ret.ceasefireTimeRemaining = cmpCeasefireManager.GetCeasefireStartedTime() + cmpCeasefireManager.GetCeasefireTime() - ret.timeElapsed; 140 } 141 134 142 // Add the game type 135 143 var cmpEndGameManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_EndGameManager); 136 144 ret.gameType = cmpEndGameManager.GetGameType(); 137 145 138 146 // Add bartering prices … … 685 693 GuiInterface.prototype.AddTimeNotification = function(notification, duration = 10000) 686 694 { 687 695 var cmpTimer = Engine.QueryInterface(SYSTEM_ENTITY, IID_Timer); 688 696 notification.endTime = duration + cmpTimer.GetTime(); 689 697 notification.id = ++this.timeNotificationID; 698 699 // Let all players receive the notification by default 700 if (notification.players == undefined) 701 { 702 var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); 703 var numPlayers = cmpPlayerManager.GetNumPlayers(); 704 notification.players = []; 705 for (var i = 1; i < numPlayers; i++) 706 notification.players.push(i); 707 } 708 690 709 this.timeNotifications.push(notification); 691 710 this.timeNotifications.sort(function (n1, n2){return n2.endTime - n1.endTime}); 692 711 693 712 cmpTimer.SetTimeout(this.entity, IID_GuiInterface, "DeleteTimeNotification", duration, this.timeNotificationID); 694 713 … … 1733 1752 var cmpTargetPlayer = QueryOwnerInterface(data.target, IID_Player); 1734 1753 if (!cmpEntityPlayer || !cmpTargetPlayer) 1735 1754 return false; 1736 1755 1737 1756 // if the owner is an enemy, it's up to the attack component to decide 1738 if ( !cmpEntityPlayer.IsAlly(cmpTargetPlayer.GetPlayerID()))1757 if (cmpEntityPlayer.IsEnemy(cmpTargetPlayer.GetPlayerID())) 1739 1758 return cmpAttack.CanAttack(data.target); 1740 1759 return false; 1741 1760 }; 1742 1761 1743 1762 /* -
binaries/data/mods/public/simulation/components/interfaces/CeasefireManager.js
1 Engine.RegisterInterface("CeasefireManager"); 2 3 // TODO: send messages? maybe the AI could use it 4 //Engine.RegisterMessageType("CeasefireStarted"); 5 //Engine.RegisterMessageType("CeasefireEnded"); -
binaries/data/mods/public/simulation/helpers/Setup.js
59 59 warn("Map error in Setup.js: entity " + holder + " can not garrison units"); 60 60 else 61 61 cmpGarrisonHolder.initGarrison = settings.Garrison[holder]; 62 62 } 63 63 } 64 65 var cmpCeasefireManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_CeasefireManager); 66 if (settings.Ceasefire) 67 cmpCeasefireManager.StartCeasefire(settings.Ceasefire * 60 * 1000); 64 68 } 65 69 66 70 Engine.RegisterGlobal("LoadMapSettings", LoadMapSettings);