bring the Diplomacy menu back to life, but

- rename LockTeams to FragileAlliances to avoid confusion
- only allow it in Free-For-All, not Team games or Missions
- grey out non-functional buttons and disabled checkboxes
This commit is contained in:
Matthias Mailänder
2013-03-22 18:31:04 +01:00
parent aa6f12f0a1
commit 15324b1f1a
7 changed files with 38 additions and 7 deletions

View File

@@ -82,7 +82,7 @@ namespace OpenRA.Network
public string[] Mods = { "ra" }; // mod names
public int OrderLatency = 3;
public int RandomSeed = 0;
public bool LockTeams = true; // don't allow team changes after game start.
public bool FragileAlliances = false; // Allow diplomatic stance changes after game start.
public bool AllowCheats = false;
public bool Dedicated;
public string Difficulty;

View File

@@ -163,7 +163,7 @@ namespace OpenRA.Network
case "SetStance":
{
if (Game.orderManager.LobbyInfo.GlobalSettings.LockTeams)
if (!Game.orderManager.LobbyInfo.GlobalSettings.FragileAlliances)
return;
var targetPlayer = order.Player.World.Players.FirstOrDefault(p => p.InternalName == order.TargetString);

View File

@@ -56,7 +56,8 @@ namespace OpenRA.Widgets
var textSize = font.Measure(Text);
font.DrawText(Text,
new float2(rect.Left + rect.Height * 1.5f, RenderOrigin.Y - BaseLine + (Bounds.Height - textSize.Y)/2), Color.White);
new float2(rect.Left + rect.Height * 1.5f, RenderOrigin.Y - BaseLine + (Bounds.Height - textSize.Y)/2),
disabled ? Color.Gray : Color.White);
if (IsChecked() || (Depressed && HasPressedState && !disabled))
{

View File

@@ -292,7 +292,7 @@ namespace OpenRA.Mods.RA.Server
server.SyncLobbyInfo();
return true;
}},
{ "lockteams",
{ "fragilealliance",
s =>
{
if (!client.IsAdmin)
@@ -301,7 +301,7 @@ namespace OpenRA.Mods.RA.Server
return true;
}
bool.TryParse(s, out server.lobbyInfo.GlobalSettings.LockTeams);
bool.TryParse(s, out server.lobbyInfo.GlobalSettings.FragileAlliances);
server.SyncLobbyInfo();
return true;
}},

View File

@@ -111,6 +111,9 @@ namespace OpenRA.Mods.RA.Widgets.Logic
GetText = () => world.LocalPlayer.Stances[ pp ].ToString(),
};
if (!p.World.LobbyInfo.GlobalSettings.FragileAlliances)
myStance.Disabled = true;
myStance.OnMouseDown = mi => ShowDropDown(pp, myStance);
bg.AddChild(myStance);
@@ -138,7 +141,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic
void SetStance(ButtonWidget bw, Player p, Stance ss)
{
if (p.World.LobbyInfo.GlobalSettings.LockTeams)
if (!p.World.LobbyInfo.GlobalSettings.FragileAlliances)
return; // team changes are banned
// NOTE(jsd): Abuse of the type system here with `CPos`

View File

@@ -36,6 +36,8 @@ namespace OpenRA.Mods.RA.Widgets.Logic
readonly Action onExit;
readonly OrderManager orderManager;
public bool TeamGame;
// Listen for connection failures
void ConnectionStateChanged(OrderManager om)
{
@@ -204,6 +206,17 @@ namespace OpenRA.Mods.RA.Widgets.Logic
"crates {0}".F(!orderManager.LobbyInfo.GlobalSettings.Crates)));
}
var fragileAlliance = lobby.GetOrNull<CheckboxWidget>("FRAGILEALLIANCES_CHECKBOX");
if (fragileAlliance != null)
{
fragileAlliance.IsChecked = () => orderManager.LobbyInfo.GlobalSettings.FragileAlliances;
fragileAlliance.IsDisabled = () => !Game.IsHost || gameStarting || orderManager.LocalClient == null
|| orderManager.LocalClient.IsReady || TeamGame; // only available in FFA
fragileAlliance.OnClick = () => orderManager.IssueOrder(Order.Command(
"fragilealliance {0}".F(!orderManager.LobbyInfo.GlobalSettings.FragileAlliances)));
};
var difficulty = lobby.GetOrNull<DropDownButtonWidget>("DIFFICULTY_DROPDOWNBUTTON");
if (difficulty != null)
{
@@ -326,6 +339,8 @@ namespace OpenRA.Mods.RA.Widgets.Logic
void UpdatePlayerList()
{
var idx = 0;
TeamGame = false;
foreach (var kv in orderManager.LobbyInfo.Slots)
{
var key = kv.Key;
@@ -414,6 +429,9 @@ namespace OpenRA.Mods.RA.Widgets.Logic
team.OnMouseDown = _ => LobbyUtils.ShowTeamDropDown(team, client, orderManager, Map);
team.GetText = () => (client.Team == 0) ? "-" : client.Team.ToString();
if (slot.LockTeam || client.Team > 0)
TeamGame = true;
if (client.Bot == null)
{
// local player
@@ -552,6 +570,9 @@ namespace OpenRA.Mods.RA.Widgets.Logic
while (Players.Children.Count > idx)
Players.RemoveChild(Players.Children[idx]);
if (orderManager.LobbyInfo.GlobalSettings.FragileAlliances && TeamGame)
orderManager.IssueOrder(Order.Command("fragilealliance false")); // No back-stabbing in Team games.
}
void CycleReady()

View File

@@ -420,9 +420,15 @@ Background@SERVER_LOBBY:
Width: 80
Height: 20
Text: Crates
Checkbox@FRAGILEALLIANCES_CHECKBOX:
X: PARENT_RIGHT-154
Y: PARENT_BOTTOM-119
Width: 80
Height: 20
Text: Fragile Alliances
Button@DISCONNECT_BUTTON:
X:PARENT_RIGHT-154
Y:PARENT_BOTTOM-99
Y:PARENT_BOTTOM-94
Width:120
Height:25
Text:Disconnect