From 1e130345bd9fa5a8889f306e9225a1397c149f4f Mon Sep 17 00:00:00 2001 From: Waverunner Date: Thu, 18 Dec 2014 13:02:33 -0500 Subject: [PATCH 1/2] Disabled system print of awareness list size --- src/services/objects/ObjectManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/objects/ObjectManager.java b/src/services/objects/ObjectManager.java index 9a3df1cfd..2016cf624 100644 --- a/src/services/objects/ObjectManager.java +++ b/src/services/objects/ObjectManager.java @@ -198,7 +198,7 @@ public class ObjectManager extends Manager { } quadTree.get(newLocation.getTerrain()).put(x, y, obj); } - System.out.println(obj.getName() + " is aware Of: " + updatedAware.size() + " player(s)"); + //System.out.println(obj.getName() + " is aware Of: " + updatedAware.size() + " player(s)"); obj.updateAwareness(updatedAware); obj.sendDataTransforms(); } From 488a3d010d8ce7d990ecb8fc9a82418e1ad40b8f Mon Sep 17 00:00:00 2001 From: Waverunner Date: Fri, 19 Dec 2014 11:08:50 -0500 Subject: [PATCH 2/2] Updated ObjectManager for awareness method renames --- src/services/objects/ObjectManager.java | 42 ++++++++++++++----------- src/services/player/ZoneService.java | 2 ++ 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/services/objects/ObjectManager.java b/src/services/objects/ObjectManager.java index 2016cf624..04b5bc20b 100644 --- a/src/services/objects/ObjectManager.java +++ b/src/services/objects/ObjectManager.java @@ -43,6 +43,7 @@ import resources.player.Player; import resources.server_info.ObjectDatabase; import resources.server_info.ObjectDatabase.Traverser; import services.player.PlayerManager; +import utilities.Console; public class ObjectManager extends Manager { @@ -141,7 +142,7 @@ public class ObjectManager extends Manager { addObjectAttributes(obj, template); obj.setTemplate(template); obj.setLocation(l); - addToQuadtree(obj, l); +// addToQuadtree(obj, l); // moveObject(obj, null, l); objects.put(objectId, obj); return obj; @@ -149,32 +150,35 @@ public class ObjectManager extends Manager { } // Adds an object to the quadtree and refreshes awareness lists in the object added as well as adds the Player to objects in range (if there is one) - private void addToQuadtree(SWGObject obj, Location loc) { + public void addToQuadtree(SWGObject obj, Location loc) { if (loc == null || loc.isNaN()) // Object is inside a container or it's a slot of an item return; double x = loc.getX(), z = loc.getY(); - List awarePlayers = new ArrayList(); + //boolean createObject = (obj.getOwner() != null); // Determine if we need to send any createObject packets to obj's owner for any objects within range + List observers = new ArrayList(); // observers of this object + QuadTree tree = quadTree.get(loc.getTerrain()); for (SWGObject inRange : tree.getWithinRange(x, z, AWARE_RANGE)) { - if (inRange != null && inRange.getOwner() != null && inRange.getObjectId() != obj.getObjectId()) { - if (obj.getOwner() != null) - inRange.addToAwareness(obj.getOwner()); + if (inRange != null && inRange.getObjectId() != obj.getObjectId()) { + //if (createObject) + //inRange.addObserver(obj.getOwner()); - awarePlayers.add(inRange.getOwner()); + if (inRange.getOwner() != null) + observers.add(inRange.getOwner()); // Add the inRange obj's Player to this objects observer list and send a createObject delta to the inRange owner } } - if (awarePlayers.size() > 0) - obj.updateAwareness(awarePlayers); - + obj.updateObserversList(observers); quadTree.get(loc.getTerrain()).put(x, z, obj); } private void moveObject(SWGObject obj, Location oldLocation, Location newLocation) { + System.out.println("=== Moving Player: " + obj.getName() + " ==="); double x = 0, y = 0; - List updatedAware = new ArrayList(); + + List observers = new ArrayList(); // observers of this object if (oldLocation != null && oldLocation.getTerrain() != null) { // Remove from QuadTree x = oldLocation.getX(); y = oldLocation.getZ(); @@ -190,17 +194,19 @@ public class ObjectManager extends Manager { y = newLocation.getZ(); QuadTree tree = quadTree.get(newLocation.getTerrain()); for (SWGObject inRange : tree.getWithinRange(x, y, AWARE_RANGE)) { - if (inRange.getOwner() != null && inRange.getObjectId() != obj.getObjectId()) { - inRange.addToAwareness(obj.getOwner()); - if (!updatedAware.contains(inRange.getOwner())) // TODO: This is a really bad fix for duplicates being put into awareness list.. - updatedAware.add(inRange.getOwner()); + if (inRange != null && inRange.getObjectId() != obj.getObjectId()) { + Console.print(obj.getName() + ": In range of " + inRange.getName()); + inRange.addObserver(obj.getOwner()); // Send a createObject for inRange if the obj's owner doesn't exist in inRange's observers list + if (inRange.getOwner() == null) + System.out.println("INRANGE OBJ HAS NULL OWNER: " + inRange.getName()); + else + observers.add(inRange.getOwner()); // Add inRange's owner to the updated observers list } } quadTree.get(newLocation.getTerrain()).put(x, y, obj); } - //System.out.println(obj.getName() + " is aware Of: " + updatedAware.size() + " player(s)"); - obj.updateAwareness(updatedAware); - obj.sendDataTransforms(); + obj.updateObserversList(observers); // Send a createObject to the new Player's in this list and a destroyObject to ones that no longer exist in this list compared to old one +// obj.sendDataTransforms(); } private void addObjectAttributes(SWGObject obj, String template) { diff --git a/src/services/player/ZoneService.java b/src/services/player/ZoneService.java index 38901962f..e504af852 100644 --- a/src/services/player/ZoneService.java +++ b/src/services/player/ZoneService.java @@ -161,6 +161,8 @@ public class ZoneService extends Service { player.setCreatureObject(creatureObj); creatureObj.setOwner(player); creatureObj.setSlot("ghost", playerObj); + + objManager.addToQuadtree(creatureObj, creatureObj.getLocation()); return creatureObj.getObjectId(); }