package gdw.entityCore;
import java.util.HashMap;
public class Entity {
private int id;
private float posX;
private float posY;
private HashMap<Integer, Component> components;
private EntityTemplate template;
private boolean destroyFlag=false;
//package-private um Erzeugung nur dorch Klassen aus dem Entity-Package zuzulassen:
//Erzeugung für Nutzerklassen über EntityManager bzw. EntityTemplate
Entity(int id, EntityTemplate template) {
this.id=id;
this.template = template;
}
void destroy(){
for(Component comp : components.values()){
comp.destroy();
}
components.clear();
//TODO: Unregister
}
public void markForDestroy(){
destroyFlag=true;
}
public boolean getDestroyFlag(){
return destroyFlag;
}
public int getID(){
return id;
}
public float getPosX(){
return posX;
}
public float getPosY(){
return posY;
}
public void setPos(float x, float y){
posX = x;
posY = y;
}
public void setPosX(float x){
posX=x;
}
public void setPosY(float y){
posY=y;
}
public void addComponent(Component comp){
components.put(comp.getComponentTypeID(), comp);
comp.setOwner(this);
}
public Component getComponent(int componentTypeID){
return components.get(componentTypeID);
}
public void removeComponent(int componentTypeID){
components.remove(componentTypeID).destroy();
}
public void removeComponent(Component comp){
Integer tmp=null;
for(Integer key: components.keySet()){
if(components.get(key)==comp){
tmp=key;
break;
}
}
if(tmp!=null){
removeComponent(tmp);
}
}
public void message(Message msg){
for(Component comp: components.values()){
comp.onMessage(msg);
}
}
public EntityTemplate getTemplate() {
return template;
}
public void tick(float deltaTime){
for(Component comp: components.values()){
comp.tick(deltaTime);
}
}
}