Fixed #7 (re-applied)
This commit is contained in:
@@ -2,16 +2,17 @@
|
||||
using Barotrauma.IO;
|
||||
using Barotrauma.Items.Components;
|
||||
using Barotrauma.Networking;
|
||||
using Barotrauma.PerkBehaviors;
|
||||
using FarseerPhysics;
|
||||
using FarseerPhysics.Dynamics;
|
||||
using Microsoft.Xna.Framework;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Xml.Linq;
|
||||
using Barotrauma.PerkBehaviors;
|
||||
using Voronoi2;
|
||||
|
||||
namespace Barotrauma
|
||||
@@ -508,23 +509,16 @@ namespace Barotrauma
|
||||
return dockedBorders;
|
||||
}
|
||||
|
||||
private readonly HashSet<Submarine> connectedSubs;
|
||||
private readonly ConcurrentBag<Submarine> connectedSubs;
|
||||
/// <summary>
|
||||
/// Returns a list of all submarines that are connected to this one via docking ports, including this sub.
|
||||
/// </summary>
|
||||
public IEnumerable<Submarine> GetConnectedSubs()
|
||||
public ConcurrentBag<Submarine> GetConnectedSubs()
|
||||
{
|
||||
return connectedSubs;
|
||||
}
|
||||
|
||||
public void RefreshConnectedSubs()
|
||||
{
|
||||
connectedSubs.Clear();
|
||||
connectedSubs.Add(this);
|
||||
GetConnectedSubsRecursive(connectedSubs);
|
||||
}
|
||||
|
||||
private void GetConnectedSubsRecursive(HashSet<Submarine> subs)
|
||||
private void GetConnectedSubsRecursive(ConcurrentBag<Submarine> subs)
|
||||
{
|
||||
foreach (Submarine dockedSub in DockedTo)
|
||||
{
|
||||
@@ -534,6 +528,12 @@ namespace Barotrauma
|
||||
}
|
||||
}
|
||||
|
||||
public void RefreshConnectedSubs()
|
||||
{
|
||||
connectedSubs.Clear();
|
||||
connectedSubs.Add(this);
|
||||
GetConnectedSubsRecursive(connectedSubs);
|
||||
}
|
||||
/// <summary>
|
||||
/// Attempt to find a spawn position close to the specified position where the sub doesn't collide with walls/ruins
|
||||
/// </summary>
|
||||
@@ -1551,6 +1551,7 @@ namespace Barotrauma
|
||||
if (includingConnectedSubs)
|
||||
{
|
||||
// Performance-sensitive code -> implemented without Linq.
|
||||
|
||||
foreach (Submarine s in connectedSubs)
|
||||
{
|
||||
if (s == entity.Submarine && (allowDifferentTeam || entity.Submarine.TeamID == TeamID) && (allowDifferentType || entity.Submarine.Info.Type == Info.Type))
|
||||
@@ -1642,7 +1643,7 @@ namespace Barotrauma
|
||||
{
|
||||
Stopwatch sw = Stopwatch.StartNew();
|
||||
|
||||
connectedSubs = new HashSet<Submarine>(2)
|
||||
connectedSubs = new ConcurrentBag<Submarine>
|
||||
{
|
||||
this
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user