package org.multiverseking.render.VFX;
import com.jme3.scene.Node;
import com.simsilica.es.Entity;
import com.simsilica.es.EntityId;
import com.simsilica.es.EntitySet;
import emitter.Emitter;
import emitter.loader.EmitterLoader;
import java.util.HashMap;
import org.hexgridapi.core.AbstractHexGridAppState;
import org.hexgridapi.core.data.MapData;
import org.multiverseking.core.utility.EntitySystemAppState;
import org.multiverseking.core.utility.SubSystem;
import org.multiverseking.render.RenderSystem;
/**
* System used to show all FX on the screen, work with other system, The Emitter
* system made by toneGOd is the one used to render all VFX.
*
* @author roah
*/
public class VFXRenderSystem extends EntitySystemAppState implements SubSystem {
private final HashMap<EntityId, EmitterLoader> emitters = new HashMap<>();
private final String folderPath = "VFX/";
private Node VFXNode = new Node("VFXNode");
private MapData mapData;
// private SpatialInitializer spatialInitializer;
private RenderSystem renderSystem;
@Override
protected EntitySet initialiseSystem() {
mapData = app.getStateManager().getState(AbstractHexGridAppState.class).getMapData();
renderSystem = app.getStateManager().getState(RenderSystem.class);
VFXNode = app.getStateManager().getState(RenderSystem.class).registerSubSystem(this, true);
// spatialInitializer = new SpatialInitializer(app.getAssetManager(), "/VFX");
app.getAssetManager().registerLoader(EmitterLoader.class, "em");
return entityData.getEntities(VFXRenderComponent.class);
}
@Override
protected void updateSystem(float tpf) {
// throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
protected void addEntity(Entity e) {
String path = folderPath + e.get(VFXRenderComponent.class).getName() + ".em";
EmitterLoader em = (EmitterLoader) app.getAssetManager().loadAsset(path);
for (Emitter emitter : em.getEmitters()) {
emitter.initialize(app.getAssetManager());
renderSystem.setControl(e.getId(), emitter);
emitter.emitAllParticles();
}
emitters.put(e.getId(), em);
}
@Override
protected void updateEntity(Entity e) {
// throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
protected void removeEntity(Entity e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
protected void cleanupSystem() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void rootSystemIsRemoved() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}