From 5b333f4bba9c460b6be520d0263f669abf9641bf Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sat, 17 Jul 2010 00:21:11 +1200 Subject: [PATCH] Store last color setting; hook server join in a cleaner way --- OpenRA.Game/GameRules/UserSettings.cs | 3 ++ .../Widgets/Delegates/LobbyDelegate.cs | 29 +++++++++++++++++-- OpenRA.Game/World.cs | 3 -- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/OpenRA.Game/GameRules/UserSettings.cs b/OpenRA.Game/GameRules/UserSettings.cs index f7b1254ca6..80ea3b3ecd 100644 --- a/OpenRA.Game/GameRules/UserSettings.cs +++ b/OpenRA.Game/GameRules/UserSettings.cs @@ -56,6 +56,9 @@ namespace OpenRA.GameRules public string LastServer = "localhost:1234"; public string Replay = null; public string PlayerName = "Newbie"; + public Color PlayerColor1 = Color.FromArgb(255,160,238); + public Color PlayerColor2 = Color.FromArgb(68,0,56); + public string[] InitialMods = { "ra" }; // Server settings diff --git a/OpenRA.Game/Widgets/Delegates/LobbyDelegate.cs b/OpenRA.Game/Widgets/Delegates/LobbyDelegate.cs index cc40fb6753..6a8838e922 100644 --- a/OpenRA.Game/Widgets/Delegates/LobbyDelegate.cs +++ b/OpenRA.Game/Widgets/Delegates/LobbyDelegate.cs @@ -21,7 +21,8 @@ using System.Collections.Generic; using System.Drawing; using System.Linq; -using OpenRA.FileFormats; +using OpenRA.FileFormats; +using OpenRA.Network; using OpenRA.Traits; namespace OpenRA.Widgets.Delegates @@ -104,7 +105,7 @@ namespace OpenRA.Widgets.Delegates "lockteams {0}".F(!Game.LobbyInfo.GlobalSettings.LockTeams))); return true; }; - + Game.LobbyInfoChanged += JoinedServer; Game.LobbyInfoChanged += UpdatePlayerList; Game.AddChatLine += lobby.GetWidget("CHAT_DISPLAY").AddLine; @@ -158,6 +159,10 @@ namespace OpenRA.Widgets.Delegates { var c1 = ColorFromHSL(hf, sf, lf); var c2 = ColorFromHSL(hf, sf, r*lf); + + Game.Settings.PlayerColor1 = c1; + Game.Settings.PlayerColor2 = c2; + Game.Settings.Save(); Game.IssueOrder(Order.Command("color {0},{1},{2},{3},{4},{5}".F(c1.R,c1.G,c1.B,c2.R,c2.G,c2.B))); } @@ -204,7 +209,25 @@ namespace OpenRA.Widgets.Delegates MapUid = Game.LobbyInfo.GlobalSettings.Map; Map = Game.AvailableMaps[MapUid]; } - + + + bool hasJoined = false; + void JoinedServer() + { + if (hasJoined) + return; + hasJoined = true; + + if (Game.LocalClient.Name != Game.Settings.PlayerName) + Game.IssueOrder(Order.Command("name " + Game.Settings.PlayerName)); + + if (Game.LocalClient.Color1 != Game.Settings.PlayerColor1 || Game.LocalClient.Color2 != Game.Settings.PlayerColor2) + { + var c1 = Game.Settings.PlayerColor1; + var c2 = Game.Settings.PlayerColor2; + Game.IssueOrder(Order.Command("color {0},{1},{2},{3},{4},{5}".F(c1.R,c1.G,c1.B,c2.R,c2.G,c2.B))); + } + } void UpdatePlayerList() { // This causes problems for people who are in the process of editing their names (the widgets vanish from beneath them) diff --git a/OpenRA.Game/World.cs b/OpenRA.Game/World.cs index c2f4c3f64c..df2c6e7ed5 100644 --- a/OpenRA.Game/World.cs +++ b/OpenRA.Game/World.cs @@ -55,9 +55,6 @@ namespace OpenRA public void SetLocalPlayer(int index) { localPlayerIndex = index; - if (Game.LobbyInfo.Clients.Count > 0 && !string.IsNullOrEmpty(Game.Settings.PlayerName) - && Game.LobbyInfo.Clients[index].Name != Game.Settings.PlayerName) - Game.IssueOrder(Order.Command("name " + Game.Settings.PlayerName)); } public readonly Actor WorldActor;