Implement a developer overlay command to change the current player ID (very useful for AI development).

This was SVN commit r13606.
This commit is contained in:
alpha123 2013-07-29 00:53:44 +00:00
parent 53074c7715
commit 20e7d2224a
3 changed files with 59 additions and 20 deletions

View file

@ -127,6 +127,20 @@ function init(initData, hotloadData)
getGUIObjectByName("civIcon").tooltip = g_CivData[g_Players[Engine.GetPlayerID()].civ].Name;
initMenuPosition(); // set initial position
// Populate player selection dropdown
var playerNames = [];
var playerIDs = [];
for (var player in g_Players)
{
playerNames.push(g_Players[player].name);
playerIDs.push(player);
}
var viewPlayerDropdown = getGUIObjectByName("viewPlayer");
viewPlayerDropdown.list = playerNames;
viewPlayerDropdown.list_data = playerIDs;
viewPlayerDropdown.selected = 1;
// If in Atlas editor, disable the exit button
if (Engine.IsAtlasRunning())
getGUIObjectByName("menuExitButton").enabled = false;
@ -155,6 +169,14 @@ function init(initData, hotloadData)
setTimeout(function() { reportPerformance(60); }, 60000);
}
function selectViewPlayer(playerID)
{
Engine.SetPlayerID(playerID);
if (playerID != 0) {
getGUIObjectByName("civIcon").sprite = "stretched:" + g_CivData[g_Players[playerID].civ].Emblem;
getGUIObjectByName("civIcon").tooltip = g_CivData[g_Players[playerID].civ].Name;
}
}
function reportPerformance(time)
{

View file

@ -255,54 +255,59 @@
</action>
</object>
<object size="0 16 100%-18 32" type="text" style="devCommandsText">Display selection state</object>
<object size="100%-16 16 100% 32" type="checkbox" name="devDisplayState" style="StoneCrossBox"/>
<object size="0 16 100%-18 32" type="text" style="devCommandsText">Change perspective</object>
<object size="100%-16 16 100% 32" type="checkbox" style="StoneCrossBox">
<action on="Press">getGUIObjectByName("viewPlayer").hidden = !this.checked;</action>
</object>
<object size="0 32 100%-18 48" type="text" style="devCommandsText">Pathfinder overlay</object>
<object size="100%-16 32 100% 48" type="checkbox" style="StoneCrossBox">
<object size="0 32 100%-18 48" type="text" style="devCommandsText">Display selection state</object>
<object size="100%-16 32 100% 48" type="checkbox" name="devDisplayState" style="StoneCrossBox"/>
<object size="0 48 100%-18 64" type="text" style="devCommandsText">Pathfinder overlay</object>
<object size="100%-16 48 100% 64" type="checkbox" style="StoneCrossBox">
<action on="Press">Engine.GuiInterfaceCall("SetPathfinderDebugOverlay", this.checked);</action>
</object>
<object size="0 48 100%-18 64" type="text" style="devCommandsText">Obstruction overlay</object>
<object size="100%-16 48 100% 64" type="checkbox" style="StoneCrossBox">
<object size="0 64 100%-18 80" type="text" style="devCommandsText">Obstruction overlay</object>
<object size="100%-16 64 100% 80" type="checkbox" style="StoneCrossBox">
<action on="Press">Engine.GuiInterfaceCall("SetObstructionDebugOverlay", this.checked);</action>
</object>
<object size="0 64 100%-18 80" type="text" style="devCommandsText">Unit motion overlay</object>
<object size="100%-16 64 100% 80" type="checkbox" style="StoneCrossBox">
<object size="0 80 100%-18 96" type="text" style="devCommandsText">Unit motion overlay</object>
<object size="100%-16 80 100% 96" type="checkbox" style="StoneCrossBox">
<action on="Press">g_Selection.SetMotionDebugOverlay(this.checked);</action>
</object>
<object size="0 80 100%-18 96" type="text" style="devCommandsText">Range overlay</object>
<object size="100%-16 80 100% 96" type="checkbox" style="StoneCrossBox">
<object size="0 96 100%-18 112" type="text" style="devCommandsText">Range overlay</object>
<object size="100%-16 96 100% 112" type="checkbox" style="StoneCrossBox">
<action on="Press">Engine.GuiInterfaceCall("SetRangeDebugOverlay", this.checked);</action>
</object>
<object size="0 96 100%-18 112" type="text" style="devCommandsText">Bounding box overlay</object>
<object size="100%-16 96 100% 112" type="checkbox" style="StoneCrossBox">
<object size="0 112 100%-18 128" type="text" style="devCommandsText">Bounding box overlay</object>
<object size="100%-16 112 100% 128" type="checkbox" style="StoneCrossBox">
<action on="Press">Engine.SetBoundingBoxDebugOverlay(this.checked);</action>
</object>
<object size="0 112 100%-18 128" type="text" style="devCommandsText">Restrict camera</object>
<object size="100%-16 112 100% 128" type="checkbox" style="StoneCrossBox" checked="true">
<object size="0 128 100%-18 144" type="text" style="devCommandsText">Restrict camera</object>
<object size="100%-16 128 100% 144" type="checkbox" style="StoneCrossBox" checked="true">
<action on="Press">gameView.constrainCamera = this.checked;</action>
</object>
<object size="0 128 100%-18 144" type="text" style="devCommandsText">Reveal map</object>
<object size="100%-16 128 100% 144" type="checkbox" name="devCommandsRevealMap" style="StoneCrossBox">
<object size="0 144 100%-18 160" type="text" style="devCommandsText">Reveal map</object>
<object size="100%-16 144 100% 160" type="checkbox" name="devCommandsRevealMap" style="StoneCrossBox">
<action on="Press">Engine.PostNetworkCommand({"type": "reveal-map", "enable": this.checked});</action>
</object>
<object size="0 144 100%-18 160" type="text" style="devCommandsText">Enable time warp</object>
<object size="100%-16 144 100% 160" type="checkbox" name="devTimeWarp" style="StoneCrossBox">
<object size="0 160 100%-18 176" type="text" style="devCommandsText">Enable time warp</object>
<object size="100%-16 160 100% 176" type="checkbox" name="devTimeWarp" style="StoneCrossBox">
<action on="Press">
if (this.checked)
messageBox(500, 250, "Note: time warp mode is a developer option, and not intended\nfor use over long periods of time. Using it incorrectly may\ncause the game to run out of memory or crash.", "Time warp mode", 2);
Engine.EnableTimeWarpRecording(this.checked ? 10 : 0);</action>
</object>
<object size="0 160 100%-18 176" type="text" style="devCommandsText">Promote selected units</object>
<object size="100%-16 160 100% 176" type="button" style="StoneCrossBox">
<object size="0 176 100%-18 192" type="text" style="devCommandsText">Promote selected units</object>
<object size="100%-16 176 100% 192" type="button" style="StoneCrossBox">
<action on="Press">Engine.PostNetworkCommand({"type": "promote", "entities": g_Selection.toList()});</action>
</object>
</object>
@ -593,6 +598,11 @@
<!-- ================================ ================================ -->
<object size="50%-48 -26 50%+48 70" name="civIcon" type="image" tooltip_style="sessionToolTipBold"/>
<!-- Switch the view perspective to another player's (largely for AI development) -->
<object size="50%+50 5 50%+150 100%-5" name="viewPlayer" type="dropdown" hidden="true" style="StoneDropDown" tooltip_style="sessionToolTipBold" tooltip="Choose player to view">
<action on="SelectionChange">selectViewPlayer(this.selected);</action>
</object>
<!-- ================================ ================================ -->
<!-- Phase -->
<!-- ================================ ================================ -->

View file

@ -168,6 +168,12 @@ int GetPlayerID(void* UNUSED(cbdata))
return -1;
}
void SetPlayerID(void* UNUSED(cbdata), int id)
{
if (g_Game)
g_Game->SetPlayerID(id);
}
std::wstring GetDefaultPlayerName(void* UNUSED(cbdata))
{
CStr playername;
@ -685,6 +691,7 @@ void GuiScriptingInit(ScriptInterface& scriptInterface)
// Misc functions
scriptInterface.RegisterFunction<std::wstring, std::wstring, &SetCursor>("SetCursor");
scriptInterface.RegisterFunction<int, &GetPlayerID>("GetPlayerID");
scriptInterface.RegisterFunction<void, int, &SetPlayerID>("SetPlayerID");
scriptInterface.RegisterFunction<std::wstring, &GetDefaultPlayerName>("GetDefaultPlayerName");
scriptInterface.RegisterFunction<std::wstring, &GetDefaultMPServer>("GetDefaultMPServer");
scriptInterface.RegisterFunction<void, std::wstring, std::wstring, &SaveMPConfig>("SaveMPConfig");