mirror of
https://github.com/ProjectSWGCore/Holocore.git
synced 2026-10-07 22:13:40 -04:00
Fixed exception when disconnecting from login screen and made minor optimizations to awareness
This commit is contained in:
+2
-11
@@ -71,12 +71,8 @@ public class ObjectAware {
|
||||
object.onObjectEnterAware(added);
|
||||
}
|
||||
|
||||
attemptFlush();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Set<Player> 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<SWGObject> getAwareStream() {
|
||||
return awareness.values().stream().flatMap(Collection::stream);
|
||||
}
|
||||
|
||||
+10
-6
@@ -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<SWGObject> objects;
|
||||
private final Set<CreatureObject> 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<SWGObject> consumer) {
|
||||
for (SWGObject test : objects) {
|
||||
if (test.getBaselineType() == BaselineType.CREO)
|
||||
consumer.accept(test);
|
||||
}
|
||||
creatures.forEach(consumer);
|
||||
}
|
||||
|
||||
public Collection<SWGObject> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -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;
|
||||
|
||||
+5
-1
@@ -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()) {
|
||||
|
||||
Reference in New Issue
Block a user