Added buildout load range to the awareness, capped at 1024m

This commit is contained in:
Obique PSWG
2015-06-07 14:28:10 -05:00
parent 9ec0066485
commit 5db1ce075b
3 changed files with 39 additions and 3 deletions
+19 -3
View File
@@ -13,7 +13,7 @@ import resources.objects.quadtree.QuadTree;
public class ObjectAwareness {
private static final double AWARE_RANGE = 200;
private static final double AWARE_RANGE = 1024;
private final Map <Terrain, QuadTree <SWGObject>> quadTree;
@@ -60,6 +60,8 @@ public class ObjectAwareness {
}
public void update(SWGObject obj) {
if (obj.isBuildout())
return;
Location l = obj.getLocation();
if (invalidLocation(l))
return;
@@ -68,7 +70,7 @@ public class ObjectAwareness {
synchronized (tree) {
List <SWGObject> range = tree.getWithinRange(l.getX(), l.getZ(), AWARE_RANGE);
for (SWGObject inRange : range) {
if (isValidInRange(obj, inRange))
if (isValidInRange(obj, inRange, l))
objectAware.add(inRange);
}
}
@@ -83,12 +85,26 @@ public class ObjectAwareness {
return l == null || l.getTerrain() == null;
}
private boolean isValidInRange(SWGObject obj, SWGObject inRange) {
private boolean isValidInRange(SWGObject obj, SWGObject inRange, Location objLoc) {
if (inRange.getObjectId() == obj.getObjectId())
return false;
if (inRange instanceof CreatureObject && inRange.getOwner() == null)
return false;
Location inRangeLoc = inRange.getLocation();
double distSquared = distanceSquared(objLoc, inRangeLoc);
if (inRange.getLoadRange() != 0 && distSquared > square(inRange.getLoadRange()))
return false;
if (inRange.getLoadRange() == 0 && distSquared > 200)
return false;
return true;
}
private double distanceSquared(Location l1, Location l2) {
return square(l1.getX()-l2.getX()) + square(l1.getY()-l2.getY()) + square(l1.getZ()-l2.getZ());
}
private double square(double x) {
return x * x;
}
}