package org.terasology.entitySystem.pojo;
import org.terasology.entitySystem.Component;
import org.terasology.entitySystem.EntityRef;
import org.terasology.entitySystem.Event;
/**
* @author Immortius <immortius@gmail.com>
*/
public class PojoEntityRef extends EntityRef {
int id;
PojoEntityManager entityManager;
PojoEntityRef(PojoEntityManager manager, int id) {
this.id = id;
this.entityManager = manager;
}
@Override
public int getId() {
return id;
}
@Override
public boolean exists() {
return id != PojoEntityManager.NULL_ID;
}
@Override
public <T extends Component> T getComponent(Class<T> componentClass) {
return entityManager.getComponent(id, componentClass);
}
@Override
public <T extends Component> T addComponent(T component) {
return entityManager.addComponent(id, component);
}
@Override
public void removeComponent(Class<? extends Component> componentClass) {
entityManager.removeComponent(id, componentClass);
}
@Override
public void saveComponent(Component component) {
entityManager.saveComponent(id, component);
}
@Override
public Iterable<Component> iterateComponents() {
return entityManager.iterateComponents(id);
}
@Override
public void destroy() {
entityManager.destroy(id);
}
@Override
public void send(Event event) {
entityManager.getEventSystem().send(this, event);
}
@Override
public boolean hasComponent(Class<? extends Component> component) {
return entityManager.hasComponent(id, component);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o instanceof EntityRef) {
if (!exists() && !((EntityRef) o).exists()) return true;
}
if (o instanceof PojoEntityRef) {
return id == ((PojoEntityRef) o).id;
}
return false;
}
@Override
public int hashCode() {
return !exists() ? 0 : (int) (id ^ (id >>> 32));
}
@Override
public String toString() {
return "EntityRef{" +
"id=" + id +
'}';
}
void invalidate() {
id = PojoEntityManager.NULL_ID;
}
}