diff --git a/src/intents/GalacticIntent.java b/src/intents/GalacticIntent.java index 6d3f2761f..9b7ae0407 100644 --- a/src/intents/GalacticIntent.java +++ b/src/intents/GalacticIntent.java @@ -1,10 +1,12 @@ package intents; import resources.control.Intent; +import services.objects.ObjectManager; import services.player.PlayerManager; public abstract class GalacticIntent extends Intent { + private ObjectManager objectManager; private PlayerManager playerManager; protected GalacticIntent(String type) { @@ -13,13 +15,22 @@ public abstract class GalacticIntent extends Intent { protected GalacticIntent(GalacticIntent i) { super(i.getType()); + setObjectManager(i.getObjectManager()); setPlayerManager(i.getPlayerManager()); } + public void setObjectManager(ObjectManager objectManager) { + this.objectManager = objectManager; + } + public void setPlayerManager(PlayerManager playerManager) { this.playerManager = playerManager; } + public ObjectManager getObjectManager() { + return objectManager; + } + public PlayerManager getPlayerManager() { return playerManager; } diff --git a/src/services/galaxy/GalacticManager.java b/src/services/galaxy/GalacticManager.java index 66284eef9..719bcbd30 100644 --- a/src/services/galaxy/GalacticManager.java +++ b/src/services/galaxy/GalacticManager.java @@ -5,19 +5,23 @@ import intents.GalacticPacketIntent; import intents.InboundPacketIntent; import resources.control.Intent; import resources.control.Manager; +import services.objects.ObjectManager; import services.player.PlayerManager; public class GalacticManager extends Manager { private final Object prevPacketIntentMutex = new Object(); + private ObjectManager objectManager; private PlayerManager playerManager; private Intent prevPacketIntent; public GalacticManager() { + objectManager = new ObjectManager(); playerManager = new PlayerManager(); prevPacketIntent = null; + addChildService(objectManager); addChildService(playerManager); } @@ -45,7 +49,7 @@ public class GalacticManager extends Manager { synchronized (i) { if (i.isBroadcasted()) return; - i.setPlayerManager(playerManager); + prepareGalacticIntent(i); i.broadcast(); } } @@ -54,9 +58,14 @@ public class GalacticManager extends Manager { synchronized (g) { if (g.isBroadcasted()) return; - g.setPlayerManager(playerManager); + prepareGalacticIntent(g); g.broadcastAfterIntent(i); } } + private void prepareGalacticIntent(GalacticIntent i) { + i.setObjectManager(objectManager); + i.setPlayerManager(playerManager); + } + } diff --git a/src/services/objects/ObjectManager.java b/src/services/objects/ObjectManager.java new file mode 100644 index 000000000..d3634d083 --- /dev/null +++ b/src/services/objects/ObjectManager.java @@ -0,0 +1,65 @@ +package services.objects; + +import java.util.HashMap; +import java.util.Map; + +import resources.Location; +import resources.control.Manager; +import resources.objects.SWGObject; +import resources.objects.intangible.IntangibleObject; +import resources.objects.tangible.TangibleObject; + +public class ObjectManager extends Manager { + + private Map objects; + private long maxObjectId; + + public ObjectManager() { + objects = new HashMap(); + maxObjectId = 0; + } + + public SWGObject createObject(String template) { + return createObject(template, new Location()); + } + + public SWGObject createObject(String template, Location l) { + synchronized (objects) { + SWGObject obj = createObjectFromTemplate(template); + + return obj; + } + } + + private long getNextObjectId() { + synchronized (objects) { + return maxObjectId++; + } + } + + private SWGObject createObjectFromTemplate(String template) { + synchronized (objects) { + String [] parts = template.split("/"); + // Error checking + if (parts.length < 3 || !parts[0].equals("object") || !parts[parts.length-1].endsWith(".iff")) + return null; + switch (parts[1]) { + case "tangible": return createTangibleObject(template); + case "intangible": return createIntangibleObject(template); + case "weapon": break; + case "building": break; + case "cell": break; + } + } + return null; + } + + private TangibleObject createTangibleObject(String template) { + return new TangibleObject(); + } + + private IntangibleObject createIntangibleObject(String template) { + return new IntangibleObject(); + } + +}