diff --git a/Subsurface/Content/UI/uiIcons.png b/Subsurface/Content/UI/uiIcons.png index f3e87c5c7..29c4753d6 100644 Binary files a/Subsurface/Content/UI/uiIcons.png and b/Subsurface/Content/UI/uiIcons.png differ diff --git a/Subsurface/Source/Characters/Character.cs b/Subsurface/Source/Characters/Character.cs index c7ece6fc3..1b60e6bf6 100644 --- a/Subsurface/Source/Characters/Character.cs +++ b/Subsurface/Source/Characters/Character.cs @@ -113,8 +113,7 @@ namespace Barotrauma { get; private set; - } - + } private CharacterInfo info; @@ -157,6 +156,8 @@ namespace Barotrauma get { return inventory; } } + public float SpeechBubbleTimer; + private float lockHandsTimer; public bool LockHands { @@ -955,6 +956,8 @@ namespace Barotrauma { if (!Enabled) return; + SpeechBubbleTimer = Math.Max(0.0f, SpeechBubbleTimer - deltaTime); + obstructVisionAmount = Math.Max(obstructVisionAmount - deltaTime, 0.0f); if (inventory!=null) @@ -1133,8 +1136,10 @@ namespace Barotrauma GUI.DrawProgressBar(spriteBatch, healthBarPos, new Vector2(100.0f, 15.0f), health / maxHealth, Color.Lerp(Color.Red, Color.Green, health / maxHealth) * 0.8f); - //GUI.DrawRectangle(spriteBatch, new Rectangle((int)healthBarPos.X - 2, (int)healthBarPos.Y - 2, 100 + 4, 15 + 4), Color.Black, false); - //GUI.DrawRectangle(spriteBatch, new Rectangle((int)healthBarPos.X, (int)healthBarPos.Y, (int)(100.0f * (health / maxHealth)), 15), Color.Red, true); + if (SpeechBubbleTimer > 0.0f) + { + GUI.SpeechBubbleIcon.Draw(spriteBatch, pos - Vector2.UnitY * 100.0f, Color.White * Math.Min(SpeechBubbleTimer, 1.0f)); + } } public void PlaySound(AIController.AiState state) diff --git a/Subsurface/Source/GUI/GUI.cs b/Subsurface/Source/GUI/GUI.cs index 19bb08050..4c63d2726 100644 --- a/Subsurface/Source/GUI/GUI.cs +++ b/Subsurface/Source/GUI/GUI.cs @@ -52,6 +52,12 @@ namespace Barotrauma get { return submarineIcon; } } + public static Sprite SpeechBubbleIcon + { + get; + private set; + } + public static Sprite Arrow { get { return arrow; } @@ -94,6 +100,9 @@ namespace Barotrauma arrow = new Sprite("Content/UI/uiIcons.png", new Rectangle(80, 240, 16, 16), null); arrow.Origin = arrow.size / 2; + SpeechBubbleIcon = new Sprite("Content/UI/uiIcons.png", new Rectangle(0, 129, 65, 61), null); + SpeechBubbleIcon.Origin = SpeechBubbleIcon.size / 2; + Style = new GUIStyle("Content/UI/style.xml"); } diff --git a/Subsurface/Source/Networking/GameClient.cs b/Subsurface/Source/Networking/GameClient.cs index 48636fcae..90754373e 100644 --- a/Subsurface/Source/Networking/GameClient.cs +++ b/Subsurface/Source/Networking/GameClient.cs @@ -977,7 +977,7 @@ namespace Barotrauma.Networking { string command = ChatMessage.GetChatMessageCommand(message, out message).ToLower(); - if (CanUseRadio(Character.Controlled)) type = ChatMessageType.Radio; + if (command=="r" || command=="radio" && CanUseRadio(Character.Controlled)) type = ChatMessageType.Radio; } var chatMessage = ChatMessage.Create( diff --git a/Subsurface/Source/Networking/NetworkMember.cs b/Subsurface/Source/Networking/NetworkMember.cs index 307f70a56..523a7c107 100644 --- a/Subsurface/Source/Networking/NetworkMember.cs +++ b/Subsurface/Source/Networking/NetworkMember.cs @@ -243,10 +243,15 @@ namespace Barotrauma.Networking string displayedText = message.Text; - if (message.Type == ChatMessageType.Default && myCharacter != null && message.Sender != null) + if (message.Sender != null) { - displayedText = message.ApplyDistanceEffect(myCharacter); - if (string.IsNullOrWhiteSpace(displayedText)) return; + if (message.Type == ChatMessageType.Default && myCharacter != null) + { + displayedText = message.ApplyDistanceEffect(myCharacter); + if (string.IsNullOrWhiteSpace(displayedText)) return; + } + + message.Sender.SpeechBubbleTimer = Math.Max(message.Sender.SpeechBubbleTimer, 2.0f); } GameMain.NetLobbyScreen.NewChatMessage(message);