diff --git a/OpenRA.Game/Network/UnitOrders.cs b/OpenRA.Game/Network/UnitOrders.cs index 16ec3058f1..66dd060a0d 100755 --- a/OpenRA.Game/Network/UnitOrders.cs +++ b/OpenRA.Game/Network/UnitOrders.cs @@ -43,9 +43,10 @@ namespace OpenRA.Network if (client != null && Chrome.chatWidget != null) { var player = Game.world.players.Values.FirstOrDefault(p => p.Index == client.Index); - var isAlly = player != null && Game.world.LocalPlayer != null - && player.Stances[Game.world.LocalPlayer] == Stance.Ally; - + var isAlly = (world.GameHasStarted) ? + player != null && Game.world.LocalPlayer != null && player.Stances[Game.world.LocalPlayer] == Stance.Ally : + client.Team == Game.LocalClient.Team; + if (isAlly) Chrome.chatWidget.AddLine(client, "(Team) " + order.TargetString); } diff --git a/OpenRA.Game/Widgets/Delegates/LobbyDelegate.cs b/OpenRA.Game/Widgets/Delegates/LobbyDelegate.cs index 19ac6c76b3..13833b0d16 100644 --- a/OpenRA.Game/Widgets/Delegates/LobbyDelegate.cs +++ b/OpenRA.Game/Widgets/Delegates/LobbyDelegate.cs @@ -69,6 +69,23 @@ namespace OpenRA.Widgets.Delegates Game.LobbyInfoChanged += UpdatePlayerList; Chrome.chatWidget = lobby.GetWidget("CHAT_DISPLAY") as ChatDisplayWidget; + + + bool teamChat = false; + var chatLabel = lobby.GetWidget("LABEL_CHATTYPE") as LabelWidget; + var chatTextField = lobby.GetWidget("CHAT_TEXTFIELD") as TextFieldWidget; + chatTextField.OnEnterKey = text => + { + var order = (teamChat) ? Order.TeamChat( text ) : Order.Chat( text ); + Game.IssueOrder( order ); + }; + + chatTextField.OnTabKey = text => + { + teamChat ^= true; + chatLabel.Text = (teamChat) ? "Team:" : "Chat:"; + }; + } void UpdatePlayerList() diff --git a/OpenRA.Game/Widgets/TextFieldWidget.cs b/OpenRA.Game/Widgets/TextFieldWidget.cs index 8eec9f997f..ff286184d5 100644 --- a/OpenRA.Game/Widgets/TextFieldWidget.cs +++ b/OpenRA.Game/Widgets/TextFieldWidget.cs @@ -25,9 +25,11 @@ namespace OpenRA.Widgets { class TextFieldWidget : Widget { - string TextBuffer = ""; + public string TextBuffer = ""; public int VisualHeight = 1; - + public Action OnEnterKey = text => {}; + public Action OnTabKey = text => {}; + public TextFieldWidget() : base() { @@ -83,10 +85,13 @@ namespace OpenRA.Widgets if (e.KeyChar == '\r') { if (TextBuffer.Length > 0) - Game.IssueOrder( Order.Chat( TextBuffer ) ); + OnEnterKey(TextBuffer); TextBuffer = ""; } + if (e.KeyChar == '\t') + OnTabKey(TextBuffer); + TypeChar(e.KeyChar); return true; } diff --git a/mods/cnc/menus.yaml b/mods/cnc/menus.yaml index 5d9712079f..108fee95f1 100644 --- a/mods/cnc/menus.yaml +++ b/mods/cnc/menus.yaml @@ -500,8 +500,8 @@ Container: Height:190 Notification: beepy2.aud #rabeep1.aud for ra - Label@LABEL_LOBBY_TEAM: - Id:LABEL_LOBBY_TEAM + Label@LABEL_CHATTYPE: + Id:LABEL_CHATTYPE Width:70 Height:25 X:0