diff --git a/src/main/java/com/projectswg/holocore/resources/support/objects/awareness/ObjectAware.java b/src/main/java/com/projectswg/holocore/resources/support/objects/awareness/ObjectAware.java index 50327f470..3ce606e09 100644 --- a/src/main/java/com/projectswg/holocore/resources/support/objects/awareness/ObjectAware.java +++ b/src/main/java/com/projectswg/holocore/resources/support/objects/awareness/ObjectAware.java @@ -71,12 +71,8 @@ public class ObjectAware { object.onObjectEnterAware(added); } - attemptFlush(); - } - - @NotNull - public Set getObservers() { - return getAwareStream().map(SWGObject::getOwnerShallow).filter(Objects::nonNull).filter(player -> player.isBaselinesSent(object)).collect(Collectors.toSet()); + if (object instanceof CreatureObject) + ((CreatureObject) object).flushObjectsAware(); } @NotNull @@ -102,11 +98,6 @@ public class ObjectAware { return chunk.get(); } - private void attemptFlush() { - if (object instanceof CreatureObject) - ((CreatureObject) object).flushObjectsAware(); - } - private Stream getAwareStream() { return awareness.values().stream().flatMap(Collection::stream); } diff --git a/src/main/java/com/projectswg/holocore/resources/support/objects/awareness/TerrainMapChunk.java b/src/main/java/com/projectswg/holocore/resources/support/objects/awareness/TerrainMapChunk.java index c8112f5f4..7b791a5a6 100644 --- a/src/main/java/com/projectswg/holocore/resources/support/objects/awareness/TerrainMapChunk.java +++ b/src/main/java/com/projectswg/holocore/resources/support/objects/awareness/TerrainMapChunk.java @@ -26,22 +26,24 @@ ***********************************************************************************/ package com.projectswg.holocore.resources.support.objects.awareness; -import com.projectswg.common.network.packets.swg.zone.baselines.Baseline.BaselineType; import com.projectswg.holocore.resources.support.objects.swg.SWGObject; import com.projectswg.holocore.resources.support.objects.swg.creature.CreatureObject; import org.jetbrains.annotations.NotNull; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArraySet; import java.util.function.Consumer; class TerrainMapChunk { private final Set objects; + private final Set creatures; private TerrainMapChunk [] neighbors; public TerrainMapChunk() { this.objects = new CopyOnWriteArraySet<>(); + this.creatures = ConcurrentHashMap.newKeySet(); this.neighbors = new TerrainMapChunk[]{this}; } @@ -54,17 +56,18 @@ class TerrainMapChunk { public void addObject(@NotNull SWGObject obj) { objects.add(obj); + if (obj instanceof CreatureObject) + creatures.add((CreatureObject) obj); } public void removeObject(@NotNull SWGObject obj) { objects.remove(obj); + if (obj instanceof CreatureObject) + creatures.remove(obj); } public void scan(Consumer consumer) { - for (SWGObject test : objects) { - if (test.getBaselineType() == BaselineType.CREO) - consumer.accept(test); - } + creatures.forEach(consumer); } public Collection getWithinAwareness(@NotNull CreatureObject obj) { @@ -72,8 +75,9 @@ class TerrainMapChunk { for (TerrainMapChunk neighbor : neighbors) { for (SWGObject test : neighbor.objects) { - if (obj.isWithinAwarenessRange(test)) + if (obj.isWithinAwarenessRange(test)) { withinRange.add(test); + } } } diff --git a/src/main/java/com/projectswg/holocore/services/support/objects/awareness/AwarenessService.java b/src/main/java/com/projectswg/holocore/services/support/objects/awareness/AwarenessService.java index 54a5503cc..a5aee962f 100644 --- a/src/main/java/com/projectswg/holocore/services/support/objects/awareness/AwarenessService.java +++ b/src/main/java/com/projectswg/holocore/services/support/objects/awareness/AwarenessService.java @@ -108,8 +108,8 @@ public class AwarenessService extends Service { awareness.destroyObject(creature); break; case PE_LOGGED_OUT: - assert creature != null; - awareness.updateObject(creature); + if (creature != null) + awareness.updateObject(creature); break; default: break; diff --git a/src/test/java/com/projectswg/holocore/resources/support/objects/awareness/TestObjectAwareness.java b/src/test/java/com/projectswg/holocore/resources/support/objects/awareness/TestObjectAwareness.java index de3777bb5..ef2534a4c 100644 --- a/src/test/java/com/projectswg/holocore/resources/support/objects/awareness/TestObjectAwareness.java +++ b/src/test/java/com/projectswg/holocore/resources/support/objects/awareness/TestObjectAwareness.java @@ -131,7 +131,9 @@ public class TestObjectAwareness extends TestRunnerNoIntents { initialize(); player.setHasOwner(false); - assertFalse(player.isLoggedInPlayer()); + Assert.assertTrue(player.isPlayer()); + Assert.assertFalse(player.isLoggedInPlayer()); + Assert.assertTrue(testPlayer.isPlayer()); Assert.assertTrue(testPlayer.isLoggedInPlayer()); // Shouldn't be aware of anything else because it's a logged out player @@ -141,7 +143,9 @@ public class TestObjectAwareness extends TestRunnerNoIntents { } player.setHasOwner(true); + Assert.assertTrue(player.isPlayer()); Assert.assertTrue(player.isLoggedInPlayer()); + Assert.assertTrue(testPlayer.isPlayer()); Assert.assertTrue(testPlayer.isLoggedInPlayer()); for (TestLocation loc : TestLocation.values()) {