From 3d7a113d75f202a53e9fb4feadeddd76a071b7da Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Thu, 16 May 2019 05:20:29 +0300 Subject: [PATCH] (048b753e6) Merge branch 'dev' into human-ai --- .../BarotraumaClient/LinuxClient.csproj | 7 +- Barotrauma/BarotraumaClient/MacClient.csproj | 7 +- .../Source/Characters/Animation/Ragdoll.cs | 101 +++++-- .../Source/Characters/CharacterHUD.cs | 14 +- .../Source/GUI/GUITextBlock.cs | 4 +- .../BarotraumaClient/Source/GUI/GUITickBox.cs | 19 +- .../Source/GameSession/CrewManager.cs | 247 +++--------------- .../GameModes/Tutorials/DoctorTutorial.cs | 2 +- .../GameModes/Tutorials/MechanicTutorial.cs | 2 +- .../BarotraumaClient/Source/GameSettings.cs | 14 +- .../Items/Components/Machines/Engine.cs | 30 ++- .../Items/Components/Machines/Fabricator.cs | 6 +- .../Items/Components/Machines/Reactor.cs | 40 +-- .../Items/Components/Machines/Steering.cs | 11 + .../Source/Networking/GameClient.cs | 3 + .../Source/Networking/ServerLog.cs | 14 +- .../Source/Networking/ServerSettings.cs | 4 +- .../Source/Networking/SteamManager.cs | 56 +++- .../Source/Networking/Voip/VoipCapture.cs | 3 +- .../Source/Screens/CampaignSetupUI.cs | 7 +- .../Source/Screens/CampaignUI.cs | 10 +- .../Source/Screens/SteamWorkshopScreen.cs | 33 ++- .../Source/Screens/SubEditorScreen.cs | 15 +- .../BarotraumaClient/WindowsClient.csproj | 7 +- Barotrauma/BarotraumaClient/app.config | 68 ++--- Barotrauma/BarotraumaClient/packages.config | 1 - .../Source/Networking/GameServer.cs | 2 + .../BarotraumaShared/SharedCode.projitems | 1 + .../Animation/FishAnimController.cs | 27 ++ .../Animation/HumanoidAnimController.cs | 3 +- .../Source/Characters/Character.cs | 56 +--- .../Source/Characters/Limb.cs | 4 +- .../BarotraumaShared/Source/ContentPackage.cs | 37 ++- .../BarotraumaShared/Source/GameSettings.cs | 22 +- .../Components/Machines/Deconstructor.cs | 19 ++ .../Items/Components/Machines/Steering.cs | 13 + .../BarotraumaShared/Source/Items/Item.cs | 8 + .../BarotraumaShared/Source/Map/Hull.cs | 19 ++ .../BarotraumaShared/Source/Map/Submarine.cs | 2 +- .../Source/Networking/ServerSettings.cs | 2 +- .../BarotraumaShared/Source/PlayerInput.cs | 15 ++ .../BarotraumaShared/Source/Utils/SaveUtil.cs | 12 - .../BarotraumaShared/Submarines/Dugong.sub | Bin 75670 -> 72411 bytes .../BarotraumaShared/Submarines/Orca.sub | Bin 85977 -> 81095 bytes .../BarotraumaShared/Submarines/Typhon.sub | Bin 104707 -> 86046 bytes Barotrauma_Solution.sln | 127 +++++++++ .../CSharp/Concentus/Concentus.csproj | 18 -- 47 files changed, 651 insertions(+), 461 deletions(-) diff --git a/Barotrauma/BarotraumaClient/LinuxClient.csproj b/Barotrauma/BarotraumaClient/LinuxClient.csproj index c74cd30c3..080c09481 100644 --- a/Barotrauma/BarotraumaClient/LinuxClient.csproj +++ b/Barotrauma/BarotraumaClient/LinuxClient.csproj @@ -60,9 +60,6 @@ - - ..\..\Libraries\NuGet\Concentus.1.1.7\lib\portable-net45+win+wpa81+wp80\Concentus.dll - ..\..\Libraries\NuGet\GameAnalytics.Mono.SDK.1.1.12\lib\net45\GameAnalytics.Mono.dll @@ -132,6 +129,10 @@ + + {0e7fee6a-15e5-4a4e-943c-80276003478c} + Concentus + {3af0347c-5a9b-4421-868c-8ee3dbfaebc6} Facepunch.Steamworks diff --git a/Barotrauma/BarotraumaClient/MacClient.csproj b/Barotrauma/BarotraumaClient/MacClient.csproj index f9fdba9c8..99902b0ca 100644 --- a/Barotrauma/BarotraumaClient/MacClient.csproj +++ b/Barotrauma/BarotraumaClient/MacClient.csproj @@ -59,9 +59,6 @@ - - ..\..\Libraries\NuGet\Concentus.1.1.7\lib\portable-net45+win+wpa81+wp80\Concentus.dll - ..\..\Libraries\NuGet\GameAnalytics.Mono.SDK.1.1.12\lib\net45\GameAnalytics.Mono.dll @@ -131,6 +128,10 @@ + + {0e7fee6a-15e5-4a4e-943c-80276003478c} + Concentus + {3af0347c-5a9b-4421-868c-8ee3dbfaebc6} Facepunch.Steamworks diff --git a/Barotrauma/BarotraumaClient/Source/Characters/Animation/Ragdoll.cs b/Barotrauma/BarotraumaClient/Source/Characters/Animation/Ragdoll.cs index bcf133b30..fa30d8a82 100644 --- a/Barotrauma/BarotraumaClient/Source/Characters/Animation/Ragdoll.cs +++ b/Barotrauma/BarotraumaClient/Source/Characters/Animation/Ragdoll.cs @@ -108,6 +108,61 @@ namespace Barotrauma } } + //unconscious/dead characters can't correct their position using AnimController movement + // -> we need to correct it manually + if (!character.AllowInput) + { + float mainLimbDistSqrd = Vector2.DistanceSquared(MainLimb.PullJointWorldAnchorA, Collider.SimPosition); + float mainLimbErrorTolerance = 0.1f; + //if the main limb is roughly at the correct position and the collider isn't moving (much at least), + //don't attempt to correct the position. + if (mainLimbDistSqrd > mainLimbErrorTolerance || Collider.LinearVelocity.LengthSquared() > 0.05f) + { + MainLimb.PullJointWorldAnchorB = Collider.SimPosition; + MainLimb.PullJointEnabled = true; + } + character.SelectedConstruction = character.MemState[0].SelectedItem; + } + + if (character.MemState[0].Animation == AnimController.Animation.CPR) + { + character.AnimController.Anim = AnimController.Animation.CPR; + } + else if (character.AnimController.Anim == AnimController.Animation.CPR) + { + character.AnimController.Anim = AnimController.Animation.None; + } + + Vector2 newVelocity = Collider.LinearVelocity; + Vector2 newPosition = Collider.SimPosition; + float newRotation = Collider.Rotation; + float newAngularVelocity = Collider.AngularVelocity; + Collider.CorrectPosition(character.MemState, out newPosition, out newVelocity, out newRotation, out newAngularVelocity); + + newVelocity = newVelocity.ClampLength(100.0f); + if (!MathUtils.IsValid(newVelocity)) { newVelocity = Vector2.Zero; } + overrideTargetMovement = newVelocity.LengthSquared() > 0.01f ? newVelocity : Vector2.Zero; + + Collider.LinearVelocity = newVelocity; + Collider.AngularVelocity = newAngularVelocity; + + float distSqrd = Vector2.DistanceSquared(newPosition, Collider.SimPosition); + float errorTolerance = character.AllowInput ? 0.01f : 0.2f; + if (distSqrd > errorTolerance) + { + if (distSqrd > 10.0f || !character.AllowInput) + { + Collider.TargetRotation = newRotation; + SetPosition(newPosition, lerp: distSqrd < 5.0f, ignorePlatforms: false); + } + else + { + Collider.TargetRotation = newRotation; + Collider.TargetPosition = newPosition; + Collider.MoveToTargetPosition(true); + } + } + //unconscious/dead characters can't correct their position using AnimController movement // -> we need to correct it manually if (!character.AllowInput) @@ -151,32 +206,34 @@ namespace Barotrauma } } - - if (character.MemLocalState.Count > 120) character.MemLocalState.RemoveRange(0, character.MemLocalState.Count - 120); - character.MemState.Clear(); + character.MemLocalState.Clear(); } - } - - partial void ImpactProjSpecific(float impact, Body body) - { - float volume = MathHelper.Clamp(impact - 3.0f, 0.5f, 1.0f); - - if (body.UserData is Limb limb && character.Stun <= 0f) + else { - if (impact > 3.0f) { PlayImpactSound(limb); } - } - else if (body.UserData is Limb || body == Collider.FarseerBody) - { - if (!character.IsRemotePlayer && impact > ImpactTolerance) + //remove states with a timestamp (there may still timestamp-based states + //in the list if the controlled character switches from timestamp-based interpolation to ID-based) + character.MemState.RemoveAll(m => m.Timestamp > 0.0f); + + for (int i = 0; i < character.MemLocalState.Count; i++) { - SoundPlayer.PlayDamageSound("LimbBlunt", strongestImpact, Collider); + if (character.Submarine == null) + { + //transform in-sub coordinates to outside coordinates + if (character.MemLocalState[i].Position.Y > lowestSubPos) + { + character.MemLocalState[i].TransformInToOutside(); + } + } + else if (currentHull?.Submarine != null) + { + //transform outside coordinates to in-sub coordinates + if (character.MemLocalState[i].Position.Y < lowestSubPos) + { + character.MemLocalState[i].TransformOutToInside(currentHull.Submarine); + } + } + } - } - if (Character.Controlled == character) - { - GameMain.GameScreen.Cam.Shake = Math.Min(Math.Max(strongestImpact, GameMain.GameScreen.Cam.Shake), 3.0f); - } - } if (character.MemState.Count < 1) return; diff --git a/Barotrauma/BarotraumaClient/Source/Characters/CharacterHUD.cs b/Barotrauma/BarotraumaClient/Source/Characters/CharacterHUD.cs index e180f44e6..34cc2ebeb 100644 --- a/Barotrauma/BarotraumaClient/Source/Characters/CharacterHUD.cs +++ b/Barotrauma/BarotraumaClient/Source/Characters/CharacterHUD.cs @@ -366,12 +366,20 @@ namespace Barotrauma private static void DrawOrderIndicator(SpriteBatch spriteBatch, Camera cam, Character character, Order order, float iconAlpha = 1.0f) { - if (order.TargetAllCharacters && !order.HasAppropriateJob(character)) return; + if (order.TargetAllCharacters && !order.HasAppropriateJob(character)) { return; } Entity target = order.ConnectedController != null ? order.ConnectedController.Item : order.TargetEntity; - if (target == null) return; + if (target == null) { return; } - if (!orderIndicatorCount.ContainsKey(target)) orderIndicatorCount.Add(target, 0); + //don't show the indicator if far away and not inside the same sub + //prevents exploiting the indicators in locating the sub + if (character.Submarine != target.Submarine && + Vector2.DistanceSquared(character.WorldPosition, target.WorldPosition) > 1000.0f * 1000.0f) + { + return; + } + + if (!orderIndicatorCount.ContainsKey(target)) { orderIndicatorCount.Add(target, 0); } Vector2 drawPos = target.WorldPosition + Vector2.UnitX * order.SymbolSprite.size.X * 1.5f * orderIndicatorCount[target]; GUI.DrawIndicator(spriteBatch, drawPos, cam, 100.0f, order.SymbolSprite, order.Color * iconAlpha); diff --git a/Barotrauma/BarotraumaClient/Source/GUI/GUITextBlock.cs b/Barotrauma/BarotraumaClient/Source/GUI/GUITextBlock.cs index 65a234dfb..04e0d0848 100644 --- a/Barotrauma/BarotraumaClient/Source/GUI/GUITextBlock.cs +++ b/Barotrauma/BarotraumaClient/Source/GUI/GUITextBlock.cs @@ -1,6 +1,8 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System; +using System.Collections.Generic; +using System.Linq; namespace Barotrauma { @@ -247,7 +249,7 @@ namespace Barotrauma return; } - textPos = new Vector2(rect.Width / 2.0f, rect.Height / 2.0f); + textPos = new Vector2(padding.X + (rect.Width - padding.Z - padding.X) / 2.0f, padding.Y + (rect.Height - padding.Y - padding.W) / 2.0f); origin = TextSize * 0.5f; if (textAlignment.HasFlag(Alignment.Left) && !overflowClipActive) diff --git a/Barotrauma/BarotraumaClient/Source/GUI/GUITickBox.cs b/Barotrauma/BarotraumaClient/Source/GUI/GUITickBox.cs index 889628213..06e197eeb 100644 --- a/Barotrauma/BarotraumaClient/Source/GUI/GUITickBox.cs +++ b/Barotrauma/BarotraumaClient/Source/GUI/GUITickBox.cs @@ -57,14 +57,17 @@ namespace Barotrauma } } - public override string ToolTip + public override ScalableFont Font { - get { return base.ToolTip; } + get + { + return base.Font; + } + set { - base.ToolTip = value; - box.ToolTip = value; - text.ToolTip = value; + base.Font = value; + if (text != null) text.Font = value; } } @@ -73,6 +76,11 @@ namespace Barotrauma get { return box; } } + public GUITextBlock TextBlock + { + get { return text; } + } + public override string ToolTip { get { return base.ToolTip; } @@ -120,6 +128,7 @@ namespace Barotrauma private void ResizeBox() { box.RectTransform.NonScaledSize = new Point(RectTransform.NonScaledSize.Y); + text.RectTransform.NonScaledSize = new Point(Rect.Width - box.Rect.Width, text.Rect.Height); text.RectTransform.AbsoluteOffset = new Point(box.Rect.Width, 0); } diff --git a/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs b/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs index c888d06cd..5300dbd54 100644 --- a/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs +++ b/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs @@ -74,17 +74,12 @@ namespace Barotrauma public CrewManager(XElement element, bool isSinglePlayer) : this(isSinglePlayer) { - if (GameMain.Client != null) + if (!isSinglePlayer) { - //let the server create random conversations in MP + DebugConsole.ThrowError("Cannot add messages to single player chat box in multiplayer mode!\n" + Environment.StackTrace); return; } - List availableSpeakers = Character.CharacterList.FindAll(c => - c.AIController is HumanAIController && - !c.IsDead && - c.SpeechImpediment <= 100.0f); - pendingConversationLines.AddRange(NPCConversation.CreateRandom(availableSpeakers)); - } + if (string.IsNullOrEmpty(text)) { return; } var characterInfo = new CharacterInfo(subElement); characterInfos.Add(characterInfo); @@ -95,6 +90,7 @@ namespace Barotrauma break; } } + ChatBox.AddMessage(ChatMessage.Create(senderName, text, messageType, sender)); } partial void InitProjectSpecific() @@ -242,24 +238,27 @@ namespace Barotrauma public IEnumerable GetCharacters() { - if (characterInfos.Contains(characterInfo)) - { - DebugConsole.ThrowError("Tried to add the same character info to CrewManager twice.\n" + Environment.StackTrace); - return; - } + if (character?.Inventory == null) return null; - characterInfos.Add(characterInfo); + var radioItem = character.Inventory.Items.FirstOrDefault(it => it != null && it.GetComponent() != null); + if (radioItem == null) return null; + if (requireEquipped && !character.HasEquippedItem(radioItem)) return null; + + return radioItem.GetComponent(); } public IEnumerable GetCharacterInfos() { - if (character == null) + if (GameMain.Client != null) { - DebugConsole.ThrowError("Tried to remove a null character from CrewManager.\n" + Environment.StackTrace); + //let the server create random conversations in MP return; } - characters.Remove(character); - if (removeInfo) characterInfos.Remove(character.Info); + List availableSpeakers = Character.CharacterList.FindAll(c => + c.AIController is HumanAIController && + !c.IsDead && + c.SpeechImpediment <= 100.0f); + pendingConversationLines.AddRange(NPCConversation.CreateRandom(availableSpeakers)); } public void AddCharacter(Character character) @@ -633,183 +632,9 @@ namespace Barotrauma { characterListBox.BarScroll = roundedPos; } - var characterArea = new GUIButton(new RectTransform(new Point(characterInfoWidth, frame.Rect.Height), frame.RectTransform, Anchor.CenterLeft), style: "GUITextBox") - { - UserData = character, - Color = frame.Color, - SelectedColor = frame.SelectedColor, - HoverColor = frame.HoverColor, - ToolTip = characterToolTip - }; - - var soundIcon = new GUIImage(new RectTransform(new Point((int)(characterArea.Rect.Height * 0.5f)), characterArea.RectTransform, Anchor.CenterRight) { AbsoluteOffset = new Point(5, 0) }, - "GUISoundIcon") - { - UserData = "soundicon", - CanBeFocused = false, - Visible = true - }; - soundIcon.Color = new Color(soundIcon.Color, 0.0f); - new GUIImage(new RectTransform(new Point((int)(characterArea.Rect.Height * 0.5f)), characterArea.RectTransform, Anchor.CenterRight) { AbsoluteOffset = new Point(5, 0) }, - "GUISoundIconDisabled") - { - UserData = "soundicondisabled", - CanBeFocused = true, - Visible = false - }; - - if (isSinglePlayer) - { - characterArea.OnClicked = CharacterClicked; - } - else - { - characterArea.CanBeFocused = false; - characterArea.CanBeSelected = false; - } - - var characterImage = new GUICustomComponent(new RectTransform(new Point(characterArea.Rect.Height), characterArea.RectTransform, Anchor.CenterLeft), - onDraw: (sb, component) => character.Info.DrawIcon(sb, component.Rect.Center.ToVector2(), targetAreaSize: component.Rect.Size.ToVector2())) - { - CanBeFocused = false, - HoverColor = Color.White, - SelectedColor = Color.White, - ToolTip = characterToolTip - }; - - var characterName = new GUITextBlock(new RectTransform(new Point(characterArea.Rect.Width - characterImage.Rect.Width - soundIcon.Rect.Width - 10, characterArea.Rect.Height), - characterArea.RectTransform, Anchor.CenterRight) { AbsoluteOffset = new Point(soundIcon.Rect.Width + 10, 0) }, - character.Name, textColor: frame.Color, font: GUI.SmallFont, wrap: true) - { - Color = frame.Color, - HoverColor = Color.Transparent, - SelectedColor = Color.Transparent, - CanBeFocused = false, - ToolTip = characterToolTip, - AutoScale = true - }; - - //---------------- order buttons ---------------- - - var orderButtonFrame = new GUILayoutGroup(new RectTransform(new Point(100, frame.Rect.Height), frame.RectTransform) - { AbsoluteOffset = new Point(characterInfoWidth + spacing, 0) }, - isHorizontal: true, childAnchor: Anchor.CenterLeft) - { - AbsoluteSpacing = (int)(10 * GUI.Scale), - UserData = "orderbuttons", - CanBeFocused = false - }; - - //listbox for holding the orders inappropriate for this character - //(so we can easily toggle their visibility) - var wrongOrderList = new GUIListBox(new RectTransform(new Point(50, orderButtonFrame.Rect.Height), orderButtonFrame.RectTransform), isHorizontal: true, style: null) - { - ScrollBarEnabled = false, - ScrollBarVisible = false, - Enabled = false, - Spacing = spacing, - ClampMouseRectToParent = false - }; - wrongOrderList.Content.ClampMouseRectToParent = false; - - for (int i = 0; i < orders.Count; i++) - { - var order = orders[i]; - if (order.TargetAllCharacters) continue; - - RectTransform btnParent = (i >= correctOrderCount + neutralOrderCount) ? - wrongOrderList.Content.RectTransform : - orderButtonFrame.RectTransform; - - var btn = new GUIButton(new RectTransform(new Point(iconSize, iconSize), btnParent, Anchor.CenterLeft), - style: null) - { - UserData = order - }; - - new GUIFrame(new RectTransform(new Vector2(1.5f), btn.RectTransform, Anchor.Center), "OuterGlow") - { - Color = Color.Lerp(order.Color, frame.Color, 0.5f) * 0.8f, - HoverColor = Color.Lerp(order.Color, frame.Color, 0.5f) * 1.0f, - PressedColor = Color.Lerp(order.Color, frame.Color, 0.5f) * 0.6f, - UserData = "selected", - CanBeFocused = false, - Visible = false - }; - - var img = new GUIImage(new RectTransform(Vector2.One, btn.RectTransform), order.Prefab.SymbolSprite); - img.Scale = iconSize / (float)img.SourceRect.Width; - img.Color = Color.Lerp(order.Color, frame.Color, 0.5f); - img.ToolTip = order.Name; - img.HoverColor = Color.Lerp(img.Color, Color.White, 0.5f); - - btn.OnClicked += (GUIButton button, object userData) => - { - if (Character.Controlled == null || Character.Controlled.SpeechImpediment >= 100.0f) return false; - - if (btn.GetChildByUserData("selected").Visible) - { - SetCharacterOrder(character, Order.PrefabList.Find(o => o.AITag == "dismissed"), null, Character.Controlled); - } - else - { - if (order.ItemComponentType != null || order.ItemIdentifiers.Length > 0 || order.Options.Length > 1) - { - CreateOrderTargetFrame(button, character, order); - } - else - { - SetCharacterOrder(character, order, null, Character.Controlled); - } - } - return true; - }; - btn.UserData = order; - btn.ToolTip = order.Name; - - //divider between different groups of orders - if (i == correctOrderCount - 1 || i == correctOrderCount + neutralOrderCount - 1) - { - //TODO: divider sprite - new GUIFrame(new RectTransform(new Point(8, iconSize), orderButtonFrame.RectTransform), style: "GUIButton"); - } - } - - var toggleWrongOrderBtn = new GUIButton(new RectTransform(new Point((int)(30 * GUI.Scale), wrongOrderList.Rect.Height), wrongOrderList.Content.RectTransform), - "", style: "UIToggleButton") - { - UserData = "togglewrongorder", - CanBeFocused = false - }; - - wrongOrderList.RectTransform.NonScaledSize = new Point( - wrongOrderList.Content.Children.Sum(c => c.Rect.Width + wrongOrderList.Spacing), - wrongOrderList.RectTransform.NonScaledSize.Y); - wrongOrderList.RectTransform.SetAsLastChild(); - - new GUIFrame(new RectTransform(new Point( - wrongOrderList.Rect.Width - toggleWrongOrderBtn.Rect.Width - wrongOrderList.Spacing * 2, - wrongOrderList.Rect.Height), wrongOrderList.Content.RectTransform), - style: null) - { - CanBeFocused = false - }; - - //scale to fit the content - orderButtonFrame.RectTransform.NonScaledSize = new Point( - orderButtonFrame.Children.Sum(c => c.Rect.Width + orderButtonFrame.AbsoluteSpacing), - orderButtonFrame.RectTransform.NonScaledSize.Y); - - frame.RectTransform.NonScaledSize = new Point( - characterInfoWidth + spacing + (orderButtonFrame.Rect.Width - wrongOrderList.Rect.Width), - frame.RectTransform.NonScaledSize.Y); - - characterListBox.RectTransform.NonScaledSize = new Point( - characterListBox.Content.Children.Max(c => c.Rect.Width) + wrongOrderList.Rect.Width, - characterListBox.RectTransform.NonScaledSize.Y); - characterListBox.Content.RectTransform.NonScaledSize = characterListBox.RectTransform.NonScaledSize; - characterListBox.UpdateScrollBarSize(); - return frame; + soundIcon.Visible = !muted && !mutedLocally; + soundIconDisabled.Visible = muted || mutedLocally; + soundIconDisabled.ToolTip = TextManager.Get(mutedLocally ? "MutedLocally" : "MutedGlobally"); } private IEnumerable KillCharacterAnim(GUIComponent component) @@ -953,12 +778,6 @@ namespace Barotrauma } return; } - List availableSpeakers = Character.CharacterList.FindAll(c => - c.AIController is HumanAIController && - !c.IsDead && - c.SpeechImpediment <= 100.0f); - pendingConversationLines.AddRange(NPCConversation.CreateRandom(availableSpeakers)); - } character.SetOrder(order, option, orderGiver, speak: orderGiver != character); if (IsSinglePlayer) @@ -1016,23 +835,19 @@ namespace Barotrauma } } } - - character.SetOrder(order, option, orderGiver, speak: orderGiver != character); - if (IsSinglePlayer) + //only one target (or an order with no particular targets), just show options + else { - orderGiver?.Speak( - order.GetChatMessage(character.Name, orderGiver.CurrentHull?.DisplayName, givingOrderToSelf: character == orderGiver, orderOption: option), null); - } - else if (orderGiver != null) - { - OrderChatMessage msg = new OrderChatMessage(order, option, order.TargetItemComponent?.Item, character, orderGiver); - if (GameMain.Client != null) + orderTargetFrame = new GUILayoutGroup(new RectTransform(new Vector2(0.2f + order.Options.Length * 0.1f, 0.18f), GUI.Canvas) + { AbsoluteOffset = new Point(orderButton.Rect.Center.X, orderButton.Rect.Bottom) }, + isHorizontal: true, childAnchor: Anchor.BottomLeft) { - GameMain.Client.SendChatMessage(msg); - } - } - DisplayCharacterOrder(character, order); - } + UserData = character, + Stretch = true + }; + //line connecting the order button to the option buttons + //TODO: sprite + new GUIFrame(new RectTransform(new Vector2(0.5f, 1.0f), orderTargetFrame.RectTransform), style: null); /// /// Create the UI panel that's used to select the target and options for a given order diff --git a/Barotrauma/BarotraumaClient/Source/GameSession/GameModes/Tutorials/DoctorTutorial.cs b/Barotrauma/BarotraumaClient/Source/GameSession/GameModes/Tutorials/DoctorTutorial.cs index 8ad220618..b372f675b 100644 --- a/Barotrauma/BarotraumaClient/Source/GameSession/GameModes/Tutorials/DoctorTutorial.cs +++ b/Barotrauma/BarotraumaClient/Source/GameSession/GameModes/Tutorials/DoctorTutorial.cs @@ -170,7 +170,7 @@ namespace Barotrauma.Tutorials yield return new WaitForSeconds(2.0f); }*/ - TriggerTutorialSegment(0, GameMain.Config.KeyBind(InputType.Use), GameMain.Config.KeyBind(InputType.Deselect)); // Medical supplies objective + TriggerTutorialSegment(0, GameMain.Config.KeyBind(InputType.Select), GameMain.Config.KeyBind(InputType.Deselect)); // Medical supplies objective do { diff --git a/Barotrauma/BarotraumaClient/Source/GameSession/GameModes/Tutorials/MechanicTutorial.cs b/Barotrauma/BarotraumaClient/Source/GameSession/GameModes/Tutorials/MechanicTutorial.cs index ec272ba98..6cc78431d 100644 --- a/Barotrauma/BarotraumaClient/Source/GameSession/GameModes/Tutorials/MechanicTutorial.cs +++ b/Barotrauma/BarotraumaClient/Source/GameSession/GameModes/Tutorials/MechanicTutorial.cs @@ -508,7 +508,7 @@ namespace Barotrauma.Tutorials mechanic.AddActiveObjectiveEntity(mechanic_brokenWall_2, mechanic_repairIcon, mechanic_repairIconColor); do { yield return null; } while (WallHasDamagedSections(mechanic_brokenWall_2)); mechanic.RemoveActiveObjectiveEntity(mechanic_brokenWall_2); - TriggerTutorialSegment(9, GameMain.Config.KeyBind(InputType.Select)); // Repairing machinery (pump) + TriggerTutorialSegment(9, GameMain.Config.KeyBind(InputType.Use)); // Repairing machinery (pump) SetHighlight(mechanic_brokenPump.Item, true); Repairable repairablePumpComponent = mechanic_brokenPump.Item.GetComponent(); do diff --git a/Barotrauma/BarotraumaClient/Source/GameSettings.cs b/Barotrauma/BarotraumaClient/Source/GameSettings.cs index 90399592b..f3c55c859 100644 --- a/Barotrauma/BarotraumaClient/Source/GameSettings.cs +++ b/Barotrauma/BarotraumaClient/Source/GameSettings.cs @@ -657,13 +657,15 @@ namespace Barotrauma { Stretch = true, RelativeSpacing = 0.02f }; var inputNames = Enum.GetValues(typeof(InputType)); + var inputNameBlocks = new List(); for (int i = 0; i < inputNames.Length; i++) { var inputContainer = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.06f),(i <= (inputNames.Length / 2.2f) ? inputColumnLeft : inputColumnRight).RectTransform)) { Stretch = true, IsHorizontal = true, RelativeSpacing = 0.05f, Color = new Color(12, 14, 15, 215) }; - new GUITextBlock(new RectTransform(new Vector2(0.3f, 1.0f), inputContainer.RectTransform, Anchor.TopLeft) { MinSize = new Point(150, 0) }, + var inputName = new GUITextBlock(new RectTransform(new Vector2(0.5f, 1.0f), inputContainer.RectTransform, Anchor.TopLeft) { MinSize = new Point(150, 0) }, TextManager.Get("InputType." + ((InputType)i)) + ": ", font: GUI.SmallFont) { ForceUpperCase = true }; - var keyBox = new GUITextBox(new RectTransform(new Vector2(0.7f, 1.0f), inputContainer.RectTransform), + inputNameBlocks.Add(inputName); + var keyBox = new GUITextBox(new RectTransform(new Vector2(0.5f, 1.0f), inputContainer.RectTransform), text: keyMapping[i].ToString(), font: GUI.SmallFont) { UserData = i @@ -672,12 +674,14 @@ namespace Barotrauma keyBox.SelectedColor = Color.Gold * 0.3f; } + GUITextBlock.AutoScaleAndNormalize(inputNameBlocks); + var resetControlsHolder = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.07f), controlsLayoutGroup.RectTransform), isHorizontal: true) { RelativeSpacing = 0.02f }; - new GUIButton(new RectTransform(new Vector2(0.3f, 1.0f), resetControlsHolder.RectTransform), TextManager.Get("SetDefaultBindings")) + var defaultBindingsButton = new GUIButton(new RectTransform(new Vector2(0.3f, 1.0f), resetControlsHolder.RectTransform), TextManager.Get("SetDefaultBindings")) { ToolTip = TextManager.Get("SetDefaultBindingsToolTip"), OnClicked = (button, data) => @@ -687,7 +691,7 @@ namespace Barotrauma } }; - new GUIButton(new RectTransform(new Vector2(0.3f, 1.0f), resetControlsHolder.RectTransform), TextManager.Get("SetLegacyBindings")) + var legacyBindingsButton = new GUIButton(new RectTransform(new Vector2(0.3f, 1.0f), resetControlsHolder.RectTransform), TextManager.Get("SetLegacyBindings")) { ToolTip = TextManager.Get("SetLegacyBindingsToolTip"), OnClicked = (button, data) => @@ -697,6 +701,8 @@ namespace Barotrauma } }; + GUITextBlock.AutoScaleAndNormalize(defaultBindingsButton.TextBlock, legacyBindingsButton.TextBlock); + //spacing new GUIFrame(new RectTransform(new Vector2(1.0f, 0.02f), generalLayoutGroup.RectTransform), style: null); diff --git a/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Engine.cs b/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Engine.cs index b55286f50..fe1b9aa82 100644 --- a/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Engine.cs +++ b/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Engine.cs @@ -30,25 +30,25 @@ namespace Barotrauma.Items.Components partial void InitProjSpecific(XElement element) { - powerIndicator = new GUITickBox(new RectTransform(new Point(30, 30), GuiFrame.RectTransform) { RelativeOffset = new Vector2(0.05f, 0.15f) }, + var content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.8f), GuiFrame.RectTransform, Anchor.Center)) + { + Stretch = true, + RelativeSpacing = 0.05f + }; + + powerIndicator = new GUITickBox(new RectTransform(new Point(30, 30), content.RectTransform), TextManager.Get("EnginePowered"), style: "IndicatorLightGreen") { CanBeFocused = false }; string powerLabel = TextManager.Get("EngineForce"); - new GUITextBlock(new RectTransform(new Vector2(0.9f, 0.3f), GuiFrame.RectTransform, Anchor.BottomCenter) - { RelativeOffset = new Vector2(0.0f, 0.4f) }, "", textAlignment: Alignment.Center) + new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.3f), content.RectTransform), "", textAlignment: Alignment.Center) { TextGetter = () => { return powerLabel + ": " + (int)(targetForce) + " %"; } }; - var sliderArea = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.25f), GuiFrame.RectTransform, Anchor.BottomCenter) - { RelativeOffset = new Vector2(0.0f, 0.2f) }, isHorizontal: true); - - new GUITextBlock(new RectTransform(new Vector2(0.2f, 1.0f), sliderArea.RectTransform), TextManager.Get("EngineBackwards"), - font: GUI.SmallFont, textAlignment: Alignment.Center); - forceSlider = new GUIScrollBar(new RectTransform(new Vector2(0.6f, 1.0f), sliderArea.RectTransform), barSize: 0.25f, style: "GUISlider") + forceSlider = new GUIScrollBar(new RectTransform(new Vector2(1.0f, 0.3f), content.RectTransform), barSize: 0.2f, style: "GUISlider") { Step = 0.05f, OnMoved = (GUIScrollBar scrollBar, float barScroll) => @@ -66,8 +66,16 @@ namespace Barotrauma.Items.Components return true; } }; - new GUITextBlock(new RectTransform(new Vector2(0.2f, 1.0f), sliderArea.RectTransform), TextManager.Get("EngineForwards"), - font: GUI.SmallFont, textAlignment: Alignment.Center); + + var textArea = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.2f), content.RectTransform), isHorizontal: true) + { + Stretch = true + }; + + new GUITextBlock(new RectTransform(new Vector2(0.5f, 1.0f), textArea.RectTransform), TextManager.Get("EngineBackwards"), + font: GUI.SmallFont, textAlignment: Alignment.CenterLeft); + new GUITextBlock(new RectTransform(new Vector2(0.5f, 1.0f), textArea.RectTransform), TextManager.Get("EngineForwards"), + font: GUI.SmallFont, textAlignment: Alignment.CenterRight); foreach (XElement subElement in element.Elements()) { diff --git a/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Fabricator.cs b/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Fabricator.cs index f01906f3d..6b447391c 100644 --- a/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Fabricator.cs +++ b/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Fabricator.cs @@ -164,13 +164,15 @@ namespace Barotrauma.Items.Components return string.Compare(item1.DisplayName, item2.DisplayName); }); - var sufficientSkillsText = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.15f), itemList.Content.RectTransform), "Sufficient skills to fabricate:", textColor: Color.LightGreen) + var sufficientSkillsText = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.15f), itemList.Content.RectTransform), + TextManager.Get("fabricatorsufficientskills", returnNull: true) ?? "Sufficient skills to fabricate", textColor: Color.LightGreen) { CanBeFocused = false }; sufficientSkillsText.RectTransform.SetAsFirstChild(); - var insufficientSkillsText = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.15f), itemList.Content.RectTransform), "Insufficient skills to fabricate:", textColor: Color.Orange) + var insufficientSkillsText = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.15f), itemList.Content.RectTransform), + TextManager.Get("fabricatorinsufficientskills", returnNull: true) ?? "Insufficient skills to fabricate", textColor: Color.Orange) { CanBeFocused = false }; diff --git a/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Reactor.cs b/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Reactor.cs index b4d53d0e0..7fa05648b 100644 --- a/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Reactor.cs +++ b/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Reactor.cs @@ -110,8 +110,8 @@ namespace Barotrauma.Items.Components GUIFrame columnLeft = new GUIFrame(new RectTransform(new Vector2(0.2f, 1.0f), paddedFrame.RectTransform), style: null); leftHUDColumn = columnLeft; - GUIFrame columnMid = new GUIFrame(new RectTransform(new Vector2(0.45f, 1.0f), paddedFrame.RectTransform), style: null); - GUIFrame columnRight = new GUIFrame(new RectTransform(new Vector2(0.35f, 1.0f), paddedFrame.RectTransform), style: null); + GUIFrame columnMid = new GUIFrame(new RectTransform(new Vector2(0.5f, 1.0f), paddedFrame.RectTransform), style: null); + GUIFrame columnRight = new GUIFrame(new RectTransform(new Vector2(0.3f, 1.0f), paddedFrame.RectTransform), style: null); //---------------------------------------------------------- //left column @@ -136,6 +136,7 @@ namespace Barotrauma.Items.Components btnText.SetTextPos(); warningButtons.Add(warningTexts[i], warningBtn); } + GUITextBlock.AutoScaleAndNormalize(warningButtons.Values.Select(b => b.TextBlock)); inventoryContainer = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.45f), columnLeft.RectTransform, Anchor.BottomLeft), style: null); @@ -143,33 +144,37 @@ namespace Barotrauma.Items.Components //mid column //---------------------------------------------------------- - criticalHeatWarning = new GUITickBox(new RectTransform(new Point(30, 30), columnMid.RectTransform), + criticalHeatWarning = new GUITickBox(new RectTransform(new Point(columnMid.Rect.Width / 3, 30), columnMid.RectTransform), TextManager.Get("ReactorWarningCriticalTemp"), font: GUI.SmallFont, style: "IndicatorLightRed") { CanBeFocused = false }; - lowTemperatureWarning = new GUITickBox(new RectTransform(new Point(30, 30), columnMid.RectTransform) { RelativeOffset = new Vector2(0.3f, 0.0f) }, + lowTemperatureWarning = new GUITickBox(new RectTransform(new Point(columnMid.Rect.Width / 3, 30), columnMid.RectTransform) { RelativeOffset = new Vector2(0.27f, 0.0f) }, TextManager.Get("ReactorWarningCriticalLowTemp"), font: GUI.SmallFont, style: "IndicatorLightRed") { CanBeFocused = false }; - criticalOutputWarning = new GUITickBox(new RectTransform(new Point(30, 30), columnMid.RectTransform) { RelativeOffset = new Vector2(0.75f, 0.0f) }, + criticalOutputWarning = new GUITickBox(new RectTransform(new Point(columnMid.Rect.Width / 3, 30), columnMid.RectTransform) { RelativeOffset = new Vector2(0.66f, 0.0f) }, TextManager.Get("ReactorWarningCriticalOutput"), font: GUI.SmallFont, style: "IndicatorLightRed") { CanBeFocused = false }; + + GUITextBlock.AutoScaleAndNormalize(criticalHeatWarning.TextBlock, lowTemperatureWarning.TextBlock, criticalOutputWarning.TextBlock); + + float gaugeOffset = criticalHeatWarning.Rect.Height / (float)columnMid.Rect.Height + 0.05f; - new GUITextBlock(new RectTransform(new Vector2(0.5f, 0.05f), columnMid.RectTransform) { RelativeOffset = new Vector2(0.0f, 0.25f) }, + new GUITextBlock(new RectTransform(new Vector2(0.5f, 0.05f), columnMid.RectTransform) { RelativeOffset = new Vector2(0.0f, gaugeOffset) }, TextManager.Get("ReactorFissionRate")); - new GUICustomComponent(new RectTransform(new Vector2(0.5f, 0.5f), columnMid.RectTransform) { RelativeOffset = new Vector2(0.0f, 0.3f) }, + new GUICustomComponent(new RectTransform(new Vector2(0.5f, 0.5f), columnMid.RectTransform) { RelativeOffset = new Vector2(0.0f, gaugeOffset + 0.05f) }, DrawFissionRateMeter, null) { ToolTip = TextManager.Get("ReactorTipFissionRate") }; - new GUITextBlock(new RectTransform(new Vector2(0.5f, 0.05f), columnMid.RectTransform, Anchor.TopRight) { RelativeOffset = new Vector2(0.0f, 0.25f) }, + new GUITextBlock(new RectTransform(new Vector2(0.5f, 0.05f), columnMid.RectTransform, Anchor.TopRight) { RelativeOffset = new Vector2(0.0f, gaugeOffset) }, TextManager.Get("ReactorTurbineOutput")); - new GUICustomComponent(new RectTransform(new Vector2(0.5f, 0.5f), columnMid.RectTransform, Anchor.TopRight) { RelativeOffset = new Vector2(0.0f, 0.3f) }, + new GUICustomComponent(new RectTransform(new Vector2(0.5f, 0.5f), columnMid.RectTransform, Anchor.TopRight) { RelativeOffset = new Vector2(0.0f, gaugeOffset + 0.05f) }, DrawTurbineOutputMeter, null) { ToolTip = TextManager.Get("ReactorTipTurbineOutput") @@ -209,12 +214,13 @@ namespace Barotrauma.Items.Components //right column //---------------------------------------------------------- - new GUITextBlock(new RectTransform(new Point(100, 20), columnRight.RectTransform), TextManager.Get("ReactorAutoTemp")) + new GUITextBlock(new RectTransform(new Vector2(0.7f, 0.1f), columnRight.RectTransform), TextManager.Get("ReactorAutoTemp")) { - ToolTip = TextManager.Get("ReactorTipAutoTemp") + ToolTip = TextManager.Get("ReactorTipAutoTemp"), + AutoScale = true }; - autoTempSlider = new GUIScrollBar(new RectTransform(new Point(100, 30), columnRight.RectTransform) { AbsoluteOffset = new Point(0, 30) }, - barSize: 0.5f, style: "OnOffSlider") + autoTempSlider = new GUIScrollBar(new RectTransform(new Vector2(0.6f, 0.15f), columnRight.RectTransform) { RelativeOffset = new Vector2(0.0f, 0.1f) }, + barSize: 0.55f, style: "OnOffSlider") { ToolTip = TextManager.Get("ReactorTipAutoTemp"), IsBooleanSwitch = true, @@ -226,8 +232,10 @@ namespace Barotrauma.Items.Components return true; } }; - - onOffSwitch = new GUIScrollBar(new RectTransform(new Point(50, 80), columnRight.RectTransform, Anchor.TopRight), + var sliderSprite = autoTempSlider.Frame.Style.Sprites[GUIComponent.ComponentState.None].First(); + autoTempSlider.RectTransform.MaxSize = sliderSprite.Sprite.size.ToPoint(); + + onOffSwitch = new GUIScrollBar(new RectTransform(new Vector2(0.4f, 0.3f), columnRight.RectTransform, Anchor.TopRight), barSize: 0.2f, style: "OnOffLever") { IsBooleanSwitch = true, @@ -240,6 +248,8 @@ namespace Barotrauma.Items.Components return true; } }; + var switchSprite = onOffSwitch.Frame.Style.Sprites[GUIComponent.ComponentState.None].First(); + onOffSwitch.RectTransform.MaxSize = switchSprite.Sprite.size.ToPoint(); var lever = onOffSwitch.GetChild(); lever.RectTransform.NonScaledSize = new Point(lever.Rect.Width + 30, lever.Rect.Height); diff --git a/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Steering.cs b/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Steering.cs index 1b93cd18f..831a835f2 100644 --- a/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Steering.cs +++ b/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Steering.cs @@ -38,6 +38,8 @@ namespace Barotrauma.Items.Components private Vector2 keyboardInput = Vector2.Zero; private float inputCumulation; + private bool? swapDestinationOrder; + private bool levelStartSelected; public bool LevelStartSelected { @@ -423,6 +425,15 @@ namespace Barotrauma.Items.Components public override void UpdateHUD(Character character, float deltaTime, Camera cam) { + if (swapDestinationOrder == null) + { + swapDestinationOrder = item.Submarine != null && item.Submarine.FlippedX; + if (swapDestinationOrder.Value) + { + levelStartTickBox.RectTransform.SetAsLastChild(); + } + } + if (steerArea.Rect.Contains(PlayerInput.MousePosition)) { if (!PlayerInput.KeyDown(InputType.Deselect) && !PlayerInput.KeyHit(InputType.Deselect)) diff --git a/Barotrauma/BarotraumaClient/Source/Networking/GameClient.cs b/Barotrauma/BarotraumaClient/Source/Networking/GameClient.cs index e0e35f159..3cbe63212 100644 --- a/Barotrauma/BarotraumaClient/Source/Networking/GameClient.cs +++ b/Barotrauma/BarotraumaClient/Source/Networking/GameClient.cs @@ -1079,6 +1079,8 @@ namespace Barotrauma.Networking bool isTraitor = inc.ReadBoolean(); string traitorTargetName = isTraitor ? inc.ReadString() : null; + bool allowRagdollButton = inc.ReadBoolean(); + serverSettings.ReadMonsterEnabled(inc); GameModePreset gameMode = GameModePreset.List.Find(gm => gm.Identifier == modeIdentifier); @@ -1095,6 +1097,7 @@ namespace Barotrauma.Networking GameMain.LightManager.LosMode = (LosMode)losMode; serverSettings.AllowDisguises = disguisesAllowed; + serverSettings.AllowRagdollButton = allowRagdollButton; if (campaign == null) { diff --git a/Barotrauma/BarotraumaClient/Source/Networking/ServerLog.cs b/Barotrauma/BarotraumaClient/Source/Networking/ServerLog.cs index 85e008a65..e636ac341 100644 --- a/Barotrauma/BarotraumaClient/Source/Networking/ServerLog.cs +++ b/Barotrauma/BarotraumaClient/Source/Networking/ServerLog.cs @@ -24,8 +24,8 @@ namespace Barotrauma.Networking return true; }; - GUIFrame innerFrame = new GUIFrame(new RectTransform(new Vector2(0.3f, 0.4f), LogFrame.RectTransform, Anchor.Center) { MinSize = new Point(600, 420) }); - GUIFrame paddedFrame = new GUIFrame(new RectTransform(new Vector2(0.9f, 0.85f), innerFrame.RectTransform, Anchor.Center) { RelativeOffset = new Vector2(0.0f, -0.03f) }, style: null); + GUIFrame innerFrame = new GUIFrame(new RectTransform(new Vector2(0.5f, 0.5f), LogFrame.RectTransform, Anchor.Center) { MinSize = new Point(700, 500) }); + GUIFrame paddedFrame = new GUIFrame(new RectTransform(new Vector2(0.95f, 0.85f), innerFrame.RectTransform, Anchor.Center) { RelativeOffset = new Vector2(0.0f, -0.03f) }, style: null); new GUITextBlock(new RectTransform(new Vector2(0.75f, 0.05f), paddedFrame.RectTransform, Anchor.TopRight), TextManager.Get("ServerLog.Filter"), font: GUI.SmallFont); GUITextBox searchBox = new GUITextBox(new RectTransform(new Vector2(0.6f, 0.05f), paddedFrame.RectTransform, Anchor.TopRight), font: GUI.SmallFont); @@ -45,20 +45,12 @@ namespace Barotrauma.Networking listBox = new GUIListBox(new RectTransform(new Vector2(0.75f, 0.95f), paddedFrame.RectTransform, Anchor.BottomRight)); - var tickBoxContainer = new GUILayoutGroup(new RectTransform(new Vector2(0.2f, 0.95f), paddedFrame.RectTransform, Anchor.BottomLeft)); - var tickBoxContainer = new GUILayoutGroup(new RectTransform(new Vector2(0.25f, 0.95f), paddedFrame.RectTransform, Anchor.BottomLeft)); int y = 30; List tickBoxes = new List(); foreach (MessageType msgType in Enum.GetValues(typeof(MessageType))) { - var tickBox = new GUITickBox(new RectTransform(new Point(20, 20), tickBoxContainer.RectTransform), TextManager.Get("ServerLog." + messageTypeName[(int)msgType]), font: GUI.SmallFont) - { - Selected = true, - TextColor = messageColor[(int)msgType] - }; - - tickBox.OnSelected += (GUITickBox tb) => + var tickBox = new GUITickBox(new RectTransform(new Point(tickBoxContainer.Rect.Width, 30), tickBoxContainer.RectTransform), TextManager.Get("ServerLog." + messageTypeName[(int)msgType]), font: GUI.SmallFont) { Selected = true, TextColor = messageColor[(int)msgType], diff --git a/Barotrauma/BarotraumaClient/Source/Networking/ServerSettings.cs b/Barotrauma/BarotraumaClient/Source/Networking/ServerSettings.cs index 7607be585..a4e27b2e1 100644 --- a/Barotrauma/BarotraumaClient/Source/Networking/ServerSettings.cs +++ b/Barotrauma/BarotraumaClient/Source/Networking/ServerSettings.cs @@ -295,7 +295,7 @@ namespace Barotrauma.Networking OnClicked = SelectSettingsTab }; } - + GUITextBlock.AutoScaleAndNormalize(tabButtons.Select(b => b.TextBlock)); SelectSettingsTab(tabButtons[0], 0); //"Close" @@ -504,6 +504,8 @@ namespace Barotrauma.Networking return true; }; + GUITextBlock.AutoScaleAndNormalize(buttonHolder.Children.Select(c => ((GUIButton)c).TextBlock)); + foreach (ItemPrefab ip in MapEntityPrefab.List.Where(p => p is ItemPrefab).Select(p => p as ItemPrefab)) { if (!ip.CanBeBought && !ip.Tags.Contains("smallitem")) continue; diff --git a/Barotrauma/BarotraumaClient/Source/Networking/SteamManager.cs b/Barotrauma/BarotraumaClient/Source/Networking/SteamManager.cs index 94131a5b3..4d4f12241 100644 --- a/Barotrauma/BarotraumaClient/Source/Networking/SteamManager.cs +++ b/Barotrauma/BarotraumaClient/Source/Networking/SteamManager.cs @@ -583,6 +583,23 @@ namespace Barotrauma.Steam ContentPackage contentPackage = new ContentPackage(metaDataFilePath); string newContentPackagePath = GetWorkshopItemContentPackagePath(contentPackage); + if (!contentPackage.IsCompatible()) + { + errorMsg = TextManager.Get(contentPackage.GameVersion <= new Version(0, 0, 0, 0) ? "IncompatibleContentPackageUnknownVersion" : "IncompatibleContentPackage") + .Replace("[packagename]", contentPackage.Name) + .Replace("[packageversion]", contentPackage.GameVersion.ToString()) + .Replace("[gameversion]", GameMain.Version.ToString()); + return false; + } + + if (contentPackage.CorePackage && !contentPackage.ContainsRequiredCorePackageFiles(out List missingContentTypes)) + { + errorMsg = TextManager.Get("ContentPackageMissingCoreFiles") + .Replace("[packagename]", contentPackage.Name) + .Replace("[missingfiletypes]", string.Join(", ", missingContentTypes)); + return false; + } + var allPackageFiles = Directory.GetFiles(item.Directory.FullName, "*", SearchOption.AllDirectories); List nonContentFiles = new List(); foreach (string file in allPackageFiles) @@ -599,8 +616,6 @@ namespace Barotrauma.Steam if (!allowFileOverwrite) { - // TODO: If you create a new mod via the workshop interface and enable it, it will show the error msg, but still allows you to enable the content. - if (File.Exists(newContentPackagePath) && !CheckFileEquality(newContentPackagePath, metaDataFilePath)) { errorMsg = TextManager.Get("WorkshopErrorOverwriteOnEnable") @@ -629,12 +644,41 @@ namespace Barotrauma.Steam foreach (ContentFile contentFile in contentPackage.Files) { string sourceFile = Path.Combine(item.Directory.FullName, contentFile.Path); - if (!File.Exists(sourceFile)) { continue; } + + //path not allowed -> the content file must be a reference to an external file (such as some vanilla file outside the Mods folder) if (!ContentPackage.IsModFilePathAllowed(contentFile)) { - DebugConsole.ThrowError(TextManager.Get("WorkshopErrorIllegalPathOnEnable").Replace("[filename]", contentFile.Path)); + //the content package is trying to copy a file to a prohibited path, which is not allowed + if (File.Exists(sourceFile)) + { + errorMsg = TextManager.Get("WorkshopErrorIllegalPathOnEnable").Replace("[filename]", contentFile.Path); + return false; + } + //not trying to copy anything, so this is a reference to an external file + //if the external file doesn't exist, we cannot enable the package + else if (!File.Exists(contentFile.Path)) + { + //TODO: add the error message to localization + errorMsg = TextManager.Get("WorkshopErrorEnableFailed").Replace("[itemname]", item.Title) + " {File \"" + contentFile.Path + "\" not found.}"; + return false; + } continue; } + else if (!File.Exists(sourceFile)) + { + if (File.Exists(contentFile.Path)) + { + //the file is already present in the game folder, all good + continue; + } + else + { + //file not present in either the mod or the game folder -> cannot enable the package + //TODO: add the error message to localization + errorMsg = TextManager.Get("WorkshopErrorEnableFailed").Replace("[itemname]", item.Title) + " {File \"" + contentFile.Path + "\" not found.}"; + return false; + } + } //make sure the destination directory exists Directory.CreateDirectory(Path.GetDirectoryName(contentFile.Path)); @@ -656,7 +700,7 @@ namespace Barotrauma.Steam } catch (Exception e) { - errorMsg = TextManager.Get("WorkshopErrorEnableFailed").Replace("[itemname]", item.Title) + " " + e.Message; + errorMsg = TextManager.Get("WorkshopErrorEnableFailed").Replace("[itemname]", item.Title) + " {" + e.Message + "}"; DebugConsole.NewMessage(errorMsg, Microsoft.Xna.Framework.Color.Red); return false; } @@ -827,7 +871,7 @@ namespace Barotrauma.Steam { foreach (ContentFile contentFile in contentPackage.Files) { - if (!File.Exists(contentFile.Path)) return false; + if (!File.Exists(contentFile.Path)) { return false; } } } diff --git a/Barotrauma/BarotraumaClient/Source/Networking/Voip/VoipCapture.cs b/Barotrauma/BarotraumaClient/Source/Networking/Voip/VoipCapture.cs index bd1df6c87..cd0d3352e 100644 --- a/Barotrauma/BarotraumaClient/Source/Networking/Voip/VoipCapture.cs +++ b/Barotrauma/BarotraumaClient/Source/Networking/Voip/VoipCapture.cs @@ -76,7 +76,8 @@ namespace Barotrauma.Networking if (!GUIMessageBox.MessageBoxes.Any(mb => mb.UserData as string == "capturedevicenotfound")) { GUI.SettingsMenuOpen = false; - new GUIMessageBox(TextManager.Get("Error"), TextManager.Get("VoipCaptureDeviceNotFound")) + new GUIMessageBox(TextManager.Get("Error"), + TextManager.Get("VoipCaptureDeviceNotFound", returnNull: true) ?? "Could not start voice capture, suitable capture device not found.") { UserData = "capturedevicenotfound" }; diff --git a/Barotrauma/BarotraumaClient/Source/Screens/CampaignSetupUI.cs b/Barotrauma/BarotraumaClient/Source/Screens/CampaignSetupUI.cs index e80981d61..d1add6753 100644 --- a/Barotrauma/BarotraumaClient/Source/Screens/CampaignSetupUI.cs +++ b/Barotrauma/BarotraumaClient/Source/Screens/CampaignSetupUI.cs @@ -62,6 +62,8 @@ namespace Barotrauma private GUILayoutGroup subPreviewContainer; + private GUILayoutGroup subPreviewContainer; + private GUIButton loadGameButton; public Action StartNewGame; @@ -105,7 +107,10 @@ namespace Barotrauma // New game left side new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.02f), leftColumn.RectTransform) { MinSize = new Point(0, 20) }, TextManager.Get("SaveName") + ":"); - saveNameBox = new GUITextBox(new RectTransform(new Vector2(1.0f, 0.05f), leftColumn.RectTransform) { MinSize = new Point(0, 20) }, string.Empty); + saveNameBox = new GUITextBox(new RectTransform(new Vector2(1.0f, 0.05f), leftColumn.RectTransform) { MinSize = new Point(0, 20) }, string.Empty) + { + textFilterFunction = (string str) => { return ToolBox.RemoveInvalidFileNameChars(str); } + }; new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.02f), leftColumn.RectTransform) { MinSize = new Point(0, 20) }, TextManager.Get("MapSeed") + ":"); seedBox = new GUITextBox(new RectTransform(new Vector2(1.0f, 0.05f), leftColumn.RectTransform) { MinSize = new Point(0, 20) }, ToolBox.RandomSeed(8)); diff --git a/Barotrauma/BarotraumaClient/Source/Screens/CampaignUI.cs b/Barotrauma/BarotraumaClient/Source/Screens/CampaignUI.cs index 44859a667..95ba8dd5a 100644 --- a/Barotrauma/BarotraumaClient/Source/Screens/CampaignUI.cs +++ b/Barotrauma/BarotraumaClient/Source/Screens/CampaignUI.cs @@ -78,7 +78,6 @@ namespace Barotrauma int i = 0; var tabValues = Enum.GetValues(typeof(Tab)); - float minTextScale = 1.0f; foreach (Tab tab in tabValues) { var tabButton = new GUIButton(new RectTransform(new Vector2(0.25f, 1.0f), tabButtonContainer.RectTransform), @@ -93,17 +92,12 @@ namespace Barotrauma var buttonSprite = tabButton.Style.Sprites[GUIComponent.ComponentState.None][0]; tabButton.RectTransform.MaxSize = new Point( (int)(tabButton.Rect.Height * (buttonSprite.Sprite.size.X / buttonSprite.Sprite.size.Y)), int.MaxValue); + tabButtons.Add(tabButton); tabButton.Font = GUI.LargeFont; - tabButton.TextBlock.AutoScale = true; - minTextScale = Math.Min(tabButton.TextBlock.TextScale, minTextScale); i++; } - - foreach (GUIButton tabButton in tabButtons) - { - tabButton.TextBlock.TextScale = minTextScale; - } + GUITextBlock.AutoScaleAndNormalize(tabButtons.Select(t => t.TextBlock)); // crew tab ------------------------------------------------------------------------- diff --git a/Barotrauma/BarotraumaClient/Source/Screens/SteamWorkshopScreen.cs b/Barotrauma/BarotraumaClient/Source/Screens/SteamWorkshopScreen.cs index a2a112ec5..bd16c716c 100644 --- a/Barotrauma/BarotraumaClient/Source/Screens/SteamWorkshopScreen.cs +++ b/Barotrauma/BarotraumaClient/Source/Screens/SteamWorkshopScreen.cs @@ -309,14 +309,23 @@ namespace Barotrauma return; } + int prevIndex = -1; var existingFrame = listBox.Content.FindChild(item); - if (existingFrame != null) { listBox.Content.RemoveChild(existingFrame); } + if (existingFrame != null) + { + prevIndex = listBox.Content.GetChildIndex(existingFrame); + listBox.Content.RemoveChild(existingFrame); + } var itemFrame = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.1f), listBox.Content.RectTransform, minSize: new Point(0, 80)), style: "ListBoxElement") { UserData = item }; + if (prevIndex > -1) + { + itemFrame.RectTransform.RepositionChildInHierarchy(prevIndex); + } var innerFrame = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.9f), itemFrame.RectTransform, Anchor.Center), isHorizontal: true) { @@ -329,6 +338,7 @@ namespace Barotrauma { new GUIImage(new RectTransform(new Point(iconSize), innerFrame.RectTransform), itemPreviewSprites[item.PreviewImageUrl], scaleToFit: true) { + UserData = "previewimage", CanBeFocused = false }; } @@ -336,6 +346,7 @@ namespace Barotrauma { new GUIImage(new RectTransform(new Point(iconSize), innerFrame.RectTransform), SteamManager.Instance.DefaultPreviewImage, scaleToFit: true) { + UserData = "previewimage", CanBeFocused = false }; try @@ -383,6 +394,7 @@ namespace Barotrauma var titleText = new GUITextBlock(new RectTransform(new Vector2(0.5f, 0.0f), rightColumn.RectTransform), EnsureUTF8(item.Title), textAlignment: Alignment.CenterLeft, wrap: true) { + UserData = "titletext", CanBeFocused = false }; @@ -547,7 +559,17 @@ namespace Barotrauma itemPreviewSprites.Add(item.PreviewImageUrl, newSprite); } - CreateWorkshopItemFrame(item, listBox); + + var previewImage = listBox.Content.FindChild(item)?.GetChildByUserData("previewimage") as GUIImage; + if (previewImage != null) + { + previewImage.Sprite = newSprite; + } + else + { + CreateWorkshopItemFrame(item, listBox); + } + if (modsPreviewFrame.FindChild(item) != null) { ShowItemPreview(item, modsPreviewFrame); @@ -575,8 +597,7 @@ namespace Barotrauma private bool ToggleItemEnabled(GUITickBox tickBox) { - Facepunch.Steamworks.Workshop.Item item = tickBox.UserData as Facepunch.Steamworks.Workshop.Item; - if (item == null) { return false; } + if (!(tickBox.UserData is Facepunch.Steamworks.Workshop.Item item)) { return false; } var updateButton = tickBox.Parent.FindChild("updatebutton"); @@ -585,7 +606,9 @@ namespace Barotrauma { if (!SteamManager.EnableWorkShopItem(item, false, out errorMsg)) { - tickBox.Enabled = false; + tickBox.Visible = false; + tickBox.Selected = false; + if (tickBox.Parent.GetChildByUserData("titletext") is GUITextBlock titleText) { titleText.TextColor = Color.Red; } } } else diff --git a/Barotrauma/BarotraumaClient/Source/Screens/SubEditorScreen.cs b/Barotrauma/BarotraumaClient/Source/Screens/SubEditorScreen.cs index 2ab09e2ee..bedaf02f7 100644 --- a/Barotrauma/BarotraumaClient/Source/Screens/SubEditorScreen.cs +++ b/Barotrauma/BarotraumaClient/Source/Screens/SubEditorScreen.cs @@ -317,10 +317,11 @@ namespace Barotrauma Stretch = true }; - new GUIButton(new RectTransform(new Vector2(1.0f, 1.0f), tabButtonHolder.RectTransform), TextManager.Get("MapEntityCategory.All"), style: "GUITabButton") - { - OnClicked = (btn, userdata) => { ClearFilter(); return true; } - }; + entityCategoryButtons.Add( + new GUIButton(new RectTransform(new Vector2(1.0f, 1.0f), tabButtonHolder.RectTransform), TextManager.Get("MapEntityCategory.All"), style: "GUITabButton") + { + OnClicked = (btn, userdata) => { entityCategoryButtons.ForEach(b => b.Selected = b == btn); ClearFilter(); return true; } + }); foreach (MapEntityCategory category in Enum.GetValues(typeof(MapEntityCategory))) { @@ -337,6 +338,8 @@ namespace Barotrauma }); } + GUITextBlock.AutoScaleAndNormalize(entityCategoryButtons.Select(b => b.TextBlock)); + entityList = new GUIListBox(new RectTransform(new Vector2(1.0f, 0.9f), entityListHolder.RectTransform, Anchor.BottomCenter)) { OnSelected = SelectPrefab, @@ -1494,7 +1497,9 @@ namespace Barotrauma ClearFilter(); foreach (GUIButton button in entityCategoryButtons) { - button.Selected = (MapEntityCategory)button.UserData == selectedCategory; + button.Selected = + button.UserData != null && + (MapEntityCategory)button.UserData == selectedCategory; } foreach (GUIComponent child in toggleEntityMenuButton.Children) diff --git a/Barotrauma/BarotraumaClient/WindowsClient.csproj b/Barotrauma/BarotraumaClient/WindowsClient.csproj index 7cf32db5d..131aa6e76 100644 --- a/Barotrauma/BarotraumaClient/WindowsClient.csproj +++ b/Barotrauma/BarotraumaClient/WindowsClient.csproj @@ -58,9 +58,6 @@ - - ..\..\Libraries\NuGet\Concentus.1.1.7\lib\portable-net45+win+wpa81+wp80\Concentus.dll - ..\..\Libraries\NuGet\GameAnalytics.Mono.SDK.1.1.12\lib\net45\GameAnalytics.Mono.dll @@ -215,6 +212,10 @@ + + {0e7fee6a-15e5-4a4e-943c-80276003478c} + Concentus + {3af0347c-5a9b-4421-868c-8ee3dbfaebc6} Facepunch.Steamworks diff --git a/Barotrauma/BarotraumaClient/app.config b/Barotrauma/BarotraumaClient/app.config index 383108ffa..f067ae6ac 100644 --- a/Barotrauma/BarotraumaClient/app.config +++ b/Barotrauma/BarotraumaClient/app.config @@ -1,35 +1,35 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Barotrauma/BarotraumaClient/packages.config b/Barotrauma/BarotraumaClient/packages.config index 695edea35..d637bffbb 100644 --- a/Barotrauma/BarotraumaClient/packages.config +++ b/Barotrauma/BarotraumaClient/packages.config @@ -1,6 +1,5 @@  - diff --git a/Barotrauma/BarotraumaServer/Source/Networking/GameServer.cs b/Barotrauma/BarotraumaServer/Source/Networking/GameServer.cs index d9137afc7..5717efe48 100644 --- a/Barotrauma/BarotraumaServer/Source/Networking/GameServer.cs +++ b/Barotrauma/BarotraumaServer/Source/Networking/GameServer.cs @@ -1960,6 +1960,8 @@ namespace Barotrauma.Networking msg.Write(false); } + msg.Write(serverSettings.AllowRagdollButton); + serverSettings.WriteMonsterEnabled(msg); CompressOutgoingMessage(msg); diff --git a/Barotrauma/BarotraumaShared/SharedCode.projitems b/Barotrauma/BarotraumaShared/SharedCode.projitems index 05589e12a..8a4a85dc3 100644 --- a/Barotrauma/BarotraumaShared/SharedCode.projitems +++ b/Barotrauma/BarotraumaShared/SharedCode.projitems @@ -186,6 +186,7 @@ + diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Animation/FishAnimController.cs b/Barotrauma/BarotraumaShared/Source/Characters/Animation/FishAnimController.cs index 6f049f1a6..b16d788fe 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Animation/FishAnimController.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Animation/FishAnimController.cs @@ -293,6 +293,27 @@ namespace Barotrauma return; } + if (GameMain.NetworkMember == null || !GameMain.NetworkMember.IsClient) + { + //stop dragging if there's something between the pull limb and the target + Vector2 sourceSimPos = mouthLimb.SimPosition; + Vector2 targetSimPos = target.SimPosition; + if (character.Submarine != null && character.SelectedCharacter.Submarine == null) + { + targetSimPos -= character.Submarine.SimPosition; + } + else if (character.Submarine == null && character.SelectedCharacter.Submarine != null) + { + sourceSimPos -= character.SelectedCharacter.Submarine.SimPosition; + } + var body = Submarine.CheckVisibility(sourceSimPos, targetSimPos, ignoreSubs: true); + if (body != null) + { + character.DeselectCharacter(); + return; + } + } + Character targetCharacter = target; float eatSpeed = character.Mass / targetCharacter.Mass * 0.1f; eatTimer += deltaTime * eatSpeed; @@ -712,6 +733,12 @@ namespace Barotrauma limb.body.ApplyForce(diff * (float)(Math.Sin(WalkPos) * Math.Sqrt(limb.Mass)) * 30.0f * animStrength, maxVelocity: 10.0f); } + while (referenceLimb.Rotation - angle < -MathHelper.TwoPi) + { + angle -= MathHelper.TwoPi; + } + + limb?.body.SmoothRotate(angle, torque, wrapAngle: false); } private void SmoothRotateWithoutWrapping(Limb limb, float angle, Limb referenceLimb, float torque) diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Animation/HumanoidAnimController.cs b/Barotrauma/BarotraumaShared/Source/Characters/Animation/HumanoidAnimController.cs index 3530df734..cb69401e1 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Animation/HumanoidAnimController.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Animation/HumanoidAnimController.cs @@ -1188,7 +1188,8 @@ namespace Barotrauma isClimbing = false; } } - else if (character.IsKeyDown(InputType.Left) || character.IsKeyDown(InputType.Right)) + else if ((character.IsKeyDown(InputType.Left) || character.IsKeyDown(InputType.Right)) && + (!character.IsKeyDown(InputType.Up) && !character.IsKeyDown(InputType.Down))) { isClimbing = false; } diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs index 2d85ced37..e8d5eecff 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs @@ -1379,35 +1379,25 @@ namespace Barotrauma else { closestBody = Submarine.CheckVisibility(seeingLimb.SimPosition, seeingLimb.SimPosition + diff); - if (!IsBlocking(closestBody)) + if (closestBody != null) { - closestBody = Submarine.CheckVisibility(target.SimPosition, target.SimPosition - diff); - } - } - return !IsBlocking(closestBody); - - bool IsBlocking(Body body) - { - if (body == null) { return false; } - if (body.UserData is Structure wall && wall.CastShadow) - { - return wall != target; - } - else if (body.UserData is Item item && item != target) - { - var door = item.GetComponent(); - if (door != null) + if (closestBody.UserData is Structure wall && wall.CastShadow) { - return !door.IsOpen; + return false; } } - return false; + closestBody = Submarine.CheckVisibility(target.SimPosition, target.SimPosition - diff); } + if (closestBody != null) + { + if (closestBody.UserData is Structure wall && wall.CastShadow) + { + return false; + } + } + return true; } - /// - /// TODO: ensure that works. CheckVisibility takes positions in sim space, but this method uses world positions - /// public bool CanSeeCharacter(Character target, Vector2 sourceWorldPos) { Vector2 diff = ConvertUnits.ToSimUnits(target.WorldPosition - sourceWorldPos); @@ -1422,28 +1412,6 @@ namespace Barotrauma closestBody = Submarine.CheckVisibility(target.WorldPosition, target.WorldPosition - diff); if (closestBody == null) return true; } - Structure wall = closestBody.UserData as Structure; - Item item = closestBody.UserData as Item; - Door door = item?.GetComponent(); - return (wall == null || !wall.CastShadow) && (door == null || door.IsOpen); - } - - public bool CanSeeCharacter(Character character, Vector2 sourceWorldPos) - { - Vector2 diff = ConvertUnits.ToSimUnits(character.WorldPosition - sourceWorldPos); - - Body closestBody = null; - if (character.Submarine == null) - { - closestBody = Submarine.CheckVisibility(sourceWorldPos, sourceWorldPos + diff); - if (closestBody == null) return true; - } - else - { - closestBody = Submarine.CheckVisibility(character.WorldPosition, character.WorldPosition - diff); - if (closestBody == null) return true; - } - Structure wall = closestBody.UserData as Structure; return wall == null || !wall.CastShadow; } diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Limb.cs b/Barotrauma/BarotraumaShared/Source/Characters/Limb.cs index 2814b127c..5b2ec99b9 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Limb.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Limb.cs @@ -94,7 +94,7 @@ namespace Barotrauma } } - partial class Limb : ISerializableEntity + partial class Limb : ISerializableEntity, ISpatialEntity { // Note: not used private const float LimbDensity = 15; @@ -155,6 +155,8 @@ namespace Barotrauma } } + public Submarine Submarine => character.Submarine; + public Vector2 WorldPosition { get { return character.Submarine == null ? Position : Position + character.Submarine.Position; } diff --git a/Barotrauma/BarotraumaShared/Source/ContentPackage.cs b/Barotrauma/BarotraumaShared/Source/ContentPackage.cs index e7407db0f..e51a98e27 100644 --- a/Barotrauma/BarotraumaShared/Source/ContentPackage.cs +++ b/Barotrauma/BarotraumaShared/Source/ContentPackage.cs @@ -217,6 +217,7 @@ namespace Barotrauma { return corePackageRequiredFiles.All(fileType => Files.Any(file => file.Type == fileType)); } + public bool ContainsRequiredCorePackageFiles(out List missingContentTypes) { missingContentTypes = new List(); @@ -230,6 +231,25 @@ namespace Barotrauma return missingContentTypes.Count == 0; } + /// + /// Make sure all the files defined in the content package are present + /// + /// + public bool VerifyFiles(out List errorMessages) + { + errorMessages = new List(); + foreach (ContentFile file in Files) + { + if (!File.Exists(file.Path)) + { + errorMessages.Add("File \"" + file.Path + "\" not found."); + continue; + } + } + + return errorMessages.Count == 0; + } + public static ContentPackage CreatePackage(string name, string path, bool corePackage) { ContentPackage newPackage = new ContentPackage() @@ -398,6 +418,13 @@ namespace Barotrauma return path == "Mods"; } } + /// + /// Are mods allowed to install a file into the specified path. If a content package XML includes files + /// with a prohibited path, they are treated as references to external files. For example, a mod could include + /// some vanilla files in the XML, in which case the game will simply use the vanilla files present in the game folder. + /// + /// + /// public static bool IsModFilePathAllowed(string path) { while (true) @@ -422,16 +449,6 @@ namespace Barotrauma return contentPackages.SelectMany(f => f.Files).Where(f => f.Type == type).Select(f => f.Path); } - public IEnumerable GetFilesOfType(ContentType type) - { - return Files.Where(f => f.Type == type).Select(f => f.Path); - } - - public static IEnumerable GetFilesOfType(IEnumerable contentPackages, ContentType type) - { - return contentPackages.SelectMany(f => f.Files).Where(f => f.Type == type).Select(f => f.Path); - } - public IEnumerable GetFilesOfType(ContentType type) { return Files.Where(f => f.Type == type).Select(f => f.Path); diff --git a/Barotrauma/BarotraumaShared/Source/GameSettings.cs b/Barotrauma/BarotraumaShared/Source/GameSettings.cs index e85d877db..fc6b1cdc0 100644 --- a/Barotrauma/BarotraumaShared/Source/GameSettings.cs +++ b/Barotrauma/BarotraumaShared/Source/GameSettings.cs @@ -604,13 +604,14 @@ namespace Barotrauma } foreach (ContentPackage contentPackage in SelectedContentPackages) { + bool packageOk = contentPackage.VerifyFiles(out List errorMessages); + if (!packageOk) + { + DebugConsole.ThrowError("Error in content package \"" + contentPackage.Name + "\":\n" + string.Join("\n", errorMessages)); + continue; + } foreach (ContentFile file in contentPackage.Files) { - if (!System.IO.File.Exists(file.Path)) - { - DebugConsole.ThrowError("Error in content package \"" + contentPackage.Name + "\" - file \"" + file.Path + "\" not found."); - continue; - } ToolBox.IsProperFilenameCase(file.Path); } } @@ -970,13 +971,14 @@ namespace Barotrauma foreach (ContentPackage contentPackage in SelectedContentPackages) { + bool packageOk = contentPackage.VerifyFiles(out List errorMessages); + if (!packageOk) + { + DebugConsole.ThrowError("Error in content package \"" + contentPackage.Name + "\":\n" + string.Join("\n", errorMessages)); + continue; + } foreach (ContentFile file in contentPackage.Files) { - if (!System.IO.File.Exists(file.Path)) - { - DebugConsole.ThrowError("Error in content package \"" + contentPackage.Name + "\" - file \"" + file.Path + "\" not found."); - continue; - } ToolBox.IsProperFilenameCase(file.Path); } } diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Deconstructor.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Deconstructor.cs index 824093f82..a22cbb862 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Deconstructor.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Deconstructor.cs @@ -506,6 +506,25 @@ namespace Barotrauma.Items.Components } } + if (targetItem.Prefab.DeconstructItems.Any()) + { + inputContainer.Inventory.RemoveItem(targetItem); + Entity.Spawner.AddToRemoveQueue(targetItem); + MoveInputQueue(); + PutItemsToLinkedContainer(); + } + else + { + if (outputContainer.Inventory.Items.All(i => i != null)) + { + targetItem.Drop(dropper: null); + } + else + { + outputContainer.Inventory.TryPutItem(targetItem, user: null, createNetworkEvent: true); + } + } + if (targetItem.Prefab.DeconstructItems.Any()) { inputContainer.Inventory.RemoveItem(targetItem); diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Steering.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Steering.cs index c67be9985..6d7832b9d 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Steering.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Steering.cs @@ -848,6 +848,19 @@ namespace Barotrauma.Items.Components return true; } + public override void OnItemLoaded() + { + sonar = item.GetComponent(); + } + + public override bool Select(Character character) + { + if (!CanBeSelected) return false; + + user = character; + return true; + } + public override void Update(float deltaTime, Camera cam) { networkUpdateTimer -= deltaTime; diff --git a/Barotrauma/BarotraumaShared/Source/Items/Item.cs b/Barotrauma/BarotraumaShared/Source/Items/Item.cs index c053c4e4c..37f83c6b5 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Item.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Item.cs @@ -1284,6 +1284,10 @@ namespace Barotrauma { ApplyStatusEffects(!waterProof && inWater ? ActionType.InWater : ActionType.NotInWater, deltaTime); } + if (!broken) + { + ApplyStatusEffects(!waterProof && inWater ? ActionType.InWater : ActionType.NotInWater, deltaTime); + } ApplyStatusEffects(!waterProof && inWater ? ActionType.InWater : ActionType.NotInWater, deltaTime); if (body == null || !body.Enabled || !inWater || ParentInventory != null || Removed) { return; } @@ -1306,6 +1310,10 @@ namespace Barotrauma { body.SetTransform(body.SimPosition - Submarine.SimPosition, body.Rotation); } + else if (Submarine != null && prevSub != null && Submarine != prevSub) + { + body.SetTransform(body.SimPosition + prevSub.SimPosition - Submarine.SimPosition, body.Rotation); + } Vector2 displayPos = ConvertUnits.ToDisplayUnits(body.SimPosition); rect.X = (int)(displayPos.X - rect.Width / 2.0f); diff --git a/Barotrauma/BarotraumaShared/Source/Map/Hull.cs b/Barotrauma/BarotraumaShared/Source/Map/Hull.cs index 021580e9c..c1016d532 100644 --- a/Barotrauma/BarotraumaShared/Source/Map/Hull.cs +++ b/Barotrauma/BarotraumaShared/Source/Map/Hull.cs @@ -417,6 +417,25 @@ namespace Barotrauma } } + public string DisplayName + { + get; + private set; + } + + private string roomName; + [Editable, Serialize("", true, translationTextTag: "RoomName.")] + public string RoomName + { + get { return roomName; } + set + { + if (roomName == value) { return; } + roomName = value; + DisplayName = TextManager.Get(roomName, returnNull: true) ?? roomName; + } + } + public override Rectangle Rect { get diff --git a/Barotrauma/BarotraumaShared/Source/Map/Submarine.cs b/Barotrauma/BarotraumaShared/Source/Map/Submarine.cs index b686f5dac..66a196458 100644 --- a/Barotrauma/BarotraumaShared/Source/Map/Submarine.cs +++ b/Barotrauma/BarotraumaShared/Source/Map/Submarine.cs @@ -432,7 +432,7 @@ namespace Barotrauma { //prevent picking up (or deattaching) items #if CLIENT - if (GameMain.GameSession.GameMode is TutorialMode) + if (GameMain.GameSession?.GameMode is TutorialMode) { continue; } diff --git a/Barotrauma/BarotraumaShared/Source/Networking/ServerSettings.cs b/Barotrauma/BarotraumaShared/Source/Networking/ServerSettings.cs index 0a5ca7bb0..5dd5f1546 100644 --- a/Barotrauma/BarotraumaShared/Source/Networking/ServerSettings.cs +++ b/Barotrauma/BarotraumaShared/Source/Networking/ServerSettings.cs @@ -401,7 +401,7 @@ namespace Barotrauma.Networking public bool AllowRagdollButton { get; - private set; + set; } [Serialize(true, true)] diff --git a/Barotrauma/BarotraumaShared/Source/PlayerInput.cs b/Barotrauma/BarotraumaShared/Source/PlayerInput.cs index e13028523..8ad826eea 100644 --- a/Barotrauma/BarotraumaShared/Source/PlayerInput.cs +++ b/Barotrauma/BarotraumaShared/Source/PlayerInput.cs @@ -162,6 +162,21 @@ namespace Barotrauma get { return binding; } } + public void SetState() + { + hit = binding.IsHit(); + if (hit) hitQueue = true; + + held = binding.IsDown(); + if (held) heldQueue = true; + } +#endif + + public KeyOrMouse State + { + get { return binding; } + } + public void SetState() { hit = binding.IsHit(); diff --git a/Barotrauma/BarotraumaShared/Source/Utils/SaveUtil.cs b/Barotrauma/BarotraumaShared/Source/Utils/SaveUtil.cs index 8ae39aa56..ff0357c6a 100644 --- a/Barotrauma/BarotraumaShared/Source/Utils/SaveUtil.cs +++ b/Barotrauma/BarotraumaShared/Source/Utils/SaveUtil.cs @@ -222,18 +222,6 @@ namespace Barotrauma if (fileName.Length == 0) fileName = "Save"; } - if (fileName == "Save_Default") - { - fileName = TextManager.Get("SaveFile.DefaultName", true); - if (fileName.Length == 0) fileName = "Save"; - } - - if (fileName == "Save_Default") - { - fileName = TextManager.Get("SaveFile.DefaultName", true); - if (fileName.Length == 0) fileName = "Save"; - } - if (!Directory.Exists(folder)) { DebugConsole.ThrowError("Save folder \"" + folder + "\" not found. Created new folder"); diff --git a/Barotrauma/BarotraumaShared/Submarines/Dugong.sub b/Barotrauma/BarotraumaShared/Submarines/Dugong.sub index 36963f39570c46e828a76515c3eb906a95072826..de829c19fb3b41626b306a2790114b1a0b046aa2 100644 GIT binary patch literal 72411 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 Tw3yB(|Ly++0Rd(H`(+0J)*eRS literal 75670 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®dOe{y~RJIJ=7N81XzI$A_w!vW}8 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 - - true - bin\x86\Debug\ - DEBUG;TRACE - full - x86 - prompt - MinimumRecommendedRules.ruleset - - - bin\x86\Release\ - TRACE - true - pdbonly - x86 - prompt - MinimumRecommendedRules.ruleset -