/* * Copyright 2016 MovingBlocks * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.terasology.config; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.terasology.rendering.world.WorldRendererImpl; import org.terasology.utilities.subscribables.AbstractSubscribable; /** */ public class RenderingDebugConfig extends AbstractSubscribable implements PropertyChangeListener { public enum DebugRenderingStage { OPAQUE_COLOR(0, "DEBUG_STAGE_OPAQUE_COLOR"), TRANSPARENT_COLOR(1, "DEBUG_STAGE_TRANSPARENT_COLOR"), OPAQUE_NORMALS(2, "DEBUG_STAGE_OPAQUE_NORMALS"), OPAQUE_DEPTH(3, "DEBUG_STAGE_OPAQUE_DEPTH"), OPAQUE_SUNLIGHT(4, "DEBUG_STAGE_OPAQUE_SUNLIGHT"), BAKED_OCCLUSION(5, "DEBUG_STAGE_BAKED_OCCLUSION"), SSAO(6, "DEBUG_STAGE_SSAO"), OPAQUE_LIGHT_BUFFER(7, "DEBUG_STAGE_OPAQUE_LIGHT_BUFFER"), SHADOW_MAP(8, "DEBUG_STAGE_SHADOW_MAP"), SOBEL(9, "DEBUG_STAGE_SOBEL"), HIGH_PASS(10, "DEBUG_STAGE_HIGH_PASS"), BLOOM(11, "DEBUG_STAGE_BLOOM"), SKY_BAND(12, "DEBUG_STAGE_SKY_BAND"), LIGHT_SHAFTS(13, "DEBUG_STAGE_LIGHT_SHAFTS"), RECONSTRUCTED_POSITION(14, "DEBUG_STAGE_RECONSTRUCTED_POSITION"), VOLUMETRIC_LIGHTING(15, "DEBUG_STAGE_VOLUMETRIC_LIGHTING"); private int index; private String defineName; DebugRenderingStage(int index, String defineName) { this.index = index; this.defineName = defineName; } public int getIndex() { return index; } public String getDefineName() { return defineName; } } public static final String WIREFRAME = "wireframe"; public static final String ENABLED = "enabled"; public static final String STAGE = "stage"; public static final String FIRST_PERSON_ELEMENTS_HIDDEN = "FirstPersonElementsHidden"; public static final String HUD_HIDDEN = "hudHidden"; public static final String RENDER_CHUNK_BOUNDING_BOXES = "renderChunkBoundingBoxes"; public static final String RENDER_SKELETONS = "renderSkeletons"; private static final Logger logger = LoggerFactory.getLogger(WorldRendererImpl.class); private boolean enabled; private DebugRenderingStage stage; private boolean firstPersonElementsHidden; private boolean hudHidden; private boolean wireframe; private boolean renderChunkBoundingBoxes; private boolean renderSkeletons; public RenderingDebugConfig() { subscribe(this); } public boolean isWireframe() { return wireframe; } public void setWireframe(boolean wireframe) { boolean oldValue = this.wireframe; this.wireframe = wireframe; propertyChangeSupport.firePropertyChange(WIREFRAME, oldValue, this.wireframe); } public boolean isEnabled() { return enabled; } public void setEnabled(boolean enabled) { boolean oldValue = this.enabled; this.enabled = enabled; propertyChangeSupport.firePropertyChange(ENABLED, oldValue, this.enabled); } public void cycleStage() { this.stage = DebugRenderingStage.values()[(stage.ordinal() + 1) % DebugRenderingStage.values().length]; } public DebugRenderingStage getStage() { return stage; } public void setStage(DebugRenderingStage stage) { DebugRenderingStage oldStage = this.stage; this.stage = stage; propertyChangeSupport.firePropertyChange(STAGE, oldStage, this.stage); } public boolean isFirstPersonElementsHidden() { return firstPersonElementsHidden; } public void setFirstPersonElementsHidden(boolean firstPersonElementsHidden) { boolean oldValue = this.firstPersonElementsHidden; this.firstPersonElementsHidden = firstPersonElementsHidden; propertyChangeSupport.firePropertyChange(FIRST_PERSON_ELEMENTS_HIDDEN, oldValue, this.firstPersonElementsHidden); } public boolean isHudHidden() { return hudHidden; } public void setHudHidden(boolean hudHidden) { boolean oldValue = this.hudHidden; this.hudHidden = hudHidden; propertyChangeSupport.firePropertyChange(HUD_HIDDEN, oldValue, this.hudHidden); } public boolean isRenderChunkBoundingBoxes() { return renderChunkBoundingBoxes; } public void setRenderChunkBoundingBoxes(boolean renderChunkBoundingBoxes) { boolean oldValue = this.renderChunkBoundingBoxes; this.renderChunkBoundingBoxes = renderChunkBoundingBoxes; propertyChangeSupport.firePropertyChange(RENDER_CHUNK_BOUNDING_BOXES, oldValue, this.renderChunkBoundingBoxes); } public boolean isRenderSkeletons() { return renderSkeletons; } public void setRenderSkeletons(boolean renderSkeletons) { boolean oldValue = this.renderSkeletons; this.renderSkeletons = renderSkeletons; propertyChangeSupport.firePropertyChange(RENDER_SKELETONS, oldValue, this.renderSkeletons); } @Override public void propertyChange(PropertyChangeEvent evt) { logger.info("Set {} property to {}. ", evt.getPropertyName().toUpperCase(), evt.getNewValue()); // for debugging purposes } }