diff --git a/S1API.Tests/Deliveries/LoadingDockApiTests.cs b/S1API.Tests/Deliveries/LoadingDockApiTests.cs index 37f99c13..bbf10af8 100644 --- a/S1API.Tests/Deliveries/LoadingDockApiTests.cs +++ b/S1API.Tests/Deliveries/LoadingDockApiTests.cs @@ -82,6 +82,20 @@ public void EventsExposeManagedPreviousAndCurrentValues() GetEvent(nameof(LoadingDock.AcceptingItemsChanged)).EventHandlerType); } + [Fact] + public void StaticOccupantSubscribersAreTracked() + { + var nativeDock = TestObjectFactory.CreateUninitialized(); + var dock = new LoadingDock(nativeDock); + Action handler = (_, _) => { }; + + Assert.False(dock.HasStaticOccupantChangedSubscribers); + dock.StaticOccupantChanged += handler; + Assert.True(dock.HasStaticOccupantChangedSubscribers); + dock.StaticOccupantChanged -= handler; + Assert.False(dock.HasStaticOccupantChangedSubscribers); + } + [Fact] public void ManagedNotificationsSuppressNoOpsAndIsolateSubscribers() { diff --git a/S1API/Deliveries/LoadingDock.cs b/S1API/Deliveries/LoadingDock.cs index f3d5ffd0..33f2118f 100644 --- a/S1API/Deliveries/LoadingDock.cs +++ b/S1API/Deliveries/LoadingDock.cs @@ -144,6 +144,8 @@ public PropertyWrapper? Property /// public event Action? StaticOccupantChanged; + internal bool HasStaticOccupantChangedSubscribers => StaticOccupantChanged != null; + /// /// Raised after the accepting-items state changes. /// diff --git a/S1API/Internal/Deliveries/LoadingDockEventBridge.cs b/S1API/Internal/Deliveries/LoadingDockEventBridge.cs index 59102655..213ebd04 100644 --- a/S1API/Internal/Deliveries/LoadingDockEventBridge.cs +++ b/S1API/Internal/Deliveries/LoadingDockEventBridge.cs @@ -37,7 +37,11 @@ internal static void NotifyStaticOccupantChanged( if (previous == current) return; - LoadingDock.Wrap(native).NotifyStaticOccupantChanged( + var dock = LoadingDock.Wrap(native); + if (!dock.HasStaticOccupantChangedSubscribers) + return; + + dock.NotifyStaticOccupantChanged( VehicleRegistry.Wrap(previous), VehicleRegistry.Wrap(current)); }