diff --git a/Barotrauma/BarotraumaClient/ClientCode.shproj.user b/Barotrauma/BarotraumaClient/ClientCode.shproj.user new file mode 100644 index 000000000..0b0f24d53 --- /dev/null +++ b/Barotrauma/BarotraumaClient/ClientCode.shproj.user @@ -0,0 +1,6 @@ + + + + true + + \ No newline at end of file diff --git a/Barotrauma/BarotraumaClient/LinuxClient.csproj b/Barotrauma/BarotraumaClient/LinuxClient.csproj index 56b243537..c3c50da75 100644 --- a/Barotrauma/BarotraumaClient/LinuxClient.csproj +++ b/Barotrauma/BarotraumaClient/LinuxClient.csproj @@ -274,6 +274,63 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + @@ -304,6 +361,6 @@ - + \ No newline at end of file diff --git a/Barotrauma/BarotraumaClient/LinuxClient.csproj.user b/Barotrauma/BarotraumaClient/LinuxClient.csproj.user new file mode 100644 index 000000000..944ec00e2 --- /dev/null +++ b/Barotrauma/BarotraumaClient/LinuxClient.csproj.user @@ -0,0 +1,6 @@ + + + + ShowAllFiles + + \ No newline at end of file diff --git a/Barotrauma/BarotraumaClient/Properties/AssemblyInfo.cs b/Barotrauma/BarotraumaClient/Properties/AssemblyInfo.cs index 598c5e10d..d93ecf6e3 100644 --- a/Barotrauma/BarotraumaClient/Properties/AssemblyInfo.cs +++ b/Barotrauma/BarotraumaClient/Properties/AssemblyInfo.cs @@ -31,5 +31,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("0.9.0.1")] -[assembly: AssemblyFileVersion("0.9.0.1")] +[assembly: AssemblyVersion("0.9.0.2")] +[assembly: AssemblyFileVersion("0.9.0.2")] diff --git a/Barotrauma/BarotraumaClient/Source/Characters/Character.cs b/Barotrauma/BarotraumaClient/Source/Characters/Character.cs index 4c029c726..633916804 100644 --- a/Barotrauma/BarotraumaClient/Source/Characters/Character.cs +++ b/Barotrauma/BarotraumaClient/Source/Characters/Character.cs @@ -504,7 +504,7 @@ namespace Barotrauma foreach (Character c in CharacterList) { - if (!CanInteractWith(c)) continue; + if (!CanInteractWith(c, checkVisibility: false)) continue; float dist = Vector2.DistanceSquared(mouseSimPos, c.SimPosition); if (dist < maxDist * maxDist && (closestCharacter == null || dist < closestDist)) diff --git a/Barotrauma/BarotraumaClient/libopenal.1.dylib b/Barotrauma/BarotraumaClient/libopenal.1.dylib new file mode 100644 index 000000000..883af9540 Binary files /dev/null and b/Barotrauma/BarotraumaClient/libopenal.1.dylib differ diff --git a/Barotrauma/BarotraumaClient/libvlc.so b/Barotrauma/BarotraumaClient/libvlc.so index 220fee7d3..295941fb8 100644 Binary files a/Barotrauma/BarotraumaClient/libvlc.so and b/Barotrauma/BarotraumaClient/libvlc.so differ diff --git a/Barotrauma/BarotraumaClient/libvlc.so.5 b/Barotrauma/BarotraumaClient/libvlc.so.5 new file mode 100644 index 000000000..295941fb8 --- /dev/null +++ b/Barotrauma/BarotraumaClient/libvlc.so.5 @@ -0,0 +1 @@ +libvlc.so.5.6.0 \ No newline at end of file diff --git a/Barotrauma/BarotraumaClient/libvlc.so.5.6.0 b/Barotrauma/BarotraumaClient/libvlc.so.5.6.0 new file mode 100644 index 000000000..3888dcba3 Binary files /dev/null and b/Barotrauma/BarotraumaClient/libvlc.so.5.6.0 differ diff --git a/Barotrauma/BarotraumaClient/libvlccore.la b/Barotrauma/BarotraumaClient/libvlccore.la new file mode 100644 index 000000000..2064d2600 --- /dev/null +++ b/Barotrauma/BarotraumaClient/libvlccore.la @@ -0,0 +1,41 @@ +# libvlccore.la - a libtool library file +# Generated by libtool (GNU libtool) 2.4.6 Debian-2.4.6-2.1 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='libvlccore.so.9' + +# Names of this library. +library_names='libvlccore.so.9.0.0 libvlccore.so.9 libvlccore.so' + +# The name of the static archive. +old_library='' + +# Linker flags that cannot go in dependency_libs. +inherited_linker_flags='' + +# Libraries that this one depends upon. +dependency_libs=' -lidn -lpthread -ldl -lm -ldbus-1' + +# Names of additional weak libraries provided by this library +weak_library_names='' + +# Version information for libvlccore. +current=9 +age=0 +revision=0 + +# Is this an already installed library? +installed=yes + +# Should we warn about portability when linking against -modules? +shouldnotlink=no + +# Files to dlopen/dlpreopen +dlopen='' +dlpreopen='' + +# Directory that this library needs to be installed in: +libdir='/usr/lib' diff --git a/Barotrauma/BarotraumaClient/libvlccore.so b/Barotrauma/BarotraumaClient/libvlccore.so new file mode 100644 index 000000000..915869023 --- /dev/null +++ b/Barotrauma/BarotraumaClient/libvlccore.so @@ -0,0 +1 @@ +libvlccore.so.9.0.0 \ No newline at end of file diff --git a/Barotrauma/BarotraumaClient/libvlccore.so.9 b/Barotrauma/BarotraumaClient/libvlccore.so.9 new file mode 100644 index 000000000..915869023 --- /dev/null +++ b/Barotrauma/BarotraumaClient/libvlccore.so.9 @@ -0,0 +1 @@ +libvlccore.so.9.0.0 \ No newline at end of file diff --git a/Barotrauma/BarotraumaClient/libvlccore.so.9.0.0 b/Barotrauma/BarotraumaClient/libvlccore.so.9.0.0 new file mode 100644 index 000000000..3cf925cbe Binary files /dev/null and b/Barotrauma/BarotraumaClient/libvlccore.so.9.0.0 differ diff --git a/Barotrauma/BarotraumaClient/vlc/plugins/access/libfilesystem_plugin.so b/Barotrauma/BarotraumaClient/vlc/plugins/access/libfilesystem_plugin.so new file mode 100644 index 000000000..edd6c762f Binary files /dev/null and b/Barotrauma/BarotraumaClient/vlc/plugins/access/libfilesystem_plugin.so differ diff --git a/Barotrauma/BarotraumaClient/vlc/plugins/audio_filter/libaudio_format_plugin.so b/Barotrauma/BarotraumaClient/vlc/plugins/audio_filter/libaudio_format_plugin.so new file mode 100644 index 000000000..f0f84219f Binary files /dev/null and b/Barotrauma/BarotraumaClient/vlc/plugins/audio_filter/libaudio_format_plugin.so differ diff --git a/Barotrauma/BarotraumaClient/vlc/plugins/audio_filter/libugly_resampler_plugin.so b/Barotrauma/BarotraumaClient/vlc/plugins/audio_filter/libugly_resampler_plugin.so new file mode 100644 index 000000000..35a322741 Binary files /dev/null and b/Barotrauma/BarotraumaClient/vlc/plugins/audio_filter/libugly_resampler_plugin.so differ diff --git a/Barotrauma/BarotraumaClient/vlc/plugins/audio_output/libamem_plugin.so b/Barotrauma/BarotraumaClient/vlc/plugins/audio_output/libamem_plugin.so new file mode 100644 index 000000000..d59059d5a Binary files /dev/null and b/Barotrauma/BarotraumaClient/vlc/plugins/audio_output/libamem_plugin.so differ diff --git a/Barotrauma/BarotraumaClient/vlc/plugins/codec/libavcodec_plugin.so b/Barotrauma/BarotraumaClient/vlc/plugins/codec/libavcodec_plugin.so new file mode 100644 index 000000000..26058a842 Binary files /dev/null and b/Barotrauma/BarotraumaClient/vlc/plugins/codec/libavcodec_plugin.so differ diff --git a/Barotrauma/BarotraumaClient/vlc/plugins/codec/libva.so.1 b/Barotrauma/BarotraumaClient/vlc/plugins/codec/libva.so.1 new file mode 100644 index 000000000..7cfb28030 Binary files /dev/null and b/Barotrauma/BarotraumaClient/vlc/plugins/codec/libva.so.1 differ diff --git a/Barotrauma/BarotraumaClient/vlc/plugins/demux/libmp4_plugin.so b/Barotrauma/BarotraumaClient/vlc/plugins/demux/libmp4_plugin.so new file mode 100644 index 000000000..66af29d0a Binary files /dev/null and b/Barotrauma/BarotraumaClient/vlc/plugins/demux/libmp4_plugin.so differ diff --git a/Barotrauma/BarotraumaClient/vlc/plugins/packetizer/libpacketizer_mpeg4audio_plugin.so b/Barotrauma/BarotraumaClient/vlc/plugins/packetizer/libpacketizer_mpeg4audio_plugin.so new file mode 100644 index 000000000..3838dc626 Binary files /dev/null and b/Barotrauma/BarotraumaClient/vlc/plugins/packetizer/libpacketizer_mpeg4audio_plugin.so differ diff --git a/Barotrauma/BarotraumaClient/vlc/plugins/packetizer/libpacketizer_mpeg4video_plugin.so b/Barotrauma/BarotraumaClient/vlc/plugins/packetizer/libpacketizer_mpeg4video_plugin.so new file mode 100644 index 000000000..d31b70f46 Binary files /dev/null and b/Barotrauma/BarotraumaClient/vlc/plugins/packetizer/libpacketizer_mpeg4video_plugin.so differ diff --git a/Barotrauma/BarotraumaClient/vlc/plugins/packetizer/libpacketizer_mpegvideo_plugin.so b/Barotrauma/BarotraumaClient/vlc/plugins/packetizer/libpacketizer_mpegvideo_plugin.so new file mode 100644 index 000000000..4b2444636 Binary files /dev/null and b/Barotrauma/BarotraumaClient/vlc/plugins/packetizer/libpacketizer_mpegvideo_plugin.so differ diff --git a/Barotrauma/BarotraumaClient/vlc/plugins/video_chroma/librv32_plugin.so b/Barotrauma/BarotraumaClient/vlc/plugins/video_chroma/librv32_plugin.so new file mode 100644 index 000000000..4ace4c8bb Binary files /dev/null and b/Barotrauma/BarotraumaClient/vlc/plugins/video_chroma/librv32_plugin.so differ diff --git a/Barotrauma/BarotraumaClient/vlc/plugins/video_chroma/libswscale_plugin.so b/Barotrauma/BarotraumaClient/vlc/plugins/video_chroma/libswscale_plugin.so new file mode 100644 index 000000000..f0005579f Binary files /dev/null and b/Barotrauma/BarotraumaClient/vlc/plugins/video_chroma/libswscale_plugin.so differ diff --git a/Barotrauma/BarotraumaClient/vlc/plugins/video_output/libvmem_plugin.so b/Barotrauma/BarotraumaClient/vlc/plugins/video_output/libvmem_plugin.so new file mode 100644 index 000000000..60be2266c Binary files /dev/null and b/Barotrauma/BarotraumaClient/vlc/plugins/video_output/libvmem_plugin.so differ diff --git a/Barotrauma/BarotraumaShared/Source/Characters/AI/IndoorsSteeringManager.cs b/Barotrauma/BarotraumaShared/Source/Characters/AI/IndoorsSteeringManager.cs index 606696212..633163ab7 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/AI/IndoorsSteeringManager.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/AI/IndoorsSteeringManager.cs @@ -2,6 +2,7 @@ using Microsoft.Xna.Framework; using System; using System.Linq; +using Barotrauma.Extensions; namespace Barotrauma { @@ -163,7 +164,15 @@ namespace Barotrauma } var newPath = pathFinder.FindPath(pos, target, "(Character: " + character.Name + ")"); - if (currentPath == null || needsNewPath || !newPath.Unreachable && newPath.Cost < currentPath.Cost) + bool useNewPath = currentPath == null || needsNewPath; + if (!useNewPath && currentPath != null && currentPath.CurrentNode != null && newPath.Nodes.Any() && !newPath.Unreachable) + { + // It's possible that the current path was calculated from a start point that is no longer valid. + // Therefore, let's accept also paths with a greater cost than the current, if the current node is much farther than the new start node. + useNewPath = newPath.Cost < currentPath.Cost || + Vector2.DistanceSquared(character.WorldPosition, currentPath.CurrentNode.WorldPosition) > Math.Pow(Vector2.Distance(character.WorldPosition, newPath.Nodes.First().WorldPosition) * 2, 2); + } + if (useNewPath) { currentPath = newPath; } @@ -405,7 +414,7 @@ namespace Barotrauma { if (door.HasIntegratedButtons) { - door.Item.TryInteract(character, false, true, true); + door.Item.TryInteract(character, false, true); buttonPressCooldown = ButtonPressInterval; break; } @@ -413,7 +422,7 @@ namespace Barotrauma { if (Vector2.DistanceSquared(closestButton.Item.WorldPosition, character.WorldPosition) < MathUtils.Pow(closestButton.Item.InteractDistance * 2, 2)) { - closestButton.Item.TryInteract(character, false, true, false); + closestButton.Item.TryInteract(character, false, true); buttonPressCooldown = ButtonPressInterval; break; } diff --git a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveCombat.cs b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveCombat.cs index 98a3c2af4..89e3d1e05 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveCombat.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveCombat.cs @@ -128,7 +128,7 @@ namespace Barotrauma if (seekAmmunition == null || !subObjectives.Contains(seekAmmunition)) { Move(); - if (Weapon != null) + if (WeaponComponent != null) { OperateWeapon(deltaTime); } @@ -320,7 +320,10 @@ namespace Barotrauma { retreatTarget = findSafety.FindBestHull(HumanAIController.VisibleHulls); } - TryAddSubObjective(ref retreatObjective, () => new AIObjectiveGoTo(retreatTarget, character, objectiveManager, false, true)); + if (character.CurrentHull != retreatTarget) + { + TryAddSubObjective(ref retreatObjective, () => new AIObjectiveGoTo(retreatTarget, character, objectiveManager, false, true)); + } } private void Engage() @@ -336,8 +339,7 @@ namespace Barotrauma constructor: () => new AIObjectiveGoTo(Enemy, character, objectiveManager, repeat: true, getDivingGearIfNeeded: true) { AllowGoingOutside = true, - IgnoreIfTargetDead = true, - CheckVisibility = true + IgnoreIfTargetDead = true }, onAbandon: () => { @@ -347,7 +349,7 @@ namespace Barotrauma if (followTargetObjective != null && subObjectives.Contains(followTargetObjective)) { followTargetObjective.CloseEnough = - WeaponComponent is RangedWeapon ? 3 : + WeaponComponent is RangedWeapon ? 300 : WeaponComponent is MeleeWeapon mw ? mw.Range : WeaponComponent is RepairTool rt ? rt.Range : 50; } @@ -437,7 +439,7 @@ namespace Barotrauma float squaredDistance = Vector2.DistanceSquared(character.Position, Enemy.Position); character.CursorPosition = Enemy.Position; float engageDistance = 500; - if (squaredDistance > engageDistance * engageDistance) { return; } + if (character.CurrentHull != Enemy.CurrentHull && squaredDistance > engageDistance * engageDistance) { return; } if (!character.CanSeeCharacter(Enemy)) { return; } if (Weapon.RequireAimToUse) { @@ -450,7 +452,7 @@ namespace Barotrauma isOperatingButtons = door.HasIntegratedButtons || door.Item.GetConnectedComponents(true).Any(); } } - if (!isOperatingButtons && character.SelectedConstruction == null) + if (!isOperatingButtons) { character.SetInput(InputType.Aim, false, true); } diff --git a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveGoTo.cs b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveGoTo.cs index c8cb23e10..980ca257d 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveGoTo.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveGoTo.cs @@ -25,7 +25,6 @@ namespace Barotrauma public float CloseEnough { get; set; } = 50; public bool IgnoreIfTargetDead { get; set; } public bool AllowGoingOutside { get; set; } - public bool CheckVisibility { get; set; } public ISpatialEntity Target { get; private set; } @@ -92,11 +91,18 @@ namespace Barotrauma { abandon = true; } - else if (!repeat && waitUntilPathUnreachable < 0) + else if (waitUntilPathUnreachable < 0) { - if (SteeringManager == PathSteering && PathSteering.CurrentPath != null) + if (SteeringManager == PathSteering && PathSteering.CurrentPath != null && PathSteering.CurrentPath.Unreachable) { - abandon = PathSteering.CurrentPath.Unreachable; + if (repeat) + { + SteeringManager.Reset(); + } + else + { + abandon = true; + } } } if (abandon) diff --git a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveOperateItem.cs b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveOperateItem.cs index 455392e05..d77c798c3 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveOperateItem.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveOperateItem.cs @@ -68,6 +68,12 @@ namespace Barotrauma { if (character.CanInteractWith(target.Item, out _, checkLinked: false)) { + // Don't allow to operate an item that someone already operates, unless this objective is an order + if (objectiveManager.CurrentOrder != this && Character.CharacterList.Any(c => c.SelectedConstruction == target.Item && c != character && HumanAIController.IsFriendly(c))) + { + abandon = true; + return; + } if (character.SelectedConstruction != target.Item) { target.Item.TryInteract(character, false, true); diff --git a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveRescue.cs b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveRescue.cs index 4bc3f8ad5..239940834 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveRescue.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveRescue.cs @@ -16,8 +16,8 @@ namespace Barotrauma private readonly Character targetCharacter; private AIObjectiveGoTo goToObjective; - private float treatmentTimer; + private Hull safeHull; public AIObjectiveRescue(Character character, Character targetCharacter, AIObjectiveManager objectiveManager, float priorityModifier = 1) : base(character, objectiveManager, priorityModifier) @@ -84,15 +84,21 @@ namespace Barotrauma { goToObjective = null; } - var findSafety = objectiveManager.GetObjective(); - if (findSafety == null) + if (safeHull == null) { - // Ensure that we have the find safety objective (should always be the case) - objectiveManager.AddObjective(new AIObjectiveFindSafety(character, objectiveManager)); + var findSafety = objectiveManager.GetObjective(); + if (findSafety == null) + { + // Ensure that we have the find safety objective (should always be the case) + objectiveManager.AddObjective(new AIObjectiveFindSafety(character, objectiveManager)); + } + safeHull = findSafety.FindBestHull(HumanAIController.VisibleHulls); + } + if (character.CurrentHull != safeHull) + { + TryAddSubObjective(ref goToObjective, () => new AIObjectiveGoTo(safeHull, character, objectiveManager)); } - TryAddSubObjective(ref goToObjective, () => new AIObjectiveGoTo(findSafety.FindBestHull(HumanAIController.VisibleHulls), character, objectiveManager)); } - return; } if (subObjectives.Any()) { return; } diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs index e524c3bbc..f53705889 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs @@ -1527,7 +1527,7 @@ namespace Barotrauma return true; } - public bool CanInteractWith(Character c, float maxDist = 200.0f) + public bool CanInteractWith(Character c, float maxDist = 200.0f, bool checkVisibility = true) { if (c == this || Removed || !c.Enabled || !c.CanBeSelected) return false; if (!c.CharacterHealth.UseHealthWindow && !c.CanBeDragged && c.onCustomInteract == null) return false; @@ -1535,7 +1535,7 @@ namespace Barotrauma maxDist = ConvertUnits.ToSimUnits(maxDist); if (Vector2.DistanceSquared(SimPosition, c.SimPosition) > maxDist * maxDist) return false; - return true; + return checkVisibility ? CanSeeCharacter(c) : true; } public bool CanInteractWith(Item item)