Simple Global Scene Shaders
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
- Particle Effects auto start flag
|
||||
- Add support to Bitmap Fonts (.fnt)
|
||||
- Add support to TinyVG (.tvg)
|
||||
- Add support for global scene shader
|
||||
- Bug fixes and stability improvements (as usual...)
|
||||
|
||||
= Editor =
|
||||
|
||||
Submodule hyperlap2d-runtime-libgdx updated: 70488d7e96...7ffcfd005c
+13
-2
@@ -3,6 +3,7 @@ package games.rednblack.editor.controller.commands;
|
||||
import games.rednblack.editor.renderer.data.LightsPropertiesVO;
|
||||
import games.rednblack.editor.renderer.data.PhysicsPropertiesVO;
|
||||
import games.rednblack.editor.renderer.data.SceneVO;
|
||||
import games.rednblack.editor.renderer.data.ShaderVO;
|
||||
import games.rednblack.editor.view.stage.Sandbox;
|
||||
import games.rednblack.h2d.common.MsgAPI;
|
||||
|
||||
@@ -11,6 +12,7 @@ public class UpdateSceneDataCommand extends EntityModifyRevertibleCommand {
|
||||
private SceneVO sceneVO;
|
||||
private PhysicsPropertiesVO physicsBackup;
|
||||
private LightsPropertiesVO lightsBackup;
|
||||
private ShaderVO shaderBackup;
|
||||
|
||||
@Override
|
||||
public void doAction() {
|
||||
@@ -18,9 +20,11 @@ public class UpdateSceneDataCommand extends EntityModifyRevertibleCommand {
|
||||
sceneVO = (SceneVO) payload[0];
|
||||
PhysicsPropertiesVO physicsPropertiesVO = (PhysicsPropertiesVO) payload[1];
|
||||
LightsPropertiesVO lightsPropertiesVO = (LightsPropertiesVO) payload[2];
|
||||
ShaderVO shaderVO = (ShaderVO) payload[3];
|
||||
|
||||
physicsBackup = new PhysicsPropertiesVO(sceneVO.physicsPropertiesVO);
|
||||
lightsBackup = new LightsPropertiesVO(sceneVO.lightsPropertiesVO);
|
||||
shaderBackup = new ShaderVO(sceneVO.shaderVO);
|
||||
|
||||
PhysicsPropertiesVO physicsVO = sceneVO.physicsPropertiesVO;
|
||||
physicsVO.gravityX = physicsPropertiesVO.gravityX;
|
||||
@@ -46,6 +50,9 @@ public class UpdateSceneDataCommand extends EntityModifyRevertibleCommand {
|
||||
lightsVO.enabled = lightsPropertiesVO.enabled;
|
||||
lightsVO.pseudo3d = lightsPropertiesVO.pseudo3d;
|
||||
|
||||
ShaderVO shader = sceneVO.shaderVO;
|
||||
shader.shaderName = shaderVO.shaderName;
|
||||
|
||||
Sandbox.getInstance().sceneControl.updateAmbientLights();
|
||||
|
||||
facade.sendNotification(MsgAPI.ITEM_DATA_UPDATED);
|
||||
@@ -77,16 +84,20 @@ public class UpdateSceneDataCommand extends EntityModifyRevertibleCommand {
|
||||
lightsVO.enabled = lightsBackup.enabled;
|
||||
lightsVO.pseudo3d = lightsBackup.pseudo3d;
|
||||
|
||||
ShaderVO shader = sceneVO.shaderVO;
|
||||
shader.shaderName = shaderBackup.shaderName;
|
||||
|
||||
Sandbox.getInstance().sceneControl.updateAmbientLights();
|
||||
|
||||
facade.sendNotification(MsgAPI.ITEM_DATA_UPDATED);
|
||||
}
|
||||
|
||||
public static Object payload(SceneVO scene, PhysicsPropertiesVO physicsPropertiesVO, LightsPropertiesVO lightsPropertiesVO) {
|
||||
Object[] payload = new Object[3];
|
||||
public static Object payload(SceneVO scene, PhysicsPropertiesVO physicsPropertiesVO, LightsPropertiesVO lightsPropertiesVO, ShaderVO shaderVO) {
|
||||
Object[] payload = new Object[4];
|
||||
payload[0] = scene;
|
||||
payload[1] = physicsPropertiesVO;
|
||||
payload[2] = lightsPropertiesVO;
|
||||
payload[3] = shaderVO;
|
||||
|
||||
return payload;
|
||||
}
|
||||
|
||||
@@ -252,9 +252,7 @@ public class VersionMigTo100 implements IVersionMigrator {
|
||||
target.light = new LightBodyDataVO(vo.light);
|
||||
}
|
||||
|
||||
target.shaderName = vo.shaderName;
|
||||
target.shaderUniforms.clear();
|
||||
target.shaderUniforms.putAll(vo.shaderUniforms);
|
||||
target.shader.set(vo.shader);
|
||||
|
||||
target.renderingLayer = vo.renderingLayer;
|
||||
}
|
||||
|
||||
@@ -373,13 +373,13 @@ public class GraphContainer<T extends FieldType> extends Table implements Naviga
|
||||
}
|
||||
}
|
||||
|
||||
for (Map.Entry<GraphConnection, Shape> connectionEntry : connections.entrySet()) {
|
||||
/*for (Map.Entry<GraphConnection, Shape> connectionEntry : connections.entrySet()) {
|
||||
if (connectionEntry.getValue().contains(x, y)) {
|
||||
GraphConnection connection = connectionEntry.getKey();
|
||||
removeConnection(connection);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
drawingFromConnector = null;
|
||||
}
|
||||
@@ -682,7 +682,7 @@ public class GraphContainer<T extends FieldType> extends Table implements Naviga
|
||||
}
|
||||
}
|
||||
|
||||
BasicStroke basicStroke = new BasicStroke(7);
|
||||
//BasicStroke basicStroke = new BasicStroke(7);
|
||||
Vector2 to = new Vector2();
|
||||
for (GraphConnection graphConnection : graphConnections) {
|
||||
NodeConnector fromNode = getNodeInfo(graphConnection.getNodeFrom(), graphConnection.getFieldFrom());
|
||||
@@ -694,9 +694,9 @@ public class GraphContainer<T extends FieldType> extends Table implements Naviga
|
||||
GraphBoxInputConnector<T> input = getGraphBoxById(toNode.getNodeId()).getInputs().get(toNode.getFieldId());
|
||||
calculateConnection(to, toWindow, input);
|
||||
|
||||
Shape shape = basicStroke.createStrokedShape(new Line2D.Float(from.x, from.y, to.x, to.y));
|
||||
//Shape shape = basicStroke.createStrokedShape(new Line2D.Float(from.x, from.y, to.x, to.y));
|
||||
|
||||
connections.put(graphConnection, shape);
|
||||
//connections.put(graphConnection, shape);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -81,21 +81,21 @@ public abstract class Asset implements IAsset {
|
||||
@Override
|
||||
public boolean exportAsset(MainItemVO item, ExportMapperVO exportMapperVO, File tmpDir) throws IOException {
|
||||
currentProjectPath = projectManager.getCurrentProjectPath() + File.separator;
|
||||
copyShader(item.shaderName, tmpDir, exportMapperVO);
|
||||
copyShader(item.shader, tmpDir, exportMapperVO);
|
||||
return true;
|
||||
}
|
||||
|
||||
private void copyShader(String shaderName, File tmpDir, ExportMapperVO exportMapperVO) throws IOException {
|
||||
if (shaderName.equals(""))
|
||||
private void copyShader(ShaderVO shaderVO, File tmpDir, ExportMapperVO exportMapperVO) throws IOException {
|
||||
if (shaderVO.shaderName.equals(""))
|
||||
return;
|
||||
|
||||
File f = new File(currentProjectPath + ProjectManager.SHADER_DIR_PATH + File.separator + shaderName + ".frag");
|
||||
File f = new File(currentProjectPath + ProjectManager.SHADER_DIR_PATH + File.separator + shaderVO.shaderName + ".frag");
|
||||
FileUtils.copyFileToDirectory(f, tmpDir);
|
||||
|
||||
File v = new File(currentProjectPath + ProjectManager.SHADER_DIR_PATH + File.separator + shaderName + ".vert");
|
||||
File v = new File(currentProjectPath + ProjectManager.SHADER_DIR_PATH + File.separator + shaderVO.shaderName + ".vert");
|
||||
FileUtils.copyFileToDirectory(v, tmpDir);
|
||||
|
||||
exportMapperVO.mapper.add(new ExportMapperVO.ExportedAsset(AssetsUtils.TYPE_SHADER, shaderName + ".frag"));
|
||||
exportMapperVO.mapper.add(new ExportMapperVO.ExportedAsset(AssetsUtils.TYPE_SHADER, shaderName + ".vert"));
|
||||
exportMapperVO.mapper.add(new ExportMapperVO.ExportedAsset(AssetsUtils.TYPE_SHADER, shaderVO.shaderName + ".frag"));
|
||||
exportMapperVO.mapper.add(new ExportMapperVO.ExportedAsset(AssetsUtils.TYPE_SHADER, shaderVO.shaderName + ".vert"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,8 +99,8 @@ public class ShaderAsset extends Asset {
|
||||
Array<MainItemVO> items = compositeItemVO.getAllItems();
|
||||
|
||||
for (MainItemVO itemVO : items)
|
||||
if (itemVO.shaderName.equals(shaderName))
|
||||
itemVO.shaderName = "";
|
||||
if (itemVO.shader.shaderName.equals(shaderName))
|
||||
itemVO.shader.shaderName = "";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+37
-4
@@ -19,28 +19,33 @@
|
||||
package games.rednblack.editor.view.ui.properties.panels;
|
||||
|
||||
import com.badlogic.gdx.graphics.Color;
|
||||
import com.badlogic.gdx.graphics.glutils.ShaderProgram;
|
||||
import com.badlogic.gdx.scenes.scene2d.Actor;
|
||||
import com.badlogic.gdx.scenes.scene2d.InputEvent;
|
||||
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
|
||||
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
|
||||
import com.badlogic.gdx.utils.Align;
|
||||
import com.badlogic.gdx.utils.Array;
|
||||
import com.kotcrab.vis.ui.util.Validators;
|
||||
import com.kotcrab.vis.ui.widget.*;
|
||||
import com.kotcrab.vis.ui.widget.spinner.Spinner;
|
||||
import games.rednblack.editor.event.CheckBoxChangeListener;
|
||||
import games.rednblack.editor.event.KeyboardListener;
|
||||
import games.rednblack.editor.event.NumberSelectorOverlapListener;
|
||||
import games.rednblack.editor.event.SelectBoxChangeListener;
|
||||
import games.rednblack.editor.event.*;
|
||||
import games.rednblack.editor.view.ui.properties.UIAbstractProperties;
|
||||
import games.rednblack.h2d.common.view.ui.StandardWidgetsFactory;
|
||||
import games.rednblack.h2d.common.view.ui.widget.TintButton;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
public class UISceneProperties extends UIAbstractProperties {
|
||||
|
||||
public static final String prefix = "games.rednblack.editor.view.ui.properties.panels.UISceneProperties";
|
||||
public static final String AMBIENT_COLOR_BUTTON_CLICKED = prefix + ".AMBIENT_COLOR_BUTTON_CLICKED";
|
||||
public static final String DIRECTIONAL_COLOR_BUTTON_CLICKED = prefix + ".DIRECTIONAL_COLOR_BUTTON_CLICKED";
|
||||
|
||||
public static final String EDIT_SHADER_BUTTON_CLICKED = prefix + ".EDIT_SHADER_BUTTON_CLICKED";
|
||||
public static final String EDIT_SHADER_DONE = prefix + ".EDIT_SHADER_DONE";
|
||||
public static final String UNIFORMS_SHADER_BUTTON_CLICKED = prefix + ".UNIFORMS_SHADER_BUTTON_CLICKED";
|
||||
|
||||
final private VisLabel pixelsPerWorldUnitField;
|
||||
final private VisLabel worldSizeField;
|
||||
final private VisCheckBox physicsEnabledCheckBox;
|
||||
@@ -56,6 +61,7 @@ public class UISceneProperties extends UIAbstractProperties {
|
||||
final private VisTextField directionalDegreeTextField;
|
||||
final private VisTextField directionalHeightTextField;
|
||||
final private TintButton directionalLightColor;
|
||||
private final VisSelectBox<String> shadersSelector;
|
||||
|
||||
VisTable directionalTable = new VisTable();
|
||||
|
||||
@@ -89,6 +95,16 @@ public class UISceneProperties extends UIAbstractProperties {
|
||||
add(worldSizeField).width(30).left().padLeft(7);
|
||||
row().padTop(5);
|
||||
addSeparator().colspan(2).padTop(5).padBottom(5);
|
||||
shadersSelector = StandardWidgetsFactory.createSelectBox(String.class);
|
||||
add(new VisLabel("Scene Shader: ", Align.right)).padRight(5).width(75).right();
|
||||
add(shadersSelector).width(100).left().row();
|
||||
//TextButton editButton = StandardWidgetsFactory.createTextButton("Edit");
|
||||
//editButton.addListener(new ButtonToNotificationListener(EDIT_SHADER_BUTTON_CLICKED));
|
||||
//add(editButton).padTop(5).padRight(3);
|
||||
//TextButton uniformsButton = StandardWidgetsFactory.createTextButton("Uniforms");
|
||||
//uniformsButton.addListener(new ButtonToNotificationListener(UNIFORMS_SHADER_BUTTON_CLICKED));
|
||||
//add(uniformsButton).padTop(5).row();
|
||||
addSeparator().colspan(2).padTop(5).padBottom(5);
|
||||
add(new VisLabel("Physics enabled:", Align.right)).padRight(5).width(115);
|
||||
add(physicsEnabledCheckBox).padLeft(1).left();
|
||||
row().padTop(5);
|
||||
@@ -260,6 +276,22 @@ public class UISceneProperties extends UIAbstractProperties {
|
||||
worldSizeField.setText((resolutionWidth / value) + " x " + (resolutionHeight / value));
|
||||
}
|
||||
|
||||
public void initShader(HashMap<String, ShaderProgram> shaders) {
|
||||
Array<String> shaderNames = new Array<>();
|
||||
shaderNames.add("Default");
|
||||
shaders.keySet().forEach(shaderNames::add);
|
||||
|
||||
shadersSelector.setItems(shaderNames);
|
||||
}
|
||||
|
||||
public String getShader() {
|
||||
return shadersSelector.getSelected();
|
||||
}
|
||||
|
||||
public void setSelectedShader(String currShaderName) {
|
||||
shadersSelector.setSelected(currShaderName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPrefix() {
|
||||
return this.getClass().getCanonicalName();
|
||||
@@ -298,5 +330,6 @@ public class UISceneProperties extends UIAbstractProperties {
|
||||
facade.sendNotification(DIRECTIONAL_COLOR_BUTTON_CLICKED, directionalLightColor.getColorValue(), null);
|
||||
}
|
||||
});
|
||||
shadersSelector.addListener(new SelectBoxChangeListener(getUpdateEventName()));
|
||||
}
|
||||
}
|
||||
|
||||
+21
-7
@@ -23,10 +23,8 @@ import com.kotcrab.vis.ui.widget.color.ColorPicker;
|
||||
import com.kotcrab.vis.ui.widget.color.ColorPickerAdapter;
|
||||
import games.rednblack.editor.controller.commands.UpdateSceneDataCommand;
|
||||
import games.rednblack.editor.proxy.ResolutionManager;
|
||||
import games.rednblack.editor.renderer.data.LightsPropertiesVO;
|
||||
import games.rednblack.editor.renderer.data.PhysicsPropertiesVO;
|
||||
import games.rednblack.editor.renderer.data.ResolutionEntryVO;
|
||||
import games.rednblack.editor.renderer.data.SceneVO;
|
||||
import games.rednblack.editor.proxy.ResourceManager;
|
||||
import games.rednblack.editor.renderer.data.*;
|
||||
import games.rednblack.editor.view.stage.Sandbox;
|
||||
import games.rednblack.editor.view.ui.properties.UIAbstractPropertiesMediator;
|
||||
import games.rednblack.h2d.common.MsgAPI;
|
||||
@@ -42,6 +40,8 @@ public class UIScenePropertiesMediator extends UIAbstractPropertiesMediator<Scen
|
||||
private static final String TAG = UIScenePropertiesMediator.class.getCanonicalName();
|
||||
public static final String NAME = TAG;
|
||||
|
||||
private final ResourceManager resourceManager;
|
||||
|
||||
private final ColorPicker picker = new HyperLapColorPicker();
|
||||
private final ColorPickerAdapter ambientColorListener = new ColorPickerAdapter() {
|
||||
@Override
|
||||
@@ -70,14 +70,19 @@ public class UIScenePropertiesMediator extends UIAbstractPropertiesMediator<Scen
|
||||
|
||||
public UIScenePropertiesMediator() {
|
||||
super(NAME, new UISceneProperties());
|
||||
|
||||
resourceManager = facade.retrieveProxy(ResourceManager.NAME);
|
||||
viewComponent.initShader(resourceManager.getShaders());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] listNotificationInterests() {
|
||||
String[] defaultNotifications = super.listNotificationInterests();
|
||||
String[] notificationInterests = new String[]{
|
||||
String[] notificationInterests = new String[] {
|
||||
UISceneProperties.AMBIENT_COLOR_BUTTON_CLICKED,
|
||||
UISceneProperties.DIRECTIONAL_COLOR_BUTTON_CLICKED
|
||||
UISceneProperties.DIRECTIONAL_COLOR_BUTTON_CLICKED,
|
||||
UISceneProperties.EDIT_SHADER_BUTTON_CLICKED,
|
||||
UISceneProperties.UNIFORMS_SHADER_BUTTON_CLICKED
|
||||
};
|
||||
|
||||
return ArrayUtils.addAll(defaultNotifications, notificationInterests);
|
||||
@@ -108,6 +113,10 @@ public class UIScenePropertiesMediator extends UIAbstractPropertiesMediator<Scen
|
||||
picker.setListener(directionalColorListener);
|
||||
Sandbox.getInstance().getUIStage().addActor(picker.fadeIn());
|
||||
break;
|
||||
case UISceneProperties.EDIT_SHADER_BUTTON_CLICKED:
|
||||
break;
|
||||
case UISceneProperties.UNIFORMS_SHADER_BUTTON_CLICKED:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -135,6 +144,8 @@ public class UIScenePropertiesMediator extends UIAbstractPropertiesMediator<Scen
|
||||
viewComponent.setLightsEnabled(lightsVO.enabled);
|
||||
viewComponent.setPseudo3DLightsEnabled(lightsVO.pseudo3d);
|
||||
viewComponent.setLightType(lightsVO.lightType);
|
||||
|
||||
viewComponent.setSelectedShader(item.shaderVO.shaderName);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -165,7 +176,10 @@ public class UIScenePropertiesMediator extends UIAbstractPropertiesMediator<Scen
|
||||
lightsVO.enabled = viewComponent.isLightsEnabled();
|
||||
lightsVO.pseudo3d = viewComponent.isPseudo3DLightsEnabled();
|
||||
|
||||
Object payload = UpdateSceneDataCommand.payload(observableReference, physicsVO, lightsVO);
|
||||
ShaderVO shaderVO = new ShaderVO();
|
||||
shaderVO.shaderName = viewComponent.getShader();
|
||||
|
||||
Object payload = UpdateSceneDataCommand.payload(observableReference, physicsVO, lightsVO, shaderVO);
|
||||
facade.sendNotification(MsgAPI.ACTION_UPDATE_SCENE_DATA, payload);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user