From 5684242fab42c556c42c5de2be2ad47359bdd57d Mon Sep 17 00:00:00 2001 From: Obique Date: Fri, 16 Jan 2015 12:14:22 -0600 Subject: [PATCH] Increased the readability of the ObjectManager; Added a ObjectCreator class --- src/services/objects/ObjectCreator.java | 63 +++++++++++ src/services/objects/ObjectManager.java | 140 +++++++++--------------- 2 files changed, 113 insertions(+), 90 deletions(-) create mode 100644 src/services/objects/ObjectCreator.java diff --git a/src/services/objects/ObjectCreator.java b/src/services/objects/ObjectCreator.java new file mode 100644 index 000000000..2aafcebf5 --- /dev/null +++ b/src/services/objects/ObjectCreator.java @@ -0,0 +1,63 @@ +package services.objects; + +import resources.objects.SWGObject; +import resources.objects.creature.CreatureObject; +import resources.objects.intangible.IntangibleObject; +import resources.objects.player.PlayerObject; +import resources.objects.tangible.TangibleObject; +import resources.objects.waypoint.WaypointObject; +import resources.objects.weapon.WeaponObject; + +final class ObjectCreator { + + public static final SWGObject createObjectFromTemplate(long objectId, String template) { + if (!template.startsWith("object/")) + return null; + if (!template.endsWith(".iff")) + return null; + template = template.substring(7, template.length()-7-4); + switch (getFirstTemplatePart(template)) { + case "creature": return createCreatureObject(objectId, template); + case "player": return createPlayerObject(objectId, template); + case "tangible": return createTangibleObject(objectId, template); + case "intangible": return createIntangibleObject(objectId, template); + case "waypoint": return createWaypointObject(objectId, template); + case "weapon": return createWeaponObject(objectId, template); + case "building": break; + case "cell": break; + } + return null; + } + + private static String getFirstTemplatePart(String template) { + int ind = template.indexOf('/'); + if (ind == -1) + return ""; + return template.substring(0, ind); + } + + private static CreatureObject createCreatureObject(long objectId, String template) { + return new CreatureObject(objectId); + } + + private static PlayerObject createPlayerObject(long objectId, String template) { + return new PlayerObject(objectId); + } + + private static TangibleObject createTangibleObject(long objectId, String template) { + return new TangibleObject(objectId); + } + + private static IntangibleObject createIntangibleObject(long objectId, String template) { + return new IntangibleObject(objectId); + } + + private static WaypointObject createWaypointObject(long objectId, String template) { + return new WaypointObject(objectId); + } + + private static WeaponObject createWeaponObject(long objectId, String template) { + return new WeaponObject(objectId); + } + +} diff --git a/src/services/objects/ObjectManager.java b/src/services/objects/ObjectManager.java index 059a6ff6d..6b035402e 100644 --- a/src/services/objects/ObjectManager.java +++ b/src/services/objects/ObjectManager.java @@ -31,12 +31,7 @@ import resources.control.Intent; import resources.control.Manager; import resources.objects.SWGObject; import resources.objects.creature.CreatureObject; -import resources.objects.intangible.IntangibleObject; -import resources.objects.player.PlayerObject; import resources.objects.quadtree.QuadTree; -import resources.objects.tangible.TangibleObject; -import resources.objects.waypoint.WaypointObject; -import resources.objects.weapon.WeaponObject; import resources.player.Player; import resources.player.PlayerEvent; import resources.server_info.ObjectDatabase; @@ -64,25 +59,26 @@ public class ObjectManager extends Manager { registerForIntent(SWGObjectEventIntent.TYPE); registerForIntent(GalacticPacketIntent.TYPE); registerForIntent(PlayerEventIntent.TYPE); + loadQuadTree(); + loadObjects(); + clientFac = new ClientFactory(); + return super.initialize(); + } + + private void loadQuadTree() { for (Terrain t : Terrain.values()) { quadTree.put(t, new QuadTree(-8192, -8192, 8192, 8192)); } - objects.loadToCache(); + } + + private void loadObjects() { long startLoad = System.nanoTime(); System.out.println("ObjectManager: Loading " + objects.size() + " objects from ObjectDatabase..."); + objects.loadToCache(); objects.traverseCache(new Traverser() { @Override public void process(SWGObject obj) { - obj.setOwner(null); - Location l = obj.getLocation(); - if (l.getTerrain() != null) { - QuadTree tree = quadTree.get(l.getTerrain()); - if (tree != null) { - tree.put(l.getX(), l.getZ(), obj); - } else { - System.err.println("ObjectManager: Unable to load QuadTree for object " + obj.getObjectId() + " and terrain: " + l.getTerrain()); - } - } + loadObject(obj); if (obj.getObjectId() >= maxObjectId) { maxObjectId = obj.getObjectId() + 1; } @@ -90,9 +86,19 @@ public class ObjectManager extends Manager { }); double loadTime = (System.nanoTime() - startLoad) / 1E6; System.out.printf("ObjectManager: Finished loading %d objects. Time: %fms%n", objects.size(), loadTime); - clientFac = new ClientFactory(); - - return super.initialize(); + } + + private void loadObject(SWGObject obj) { + obj.setOwner(null); + Location l = obj.getLocation(); + if (l.getTerrain() != null) { + QuadTree tree = quadTree.get(l.getTerrain()); + if (tree != null) { + tree.put(l.getX(), l.getZ(), obj); + } else { + System.err.println("ObjectManager: Unable to load QuadTree for object " + obj.getObjectId() + " and terrain: " + l.getTerrain()); + } + } } @Override @@ -110,25 +116,33 @@ public class ObjectManager extends Manager { @Override public void onIntentReceived(Intent i) { if (i instanceof GalacticPacketIntent) { - GalacticPacketIntent gpi = (GalacticPacketIntent) i; - if (gpi.getPacket() instanceof SelectCharacter) { - zoneInCharacter(gpi.getPlayerManager(), gpi.getGalaxy().getName(), gpi.getNetworkId(), ((SelectCharacter)gpi.getPacket()).getCharacterId()); - } else if (gpi.getPacket() instanceof ObjectController) { - ObjectController controller = (ObjectController) gpi.getPacket(); - if (controller.getControllerData() instanceof DataTransform) { - DataTransform trans = (DataTransform) controller.getControllerData(); - SWGObject obj = getObject(controller.getObjectId()); - moveObject(obj, trans); - } - } + processGalacticPacketIntent((GalacticPacketIntent) i); } else if (i instanceof PlayerEventIntent) { if (((PlayerEventIntent)i).getEvent() == PlayerEvent.PE_DISAPPEAR) { - ((PlayerEventIntent)i).getPlayer().getCreatureObject().clearAware(); + SWGObject obj = ((PlayerEventIntent)i).getPlayer().getCreatureObject(); + obj.setOwner(null); + obj.clearAware(); } } } - public SWGObject getObject(long objectId) { + private void processGalacticPacketIntent(GalacticPacketIntent gpi) { + if (gpi.getPacket() instanceof SelectCharacter) { + PlayerManager pm = gpi.getPlayerManager(); + String galaxy = gpi.getGalaxy().getName(); + long characterId = ((SelectCharacter)gpi.getPacket()).getCharacterId(); + zoneInCharacter(pm, galaxy, gpi.getNetworkId(), characterId); + } else if (gpi.getPacket() instanceof ObjectController) { + ObjectController controller = (ObjectController) gpi.getPacket(); + if (controller.getControllerData() instanceof DataTransform) { + DataTransform trans = (DataTransform) controller.getControllerData(); + SWGObject obj = getObjectById(controller.getObjectId()); + moveObject(obj, trans); + } + } + } + + public SWGObject getObjectById(long objectId) { synchronized (objects) { return objects.get(objectId); } @@ -163,7 +177,7 @@ public class ObjectManager extends Manager { public SWGObject createObject(String template, Location l) { synchronized (objects) { long objectId = getNextObjectId(); - SWGObject obj = createObjectFromTemplate(objectId, template); + SWGObject obj = ObjectCreator.createObjectFromTemplate(objectId, template); if (obj == null) { System.err.println("ObjectManager: Unable to create object with template " + template); return null; @@ -249,8 +263,7 @@ public class ObjectManager extends Manager { } private void addSlotsToObject(SWGObject obj, ObjectData attributes) { - - if ((String) attributes.getAttribute(ObjectData.SLOT_DESCRIPTOR) != null) { + if (attributes.getAttribute(ObjectData.SLOT_DESCRIPTOR) != null) { // These are the slots that the object *HAS* SlotDescriptorData descriptor = (SlotDescriptorData) clientFac.getInfoFromFile((String) attributes.getAttribute(ObjectData.SLOT_DESCRIPTOR)); @@ -259,10 +272,9 @@ public class ObjectManager extends Manager { } } - if ((String) attributes.getAttribute(ObjectData.ARRANGEMENT_FILE) != null) { - // This is what slots the object *USES* + if (attributes.getAttribute(ObjectData.ARRANGEMENT_FILE) != null) { + // This is what slots the object *USES* SlotArrangementData arrangementData = (SlotArrangementData) clientFac.getInfoFromFile((String) attributes.getAttribute(ObjectData.ARRANGEMENT_FILE)); - obj.setArrangment(arrangementData.getArrangement()); } } @@ -312,57 +324,5 @@ public class ObjectManager extends Manager { } } - private String getFirstTemplatePart(String template) { - int ind = template.indexOf('/'); - if (ind == -1) - return ""; - return template.substring(0, ind); - } - private SWGObject createObjectFromTemplate(long objectId, String template) { - if (!template.startsWith("object/")) - return null; - if (!template.endsWith(".iff")) - return null; - template = template.substring(7, template.length()-7-4); - switch (getFirstTemplatePart(template)) { - case "creature": return createCreatureObject(objectId, template); - case "player": return createPlayerObject(objectId, template); - case "tangible": return createTangibleObject(objectId, template); - case "intangible": return createIntangibleObject(objectId, template); - case "waypoint": return createWaypointObject(objectId, template); - case "weapon": return createWeaponObject(objectId, template); - case "building": break; - case "cell": break; - } - return null; - } - - private CreatureObject createCreatureObject(long objectId, String template) { - return new CreatureObject(objectId); - } - - private PlayerObject createPlayerObject(long objectId, String template) { - return new PlayerObject(objectId); - } - - private TangibleObject createTangibleObject(long objectId, String template) { - return new TangibleObject(objectId); - } - - private IntangibleObject createIntangibleObject(long objectId, String template) { - return new IntangibleObject(objectId); - } - - private WaypointObject createWaypointObject(long objectId, String template) { - return new WaypointObject(objectId); - } - - private WeaponObject createWeaponObject(long objectId, String template) { - return new WeaponObject(objectId); - } - - public SWGObject getObjectById(long id) { - return objects.get(id); - } }