diff --git a/hyperlap2d-runtime-libgdx b/hyperlap2d-runtime-libgdx index e181de64..9246f0f9 160000 --- a/hyperlap2d-runtime-libgdx +++ b/hyperlap2d-runtime-libgdx @@ -1 +1 @@ -Subproject commit e181de640b95af84f3db385cd1983d78786e06e2 +Subproject commit 9246f0f9e0be743a2b2929fa1efff054899c0ed4 diff --git a/src/main/java/games/rednblack/editor/view/ui/followers/LightFollower.java b/src/main/java/games/rednblack/editor/view/ui/followers/LightFollower.java index 74de451d..1653ecb4 100644 --- a/src/main/java/games/rednblack/editor/view/ui/followers/LightFollower.java +++ b/src/main/java/games/rednblack/editor/view/ui/followers/LightFollower.java @@ -22,20 +22,30 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.OrthographicCamera; +import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.Touchable; import com.badlogic.gdx.scenes.scene2d.ui.Image; import com.kotcrab.vis.ui.VisUI; +import games.rednblack.editor.renderer.components.light.LightObjectComponent; +import games.rednblack.editor.utils.runtime.SandboxComponentRetriever; import games.rednblack.editor.view.stage.Sandbox; +import games.rednblack.editor.view.ui.widget.actors.CircleActor; +import games.rednblack.editor.view.ui.widget.actors.basic.WhitePixel; +import space.earlygrey.shapedrawer.ShapeDrawer; /** * Created by azakhary on 5/20/2015. */ public class LightFollower extends BasicFollower { - + protected LightObjectComponent lightObjectComponent; + private CircleActor circleActor; private Image icon; + OrthographicCamera camera; + int pixelPerWU; public LightFollower(int entity) { super(entity); + lightObjectComponent = SandboxComponentRetriever.get(entity, LightObjectComponent.class); } @Override @@ -43,22 +53,40 @@ public class LightFollower extends BasicFollower { icon = new Image(VisUI.getSkin().getDrawable("tool-sphericlight")); icon.setTouchable(Touchable.disabled); addActor(icon); + pixelPerWU = Sandbox.getInstance().sceneControl.sceneLoader.getRm().getProjectVO().pixelToWorld; + camera = Sandbox.getInstance().getCamera(); + } + + @Override + protected void setStage(Stage stage) { + super.setStage(stage); + if (stage != null) { + ShapeDrawer shapeDrawer = new ShapeDrawer(stage.getBatch(), WhitePixel.sharedInstance.textureRegion){ + /* OPTIONAL: Ensuring a certain smoothness. */ + @Override + protected int estimateSidesRequired(float radiusX, float radiusY) { + return 200; + } + }; + float radius = lightObjectComponent.distance * pixelPerWU / camera.zoom; + circleActor = new CircleActor(shapeDrawer, radius); + circleActor.setColor( 1, 1, 1, 0.5f); + addActor(circleActor); + } } @Override public void act(float delta) { setVisible(!Gdx.input.isKeyPressed(Input.Keys.CONTROL_LEFT)); super.act(delta); + float radius = lightObjectComponent.distance * pixelPerWU / camera.zoom; + circleActor.setRadius(radius); + circleActor.setPosition(getWidth() / 2, getHeight() / 2); } @Override public void update() { super.update(); - Sandbox sandbox = Sandbox.getInstance(); - OrthographicCamera camera = Sandbox.getInstance().getCamera(); - - int pixelPerWU = sandbox.sceneControl.sceneLoader.getRm().getProjectVO().pixelToWorld; - float scaleX = transformComponent.scaleX * (transformComponent.flipX ? -1 : 1); float scaleY = transformComponent.scaleY * (transformComponent.flipY ? -1 : 1); diff --git a/src/main/java/games/rednblack/editor/view/ui/widget/actors/CircleActor.java b/src/main/java/games/rednblack/editor/view/ui/widget/actors/CircleActor.java new file mode 100644 index 00000000..e572f2ee --- /dev/null +++ b/src/main/java/games/rednblack/editor/view/ui/widget/actors/CircleActor.java @@ -0,0 +1,31 @@ +package games.rednblack.editor.view.ui.widget.actors; + +import com.badlogic.gdx.graphics.g2d.Batch; +import com.badlogic.gdx.scenes.scene2d.Actor; +import com.badlogic.gdx.scenes.scene2d.Touchable; +import com.badlogic.gdx.utils.Align; +import space.earlygrey.shapedrawer.ShapeDrawer; + +public class CircleActor extends Actor { + private float radius; + private final ShapeDrawer shapeDrawer; + + public CircleActor(ShapeDrawer drawer, float r) { + shapeDrawer = drawer; + radius = r; + setSize(r * 2, r * 2); + setOrigin(Align.center); + setTouchable(Touchable.disabled); + } + + @Override + public void draw(Batch batch, float parentAlpha) { + float prevColor = shapeDrawer.setColor(getColor()); + shapeDrawer.circle(getX(), getY(), radius); + shapeDrawer.setColor(prevColor); + } + + public void setRadius(float radius) { + this.radius = radius; + } +}