Ticket #3168: t3168_let_observer_change_perspective_wip1.1.patch
File t3168_let_observer_change_perspective_wip1.1.patch, 22.3 KB (added by , 9 years ago) |
---|
-
binaries/data/mods/public/gui/session/menu.js
const RESOURCES = ["food", "wood", "ston 34 34 const STEP = 5; 35 35 36 36 var isMenuOpen = false; 37 37 var menu; 38 38 39 var isDiplomacyOpen = false;40 var isTradeOpen = false;39 var g_IsDiplomacyOpen = false; 40 var g_IsTradeOpen = false; 41 41 42 42 // Redefined every time someone makes a tribute (so we can save some data in a closure). Called in input.js handleInputBeforeGui. 43 43 var flushTributing = function() {}; 44 44 45 45 // Ignore size defined in XML and set the actual menu size here … … function tributeResource(data) 261 261 Engine.PostNetworkCommand({"type": "tribute", "player": data.player, "amounts": data.amounts}); 262 262 } 263 263 264 264 function openDiplomacy() 265 265 { 266 if ( isTradeOpen)266 if (g_IsTradeOpen) 267 267 closeTrade(); 268 isDiplomacyOpen = true;269 268 270 let we = Engine.GetPlayerID(); 269 let playerID = Engine.GetPlayerID(); 270 let viewedPlayer = g_IsObserver ? g_ViewedPlayer : playerID; 271 let we = g_IsObserver ? g_ViewedPlayer : playerID; 272 273 if (we <= 0) 274 return; 275 276 g_IsDiplomacyOpen = true; 271 277 272 278 // Get offset for one line 273 279 let onesize = Engine.GetGUIObjectByName("diplomacyPlayer[0]").size; 274 280 let rowsize = onesize.bottom - onesize.top; 275 281 … … function openDiplomacy() 336 342 }; 337 343 if (!isBatchTrainPressed) 338 344 flushTributing(); 339 345 }; 340 346 })(i, resource, button); 341 button.hidden = false;347 button.hidden = g_IsObserver; 342 348 button.tooltip = formatTributeTooltip(g_Players[i], resource, 100); 343 349 } 344 350 345 351 // Attack Request 346 352 var simState = GetSimState(); 347 353 let button = Engine.GetGUIObjectByName("diplomacyAttackRequest["+(i-1)+"]"); 348 354 button.hidden = simState.ceasefireActive || !(g_Players[i].isEnemy[we]); 349 355 button.tooltip = translate("Request your allies to attack this enemy"); 356 button.hidden = g_IsObserver; 350 357 button.onpress = (function(i, we){ return function() { 351 358 Engine.PostNetworkCommand({"type": "attack-request", "source": we, "target": i}); 352 359 } })(i, we); 353 360 354 361 // Skip our own teams on teams locked … … function openDiplomacy() 358 365 // Diplomacy settings 359 366 // Set up the buttons 360 367 for each (let setting in ["Ally", "Neutral", "Enemy"]) 361 368 { 362 369 let button = Engine.GetGUIObjectByName("diplomacyPlayer"+setting+"["+(i-1)+"]"); 363 364 370 button.caption = g_Players[we]["is"+setting][i] ? translate("x") : ""; 365 371 button.onpress = (function(e){ return function() { setDiplomacy(e); } })({"player": i, "to": setting.toLowerCase()}); 366 372 button.hidden = simState.ceasefireActive; 373 button.enabled = (we == playerID && we > 0); 367 374 } 368 375 } 369 376 370 377 Engine.GetGUIObjectByName("diplomacyDialogPanel").hidden = false; 371 378 } 372 379 373 380 function closeDiplomacy() 374 381 { 375 isDiplomacyOpen = false;382 g_IsDiplomacyOpen = false; 376 383 Engine.GetGUIObjectByName("diplomacyDialogPanel").hidden = true; 377 384 } 378 385 379 386 function toggleDiplomacy() 380 387 { 381 if ( isDiplomacyOpen)388 if (g_IsDiplomacyOpen) 382 389 closeDiplomacy(); 383 390 else 384 391 openDiplomacy(); 385 392 } 386 393 387 394 function openTrade() 388 395 { 389 if ( isDiplomacyOpen)396 if (g_IsDiplomacyOpen) 390 397 closeDiplomacy(); 391 isTradeOpen = true; 398 399 g_IsTradeOpen = true; 400 var viewedPlayer = g_IsObserver ? g_ViewedPlayer : Engine.GetPlayerID(); 392 401 393 402 var updateButtons = function() 394 403 { 395 404 for (var res in button) 396 405 { 397 406 button[res].label.caption = proba[res] + "%"; 398 407 if (res == selec) 399 408 { 400 button[res].sel.hidden = false;409 button[res].sel.hidden = g_IsObserver; 401 410 button[res].up.hidden = true; 402 411 button[res].dn.hidden = true; 403 412 } 404 413 else 405 414 { 406 415 button[res].sel.hidden = true; 407 button[res].up.hidden = (proba[res] == 100 || proba[selec] == 0);408 button[res].dn.hidden = (proba[res] == 0 || proba[selec] == 100);416 button[res].up.hidden = g_IsObserver || (proba[res] == 100 || proba[selec] == 0); 417 button[res].dn.hidden = g_IsObserver || (proba[res] == 0 || proba[selec] == 100); 409 418 } 410 419 } 411 420 }; 412 421 413 var proba = Engine.GuiInterfaceCall("GetTradingGoods" );422 var proba = Engine.GuiInterfaceCall("GetTradingGoods", viewedPlayer); 414 423 var button = {}; 415 424 var selec = RESOURCES[0]; 416 425 for (var i = 0; i < RESOURCES.length; ++i) 417 426 { 418 427 var buttonResource = Engine.GetGUIObjectByName("tradeResource["+i+"]"); … … function openTrade() 433 442 var buttonUp = Engine.GetGUIObjectByName("tradeArrowUp["+i+"]"); 434 443 var buttonDn = Engine.GetGUIObjectByName("tradeArrowDn["+i+"]"); 435 444 var iconSel = Engine.GetGUIObjectByName("tradeResourceSelection["+i+"]"); 436 445 button[resource] = { "up": buttonUp, "dn": buttonDn, "label": label, "sel": iconSel }; 437 446 447 buttonResource.enabled = !g_IsObserver; 438 448 buttonResource.onpress = (function(resource){ 439 449 return function() { 440 450 if (Engine.HotkeyIsPressed("session.fulltradeswap")) 441 451 { 442 452 for (var ress of RESOURCES) … … function openTrade() 467 477 }; 468 478 })(resource); 469 479 } 470 480 updateButtons(); 471 481 472 var traderNumber = Engine.GuiInterfaceCall("GetTraderNumber" );482 var traderNumber = Engine.GuiInterfaceCall("GetTraderNumber", viewedPlayer); 473 483 var caption = ""; 474 484 if (traderNumber.landTrader.total == 0) 475 485 caption = translate("There are no land traders."); 476 486 else 477 487 { … … function openTrade() 597 607 Engine.GetGUIObjectByName("tradeDialogPanel").hidden = false; 598 608 } 599 609 600 610 function closeTrade() 601 611 { 602 isTradeOpen = false;612 g_IsTradeOpen = false; 603 613 Engine.GetGUIObjectByName("tradeDialogPanel").hidden = true; 604 614 } 605 615 606 616 function toggleTrade() 607 617 { 608 if ( isTradeOpen)618 if (g_IsTradeOpen) 609 619 closeTrade(); 610 620 else 611 621 openTrade(); 612 622 } 613 623 … … function toggleGameSpeed() 620 630 function openStrucTree() 621 631 { 622 632 closeMenu(); 623 633 closeOpenDialogs(); 624 634 pauseGame(); 635 636 var playerID = Engine.GetPlayerID(); 637 var viewedPlayer = g_IsObserver ? g_ViewedPlayer : playerID; 638 639 if (playerID == 0 || (g_IsObserver && g_ViewedPlayer <= 0)) 640 return; 641 625 642 var data = { // TODO add info about researched techs and unlocked entities 626 "civ" : g_Players[ Engine.GetPlayerID()].civ,643 "civ" : g_Players[viewedPlayer].civ, 627 644 "callback": "resumeGame", 628 645 }; 629 646 Engine.PushGuiPage("page_structree.xml", data); 630 647 } 631 648 -
binaries/data/mods/public/gui/session/selection_details.js
function updateSelectionDetails() 408 408 detailsPanel.hidden = false; 409 409 410 410 if (g_IsObserver) 411 411 { 412 412 // Observers don't need these displayed. 413 supplementalDetailsPanel.hidden = true;414 commandsPanel.hidden = true;413 //supplementalDetailsPanel.hidden = true; 414 //commandsPanel.hidden = true; 415 415 } 416 416 else 417 417 { 418 418 // Fill out commands panel for specific unit selected (or first unit of primary group) 419 419 updateUnitCommands(entState, supplementalDetailsPanel, commandsPanel, selection); -
binaries/data/mods/public/gui/session/session.js
var g_IsNetworked = false; 8 8 var g_IsController; 9 9 // Match ID for tracking 10 10 var g_MatchID; 11 11 // Is this user an observer? 12 12 var g_IsObserver = false; 13 13 // Is the change-perspective developers option activated? 14 var g_ChangePerspective = false; 15 // The player which is selected by the observer / change-perspective tool list 16 var g_ViewedPlayer = -1; 14 17 // Cache the basic player data (name, civ, color) 15 18 var g_Players = []; 16 19 // Cache the useful civ data 17 20 var g_CivData = {}; 18 21 … … var g_AdditionalHighlight = []; 58 61 59 62 // for saving the hitpoins of the hero (is there a better way to do that?) 60 63 // Should be possible with AttackDetection but might be an overkill because it would have to loop 61 64 // always through the list of all ongoing attacks... 62 65 var g_previousHeroHitPoints = undefined; 66 var g_previouslyViewedHero = undefined; 63 67 64 68 function GetSimState() 65 69 { 66 70 if (!g_SimState) 67 71 g_SimState = Engine.GuiInterfaceCall("GetSimulationState"); … … function init(initData, hotloadData) 192 196 playerNames.push(g_Players[player].name); 193 197 playerIDs.push(player); 194 198 } 195 199 196 200 var viewPlayerDropdown = Engine.GetGUIObjectByName("viewPlayer"); 197 viewPlayerDropdown.list = playerNames; 198 viewPlayerDropdown.list_data = playerIDs; 199 viewPlayerDropdown.selected = Engine.GetPlayerID(); 201 viewPlayerDropdown.list = ["Observer"].concat(playerNames); 202 viewPlayerDropdown.list_data = [-1].concat(playerIDs); 203 viewPlayerDropdown.selected = Engine.GetPlayerID() + 1; 204 viewPlayerDropdown.hidden = !g_IsObserver && !g_ChangePerspective; 200 205 201 206 // If in Atlas editor, disable the exit button 202 207 if (Engine.IsAtlasRunning()) 203 208 Engine.GetGUIObjectByName("menuExitButton").enabled = false; 204 209 … … function init(initData, hotloadData) 227 232 //setTimeout(function() { reportPerformance(60); }, 60000); 228 233 } 229 234 230 235 function selectViewPlayer(playerID) 231 236 { 232 Engine.SetPlayerID(playerID); 237 playerID--; 238 239 if (g_ChangePerspective) 240 Engine.SetPlayerID(playerID); 241 else 242 g_ViewedPlayer = playerID; 243 233 244 updateTopPanel(); 245 246 if (playerID < 1) 247 { 248 closeTrade(); 249 closeDiplomacy(); 250 } 251 else 252 { 253 if (g_IsDiplomacyOpen) 254 openDiplomacy(); 255 else if (g_IsTradeOpen) 256 openTrade(); 257 } 234 258 } 235 259 236 260 function updateTopPanel() 237 261 { 238 262 var playerID = Engine.GetPlayerID(); 239 263 var isPlayer = playerID > 0; 240 if (isPlayer) 264 var viewsPlayer = isPlayer || (g_IsObserver && g_ViewedPlayer > 0); 265 var viewedPlayer = g_IsObserver ? g_ViewedPlayer : playerID; 266 267 Engine.GetGUIObjectByName("buildTimeLabel").size="50%-78 0 50%+178 100%-2"; 268 269 // Set civ icon 270 if (viewsPlayer) 241 271 { 242 var civName = g_CivData[g_Players[playerID].civ].Name;243 Engine.GetGUIObjectByName("civIcon").sprite = "stretched:" + g_CivData[g_Players[ playerID].civ].Emblem;272 let civName = g_CivData[g_Players[viewedPlayer].civ].Name 273 Engine.GetGUIObjectByName("civIcon").sprite = "stretched:" + g_CivData[g_Players[viewedPlayer].civ].Emblem; 244 274 Engine.GetGUIObjectByName("civIconOverlay").tooltip = sprintf(translate("%(civ)s - Structure Tree"), {"civ": civName}); 245 275 } 246 247 // Hide stuff gaia /observers don't use.248 Engine.GetGUIObjectByName("food").hidden = ! isPlayer;249 Engine.GetGUIObjectByName("wood").hidden = ! isPlayer;250 Engine.GetGUIObjectByName("stone").hidden = ! isPlayer;251 Engine.GetGUIObjectByName("metal").hidden = ! isPlayer;252 Engine.GetGUIObjectByName("population").hidden = ! isPlayer;253 Engine.GetGUIObjectByName("civIcon").hidden = ! isPlayer;254 Engine.GetGUIObjectByName("diplomacyButton1").hidden = ! isPlayer;255 Engine.GetGUIObjectByName("tradeButton1").hidden = ! isPlayer;256 Engine.GetGUIObjectByName("observerText").hidden = playerID >= 0;276 277 // Hide stuff gaia doesn't use. 278 Engine.GetGUIObjectByName("food").hidden = !viewsPlayer; 279 Engine.GetGUIObjectByName("wood").hidden = !viewsPlayer; 280 Engine.GetGUIObjectByName("stone").hidden = !viewsPlayer; 281 Engine.GetGUIObjectByName("metal").hidden = !viewsPlayer; 282 Engine.GetGUIObjectByName("population").hidden = !viewsPlayer; 283 Engine.GetGUIObjectByName("civIcon").hidden = !viewsPlayer; 284 Engine.GetGUIObjectByName("diplomacyButton1").hidden = !viewsPlayer; 285 Engine.GetGUIObjectByName("tradeButton1").hidden = !viewsPlayer; 286 Engine.GetGUIObjectByName("observerText").hidden = viewsPlayer; 257 287 258 288 // Disable stuff observers shouldn't use 259 289 var isActive = isPlayer && GetSimState().players[playerID].state == "active"; 260 290 Engine.GetGUIObjectByName("pauseButton").enabled = isActive || !g_IsNetworked; 261 291 Engine.GetGUIObjectByName("menuResignButton").enabled = isActive; … … function onTick() 408 438 409 439 var now = new Date(); 410 440 var tickLength = new Date() - lastTickTime; 411 441 lastTickTime = now; 412 442 413 checkPlayerState(); 443 checkGameEnded(); 444 414 445 while (true) 415 446 { 416 447 var message = Engine.PollNetworkClient(); 417 448 if (!message) 418 449 break; … … function onTick() 448 479 449 480 // Clear renamed entities list 450 481 Engine.GuiInterfaceCall("ClearRenamedEntities"); 451 482 } 452 483 453 function check PlayerState()484 function checkGameEnded() 454 485 { 455 486 // Once the game ends, we're done here. 456 if (g_GameEnded || g_IsObserver )487 if (g_GameEnded || g_IsObserver || g_ViewedPlayer <= 0) 457 488 return; 458 489 459 490 // Send a game report for each player in this game. 460 491 var m_simState = GetSimState(); 461 492 var playerState = m_simState.players[Engine.GetPlayerID()]; … … function onSimulationUpdate() 547 578 updateDebug(); 548 579 updatePlayerDisplay(); 549 580 updateSelectionDetails(); 550 581 updateBuildingPlacementPreview(); 551 582 updateTimeNotifications(); 552 if (!g_IsObserver) 553 updateResearchDisplay(); 583 updateResearchDisplay(); 554 584 555 585 if (!g_IsObserver && !g_GameEnded) 556 586 { 557 587 // Update music state on basis of battle state. 558 588 var battleState = Engine.GuiInterfaceCall("GetBattleState", Engine.GetPlayerID()); … … function updateGUIStatusBar(nameOfBar, p 610 640 } 611 641 612 642 613 643 function updateHero() 614 644 { 615 var playerState = GetSimState().players[Engine.GetPlayerID()]; 645 var viewedPlayer = g_IsObserver ? g_ViewedPlayer : Engine.GetPlayerID(); 646 var playerState = GetSimState().players[viewedPlayer]; 616 647 var unitHeroPanel = Engine.GetGUIObjectByName("unitHeroPanel"); 617 648 var heroButton = Engine.GetGUIObjectByName("unitHeroButton"); 618 649 619 650 if (!playerState || playerState.heroes.length <= 0) 620 651 { 621 652 g_previousHeroHitPoints = undefined; 653 g_previouslyViewedHero = undefined; 622 654 unitHeroPanel.hidden = true; 623 655 return; 624 656 } 625 657 626 658 var heroImage = Engine.GetGUIObjectByName("unitHeroImage"); … … function updateHero() 654 686 // update heros health bar 655 687 updateGUIStatusBar("heroHealthBar", heroState.hitpoints, heroState.maxHitpoints); 656 688 657 689 // define the hit points if not defined 658 690 if (!g_previousHeroHitPoints) 691 { 659 692 g_previousHeroHitPoints = heroState.hitpoints; 693 g_previouslyViewedHero = viewedPlayer; 694 } 660 695 661 696 // if the health of the hero changed since the last update, trigger the animation 662 if ( heroState.hitpoints < g_previousHeroHitPoints)697 if (g_previouslyViewedHero == viewedPlayer && heroState.hitpoints < g_previousHeroHitPoints) 663 698 startColorFade("heroHitOverlay", 100, 0, colorFade_attackUnit, true, smoothColorFadeRestart_attackUnit); 664 699 665 700 g_previousHeroHitPoints = heroState.hitpoints; 701 g_previouslyViewedHero = viewedPlayer; 666 702 } 667 703 668 704 669 705 function updateGroups() 670 706 { … … function updateDebug() 718 754 debug.caption = text.replace(/\[/g, "\\["); 719 755 } 720 756 721 757 function updatePlayerDisplay() 722 758 { 723 var playerState = GetSimState().players[Engine.GetPlayerID()]; 759 var playerID = Engine.GetPlayerID(); 760 var viewsPlayer = playerID > 0 || (g_IsObserver && g_ViewedPlayer > 0); 761 var viewedPlayer = g_IsObserver ? g_ViewedPlayer : playerID; 762 763 if (!viewsPlayer) 764 return; 765 766 var playerState = GetSimState().players[viewedPlayer]; 724 767 if (!playerState) 725 768 return; 726 769 727 770 Engine.GetGUIObjectByName("resourceFood").caption = Math.floor(playerState.resourceCounts.food); 728 771 Engine.GetGUIObjectByName("resourceWood").caption = Math.floor(playerState.resourceCounts.wood); … … function selectAndMoveTo(ent) 748 791 Engine.CameraMoveTo(position.x, position.z); 749 792 } 750 793 751 794 function updateResearchDisplay() 752 795 { 753 var researchStarted = Engine.GuiInterfaceCall("GetStartedResearch", Engine.GetPlayerID()); 754 if (!researchStarted) 796 var viewedPlayer = g_IsObserver ? g_ViewedPlayer : Engine.GetPlayerID(); 797 798 var researchStarted = Engine.GuiInterfaceCall("GetStartedResearch", viewedPlayer); 799 if (!researchStarted && !g_IsObserver) 755 800 return; 756 801 757 802 // Set up initial positioning. 758 803 var buttonSideLength = Engine.GetGUIObjectByName("researchStartedButton[0]").size.right; 759 804 for (var i = 0; i < 10; ++i) -
binaries/data/mods/public/gui/session/session.xml
68 68 69 69 <object size="0 16 100%-18 32" type="text" style="devCommandsText"> 70 70 <translatableAttribute id="caption">Change perspective</translatableAttribute> 71 71 </object> 72 72 <object size="100%-16 16 100% 32" type="checkbox" style="ModernTickBox"> 73 <action on="Press">Engine.GetGUIObjectByName("viewPlayer").hidden = !this.checked;</action> 73 <action on="Press"> 74 g_ChangePerspective = !g_ChangePerspective; 75 Engine.GetGUIObjectByName("viewPlayer").hidden = !g_ChangePerspective; 76 </action> 74 77 </object> 75 78 76 79 <object size="0 32 100%-18 48" type="text" style="devCommandsText"> 77 80 <translatableAttribute id="caption">Display selection state</translatableAttribute> 78 81 </object> -
binaries/data/mods/public/gui/session/top_panel.xml
21 21 22 22 <!-- ================================ ================================ --> 23 23 <!-- Observer Mode Warning --> 24 24 <!-- ================================ ================================ --> 25 25 <object size="50 4 50% 100%-2" name="observerText" type="text" style="ModernLabelText" text_align="left" hidden="true"> 26 <translatableAttribute id="caption">Observer Mode (experimental)</translatableAttribute>26 <translatableAttribute id="caption">Observer Mode</translatableAttribute> 27 27 </object> 28 28 29 29 </object> -
binaries/data/mods/public/simulation/components/GuiInterface.js
GuiInterface.prototype.GetSimulationStat 109 109 "isEnemy": enemies, 110 110 "entityLimits": cmpPlayerEntityLimits ? cmpPlayerEntityLimits.GetLimits() : null, 111 111 "entityCounts": cmpPlayerEntityLimits ? cmpPlayerEntityLimits.GetCounts() : null, 112 112 "entityLimitChangers": cmpPlayerEntityLimits ? cmpPlayerEntityLimits.GetLimitChangers() : null, 113 113 "researchQueued": cmpTechnologyManager ? cmpTechnologyManager.GetQueuedResearch() : null, 114 "researchStarted": cmpTechnologyManager ? cmpTechnologyManager.GetStartedResearch( ) : null,114 "researchStarted": cmpTechnologyManager ? cmpTechnologyManager.GetStartedResearch(i) : null, 115 115 "researchedTechs": cmpTechnologyManager ? cmpTechnologyManager.GetResearchedTechs() : null, 116 116 "classCounts": cmpTechnologyManager ? cmpTechnologyManager.GetClassCounts() : null, 117 117 "typeCountsByClass": cmpTechnologyManager ? cmpTechnologyManager.GetTypeCountsByClass() : null 118 118 }; 119 119 ret.players.push(playerData); … … GuiInterface.prototype.CheckTechnologyRe 645 645 return cmpTechnologyManager.CanResearch(tech); 646 646 }; 647 647 648 648 // Returns technologies that are being actively researched, along with 649 649 // which entity is researching them and how far along the research is. 650 GuiInterface.prototype.GetStartedResearch = function(player) 650 // TODO: player will be filled in automatically by ScriptCall, how to make it less ugly? 651 GuiInterface.prototype.GetStartedResearch = function(player, differentPlayer) 651 652 { 652 var cmpTechnologyManager = QueryPlayerIDInterface( player, IID_TechnologyManager);653 var cmpTechnologyManager = QueryPlayerIDInterface(differentPlayer ? differentPlayer : player, IID_TechnologyManager); 653 654 if (!cmpTechnologyManager) 654 655 return false; 655 656 656 657 var ret = {}; 657 658 for (var tech in cmpTechnologyManager.GetTechsStarted()) … … GuiInterface.prototype.SetRangeDebugOver 1803 1804 { 1804 1805 var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); 1805 1806 cmpRangeManager.SetDebugOverlay(enabled); 1806 1807 }; 1807 1808 1808 GuiInterface.prototype.GetTraderNumber = function(player) 1809 // TODO: player will be filled in automatically by ScriptCall, how to make it less ugly? 1810 GuiInterface.prototype.GetTraderNumber = function(player, differentPlayer) 1809 1811 { 1810 1812 var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); 1811 var traders = cmpRangeManager.GetEntitiesByPlayer( player).filter( function(e){1813 var traders = cmpRangeManager.GetEntitiesByPlayer(differentPlayer ? differentPlayer : player).filter(e => { 1812 1814 return Engine.QueryInterface(e, IID_Trader); 1813 1815 }); 1814 1816 1815 1817 var landTrader = { "total": 0, "trading": 0, "garrisoned": 0 }; 1816 1818 var shipTrader = { "total": 0, "trading": 0 }; … … GuiInterface.prototype.GetTraderNumber = 1842 1844 } 1843 1845 1844 1846 return { "landTrader": landTrader, "shipTrader": shipTrader }; 1845 1847 }; 1846 1848 1847 GuiInterface.prototype.GetTradingGoods = function(player) 1849 // TODO: player will be filled in automatically by ScriptCall, how to make it less ugly? 1850 GuiInterface.prototype.GetTradingGoods = function(player, differentPlayer) 1848 1851 { 1849 return QueryPlayerIDInterface( player).GetTradingGoods();1852 return QueryPlayerIDInterface(differentPlayer ? differentPlayer : player).GetTradingGoods(); 1850 1853 }; 1851 1854 1852 1855 GuiInterface.prototype.OnGlobalEntityRenamed = function(msg) 1853 1856 { 1854 1857 this.renamedEntities.push(msg); -
source/simulation2/system/SimContext.cpp
1 /* Copyright (C) 201 1Wildfire Games.1 /* Copyright (C) 2015 Wildfire Games. 2 2 * This file is part of 0 A.D. 3 3 * 4 4 * 0 A.D. is free software: you can redistribute it and/or modify 5 5 * it under the terms of the GNU General Public License as published by 6 6 * the Free Software Foundation, either version 2 of the License, or … … ScriptInterface& CSimContext::GetScriptI 65 65 return GetComponentManager().GetScriptInterface(); 66 66 } 67 67 68 68 int CSimContext::GetCurrentDisplayedPlayer() const 69 69 { 70 // TODO: use currentDisplayedPlayer and use that for fog-of-war 70 71 if (!g_Game) 71 72 return -1; 72 73 return g_Game->GetPlayerID(); 73 74 } 75 76 void CSimContext::SetCurrentDisplayedPlayer(int player) 77 { 78 currentDisplayedPlayer = player; 79 } -
source/simulation2/system/SimContext.h
public: 51 51 /** 52 52 * Returns the player ID that the current display is being rendered for. 53 53 * Currently relies on g_Game being initialised (evil globals...) 54 54 */ 55 55 int GetCurrentDisplayedPlayer() const; 56 void SetCurrentDisplayedPlayer(int player); 56 57 57 58 private: 58 59 CComponentManager* m_ComponentManager; 59 60 CUnitManager* m_UnitManager; 60 61 CTerrain* m_Terrain; 61 62 62 63 CEntityHandle m_SystemEntity; 63 64 65 int currentDisplayedPlayer = -1; 66 64 67 friend class CSimulation2Impl; 65 68 }; 66 69 67 70 #endif // INCLUDED_SIMCONTEXT