package org.multiverseking.debug; import com.simsilica.es.Entity; import com.simsilica.es.EntitySet; import java.util.logging.Level; import java.util.logging.Logger; import org.hexgridapi.core.coordinate.HexCoordinate; import org.multiverseking.core.utility.EntitySystemAppState; import org.multiverseking.core.utility.SubSystem; import org.multiverseking.field.exploration.component.AreaEventComponent; import org.multiverseking.field.exploration.component.AreaEventComponent.Event; import org.multiverseking.field.position.component.HexPositionComponent; import org.multiverseking.render.AbstractRender.RenderType; import org.multiverseking.render.RenderComponent; import org.multiverseking.render.RenderSystem; /** * * @author roah */ public class RenderDebugSystem extends EntitySystemAppState implements SubSystem { @Override protected EntitySet initialiseSystem() { app.getStateManager().getState(RenderSystem.class).registerSubSystem(this, true); return entityData.getEntities(AreaEventComponent.class); } @Override protected void updateSystem(float tpf) { } @Override protected void addEntity(Entity e) { initializeRender(e, true); } @Override protected void updateEntity(Entity e) { RenderComponent render = entityData.getComponent(e.getId(), RenderComponent.class); if (render != null) { if (e.get(AreaEventComponent.class).getEvents() .contains(AreaEventComponent.Event.Start) && render.getName().equals("T_Shape") || !e.get(AreaEventComponent.class).getEvents() .contains(AreaEventComponent.Event.Start) && !render.getName().equals("T_Shape")) { initializeRender(e, true); } } else { initializeRender(e, true); } } @Override protected void removeEntity(Entity e) { entityData.removeComponent(e.getId(), RenderComponent.class); entityData.removeComponent(e.getId(), HexPositionComponent.class); } private void initializeRender(Entity e, boolean isVisible) { RenderComponent render; if (e.get(AreaEventComponent.class).getEvents().contains(Event.Start)) { // render = new RenderComponent("S_Shape", RenderType.Debug, this, isVisible); render = new RenderComponent("S_Shape", RenderType.Debug, this, isVisible); } else { render = new RenderComponent("T_Shape", RenderType.Debug, this, isVisible); } e.set(render); e.set(new HexPositionComponent(e.get(AreaEventComponent.class).getPosition())); } public void showDebug(boolean show, HexCoordinate position, SubSystem system) { for (Entity e : entities) { if (e.get(AreaEventComponent.class).getPosition().equals(position)) { RenderComponent render = entityData.getComponent(e.getId(), RenderComponent.class); if (show && render != null) { e.set(render.cloneAndShow()); } else if (!show && render != null) { e.set(render.cloneAndHide()); } else if (render == null) { initializeRender(e, show); } return; } } Logger.getGlobal().log(Level.WARNING, "{0} : No event at the specifiated " + "position : pos({1}).", new Object[]{getClass().getName(), position}); } @Override public void setEnabled(boolean enabled) { for (Entity e : entities) { RenderComponent comp = entityData.getComponent(e.getId(), RenderComponent.class); entityData.setComponent(e.getId(), enabled ? comp.cloneAndShow() : comp.cloneAndHide()); } super.setEnabled(enabled); } @Override protected void cleanupSystem() { for (Entity e : entities) { removeEntity(e); } if (app.getStateManager().getState(RenderSystem.class) != null) { app.getStateManager().getState(RenderSystem.class).removeSubSystem(this, true); } } @Override public void rootSystemIsRemoved() { app.getStateManager().detach(this); } }