mirror of
https://github.com/ProjectSWGCore/Holocore.git
synced 2026-10-07 22:13:40 -04:00
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:
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user