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)