diff --git a/OpenRa.Game/Chat.cs b/OpenRa.Game/Chat.cs index 7dfdea53e4..746962132f 100644 --- a/OpenRa.Game/Chat.cs +++ b/OpenRa.Game/Chat.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using IjwFramework.Types; +using System.Drawing; namespace OpenRa.Game { @@ -10,7 +11,7 @@ namespace OpenRa.Game { const int logLength = 10; - public List> recentLines = new List>(); + public List> recentLines = new List>(); public string typing = ""; public bool isChatting = false; @@ -19,7 +20,7 @@ namespace OpenRa.Game if (isChatting && typing.Length > 0) { Game.controller.AddOrder(Order.Chat(Game.LocalPlayer, typing)); - AddLine(Game.LocalPlayer.PlayerName, typing); + AddLine(Game.LocalPlayer, typing); } typing = ""; @@ -37,9 +38,26 @@ namespace OpenRa.Game typing += c; } - public void AddLine(string from, string text) + static readonly Color[] paletteColors = { - recentLines.Add(Pair.New(from, text)); + Color.FromArgb(228, 200, 112), + Color.FromArgb(56, 72, 125), + Color.FromArgb(238, 0, 0), + Color.FromArgb(198,97,0), + Color.FromArgb(28,109,97), + Color.FromArgb(153,76,53), + Color.FromArgb(76,101,60), + Color.FromArgb(133,113,101), + }; + + public void AddLine(Player p, string text) + { + AddLine(paletteColors[p.Palette], p.PlayerName, text); + } + + public void AddLine(Color c, string from, string text) + { + recentLines.Add(Tuple.New(c, from, text)); Game.PlaySound("rabeep1.aud", false); while (recentLines.Count > logLength) recentLines.RemoveAt(0); } diff --git a/OpenRa.Game/Chrome.cs b/OpenRa.Game/Chrome.cs index f21d274ebf..21f1d271e2 100644 --- a/OpenRa.Game/Chrome.cs +++ b/OpenRa.Game/Chrome.cs @@ -129,7 +129,7 @@ namespace OpenRa.Game var chatpos = new int2( 400, Game.viewport.Height - 20 ); if (Game.chat.isChatting) - RenderChatLine(Pair.New("Chat:", Game.chat.typing), chatpos); + RenderChatLine(Tuple.New(Color.White, "Chat:", Game.chat.typing), chatpos); foreach (var line in Game.chat.recentLines.AsEnumerable().Reverse()) { @@ -138,11 +138,11 @@ namespace OpenRa.Game } } - void RenderChatLine(Pair line, int2 p) + void RenderChatLine(Tuple line, int2 p) { - var size = renderer.MeasureText(line.First); - renderer.DrawText(line.First, p, Color.Red); - renderer.DrawText(line.Second, p + new int2(size.X + 10, 0), Color.White); + var size = renderer.MeasureText(line.b); + renderer.DrawText(line.b, p, line.a); + renderer.DrawText(line.c, p + new int2(size.X + 10, 0), Color.White); } string currentTab = "Building"; diff --git a/OpenRa.Game/UnitOrders.cs b/OpenRa.Game/UnitOrders.cs index 795427c9c4..43b49d29a3 100755 --- a/OpenRa.Game/UnitOrders.cs +++ b/OpenRa.Game/UnitOrders.cs @@ -3,6 +3,7 @@ using System.Linq; using IjwFramework.Types; using OpenRa.Game.GameRules; using OpenRa.Game.Traits; +using System.Drawing; namespace OpenRa.Game { @@ -99,30 +100,30 @@ namespace OpenRa.Game } case "Chat": { - Game.chat.AddLine(order.Player.PlayerName + ":", order.TargetString); + Game.chat.AddLine(order.Player, order.TargetString); break; } case "ToggleReady": { - Game.chat.AddLine(order.Player.PlayerName, "is " + order.TargetString ); + Game.chat.AddLine(order.Player, "is " + order.TargetString ); break; } case "AssignPlayer": { Game.LocalPlayer = order.Player; - Game.chat.AddLine(order.Player.PlayerName, "is now YOU."); + Game.chat.AddLine(order.Player, "is now YOU."); break; } case "SetName": { - Game.chat.AddLine(order.Player.PlayerName, "is now known as " + order.TargetString); + Game.chat.AddLine(order.Player, "is now known as " + order.TargetString); order.Player.PlayerName = order.TargetString; break; } case "SetRace": { order.Player.Race = order.TargetString == "0" ? Race.Soviet : Race.Allies; - Game.chat.AddLine(order.Player.PlayerName, "is now playing {0}".F(order.Player.Race)); + Game.chat.AddLine(order.Player, "is now playing {0}".F(order.Player.Race)); break; } case "SetLag": @@ -130,24 +131,24 @@ namespace OpenRa.Game int lag = int.Parse(order.TargetString); if (Game.orderManager.GameStarted) { - Game.chat.AddLine("Server", "Failed to change lag to {0} frames".F(lag)); + Game.chat.AddLine(Color.White, "Server", "Failed to change lag to {0} frames".F(lag)); return; } Game.orderManager.FramesAhead = lag; - Game.chat.AddLine("Server", "Order lag is now {0} frames.".F(lag)); + Game.chat.AddLine(Color.White, "Server", "Order lag is now {0} frames.".F(lag)); break; } case "SetPalette": { int palette = int.Parse(order.TargetString); - Game.chat.AddLine(order.Player.PlayerName, "has changed color to {0}".F(palette)); + Game.chat.AddLine(order.Player, "has changed color to {0}".F(palette)); order.Player.Palette = palette; break; } case "StartGame": { - Game.chat.AddLine("Server:", "The game has started."); + Game.chat.AddLine(Color.White, "Server", "The game has started."); Game.orderManager.StartGame(); break; }