parent
a3ddd7b1b3
commit
9930500661
@ -258,18 +258,41 @@ function openDiplomacy()
|
||||
// Don't display this for ourself and our locked team members
|
||||
if (i != we && !(players[we].teamsLocked && players[we].team != -1 && players[we].team == players[i].team))
|
||||
{
|
||||
getGUIObjectByName("diplomacyPlayerTheirs["+(i-1)+"]").caption = (players[i].isAlly[we] ? "Ally" : (players[i].isNeutral[we] ? "Neutral" : "Enemy") );
|
||||
|
||||
// Set up the buttons
|
||||
for each (var setting in ["ally", "neutral", "enemy"])
|
||||
{
|
||||
var button = getGUIObjectByName("diplomacyPlayer"+toTitleCase(setting)+"["+(i-1)+"]");
|
||||
// Disable the button with the current setting
|
||||
// TODO: Needs new graphics for the button (enabled/disabled) to make it
|
||||
// look more like a checkbox
|
||||
button.enabled = !((setting=="ally" && players[we].isAlly[i])
|
||||
|| (setting=="neutral" && players[we].isNeutral[i])
|
||||
|| (setting=="enemy" && players[we].isEnemy[i]));
|
||||
|
||||
if (setting == "ally")
|
||||
{
|
||||
if (players[we].isAlly[i])
|
||||
button.caption = "o";
|
||||
else if (players[we].wantAlly[i])
|
||||
button.caption = "x";
|
||||
else if (players[i].wantAlly[we])
|
||||
button.caption = "+";
|
||||
else
|
||||
button.caption = "";
|
||||
}
|
||||
else if (setting == "neutral")
|
||||
{
|
||||
if (players[we].isNeutral[i])
|
||||
button.caption = "o";
|
||||
else if (players[we].wantNeutral[i])
|
||||
button.caption = "x";
|
||||
else if (players[i].wantNeutral[we])
|
||||
button.caption = "+";
|
||||
else
|
||||
button.caption = "";
|
||||
}
|
||||
else // "enemy"
|
||||
{
|
||||
if (players[we].isEnemy[i])
|
||||
button.caption = "o";
|
||||
else
|
||||
button.caption = "";
|
||||
}
|
||||
|
||||
button.onpress = (function(e){ return function() { setDiplomacy(e) } })({"player": i, "to": setting});
|
||||
button.hidden = false;
|
||||
}
|
||||
|
@ -287,17 +287,24 @@ function addChatMessage(msg, playerAssignments)
|
||||
break;
|
||||
case "diplomacy":
|
||||
// TODO: Proper wording for all cases
|
||||
// TODO: If the second player sets the diplomacy to the same as you
|
||||
// have already set, display something like "You and username are
|
||||
// now msg.status" and if the other players setting is more (eg you
|
||||
// set it to neutral he to ally) than your setting display something
|
||||
// like "Player wants to be msg.status with you" in addition. Breaking
|
||||
// alliances/declaring war should be done with only one message (maybe
|
||||
// change the message generation in Commands.js)
|
||||
if (msg.player == Engine.GetPlayerID())
|
||||
{
|
||||
username= escapeText(g_Players[msg.player1].name);
|
||||
playerColor = g_Players[msg.player1].color.r + " " + g_Players[msg.player1].color.g + " " + g_Players[msg.player1].color.b;
|
||||
formatted = "You are now "+msg.status+" with [color=\"" + playerColor + "\"]"+username + "[/color].";
|
||||
formatted = "You want to be "+msg.status+" with [color=\"" + playerColor + "\"]"+username + "[/color].";
|
||||
}
|
||||
else if (msg.player1 == Engine.GetPlayerID())
|
||||
{
|
||||
username= escapeText(g_Players[msg.player].name);
|
||||
playerColor = g_Players[msg.player].color.r + " " + g_Players[msg.player].color.g + " " + g_Players[msg.player].color.b;
|
||||
formatted = "[color=\"" + playerColor + "\"]" + username + "[/color] is now " + msg.status + " with you."
|
||||
formatted = "[color=\"" + playerColor + "\"]" + username + "[/color] wants to be " + msg.status + " with you."
|
||||
}
|
||||
else // No need for other players to know of this.
|
||||
return;
|
||||
|
@ -266,13 +266,13 @@
|
||||
<object name="diplomacyPlayer[n]" size="0 0 100% 20" type="image" hidden="false">
|
||||
<object name="diplomacyPlayerName[n]" size="0 0 150 100%" type="text" style="chatPanel" ghost="true"/>
|
||||
<object name="diplomacyPlayerCiv[n]" size="150 0 250 100%" type="text" style="chatPanel" ghost="true"/>
|
||||
<object name="diplomacyPlayerTheirs[n]" size="250 0 310 100%" type="text" style="chatPanel" ghost="true"/>
|
||||
<object name="diplomacyPlayerTeam[n]" size="310 0 360 100%" type="text" style="chatPanel" ghost="true"/>
|
||||
<!-- TODO add tooltips to those 3 ? -->
|
||||
<object name="diplomacyPlayerTeam[n]" size="250 0 310 100%" type="text" style="chatPanel" ghost="true"/>
|
||||
|
||||
<object name="diplomacyPlayerAlly[n]" size="100%-180 0 100%-160 100%" type="button" style="StoneButton" hidden="true"/>
|
||||
<object name="diplomacyPlayerNeutral[n]" size="100%-160 0 100%-140 100%" type="button" style="StoneButton" hidden="true"/>
|
||||
<object name="diplomacyPlayerEnemy[n]" size="100%-140 0 100%-120 100%" type="button" style="StoneButton" hidden="true"/>
|
||||
|
||||
|
||||
<!-- Tribute -->
|
||||
<object name="diplomacyPlayerTributeFood[n]" size="100%-110 0 100%-90 100%" type="button" style="iconButton" tooltip="Food" hidden="true">
|
||||
<object name="diplomacyPlayerTributeFoodImage[n]" type="image" size="0 0 100% 100%" sprite="stretched:session/icons/resources/food.png" ghost="true"/>
|
||||
</object>
|
||||
|
@ -63,6 +63,8 @@ function getPlayerData(playerAssignments)
|
||||
"isAlly": playerState.isAlly,
|
||||
"isNeutral": playerState.isNeutral,
|
||||
"isEnemy": playerState.isEnemy,
|
||||
"wantAlly": playerState.wantAlly,
|
||||
"wantNeutral": playerState.wantNeutral,
|
||||
"guid": undefined, // network guid for players controlled by hosts
|
||||
"disconnected": false // flag for host-controlled players who have left the game
|
||||
};
|
||||
|
@ -97,8 +97,7 @@ EndGameManager.prototype.UpdatePlayerStates = function()
|
||||
for (var j = 0; j < numPlayers && onlyAlliesLeft; j++)
|
||||
{
|
||||
if (cmpPlayers[j].GetState() == "active"
|
||||
&& (cmpPlayers[i].IsEnemy(j+1) || cmpPlayers[j].IsEnemy(i+1)
|
||||
|| cmpPlayers[i].IsNeutral(j+1) || cmpPlayers[j].IsNeutral(i+1)))
|
||||
&& (cmpPlayers[i].IsEnemy(j+1) || cmpPlayers[i].IsNeutral(j+1)))
|
||||
{ // Only need to find an active non-allied player
|
||||
onlyAlliesLeft = false;
|
||||
}
|
||||
|
@ -66,11 +66,16 @@ GuiInterface.prototype.GetSimulationState = function(player)
|
||||
var allies = [];
|
||||
var neutrals = [];
|
||||
var enemies = [];
|
||||
for (var j = 0; j <= n; ++j)
|
||||
var wantAllies = [];
|
||||
var wantNeutral = [];
|
||||
for (var j = 0; j < n; ++j)
|
||||
{
|
||||
allies[j] = cmpPlayer.IsAlly(j);
|
||||
neutrals[j] = cmpPlayer.IsNeutral(j);
|
||||
enemies[j] = cmpPlayer.IsEnemy(j);
|
||||
|
||||
wantAllies[j] = !allies[j] && cmpPlayer.WantAlly(j);
|
||||
wantNeutral[j] = !allies[j] && !neutrals[j] && cmpPlayer.WantNeutral(j);
|
||||
}
|
||||
var playerData = {
|
||||
"name": cmpPlayer.GetName(),
|
||||
@ -88,6 +93,8 @@ GuiInterface.prototype.GetSimulationState = function(player)
|
||||
"isAlly": allies,
|
||||
"isNeutral": neutrals,
|
||||
"isEnemy": enemies,
|
||||
"wantAlly": wantAllies,
|
||||
"wantNeutral": wantNeutral,
|
||||
"buildLimits": cmpPlayerBuildLimits.GetLimits(),
|
||||
"buildCounts": cmpPlayerBuildLimits.GetCounts(),
|
||||
"techModifications": cmpTechnologyManager.GetTechModifications()
|
||||
|
@ -277,24 +277,48 @@ Player.prototype.SetDiplomacy = function(dipl)
|
||||
|
||||
Player.prototype.SetDiplomacyIndex = function(idx, value)
|
||||
{
|
||||
var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
|
||||
if (!cmpPlayerManager)
|
||||
return;
|
||||
|
||||
var cmpPlayer = Engine.QueryInterface(cmpPlayerManager.GetPlayerByID(idx), IID_Player);
|
||||
if (!cmpPlayer)
|
||||
return;
|
||||
|
||||
// You can have alliances with other players,
|
||||
if (this.teamsLocked)
|
||||
{
|
||||
var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
|
||||
if (cmpPlayerManager)
|
||||
// but can't stab your team members in the back
|
||||
if (this.team == -1 || cmpPlayer && this.team != cmpPlayer.GetTeam())
|
||||
{
|
||||
var cmpPlayer = Engine.QueryInterface(cmpPlayerManager.GetPlayerByID(idx), IID_Player);
|
||||
// but can't stab your team members in the back
|
||||
if (this.team == -1 || cmpPlayer && this.team != cmpPlayer.GetTeam())
|
||||
// Break alliance or declare war
|
||||
if (Math.min(this.diplomacy[idx],cmpPlayer.diplomacy[this.playerID]) > value)
|
||||
{
|
||||
this.diplomacy[idx] = value;
|
||||
Engine.BroadcastMessage(MT_DiplomacyChanged, {"player": this.playerID});
|
||||
cmpPlayer.SetDiplomacyIndex(this.playerID, value);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.diplomacy[idx] = value;
|
||||
}
|
||||
Engine.BroadcastMessage(MT_DiplomacyChanged, {"player": this.playerID});
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
this.diplomacy[idx] = value;
|
||||
// Break alliance or declare war
|
||||
if (Math.min(this.diplomacy[idx],cmpPlayer.diplomacy[this.playerID]) > value)
|
||||
{
|
||||
// This is duplicated because otherwise we get too much recursion
|
||||
this.diplomacy[idx] = value;
|
||||
// Diplomacy is mutual
|
||||
cmpPlayer.SetDiplomacyIndex(this.playerID, value);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.diplomacy[idx] = value;
|
||||
}
|
||||
|
||||
Engine.BroadcastMessage(MT_DiplomacyChanged, {"player": this.playerID});
|
||||
}
|
||||
};
|
||||
@ -312,11 +336,7 @@ Player.prototype.UpdateSharedLos = function()
|
||||
var sharedLos = [];
|
||||
for (var i = 0; i < this.diplomacy.length; ++i)
|
||||
if (this.IsAlly(i))
|
||||
{
|
||||
var cmpPlayer = Engine.QueryInterface(cmpPlayerManager.GetPlayerByID(i), IID_Player);
|
||||
if (cmpPlayer && cmpPlayer.IsAlly(this.playerID))
|
||||
sharedLos.push(i);
|
||||
}
|
||||
sharedLos.push(i);
|
||||
|
||||
cmpRangeManager.SetSharedLos(this.playerID, sharedLos);
|
||||
};
|
||||
@ -380,6 +400,23 @@ Player.prototype.SetAlly = function(id)
|
||||
* Check if given player is our ally
|
||||
*/
|
||||
Player.prototype.IsAlly = function(id)
|
||||
{
|
||||
var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
|
||||
if (!cmpPlayerManager)
|
||||
return false;
|
||||
|
||||
var cmpPlayer = Engine.QueryInterface(cmpPlayerManager.GetPlayerByID(id), IID_Player);
|
||||
if (!cmpPlayer)
|
||||
return false;
|
||||
|
||||
return Math.min(this.diplomacy[id],cmpPlayer.diplomacy[this.playerID]) > 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if we want to be allied with the given player.
|
||||
* NOTE: Returns true if we are already allies.
|
||||
*/
|
||||
Player.prototype.WantAlly = function(id)
|
||||
{
|
||||
return this.diplomacy[id] > 0;
|
||||
};
|
||||
@ -394,7 +431,15 @@ Player.prototype.SetEnemy = function(id)
|
||||
*/
|
||||
Player.prototype.IsEnemy = function(id)
|
||||
{
|
||||
return this.diplomacy[id] < 0;
|
||||
var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
|
||||
if (!cmpPlayerManager)
|
||||
return false;
|
||||
|
||||
var cmpPlayer = Engine.QueryInterface(cmpPlayerManager.GetPlayerByID(id), IID_Player);
|
||||
if (!cmpPlayer)
|
||||
return false;
|
||||
|
||||
return Math.min(this.diplomacy[id],cmpPlayer.diplomacy[this.playerID]) < 0;
|
||||
};
|
||||
|
||||
Player.prototype.SetNeutral = function(id)
|
||||
@ -407,7 +452,24 @@ Player.prototype.SetNeutral = function(id)
|
||||
*/
|
||||
Player.prototype.IsNeutral = function(id)
|
||||
{
|
||||
return this.diplomacy[id] == 0;
|
||||
var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
|
||||
if (!cmpPlayerManager)
|
||||
return false;
|
||||
|
||||
var cmpPlayer = Engine.QueryInterface(cmpPlayerManager.GetPlayerByID(id), IID_Player);
|
||||
if (!cmpPlayer)
|
||||
return false;
|
||||
|
||||
return Math.min(this.diplomacy[id],cmpPlayer.diplomacy[this.playerID]) == 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if we want to be neutral with the given player.
|
||||
* NOTE: Returns true if we are already neutral or above.
|
||||
*/
|
||||
Player.prototype.WantNeutral = function(id)
|
||||
{
|
||||
return this.diplomacy[id] >= 0;
|
||||
};
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user