Implemented CORE-253 'Redo awareness' Should no longer have to worry about it as a developer, it's all automagic

This commit is contained in:
Obique PSWG
2015-10-06 10:36:00 -05:00
parent a30784a907
commit e25a094b29
12 changed files with 163 additions and 85 deletions
+71 -1
View File
@@ -27,6 +27,10 @@
***********************************************************************************/
package services.objects;
import intents.PlayerEventIntent;
import intents.object.ObjectCreateIntent;
import intents.object.ObjectCreatedIntent;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -36,10 +40,14 @@ import java.util.Set;
import network.packets.swg.zone.UpdateContainmentMessage;
import resources.Location;
import resources.Terrain;
import resources.control.Intent;
import resources.control.Service;
import resources.objects.SWGObject;
import resources.objects.creature.CreatureObject;
import resources.objects.quadtree.QuadTree;
import resources.player.Player;
public class ObjectAwareness {
public class ObjectAwareness extends Service {
private static final double AWARE_RANGE = 1024;
@@ -49,11 +57,73 @@ public class ObjectAwareness {
quadTree = new HashMap<Terrain, QuadTree<SWGObject>>();
}
@Override
public boolean initialize() {
registerForIntent(PlayerEventIntent.TYPE);
registerForIntent(ObjectCreateIntent.TYPE);
registerForIntent(ObjectCreatedIntent.TYPE);
loadQuadTree();
return true;
}
@Override
public void onIntentReceived(Intent i) {
switch (i.getType()) {
case PlayerEventIntent.TYPE:
if (i instanceof PlayerEventIntent)
handlePlayerEventIntent((PlayerEventIntent) i);
break;
case ObjectCreateIntent.TYPE:
if (i instanceof ObjectCreateIntent)
handleObjectCreateIntent((ObjectCreateIntent) i);
break;
case ObjectCreatedIntent.TYPE:
if (i instanceof ObjectCreatedIntent)
handleObjectCreatedIntent((ObjectCreatedIntent) i);
default:
break;
}
}
private void handlePlayerEventIntent(PlayerEventIntent pei) {
Player p = pei.getPlayer();
CreatureObject creature = p.getCreatureObject();
if (creature == null)
return;
switch (pei.getEvent()) {
case PE_DISAPPEAR:
creature.clearAware();
remove(creature);
for (SWGObject obj : creature.getObservers())
creature.destroyObject(obj.getOwner());
creature.setOwner(null);
p.setCreatureObject(null);
break;
case PE_FIRST_ZONE:
if (creature.getParent() == null)
creature.createObject(p);
break;
case PE_ZONE_IN:
creature.clearAware();
update(creature);
break;
default:
break;
}
}
private void handleObjectCreateIntent(ObjectCreateIntent oci) {
SWGObject obj = oci.getObject();
if (obj.getParent() == null)
add(obj);
}
private void handleObjectCreatedIntent(ObjectCreatedIntent oci) {
SWGObject obj = oci.getObject();
if (obj.getParent() == null)
add(obj);
}
private void loadQuadTree() {
for (Terrain t : Terrain.values()) {
quadTree.put(t, new QuadTree<SWGObject>(16, -8192, -8192, 8192, 8192));