Corrected y to z, altered how chars disappear

This commit is contained in:
Treeku
2014-05-03 20:19:57 +01:00
parent 62bc6a5771
commit 7e1e0bb4ec
+26 -21
View File
@@ -214,22 +214,23 @@ public class SimulationService implements INetworkDispatch {
return collidableQuadTrees.get(planet.getName()).get(x, y, range);
}
public boolean add(SWGObject object, float x, float y) {
return add(object, x, y, false);
public boolean add(SWGObject object, float x, float z) {
return add(object, x, z, false);
}
public boolean add(SWGObject object, float x, float y, boolean notifyObservers) {
public boolean add(SWGObject object, float x, float z, boolean notifyObservers) {
object.setIsInQuadtree(true);
boolean success = quadTrees.get(object.getPlanet().getName()).put(x, y, object);
boolean success = quadTrees.get(object.getPlanet().getName()).put(x, z, object);
if(success) {
@SuppressWarnings("unchecked") Vector<SWGObject> childObjects = (Vector<SWGObject>) object.getAttachment("childObjects");
if(childObjects != null) {
addChildObjects(object, childObjects);
object.setAttachment("childObjects", null);
}
if(notifyObservers) {
Point3D pos = new Point3D(x, 0, y);
Collection<SWGObject> newAwareObjects = get(object.getPlanet(), x, y, 512);
Point3D pos = new Point3D(x, 0, z);
Collection<SWGObject> newAwareObjects = get(object.getPlanet(), x, z, 512);
for(Iterator<SWGObject> it = newAwareObjects.iterator(); it.hasNext();) {
SWGObject obj = it.next();
if((obj.getAttachment("bigSpawnRange") == null && obj.getWorldPosition().getDistance2D(pos) > 200) || obj == object)
@@ -263,39 +264,39 @@ public class SimulationService implements INetworkDispatch {
}
public boolean move(SWGObject object, int oldX, int oldY, int newX, int newY) {
if(quadTrees.get(object.getPlanet().getName()).remove(oldX, oldY, object)) {
return quadTrees.get(object.getPlanet().getName()).put(newX, newY, object);
public boolean move(SWGObject object, int oldX, int oldZ, int newX, int newZ) {
if(quadTrees.get(object.getPlanet().getName()).remove(oldX, oldZ, object)) {
return quadTrees.get(object.getPlanet().getName()).put(newX, newZ, object);
}
return false;
}
public boolean move(SWGObject object, float oldX, float oldY, float newX, float newY) {
public boolean move(SWGObject object, float oldX, float oldZ, float newX, float newZ) {
long startTime = System.nanoTime();
if(quadTrees.get(object.getPlanet().getName()).remove(oldX, oldY, object)) {
boolean success = quadTrees.get(object.getPlanet().getName()).put(newX, newY, object);
if(quadTrees.get(object.getPlanet().getName()).remove(oldX, oldZ, object)) {
boolean success = quadTrees.get(object.getPlanet().getName()).put(newX, newZ, object);
return success;
}
System.out.println("Move failed.");
return false;
}
public List<SWGObject> get(Planet planet, float x, float y, int range) {
List<SWGObject> list = quadTrees.get(planet.getName()).get((int)x, (int)y, range);
public List<SWGObject> get(Planet planet, float x, float z, int range) {
List<SWGObject> list = quadTrees.get(planet.getName()).get((int)x, (int)z, range);
return list;
}
public boolean remove(SWGObject object, float x, float y) {
return remove(object, x, y, false);
public boolean remove(SWGObject object, float x, float z) {
return remove(object, x, z, false);
}
public boolean remove(SWGObject object, float x, float y, boolean notifyObservers) {
public boolean remove(SWGObject object, float x, float z, boolean notifyObservers) {
if (object == null || !object.isInQuadtree()) {
return false;
}
boolean success = quadTrees.get(object.getPlanet().getName()).remove(x, y, object);
boolean success = quadTrees.get(object.getPlanet().getName()).remove(x, z, object);
object.setIsInQuadtree(success);
if(success && notifyObservers) {
HashSet<Client> oldObservers = new HashSet<Client>(object.getObservers());
@@ -791,10 +792,14 @@ public class SimulationService implements INetworkDispatch {
ScheduledFuture<?> disconnectTask = scheduler.schedule(new Runnable() {
@Override
public void run() {
if(core.objectService.getObject(objectId).getAttachment("disconnectTask") != null)
core.connectionService.disconnect(client);
SWGObject object = core.objectService.getObject(objectId);
if (object.getAttachment("disconnectTask") != null) {
//core.connectionService.disconnect(client);
core.simulationService.remove(object, object.getPosition().x, object.getPosition().z, true);
}
}
}, 1, TimeUnit.MINUTES);
}, 120, TimeUnit.SECONDS);
core.removeClient(session);
object.setAttachment("disconnectTask", disconnectTask);