package com.cardshifter.modapi.base;
import java.util.Objects;
import java.util.Random;
import com.cardshifter.modapi.events.IEvent;
public abstract class Component {
private Entity entity;
void setEntity(Entity entity) {
if (this.entity != null) {
throw new IllegalStateException("Component " + this + " is already connected to another entity.");
}
this.entity = entity;
// TODO: Is it possible to avoid having a Component know about its entity?
}
protected final <T extends IEvent> T executeEvent(T event) {
return getGame().getEvents().executePostEvent(event);
}
private ECSGame getGame() {
Objects.requireNonNull(entity, "Component is not connected to an entity.");
return entity.getGame();
}
protected final <T extends IEvent> T executeEvent(T event, Runnable runInBetween) {
return entity.getGame().executeEvent(event, runInBetween);
}
protected final <T extends CancellableEvent> T executeCancellableEvent(T event, Runnable runInBetween) {
return entity.getGame().executeCancellableEvent(event, runInBetween);
}
protected final Entity getEntity() {
return entity;
}
protected final Random getRandom() {
return getEntity().getGame().getRandom();
}
}