Fixed crash from previous commit where a player zones inside a building

This commit is contained in:
Obique PSWG
2015-08-08 14:19:04 -05:00
parent a67464e23e
commit bd7e19a089
+10 -4
View File
@@ -634,10 +634,14 @@ public abstract class SWGObject implements Serializable, Comparable<SWGObject> {
}
private Set<SWGObject> getObservers(SWGObject childObject) {
return getObserversFromSet(objectsAware, childObject);
}
private Set<SWGObject> getObserversFromSet(Set<SWGObject> aware, SWGObject childObject) {
if (getParent() == null) {
Set<SWGObject> observers = new HashSet<>();
synchronized (objectsAware) {
for (SWGObject obj : objectsAware) {
synchronized (aware) {
for (SWGObject obj : aware) {
Player p = obj.getOwner();
if (childObject.isValidPlayer(p))
observers.add(obj);
@@ -648,7 +652,7 @@ public abstract class SWGObject implements Serializable, Comparable<SWGObject> {
childObject.getChildrenObservers(observers, this);
return observers;
} else {
return getParent().getObservers(childObject); // Search for top level parent
return getParent().getObserversFromSet(aware, childObject); // Search for top level parent
}
}
@@ -753,13 +757,15 @@ public abstract class SWGObject implements Serializable, Comparable<SWGObject> {
public void updateObjectAwareness(Set <SWGObject> withinRange) {
synchronized (objectsAware) {
withinRange.addAll(getObservers());
Set<SWGObject> observers = getObserversFromSet(withinRange, this);
Set <SWGObject> outOfRange = new HashSet<>(objectsAware);
outOfRange.removeAll(withinRange);
outOfRange.removeAll(observers);
for (SWGObject o : outOfRange) {
awarenessOutOfRange(o);
o.awarenessOutOfRange(this);
}
withinRange.addAll(observers);
for (SWGObject o : withinRange) {
awarenessInRange(o);
o.awarenessInRange(this);