mirror of
https://github.com/ProjectSWGCore/Holocore.git
synced 2026-07-30 00:15:50 -04:00
Added persistent data to ObjectManager and PlayerManager
This commit is contained in:
@@ -28,16 +28,18 @@ import resources.objects.player.PlayerObject;
|
||||
import resources.objects.quadtree.QuadTree;
|
||||
import resources.objects.tangible.TangibleObject;
|
||||
import resources.player.Player;
|
||||
import resources.server_info.ObjectDatabase;
|
||||
import resources.server_info.ObjectDatabase.Traverser;
|
||||
import services.player.PlayerManager;
|
||||
|
||||
public class ObjectManager extends Manager {
|
||||
|
||||
private Map <Long, SWGObject> objects;
|
||||
private ObjectDatabase<SWGObject> objects;
|
||||
private Map <String, QuadTree <SWGObject>> quadTree;
|
||||
private long maxObjectId;
|
||||
|
||||
public ObjectManager() {
|
||||
objects = new HashMap<Long, SWGObject>();
|
||||
objects = new ObjectDatabase<SWGObject>("odb/objects.db");
|
||||
quadTree = new HashMap<String, QuadTree<SWGObject>>();
|
||||
maxObjectId = 1;
|
||||
}
|
||||
@@ -49,9 +51,32 @@ public class ObjectManager extends Manager {
|
||||
for (Terrain t : Terrain.values()) {
|
||||
quadTree.put(t.getFile(), new QuadTree<SWGObject>(-5000, -5000, 5000, 5000));
|
||||
}
|
||||
objects.loadToCache();
|
||||
System.out.println("ObjectManager: Loading " + objects.size() + " objects from ObjectDatabase...");
|
||||
objects.traverse(new Traverser<SWGObject>() {
|
||||
@Override
|
||||
public void process(SWGObject obj) {
|
||||
Location l = obj.getLocation();
|
||||
if (l.getTerrain() != null) {
|
||||
QuadTree <SWGObject> tree = quadTree.get(l.getTerrain().getFile());
|
||||
if (tree != null) {
|
||||
System.out.println(l.getX() + ", " + l.getZ());
|
||||
tree.put(l.getX(), l.getZ(), obj);
|
||||
} else {
|
||||
System.err.println("ObjectManager: Unable to load QuadTree for object " + obj.getObjectId() + " and terrain: " + l.getTerrain());
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
return super.initialize();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean terminate() {
|
||||
objects.save();
|
||||
return super.terminate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onIntentReceived(Intent i) {
|
||||
if (i instanceof SWGObjectMovedIntent) {
|
||||
@@ -69,7 +94,7 @@ public class ObjectManager extends Manager {
|
||||
} else if (i instanceof GalacticPacketIntent) {
|
||||
GalacticPacketIntent gpi = (GalacticPacketIntent) i;
|
||||
if (gpi.getPacket() instanceof SelectCharacter) {
|
||||
zoneInCharacter(gpi.getPlayerManager(), gpi.getNetworkId());
|
||||
zoneInCharacter(gpi.getPlayerManager(), gpi.getNetworkId(), ((SelectCharacter)gpi.getPacket()).getCharacterId());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -84,13 +109,15 @@ public class ObjectManager extends Manager {
|
||||
SWGObject obj = createObjectFromTemplate(objectId, template);
|
||||
obj.setTemplate(template);
|
||||
obj.setLocation(l);
|
||||
objects.put(objectId, obj);
|
||||
return obj;
|
||||
}
|
||||
}
|
||||
|
||||
private void zoneInCharacter(PlayerManager playerManager, long netId) {
|
||||
private void zoneInCharacter(PlayerManager playerManager, long netId, long characterId) {
|
||||
Player player = playerManager.getPlayerFromNetworkId(netId);
|
||||
if (player != null) {
|
||||
verifyPlayerObjectsSet(player, characterId);
|
||||
long objId = player.getCreatureObject().getObjectId();
|
||||
Race race = ((CreatureObject) player.getCreatureObject()).getRace();
|
||||
Location l = player.getCreatureObject().getLocation();
|
||||
@@ -108,6 +135,23 @@ public class ObjectManager extends Manager {
|
||||
}
|
||||
}
|
||||
|
||||
private void verifyPlayerObjectsSet(Player player, long characterId) {
|
||||
if (player.getCreatureObject() != null && player.getPlayerObject() != null)
|
||||
return;
|
||||
SWGObject creature = objects.get(characterId);
|
||||
if (creature == null) {
|
||||
System.err.println("ObjectManager: Failed to start zone - CreatureObject could not be fetched from database");
|
||||
throw new NullPointerException("CreatureObject for ID: " + characterId + " cannot be null!");
|
||||
}
|
||||
player.setCreatureObject(creature);
|
||||
for (SWGObject obj : creature.getChildren()) {
|
||||
if (obj instanceof PlayerObject) {
|
||||
player.setPlayerObject(obj);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private long getNextObjectId() {
|
||||
synchronized (objects) {
|
||||
return maxObjectId++;
|
||||
|
||||
Reference in New Issue
Block a user