package org.reunionemu.jreunion.game;
import org.reunionemu.jreunion.events.EventDispatcher;
import org.reunionemu.jreunion.events.session.SendPacketSessionEvent;
import org.reunionemu.jreunion.server.LocalMap;
import org.reunionemu.jreunion.server.PacketFactory;
import org.reunionemu.jreunion.server.PacketFactory.Type;
import org.reunionemu.jreunion.server.Sendable;
import org.reunionemu.jreunion.server.Session;
import org.reunionemu.jreunion.server.SessionList;
/**
* @author Aidamina
* @license http://reunion.googlecode.com/svn/trunk/license.txt
*/
public abstract class WorldObject extends EventDispatcher implements Entity {
private int id = -1;
public int getEntityId() {
return id;
}
private Interested interested = new Interested(this);
public Interested getInterested() {
return interested;
}
public void setEntityId(int id) {
this.id = id;
}
public void update(){
LocalMap map = position.getLocalMap();
synchronized(map){
map.notify();
}
}
private Position position = new Position();
public Position getPosition() {
return position;
}
public void setPosition(Position position) {
this.position = position;
}
public abstract void enter(Session session);
public abstract void exit(Session session);
public class Interested implements Sendable{
private WorldObject entity;
public WorldObject getEntity() {
return entity;
}
public Interested(WorldObject entity){
this.entity = entity;
}
public SessionList<Session> getSessions(){
return entity.getPosition().getLocalMap().GetSessions(entity);
}
@Override
public void sendPacket(Type packetType, Object... args) {
String data = PacketFactory.createPacket(packetType, args);
entity.fireEvent(SendPacketSessionEvent.class, null, data);
}
}
}