diff --git a/src/services/SimulationService.java b/src/services/SimulationService.java index 3cc57365..0ed4d075 100644 --- a/src/services/SimulationService.java +++ b/src/services/SimulationService.java @@ -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 childObjects = (Vector) object.getAttachment("childObjects"); if(childObjects != null) { addChildObjects(object, childObjects); object.setAttachment("childObjects", null); } + if(notifyObservers) { - Point3D pos = new Point3D(x, 0, y); - Collection newAwareObjects = get(object.getPlanet(), x, y, 512); + Point3D pos = new Point3D(x, 0, z); + Collection newAwareObjects = get(object.getPlanet(), x, z, 512); for(Iterator 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 get(Planet planet, float x, float y, int range) { - List list = quadTrees.get(planet.getName()).get((int)x, (int)y, range); + public List get(Planet planet, float x, float z, int range) { + List 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 oldObservers = new HashSet(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);