OBT/1.1.1 (#51)

Reverted an outdated change which is no longer in use
Removed CL-EP install command due to partical system issues
This commit is contained in:
NotAlwaysTrue
2026-03-13 13:34:21 +08:00
committed by GitHub
parent 679ffd380b
commit 5207b381b7
3 changed files with 38 additions and 35 deletions

View File

@@ -1317,10 +1317,14 @@ namespace Barotrauma
GameMain.LuaCs.ToggleDebugger(port); GameMain.LuaCs.ToggleDebugger(port);
})); }));
/*
commands.Add(new Command("install_cl_ep", "Installs Client-Side ProjectEP into your client.", (string[] args) => commands.Add(new Command("install_cl_ep", "Installs Client-Side ProjectEP into your client.", (string[] args) =>
{ {
LuaCsInstaller.Install(); LuaCsInstaller.Install();
})); }));
*/
// Removed due to critical partical issues
// TODO: Partical manager requires a refactor to solve race condition
commands.Add(new Command("randomizeseed", "randomizeseed: Toggles level seed randomization on/off.", (string[] args) => commands.Add(new Command("randomizeseed", "randomizeseed: Toggles level seed randomization on/off.", (string[] args) =>
{ {

View File

@@ -2,17 +2,16 @@
using Barotrauma.IO; using Barotrauma.IO;
using Barotrauma.Items.Components; using Barotrauma.Items.Components;
using Barotrauma.Networking; using Barotrauma.Networking;
using Barotrauma.PerkBehaviors;
using FarseerPhysics; using FarseerPhysics;
using FarseerPhysics.Dynamics; using FarseerPhysics.Dynamics;
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework;
using System; using System;
using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.Immutable; using System.Collections.Immutable;
using System.Diagnostics; using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Xml.Linq; using System.Xml.Linq;
using Barotrauma.PerkBehaviors;
using Voronoi2; using Voronoi2;
namespace Barotrauma namespace Barotrauma
@@ -485,9 +484,9 @@ namespace Barotrauma
{ {
Rectangle dockedBorders = Borders; Rectangle dockedBorders = Borders;
checkSubmarineBorders.Add(this); checkSubmarineBorders.Add(this);
var connectedSubs = DockedTo.Where(s => var connectedSubs = DockedTo.Where(s =>
!checkSubmarineBorders.Contains(s) && !checkSubmarineBorders.Contains(s) &&
!s.Info.IsOutpost && !s.Info.IsOutpost &&
(allowDifferentTeam || s.TeamID == TeamID)); (allowDifferentTeam || s.TeamID == TeamID));
foreach (Submarine dockedSub in connectedSubs) foreach (Submarine dockedSub in connectedSubs)
{ {
@@ -509,16 +508,23 @@ namespace Barotrauma
return dockedBorders; return dockedBorders;
} }
private readonly ConcurrentBag<Submarine> connectedSubs; private readonly HashSet<Submarine> connectedSubs;
/// <summary> /// <summary>
/// Returns a list of all submarines that are connected to this one via docking ports, including this sub. /// Returns a list of all submarines that are connected to this one via docking ports, including this sub.
/// </summary> /// </summary>
public ConcurrentBag<Submarine> GetConnectedSubs() public IEnumerable<Submarine> GetConnectedSubs()
{ {
return connectedSubs; return connectedSubs;
} }
private void GetConnectedSubsRecursive(ConcurrentBag<Submarine> subs) public void RefreshConnectedSubs()
{
connectedSubs.Clear();
connectedSubs.Add(this);
GetConnectedSubsRecursive(connectedSubs);
}
private void GetConnectedSubsRecursive(HashSet<Submarine> subs)
{ {
foreach (Submarine dockedSub in DockedTo) foreach (Submarine dockedSub in DockedTo)
{ {
@@ -528,12 +534,6 @@ namespace Barotrauma
} }
} }
public void RefreshConnectedSubs()
{
connectedSubs.Clear();
connectedSubs.Add(this);
GetConnectedSubsRecursive(connectedSubs);
}
/// <summary> /// <summary>
/// Attempt to find a spawn position close to the specified position where the sub doesn't collide with walls/ruins /// Attempt to find a spawn position close to the specified position where the sub doesn't collide with walls/ruins
/// </summary> /// </summary>
@@ -551,7 +551,7 @@ namespace Barotrauma
minWidth += padding; minWidth += padding;
minHeight += padding; minHeight += padding;
int iterations = 0; int iterations = 0;
const int maxIterations = 5; const int maxIterations = 5;
do do
{ {
@@ -580,9 +580,9 @@ namespace Barotrauma
//if the raycast hit a wall, attempt to place the spawnpos there //if the raycast hit a wall, attempt to place the spawnpos there
int offsetFromWall = 10 * -verticalMoveDir; int offsetFromWall = 10 * -verticalMoveDir;
float pickedPos = ConvertUnits.ToDisplayUnits(LastPickedPosition.Y) + offsetFromWall; float pickedPos = ConvertUnits.ToDisplayUnits(LastPickedPosition.Y) + offsetFromWall;
closestPickedPos.Y = closestPickedPos.Y =
verticalMoveDir > 0 ? verticalMoveDir > 0 ?
Math.Min(closestPickedPos.Y, pickedPos) : Math.Min(closestPickedPos.Y, pickedPos) :
Math.Max(closestPickedPos.Y, pickedPos); Math.Max(closestPickedPos.Y, pickedPos);
} }
} }
@@ -597,7 +597,7 @@ namespace Barotrauma
bool couldMoveInVerticalMoveDir = Math.Sign(newSpawnPos.Y - spawnPos.Y) == Math.Sign(verticalMoveDir); bool couldMoveInVerticalMoveDir = Math.Sign(newSpawnPos.Y - spawnPos.Y) == Math.Sign(verticalMoveDir);
if (!couldMoveInVerticalMoveDir) { break; } if (!couldMoveInVerticalMoveDir) { break; }
spawnPos = ClampToHorizontalLimits(newSpawnPos, limits); spawnPos = ClampToHorizontalLimits(newSpawnPos, limits);
} }
iterations++; iterations++;
} while (iterations < maxIterations); } while (iterations < maxIterations);
@@ -1001,7 +1001,7 @@ namespace Barotrauma
/// <param name="ignoreBranches">Should plants' branches be ignored?</param> /// <param name="ignoreBranches">Should plants' branches be ignored?</param>
/// <param name="blocksVisibilityPredicate">If the predicate returns false, the fixture is ignored even if it would normally block visibility.</param> /// <param name="blocksVisibilityPredicate">If the predicate returns false, the fixture is ignored even if it would normally block visibility.</param>
/// <returns>A physics body that was between the points (or null)</returns> /// <returns>A physics body that was between the points (or null)</returns>
public static Body CheckVisibility(Vector2 rayStart, Vector2 rayEnd, bool ignoreLevel = false, bool ignoreSubs = false, bool ignoreSensors = true, bool ignoreDisabledWalls = true, bool ignoreBranches = true, public static Body CheckVisibility(Vector2 rayStart, Vector2 rayEnd, bool ignoreLevel = false, bool ignoreSubs = false, bool ignoreSensors = true, bool ignoreDisabledWalls = true, bool ignoreBranches = true,
Predicate<Fixture> blocksVisibilityPredicate = null) Predicate<Fixture> blocksVisibilityPredicate = null)
{ {
Body closestBody = null; Body closestBody = null;
@@ -1160,10 +1160,10 @@ namespace Barotrauma
{ {
//a little hacky: undock and redock to ensure the hulls and gaps between docking ports are correct //a little hacky: undock and redock to ensure the hulls and gaps between docking ports are correct
//after all the parts of the submarine have been flipped and moved to correct places. //after all the parts of the submarine have been flipped and moved to correct places.
if (dockingPort.DockingTarget is { } dockingTarget) if (dockingPort.DockingTarget is { } dockingTarget)
{ {
dockingPort.Undock(); dockingPort.Undock();
dockingPort.Dock(dockingTarget); dockingPort.Dock(dockingTarget);
} }
} }
@@ -1487,7 +1487,7 @@ namespace Barotrauma
{ {
if (ignoreOutposts && sub.Info.IsOutpost) { continue; } if (ignoreOutposts && sub.Info.IsOutpost) { continue; }
if (ignoreOutsideLevel && Level.Loaded != null && sub.IsAboveLevel) { continue; } if (ignoreOutsideLevel && Level.Loaded != null && sub.IsAboveLevel) { continue; }
if (ignoreRespawnShuttle && sub.IsRespawnShuttle) { continue; } if (ignoreRespawnShuttle && sub.IsRespawnShuttle) { continue; }
if (teamType.HasValue && sub.TeamID != teamType) { continue; } if (teamType.HasValue && sub.TeamID != teamType) { continue; }
float dist = Vector2.DistanceSquared(worldPosition, sub.WorldPosition); float dist = Vector2.DistanceSquared(worldPosition, sub.WorldPosition);
if (closest == null || dist < closestDist) if (closest == null || dist < closestDist)
@@ -1551,7 +1551,6 @@ namespace Barotrauma
if (includingConnectedSubs) if (includingConnectedSubs)
{ {
// Performance-sensitive code -> implemented without Linq. // Performance-sensitive code -> implemented without Linq.
foreach (Submarine s in connectedSubs) foreach (Submarine s in connectedSubs)
{ {
if (s == entity.Submarine && (allowDifferentTeam || entity.Submarine.TeamID == TeamID) && (allowDifferentType || entity.Submarine.Info.Type == Info.Type)) if (s == entity.Submarine && (allowDifferentTeam || entity.Submarine.TeamID == TeamID) && (allowDifferentType || entity.Submarine.Info.Type == Info.Type))
@@ -1601,7 +1600,7 @@ namespace Barotrauma
Vector4 bounds = new Vector4(float.MaxValue, float.MinValue, float.MinValue, float.MaxValue); Vector4 bounds = new Vector4(float.MaxValue, float.MinValue, float.MinValue, float.MaxValue);
foreach (XElement element in submarineElement.Elements()) foreach (XElement element in submarineElement.Elements())
{ {
if (element.Name == "Structure") if (element.Name == "Structure")
{ {
string name = element.GetAttributeString("name", ""); string name = element.GetAttributeString("name", "");
Identifier identifier = element.GetAttributeIdentifier("identifier", ""); Identifier identifier = element.GetAttributeIdentifier("identifier", "");
@@ -1643,7 +1642,7 @@ namespace Barotrauma
{ {
Stopwatch sw = Stopwatch.StartNew(); Stopwatch sw = Stopwatch.StartNew();
connectedSubs = new ConcurrentBag<Submarine> connectedSubs = new HashSet<Submarine>(2)
{ {
this this
}; };
@@ -1830,7 +1829,7 @@ namespace Barotrauma
} }
} }
if (Screen.Selected is { IsEditor: false }) if (Screen.Selected is { IsEditor : false })
{ {
foreach (Identifier layer in Info.LayersHiddenByDefault) foreach (Identifier layer in Info.LayersHiddenByDefault)
{ {
@@ -2012,7 +2011,7 @@ namespace Barotrauma
Item itemToSwap = kvp.Key; Item itemToSwap = kvp.Key;
ItemPrefab swapTo = kvp.Value; ItemPrefab swapTo = kvp.Value;
itemToSwap.PurchasedNewSwap = item.PurchasedNewSwap; itemToSwap.PurchasedNewSwap = item.PurchasedNewSwap;
if (itemToSwap.Prefab != swapTo) { itemToSwap.PendingItemSwap = swapTo; } if (itemToSwap.Prefab != swapTo) { itemToSwap.PendingItemSwap = swapTo; }
} }
} }
@@ -2102,8 +2101,8 @@ namespace Barotrauma
public static void Unload() public static void Unload()
{ {
if (Unloading) if (Unloading)
{ {
DebugConsole.AddWarning($"Called {nameof(Submarine.Unload)} when already unloading."); DebugConsole.AddWarning($"Called {nameof(Submarine.Unload)} when already unloading.");
return; return;
} }
@@ -2153,7 +2152,7 @@ namespace Barotrauma
Ragdoll.RemoveAll(); Ragdoll.RemoveAll();
PhysicsBody.RemoveAll(); PhysicsBody.RemoveAll();
StatusEffect.StopAll(); StatusEffect.StopAll();
GameMain.World = null; GameMain.World = null;
Powered.Grids.Clear(); Powered.Grids.Clear();
@@ -2349,10 +2348,10 @@ namespace Barotrauma
if (potentialContainer.Submarine == this && !isSecondary) if (potentialContainer.Submarine == this && !isSecondary)
{ {
//valid primary container in the same sub -> perfect, let's use that one //valid primary container in the same sub -> perfect, let's use that one
return potentialContainer; return potentialContainer;
} }
selectedContainer = potentialContainer; selectedContainer = potentialContainer;
} }
return selectedContainer; return selectedContainer;
} }

View File

@@ -153,7 +153,7 @@ namespace Barotrauma
GameMain.PerformanceCounter.AddElapsedTicks("Update:GameSession", sw.ElapsedTicks); GameMain.PerformanceCounter.AddElapsedTicks("Update:GameSession", sw.ElapsedTicks);
sw.Restart(); sw.Restart();
GameMain.ParticleManager.Update((float)deltaTime); GameMain.ParticleManager?.Update((float)deltaTime);
sw.Stop(); sw.Stop();
GameMain.PerformanceCounter.AddElapsedTicks("Update:Particle", sw.ElapsedTicks); GameMain.PerformanceCounter.AddElapsedTicks("Update:Particle", sw.ElapsedTicks);