From 97a96ed95b7e14af9fae9f14da7f9a0b1e5da8f7 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Tue, 30 Mar 2021 00:11:50 +0200 Subject: [PATCH 001/139] add jamz box2d experiments --- build.gradle | 17 + .../rptools/maptool/box2d/Box2dRenderer.java | 724 ++++++++++++++++++ .../maptool/box2d/DebugPointLight.java | 62 ++ .../maptool/box2d/DesktopLauncher.java | 62 ++ .../rptools/maptool/box2d/MapToolGame.java | 75 ++ .../maptool/box2d/MapTool_InputProcessor.java | 95 +++ .../box2d/unused/Box2DSpriteAdapter.java | 52 ++ .../maptool/box2d/unused/Box2dLightTest.java | 111 +++ .../rptools/maptool/box2d/unused/Main.java | 23 + .../rptools/maptool/client/AppActions.java | 12 + .../net/rptools/maptool/client/MapTool.java | 39 + .../rptools/maptool/client/ui/AppMenuBar.java | 4 +- .../rptools/maptool/util/ImageManager.java | 92 +++ .../maptool/client/image/light_ball.png | Bin 0 -> 2149 bytes .../maptool/client/image/soccer_ball.png | Bin 0 -> 8001 bytes 15 files changed, 1366 insertions(+), 2 deletions(-) create mode 100644 src/main/java/net/rptools/maptool/box2d/Box2dRenderer.java create mode 100644 src/main/java/net/rptools/maptool/box2d/DebugPointLight.java create mode 100644 src/main/java/net/rptools/maptool/box2d/DesktopLauncher.java create mode 100644 src/main/java/net/rptools/maptool/box2d/MapToolGame.java create mode 100644 src/main/java/net/rptools/maptool/box2d/MapTool_InputProcessor.java create mode 100644 src/main/java/net/rptools/maptool/box2d/unused/Box2DSpriteAdapter.java create mode 100644 src/main/java/net/rptools/maptool/box2d/unused/Box2dLightTest.java create mode 100644 src/main/java/net/rptools/maptool/box2d/unused/Main.java create mode 100644 src/main/resources/net/rptools/maptool/client/image/light_ball.png create mode 100644 src/main/resources/net/rptools/maptool/client/image/soccer_ball.png diff --git a/build.gradle b/build.gradle index 246515d8b1..90f6e95c67 100644 --- a/build.gradle +++ b/build.gradle @@ -32,6 +32,14 @@ def appSemVer = "" // Custom properties ext { + + gdxVersion = '1.9.15-SNAPSHOT' + roboVMVersion = '2.3.12' + box2DLightsVersion = '1.5' + ashleyVersion = '1.7.3' + aiVersion = '1.8.2' + gdxControllersVersion = '2.1.0' + // Get tag and commit info from Git to use for version numbering def grgit = org.ajoberstar.grgit.Grgit.open(currentDir: file('.')) def head = grgit.head() @@ -233,6 +241,9 @@ repositories { maven { url = 'http://maptool.craigs-stuff.net/repo/' } maven { url = 'https://nerps.net/repo/' } maven { url = 'https://jitpack.io' } + google() + maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } + maven { url "https://oss.sonatype.org/content/repositories/releases/" } } @@ -357,6 +368,12 @@ dependencies { // Noise Generator implementation 'com.github.cwisniew:NoiseLib:1.0.0-rc3' // The most recent version, 1.0.0 is build for a later java version: major version 55 is newer than 54, the highest major version supported by this compiler + implementation "com.badlogicgames.gdx:gdx:$gdxVersion" + implementation "com.badlogicgames.gdx:gdx-box2d:$gdxVersion" + implementation "com.badlogicgames.box2dlights:box2dlights:$box2DLightsVersion" + implementation "com.badlogicgames.gdx:gdx-backend-lwjgl:$gdxVersion" + implementation "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop" + implementation "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-desktop" } diff --git a/src/main/java/net/rptools/maptool/box2d/Box2dRenderer.java b/src/main/java/net/rptools/maptool/box2d/Box2dRenderer.java new file mode 100644 index 0000000000..35820fd707 --- /dev/null +++ b/src/main/java/net/rptools/maptool/box2d/Box2dRenderer.java @@ -0,0 +1,724 @@ +/* + * This software Copyright by the RPTools.net development team, and licensed under the Affero GPL Version 3 or, at your option, any later version. + * + * MapTool Source Code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License * along with this source Code. If not, please visit and specifically the Affero license text + * at . + */ +package net.rptools.maptool.box2d; + +import java.awt.geom.AffineTransform; +import java.awt.geom.Area; +import java.awt.geom.PathIterator; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Random; +import java.util.Set; +import java.util.concurrent.ThreadLocalRandom; + +import org.apache.commons.lang.ArrayUtils; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Screen; +import com.badlogic.gdx.graphics.Camera; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.GL30; +import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.Texture.TextureWrap; +import com.badlogic.gdx.graphics.g2d.PolygonRegion; +import com.badlogic.gdx.graphics.g2d.PolygonSprite; +import com.badlogic.gdx.graphics.g2d.Sprite; +import com.badlogic.gdx.graphics.g2d.TextureRegion; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType; +import com.badlogic.gdx.math.EarClippingTriangulator; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.physics.box2d.Body; +import com.badlogic.gdx.physics.box2d.BodyDef; +import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer; +import com.badlogic.gdx.physics.box2d.CircleShape; +import com.badlogic.gdx.physics.box2d.FixtureDef; +import com.badlogic.gdx.physics.box2d.PolygonShape; +import com.badlogic.gdx.physics.box2d.World; +import com.badlogic.gdx.physics.box2d.BodyDef.BodyType; +import com.badlogic.gdx.scenes.scene2d.Stage; +import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.utils.FloatArray; +import com.badlogic.gdx.utils.ShortArray; +import com.badlogic.gdx.utils.viewport.ScreenViewport; + +import box2dLight.PointLight; +import box2dLight.RayHandler; +import net.rptools.maptool.client.AppState; +import net.rptools.maptool.client.ui.MapToolFrame; +import net.rptools.maptool.client.ui.zone.ZoneRenderer; +import net.rptools.maptool.model.Zone; +import net.rptools.maptool.util.ImageManager; + +public class Box2dRenderer implements Screen { + private static final Texture DEFAULT_BACKGROUND_TEXURE = new Texture(Gdx.files.internal("net/rptools/maptool/client/image/grass.png")); + private static final Sprite SOCCER_BALL = new Sprite(new Texture("net/rptools/maptool/client/image/soccer_ball.png")); + private static final Sprite LIGHT_SOURCE = new Sprite(new Texture("net/rptools/maptool/client/image/light_ball.png")); + + private static final boolean DEBUG_BOX2D = false; + private static final boolean CREATE_RANDOM_EFFECTS = true; + private static boolean GAME_PAUSED = false; + + private static Texture backgroundTexture; + private static TextureRegion textureRegion; + private static byte[] backgroundImage; + private static Area vblArea = new Area(); + + private static Set vblBodySet = new HashSet<>(); + private static Set polySpriteSet = new HashSet<>(); + private static Set lightSet = new HashSet<>(); + + public static float frameRate = 60; + + private final MapToolGame app; + private MapToolFrame mapToolFrame; + private Stage stage; + private Box2DDebugRenderer renderer; + private RayHandler rayHandler; + private ShapeRenderer shapeRenderer; + + public Box2dRenderer(final MapToolGame app) { + this.app = app; + this.mapToolFrame = app.getMapToolFrame(); + + MapTool_InputProcessor inputProcessor = new MapTool_InputProcessor(this); + stage = new Stage(new ScreenViewport()); + Gdx.input.setInputProcessor(inputProcessor); // was stage + + app.world = new World(new Vector2(0, 0), true); // Earth gravity would be -9.7 + + if (DEBUG_BOX2D) + renderer = new Box2DDebugRenderer(); + + rayHandler = new RayHandler(app.world); + // rayHandler.setAmbientLight(new Color(.1f, .1f, .1f, .1f)); + RayHandler.useDiffuseLight(true); + rayHandler.setCombinedMatrix(app.camera); + shapeRenderer = new ShapeRenderer(); + shapeRenderer.setAutoShapeType(true); + + // For Testing purposes + if (CREATE_RANDOM_EFFECTS) { + createTop(); + createBottom(); + createLeftSide(); + createRightSide(); + + for (int i = 0; i < 20; i++) { + createRandomBody(false); + } + + // Create a couple of lights on bodies? + for (int i = 0; i < 5; i++) { + createRandomBody(true); + // createRandomLight(); + } + } + + // For VBL texture + Pixmap pix = new Pixmap(1, 1, Pixmap.Format.RGBA8888); + pix.setColor(Color.BLUE.r, Color.BLUE.g, Color.BLUE.b, 196); // 128 default alpha + pix.fill(); + Texture textureSolid = new Texture(pix); + textureRegion = new TextureRegion(textureSolid); + } + + public Camera getCamera() { + return app.camera; + } + + @Override + public void show() { + + } + + @Override + public void render(float delta) { + Gdx.gl.glClearColor(1, 0, 0, 1); + Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT); + + // Suspend all activity while window is closed + if (!app.launcher.isVisible()) + return; + + update(delta); + stage.draw(); + + Array bodies = new Array(); + app.world.getBodies(bodies); + + drawBackgroundTile(); + + if (DEBUG_BOX2D) + renderer.render(app.world, app.camera.combined); + + renderGrid(); + renderLightSources(bodies); + renderVBL(); + renderVblSprites(bodies); + + renderSoccerBalls(bodies, true); + rayHandler.updateAndRender(); + + debugLights(); + + // Drawn after rayHandler, spites always shown regardless of light then, eg always visible, can break up vbl/tokens later + // renderSoccerBalls(bodies, false); + renderFPS(); + + if (!GAME_PAUSED) + app.world.step(1 / frameRate, 6, 2); + + Gdx.graphics.setTitle(MapToolGame.TITLE + " - " + Gdx.graphics.getFramesPerSecond() + " fps"); + } + + public void update(float delta) { + stage.act(delta); + } + + @Override + public void resize(int width, int height) { + app.camera.viewportHeight = (MapToolGame.VIEWPORT_WIDTH / width) * height; + + // stage.getViewport().update(width, height, true); + // MapToolGame.SCREEN_WIDTH = width; + // MapToolGame.SCREEN_HEIGHT = height; + } + + @Override + public void pause() { + GAME_PAUSED = !GAME_PAUSED; + } + + @Override + public void resume() { + + } + + @Override + public void hide() { + + } + + @Override + public void dispose() { + shapeRenderer.dispose(); + stage.dispose(); + } + + private void renderFPS() { + app.sb.begin(); + app.font.draw(app.sb, MapToolGame.TITLE, 20, MapToolGame.SCREEN_HEIGHT - 10); + app.font.draw(app.sb, "FPS: " + Gdx.graphics.getFramesPerSecond() + " [" + frameRate + "]", 20, MapToolGame.SCREEN_HEIGHT - 35); + app.font.draw(app.sb, "Lights: " + lightSet.size(), 20, MapToolGame.SCREEN_HEIGHT - 60); + app.sb.end(); + } + + private void renderLightSources(Array bodies) { + app.sb.begin(); + for (Body body : bodies) { + if (body.getUserData() != null) { + if (body.getUserData() instanceof Sprite) { + Sprite sprite = (Sprite) body.getUserData(); + sprite.setPosition(body.getPosition().x - sprite.getWidth() / 2, body.getPosition().y - sprite.getHeight() / 2); + sprite.setRotation((float) (body.getAngle() * 180 / Math.PI % 360)); + + if (sprite == LIGHT_SOURCE) { + sprite.draw(app.sb); + } + } + + } + } + app.sb.end(); + + } + + private void renderSoccerBalls(Array bodies, boolean beforeLights) { + app.sb.begin(); + for (Body body : bodies) { + if (body.getUserData() != null) { + if (body.getUserData() instanceof Sprite) { + Sprite sprite = (Sprite) body.getUserData(); + sprite.setPosition(body.getPosition().x - sprite.getWidth() / 2, body.getPosition().y - sprite.getHeight() / 2); + sprite.setRotation((float) (body.getAngle() * 180 / Math.PI % 360)); + + if (sprite == SOCCER_BALL) { + if (beforeLights) { + sprite.draw(app.sb); + } else { + for (PointLight light : lightSet) { + if (light.contains(sprite.getX(), sprite.getY())) { + sprite.draw(app.sb); + break; + } + } + } + } + } + + } + } + app.sb.end(); + + } + + private void renderVblSprites(Array bodies) { + app.polyBatch.begin(); + for (Body body : bodies) { + if (body.getUserData() != null) { + if (body.getUserData() instanceof PolygonSprite) { + PolygonSprite sprite = (PolygonSprite) body.getUserData(); + sprite.setPosition(body.getPosition().x - sprite.getWidth() / 2, body.getPosition().y - sprite.getHeight() / 2); + sprite.setRotation((float) (body.getAngle() * 180 / Math.PI % 360)); + sprite.draw(app.polyBatch); + } + } + } + app.polyBatch.end(); + } + + private void debugLights() { + if (lightSet.isEmpty() || !DEBUG_BOX2D) + return; + + shapeRenderer.begin(); + for (DebugPointLight light : lightSet) { + // light.drawRays(shapeRenderer); + light.drawEdge(shapeRenderer); + } + shapeRenderer.end(); + } + + /* + * For POC only TODO: Check for color vs image and change to a listener vs getting images every frame + */ + private void drawBackgroundTile() { + Zone zone = mapToolFrame.getCurrentZoneRenderer().getZone(); + byte[] image = ImageManager.getTexture(zone.getBackgroundAsset(), mapToolFrame.getCurrentZoneRenderer()); + + if (image != null && image != backgroundImage) { + backgroundTexture = new Texture(new Pixmap(image, 0, image.length)); + backgroundImage = image; // Remember last image + System.out.println("Background image changed!"); + } + + if (backgroundTexture == null) + backgroundTexture = DEFAULT_BACKGROUND_TEXURE; + + backgroundTexture.setWrap(TextureWrap.Repeat, TextureWrap.Repeat); + app.sb.begin(); + app.sb.draw(backgroundTexture, 0, 0, 0, 0, MapToolGame.SCREEN_WIDTH, MapToolGame.SCREEN_HEIGHT); + app.sb.end(); + } + + /* + * TODO: Store grid shape for future frames and fix Hex/Iso offset! + */ + private void renderGrid() { + Zone zone = mapToolFrame.getCurrentZoneRenderer().getZone(); + int gridSize = (int) (zone.getGrid().getSize() * getScale()); + + if (!AppState.isShowGrid() || gridSize < ZoneRenderer.MIN_GRID_SIZE) { + return; + } + + float gridWidth = (float) zone.getGrid().getCellWidth(); + float gridHeight = (float) zone.getGrid().getCellHeight(); + + java.awt.Color gridColor = new java.awt.Color(zone.getGridColor()); + ShapeRenderer shape = new ShapeRenderer(); + + shape.begin(ShapeType.Line); + shape.setColor(gridColor.getRed(), gridColor.getGreen(), gridColor.getBlue(), 4f); + float[] gridVertices = areaToVertices(zone.getGrid().getCellShape()); + + shape.translate(1, 1, 0); + float transX = ((Gdx.graphics.getWidth() / gridWidth) + 1) * -gridWidth; + + for (int h = 0; h <= Gdx.graphics.getHeight() / gridHeight; h++) { + for (int w = 0; w <= Gdx.graphics.getWidth() / gridWidth; w++) { + shape.polygon(gridVertices); + shape.translate(gridWidth, 0, 0); + } + + shape.translate(transX, gridHeight, 0); + } + + shape.end(); + } + + private void renderVBL() { + Zone zone = mapToolFrame.getCurrentZoneRenderer().getZone(); + + if (vblArea.equals(zone.getTopology())) + return; + + System.out.println("VBL Changed!"); + vblArea = new Area(zone.getTopology()); + + for (Body body : vblBodySet) { + app.world.destroyBody(body); + } + + vblBodySet.clear(); + polySpriteSet.clear(); + + ArrayList vblAreas = parseVblAreas(vblArea); + for (float[] vertices : vblAreas) { + // Creating a Sprite to show VBL for each VBL "island" + EarClippingTriangulator triangulator = new EarClippingTriangulator(); + ShortArray triangleIndices = triangulator.computeTriangles(vertices); + PolygonRegion polyReg = new PolygonRegion(textureRegion, vertices, triangleIndices.toArray()); + + Body vblBody = createVblBody(vertices); + if (vblBody != null) { + vblBody.setUserData(new PolygonSprite(polyReg)); + vblBodySet.add(vblBody); + } + } + } + + private ArrayList parseVblAreas(Area area) { + ArrayList vblAreas = new ArrayList(); + ArrayList vertices = new ArrayList(); + float[] coords = new float[6]; + float lastX = 0, lastY = 0; + + // Flip the y axis because box2d y is down + AffineTransform at = new AffineTransform(); + at.translate(0, Gdx.graphics.getHeight()); + at.scale(1, -1); + + for (PathIterator iter = area.createTransformedArea(at).getPathIterator(null); !iter.isDone(); iter.next()) { + int type = iter.currentSegment(coords); + + switch (type) { + case PathIterator.SEG_CLOSE: + System.out.println("SEG_CLOSE"); + vblAreas.add(ArrayUtils.toPrimitive(vertices.toArray(new Float[vertices.size()]))); + break; + case PathIterator.SEG_LINETO: + System.out.println("SEG_LINETO"); + // Jamz: depending on the topology tool used, the last point == first point which is not expected for box2d polygon ear clipping + if (coords[0] == vertices.get(0) && coords[1] == vertices.get(1)) + break; + if (lastX == coords[0] && lastY == coords[1]) { + System.out.println("coords: " + Arrays.toString(coords)); + System.out.println("Skip!"); + break; + } + vertices.add(coords[0]); + vertices.add(coords[1]); + lastX = coords[0]; + lastY = coords[1]; + break; + case PathIterator.SEG_MOVETO: + System.out.println("SEG_MOVETO"); + vertices = new ArrayList(); + vertices.add(coords[0]); + vertices.add(coords[1]); + lastX = coords[0]; + lastY = coords[1]; + break; + } + } + + return vblAreas; + } + + // private void drawFilledPolygon(Polygon polygon, Color color) { + // ShapeRenderer shapeRenderer = null; + // shapeRenderer.begin(ShapeRenderer.ShapeType.Filled); + // shapeRenderer.setColor(color); + // + // float[] vertices = polygon.getTransformedVertices(); + // + // // NOTE: you probably don't want to create a new EarClippingTriangulator each frame + // ShortArray triangleIndices = new EarClippingTriangulator().computeTriangles(vertices); + // for (int i = 0; i < triangleIndices.size; i += 3) { + // shapeRenderer.triangle( + // vertices[triangleIndices.get(i) * 2], vertices[triangleIndices.get(i) * 2 + 1], + // vertices[triangleIndices.get(i + 1) * 2], vertices[triangleIndices.get(i + 1) * 2 + 1], + // vertices[triangleIndices.get(i + 2) * 2], vertices[triangleIndices.get(i + 2) * 2 + 1]); + // } + // + // shapeRenderer.end(); + // } + + private float[] areaToVertices(Area area) { + if (area.isEmpty()) + return new float[0]; + + PathIterator iterator = area.getPathIterator(null); + float[] floats = new float[60]; + float[] vertices = new float[1000]; + int count1 = 0; + + while (!iterator.isDone()) { + int type = iterator.currentSegment(floats); + + if (type != PathIterator.SEG_CLOSE) { + vertices[count1++] = floats[0]; + vertices[count1++] = floats[1]; + } + iterator.next(); + } + + float[] finalVertices = new float[count1]; + System.arraycopy(vertices, 0, finalVertices, 0, count1); + + return finalVertices; + } + + // private Body createVblBody(ShortArray triangles) { + // if (triangles.size == 0) + // return null; + // + // Body vblBody; + // + // BodyDef vblDef = new BodyDef(); + // vblDef.type = BodyType.StaticBody; + // vblBody = app.world.createBody(vblDef); + // + // System.out.println("Looks like we have an array size of: " + triangles.size); + // System.out.println("triangle: " + triangles.toString()); + // + // for (int i = 0; i < triangles.size; i = i + 6) { + // PolygonShape vblShape = new PolygonShape(); + // + // Vector2[] triangle = { new Vector2(triangles.get(i + 0), triangles.get(i + 1)), + // new Vector2(triangles.get(i + 2), triangles.get(i + 3)), + // new Vector2(triangles.get(i + 4), triangles.get(i + 5)) }; + // + // vblShape.set(triangle); + // vblBody.createFixture(vblShape, 0f); + // vblShape.dispose(); + // } + // + // return vblBody; + // } + + private Body createVblBody(float[] areaPath) { + if (areaPath.length == 0) + return null; + + Body vblBody; + + BodyDef vblDef = new BodyDef(); + vblDef.type = BodyType.StaticBody; + vblBody = app.world.createBody(vblDef); + + System.out.println("Looks like we have an array size of: " + areaPath.length); + System.out.println("areaPath : " + Arrays.toString(areaPath)); + + ShortArray triangles = new EarClippingTriangulator().computeTriangles(areaPath); + FloatArray polygon = new FloatArray(areaPath); + // FloatArray triangleOutlines = new FloatArray(triangles.size * 2); + + System.out.println("triangle size : " + triangles.size); + + for (int i = 0; i < triangles.size; i += 3) { + PolygonShape vblShape = new PolygonShape(); + FloatArray triangleOutlines = new FloatArray(); + + float ax = polygon.get(triangles.get(i) * 2); + float ay = polygon.get(triangles.get(i) * 2 + 1); + float bx = polygon.get(triangles.get(i + 1) * 2); + float by = polygon.get(triangles.get(i + 1) * 2 + 1); + float cx = polygon.get(triangles.get(i + 2) * 2); + float cy = polygon.get(triangles.get(i + 2) * 2 + 1); + + triangleOutlines.add(ax); + triangleOutlines.add(ay); + triangleOutlines.add(bx); + triangleOutlines.add(by); + triangleOutlines.add(cx); + triangleOutlines.add(cy); + + // System.out.println("triangleOutlines : " + Arrays.toString(triangleOutlines.toArray())); + vblShape.set(triangleOutlines.toArray()); + // System.out.println("Body shape created ok."); + vblBody.createFixture(vblShape, 0f); + + vblShape.dispose(); + } + + return vblBody; + } + + // private Body createVblBodyOLD(float[] vertices) { + // if (vertices.length == 0) + // return null; + // + // Body vblBody; + // + // BodyDef vblDef = new BodyDef(); + // vblDef.type = BodyType.StaticBody; + // vblBody = app.world.createBody(vblDef); + // + // PolygonShape vblShape = new PolygonShape(); + // vblShape.set(vertices); + // vblBody.createFixture(vblShape, 0f); + // + // vblShape.dispose(); + // + // return vblBody; + // } + + public double getScale() { + return mapToolFrame.getCurrentZoneRenderer().getScale(); + } + + /* + * For Testing only + */ + private void createTop() { + // Create the ground... + BodyDef groundBodyDef = new BodyDef(); + groundBodyDef.position.set(app.camera.viewportWidth * .25f, app.camera.viewportHeight * 1.25f); + Body groundBody = app.world.createBody(groundBodyDef); + + PolygonShape groundBox = new PolygonShape(); + groundBox.setAsBox(app.camera.viewportWidth * 1.5f, 3.0f); + groundBody.createFixture(groundBox, 0.0f); + } + + private void createBottom() { + // Create the ground... + BodyDef groundBodyDef = new BodyDef(); + groundBodyDef.position.set(app.camera.viewportWidth * .25f, -(app.camera.viewportHeight * .25f)); + Body groundBody = app.world.createBody(groundBodyDef); + + PolygonShape groundBox = new PolygonShape(); + groundBox.setAsBox(app.camera.viewportWidth * 1.5f, 3.0f); + groundBody.createFixture(groundBox, 0.0f); + } + + private void createLeftSide() { + // Create the ground... + BodyDef groundBodyDef = new BodyDef(); + groundBodyDef.position.set(1, 0); + Body groundBody = app.world.createBody(groundBodyDef); + + PolygonShape groundBox = new PolygonShape(); + groundBox.setAsBox(3.0f, app.camera.viewportHeight * 2); + groundBody.createFixture(groundBox, 0.0f); + } + + private void createRightSide() { + // Create the ground... + BodyDef groundBodyDef = new BodyDef(); + groundBodyDef.position.set((app.camera.viewportWidth) - 1, 0); + Body groundBody = app.world.createBody(groundBodyDef); + + PolygonShape groundBox = new PolygonShape(); + groundBox.setAsBox(3.0f, app.camera.viewportHeight * 2); + groundBody.createFixture(groundBox, 0.0f); + } + + private DebugPointLight createLight(Color color, float distance, float x, float y) { + return new DebugPointLight(rayHandler, 500, color, distance, x, y); + // new ConeLight(rayHandler, 2000, Color.GOLDENROD, 600, (MapToolGame.V_WIDTH / 2) + 30, (MapToolGame.V_HEIGHT / 2) + 15, 250, 35); + // new PointLight(rayHandler, 2000, Color.DARK_GRAY, 1500, (MapToolGame.V_WIDTH / 3), (MapToolGame.V_HEIGHT / 2) + 50); + } + + private DebugPointLight createRandomLight() { + Random rand = new Random(); + + float x = rand.nextFloat() * MapToolGame.SCREEN_WIDTH; + float y = rand.nextFloat() * MapToolGame.SCREEN_HEIGHT * 1.25f; + + float r = rand.nextFloat(); + float g = rand.nextFloat(); + float b = rand.nextFloat(); + + // float distance = (rand.nextFloat() * 500) + 400; + float distance = 20 * MapToolGame.F2M * MapToolGame.PPM; // 20 feet? + + // Color randomColor = new Color(0f, 0f, 0f, 255f); + Color randomColor = new Color(r, g, b, 255); + + DebugPointLight light = createLight(randomColor, distance, x, y); + light.setSoftnessLength(128f); // how far light travels through body... + + return light; + } + + public void clearLights() { + System.out.println("Removing " + lightSet.size() + " lights."); + + for (DebugPointLight light : lightSet) { + light.remove(true); + app.world.destroyBody(light.getBody()); + } + + lightSet.clear(); + } + + public void createBody(boolean attachLight, float x, float y) { + Body circleBody; + + BodyDef circleDef = new BodyDef(); + circleDef.type = BodyType.DynamicBody; + circleDef.position.set(x, y); + + circleBody = app.world.createBody(circleDef); + + CircleShape circleShape = new CircleShape(); + if (attachLight) + circleShape.setRadius(24f); + else + circleShape.setRadius(32f); + + FixtureDef circleFixture = new FixtureDef(); + circleFixture.shape = circleShape; + circleFixture.density = random(1, 100f); + circleFixture.friction = random(.25f, 1f); + circleFixture.restitution = random(.25f, 1f); + + circleBody.createFixture(circleFixture); + // circleBody.setAngularVelocity(random(-5f, 5f)); + circleBody.setLinearVelocity(new Vector2(random(-250, 250), random(-250, 250))); + + // Attach the sprite + Sprite bodySprite; + if (attachLight) + bodySprite = LIGHT_SOURCE; + else + bodySprite = SOCCER_BALL; + + bodySprite.setOriginCenter(); + bodySprite.setPosition(x, y); + // sprite.scale(r); + circleBody.setUserData(bodySprite); + + if (attachLight) { + DebugPointLight pointLight = createRandomLight(); + lightSet.add(pointLight); + pointLight.attachToBody(circleBody); + } + + // Dispose of stuff + circleShape.dispose(); + } + + private void createRandomBody(boolean attachLight) { + float x = random(64, MapToolGame.SCREEN_WIDTH); + float y = random(MapToolGame.SCREEN_HEIGHT / 2, MapToolGame.SCREEN_HEIGHT); + + createBody(attachLight, x, y); + } + + private float random(float min, float max) { + return (float) ThreadLocalRandom.current().nextDouble(min, max + 1); + } +} \ No newline at end of file diff --git a/src/main/java/net/rptools/maptool/box2d/DebugPointLight.java b/src/main/java/net/rptools/maptool/box2d/DebugPointLight.java new file mode 100644 index 0000000000..0b3eaa4f27 --- /dev/null +++ b/src/main/java/net/rptools/maptool/box2d/DebugPointLight.java @@ -0,0 +1,62 @@ +/* + * This software Copyright by the RPTools.net development team, and licensed under the Affero GPL Version 3 or, at your option, any later version. + * + * MapTool Source Code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License * along with this source Code. If not, please visit and specifically the Affero license text + * at . + */ +package net.rptools.maptool.box2d; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; + +import box2dLight.PointLight; +import box2dLight.RayHandler; + +public class DebugPointLight extends PointLight { + public DebugPointLight(RayHandler rayHandler, int rays, Color color, float distance, float x, float y) { + super(rayHandler, rays, color, distance, x, y); + } + + public void drawEdge(ShapeRenderer renderer) { + if (isSoft()) { + int numVertices = softShadowMesh.getNumVertices(); + // default mesh edge + renderer.setColor(Color.CYAN); + for (int i = 0; i < numVertices * 4 - 8; i += 8) { + renderer.line(segments[i], segments[i + 1], segments[i + 8], segments[i + 9]); + } + renderer.setColor(Color.RED); + // soft mesh edge + for (int i = 0; i < numVertices * 4 - 8; i += 8) { + renderer.line(segments[i + 4], segments[i + 5], segments[i + 12], segments[i + 13]); + } + } else { + int numVertices = lightMesh.getNumVertices(); + renderer.setColor(Color.CYAN); + for (int i = 4; i < numVertices * 4 - 4; i += 4) { + renderer.line(segments[i], segments[i + 1], segments[i + 4], segments[i + 5]); + } + } + } + + public void drawRays(ShapeRenderer renderer) { + float sx = getX(); + float sy = getY(); + if (isSoft()) { + int numVertices = softShadowMesh.getNumVertices(); + renderer.setColor(Color.PURPLE); + for (int i = 0; i < numVertices * 4 - 8; i += 8) { + renderer.line(sx, sy, segments[i + 4], segments[i + 5]); + } + } else { + // rays + renderer.setColor(Color.YELLOW); + int numVertices = lightMesh.getNumVertices(); + for (int i = 4; i < numVertices * 4; i += 4) { + renderer.line(sx, sy, segments[i], segments[i + 1]); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/net/rptools/maptool/box2d/DesktopLauncher.java b/src/main/java/net/rptools/maptool/box2d/DesktopLauncher.java new file mode 100644 index 0000000000..9426ca7ed7 --- /dev/null +++ b/src/main/java/net/rptools/maptool/box2d/DesktopLauncher.java @@ -0,0 +1,62 @@ +/* + * This software Copyright by the RPTools.net development team, and licensed under the Affero GPL Version 3 or, at your option, any later version. + * + * MapTool Source Code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License * along with this source Code. If not, please visit and specifically the Affero license text + * at . + */ +package net.rptools.maptool.box2d; + +import javax.swing.JFrame; +import javax.swing.SwingUtilities; + +import com.badlogic.gdx.backends.lwjgl.LwjglAWTCanvas; +import com.badlogic.gdx.backends.lwjgl.LwjglApplication; +import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; + +import net.rptools.maptool.client.ui.MapToolFrame; + +public class DesktopLauncher extends JFrame { + + private static final long serialVersionUID = 2536172952937398744L; + private LwjglAWTCanvas canvas; + private LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration(); + private MapToolFrame mapToolFrame; + + public DesktopLauncher(MapToolFrame clientFrame) { + cfg.title = MapToolGame.TITLE; + cfg.width = MapToolGame.SCREEN_WIDTH; + cfg.height = MapToolGame.SCREEN_HEIGHT; + cfg.useGL30 = true; + cfg.useHDPI = true; + cfg.allowSoftwareMode = true; + cfg.resizable = true; + + mapToolFrame = clientFrame; + + // setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + + canvas = new LwjglAWTCanvas(new MapToolGame(mapToolFrame, this), cfg); + canvas.getCanvas().setSize(MapToolGame.SCREEN_WIDTH, MapToolGame.SCREEN_HEIGHT); + add(canvas.getCanvas()); + + pack(); + setVisible(true); + } + + public static void main(String[] arg) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + new DesktopLauncher(null); + } + }); + } + + @Override + public void dispose() { + canvas.stop(); + + super.dispose(); + } +} \ No newline at end of file diff --git a/src/main/java/net/rptools/maptool/box2d/MapToolGame.java b/src/main/java/net/rptools/maptool/box2d/MapToolGame.java new file mode 100644 index 0000000000..0c9918b045 --- /dev/null +++ b/src/main/java/net/rptools/maptool/box2d/MapToolGame.java @@ -0,0 +1,75 @@ +/* + * This software Copyright by the RPTools.net development team, and licensed under the Affero GPL Version 3 or, at your option, any later version. + * + * MapTool Source Code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License * along with this source Code. If not, please visit and specifically the Affero license text + * at . + */ +package net.rptools.maptool.box2d; + +import com.badlogic.gdx.Game; +import com.badlogic.gdx.graphics.OrthographicCamera; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.physics.box2d.World; + +import net.rptools.maptool.client.ui.MapToolFrame; + +public class MapToolGame extends Game { + public static final String TITLE = "MapTool Box2D Lights Test"; + public static int SCREEN_WIDTH = 1900; + public static int SCREEN_HEIGHT = 1100; + public static int VIEWPORT_WIDTH = 25; + public static int VIEWPORT_HEIGHT = 14; + public static final float PPM = 76.2f; // Pixels Per Meter, gives us 50 pixels per 5 feet + public static final float F2M = .3048f; // Feet to Meters + + public OrthographicCamera camera; + public SpriteBatch sb; + public PolygonSpriteBatch polyBatch; + public World world; + public BitmapFont font; + + private MapToolFrame mapToolFrame; + public DesktopLauncher launcher; + + public MapToolGame(DesktopLauncher desktopLauncher) { + launcher = desktopLauncher; + } + + public MapToolGame(MapToolFrame parentFrame, DesktopLauncher desktopLauncher) { + mapToolFrame = parentFrame; + launcher = desktopLauncher; + } + + @Override + public void create() { + camera = new OrthographicCamera(VIEWPORT_WIDTH, VIEWPORT_HEIGHT); + camera.position.set(VIEWPORT_WIDTH / 2, VIEWPORT_HEIGHT / 2, 0); + camera.setToOrtho(false); + camera.update(); + + sb = new SpriteBatch(); + polyBatch = new PolygonSpriteBatch(); + polyBatch.setProjectionMatrix(camera.combined); + font = new BitmapFont(); + + this.setScreen(new Box2dRenderer(this)); + } + + @Override + public void render() { + super.render(); + } + + @Override + public void dispose() { + sb.dispose(); + } + + public MapToolFrame getMapToolFrame() { + return this.mapToolFrame; + } +} \ No newline at end of file diff --git a/src/main/java/net/rptools/maptool/box2d/MapTool_InputProcessor.java b/src/main/java/net/rptools/maptool/box2d/MapTool_InputProcessor.java new file mode 100644 index 0000000000..c1a01e3a33 --- /dev/null +++ b/src/main/java/net/rptools/maptool/box2d/MapTool_InputProcessor.java @@ -0,0 +1,95 @@ +/* + * This software Copyright by the RPTools.net development team, and licensed under the Affero GPL Version 3 or, at your option, any later version. + * + * MapTool Source Code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License * along with this source Code. If not, please visit and specifically the Affero license text + * at . + */ +package net.rptools.maptool.box2d; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input.Buttons; +import com.badlogic.gdx.Input.Keys; +import com.badlogic.gdx.InputProcessor; +import com.badlogic.gdx.math.Vector3; + +public class MapTool_InputProcessor implements InputProcessor { + Box2dRenderer renderer; + + public MapTool_InputProcessor(Box2dRenderer renderer) { + this.renderer = renderer; + } + + @Override + public boolean keyDown(int keycode) { + return false; + } + + @Override + public boolean keyUp(int keycode) { + switch (keycode) { + case Keys.SPACE: + renderer.pause(); + break; + + case Keys.UP: + Box2dRenderer.frameRate += 1; + break; + + case Keys.DOWN: + Box2dRenderer.frameRate -= 1; + break; + + default: + break; + } + + return false; + } + + @Override + public boolean keyTyped(char character) { + return false; + } + + @Override + public boolean touchDown(int screenX, int screenY, int pointer, int button) { + // System.out.println("pointer, button: " + pointer + ", " + button); + return false; + } + + @Override + public boolean touchUp(int screenX, int screenY, int pointer, int button) { + if (button == Buttons.LEFT) { + Vector3 input = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0); + renderer.getCamera().unproject(input); + + // Now you can use input.x and input.y, as opposed to Gdx.input.getX() and Gdx.input.getY(), to draw the circle + // System.out.println("x, y: " + input.x + ", " + input.y); + renderer.createBody(true, input.x, input.y); + } else if (button == Buttons.RIGHT) { + renderer.clearLights(); + } + + return false; + } + + @Override + public boolean touchDragged(int screenX, int screenY, int pointer) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean mouseMoved(int screenX, int screenY) { + // System.out.println("mouse moved: " + screenX + ", " + screenY); + return false; + } + + @Override + public boolean scrolled(float amountX, float amountY) { + System.out.println("Scrolled " + amountX + ", " + amountY); + return false; + } +} diff --git a/src/main/java/net/rptools/maptool/box2d/unused/Box2DSpriteAdapter.java b/src/main/java/net/rptools/maptool/box2d/unused/Box2DSpriteAdapter.java new file mode 100644 index 0000000000..6cccd2450a --- /dev/null +++ b/src/main/java/net/rptools/maptool/box2d/unused/Box2DSpriteAdapter.java @@ -0,0 +1,52 @@ +/* + * This software Copyright by the RPTools.net development team, and licensed under the Affero GPL Version 3 or, at your option, any later version. + * + * MapTool Source Code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License * along with this source Code. If not, please visit and specifically the Affero license text + * at . + */ +package net.rptools.maptool.box2d.unused; + +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.physics.box2d.Body; + +public class Box2DSpriteAdapter { + public final String TAG = this.getClass().getSimpleName(); + + private Body body; + private Vector2 offset = new Vector2(); + + public Box2DSpriteAdapter(Body body, float width, float height) { + this.body = body; + offset.set(width, height); + } + + public Box2DSpriteAdapter(Body body) { + this.body = body; + } + + public Vector2 position() { + return body.getPosition(); + } + + public float angleRad() { + return body.getAngle(); + } + + public float angleDeg() { + return 180 * body.getAngle() / ((float) Math.PI); + } + + public Vector2 centreOfRotation() { + return body.getLocalCenter(); + } + + public Vector2 offset() { + return offset; + } + + public void setOffset(float x, float y) { + offset.set(x, y); + } +} \ No newline at end of file diff --git a/src/main/java/net/rptools/maptool/box2d/unused/Box2dLightTest.java b/src/main/java/net/rptools/maptool/box2d/unused/Box2dLightTest.java new file mode 100644 index 0000000000..b17406e8a5 --- /dev/null +++ b/src/main/java/net/rptools/maptool/box2d/unused/Box2dLightTest.java @@ -0,0 +1,111 @@ +/* + * This software Copyright by the RPTools.net development team, and licensed under the Affero GPL Version 3 or, at your option, any later version. + * + * MapTool Source Code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License * along with this source Code. If not, please visit and specifically the Affero license text + * at . + */ +package net.rptools.maptool.box2d.unused; + +import com.badlogic.gdx.ApplicationAdapter; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.FPSLogger; +import com.badlogic.gdx.graphics.GL30; +import com.badlogic.gdx.graphics.OrthographicCamera; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.physics.box2d.Body; +import com.badlogic.gdx.physics.box2d.BodyDef; +import com.badlogic.gdx.physics.box2d.BodyDef.BodyType; +import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer; +import com.badlogic.gdx.physics.box2d.CircleShape; +import com.badlogic.gdx.physics.box2d.FixtureDef; +import com.badlogic.gdx.physics.box2d.PolygonShape; +import com.badlogic.gdx.physics.box2d.World; + +import box2dLight.ConeLight; +import box2dLight.PointLight; +import box2dLight.RayHandler; + +public class Box2dLightTest extends ApplicationAdapter { + OrthographicCamera camera; + + float width, height; + + FPSLogger logger; + + World world; + Box2DDebugRenderer renderer; + + Body circleBody; + + RayHandler rayHandler; + + @Override + public void create() { + width = Gdx.graphics.getWidth() / 5; + height = Gdx.graphics.getHeight() / 5; + + camera = new OrthographicCamera(width, height); + camera.position.set(width * 0.5f, height * 0.5f, 0); + camera.update(); + + world = new World(new Vector2(0, -9.8f), false); + + renderer = new Box2DDebugRenderer(); + + logger = new FPSLogger(); + + BodyDef circleDef = new BodyDef(); + circleDef.type = BodyType.DynamicBody; + circleDef.position.set(width / 2f, height / 1.1f); + + circleBody = world.createBody(circleDef); + + CircleShape circleShape = new CircleShape(); + circleShape.setRadius(3f); + + FixtureDef circleFixture = new FixtureDef(); + circleFixture.shape = circleShape; + circleFixture.density = 0.4f; + circleFixture.friction = 0.1f; + circleFixture.restitution = 0.75f; + + circleBody.createFixture(circleFixture); + + BodyDef groundBodyDef = new BodyDef(); + groundBodyDef.position.set(0, 3); + + Body groundBody = world.createBody(groundBodyDef); + + PolygonShape groundBox = new PolygonShape(); + groundBox.setAsBox(camera.viewportWidth * 2, 3.0f); + + groundBody.createFixture(groundBox, 0.0f); + + rayHandler = new RayHandler(world); + rayHandler.setCombinedMatrix(camera); + + new PointLight(rayHandler, 5000, Color.DARK_GRAY, 400, (width / 2) - 75, (height / 2) + 50); + new ConeLight(rayHandler, 5000, Color.PINK, 400, (width / 2) + 30, (height / 2) + 15, 250, 35); + } + + @Override + public void dispose() { + world.dispose(); + } + + @Override + public void render() { + Gdx.gl.glClearColor(0, 0, 0, 1); + Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT); + + renderer.render(world, camera.combined); + rayHandler.updateAndRender(); + + world.step(1 / 60f, 6, 2); + + logger.log(); + } +} \ No newline at end of file diff --git a/src/main/java/net/rptools/maptool/box2d/unused/Main.java b/src/main/java/net/rptools/maptool/box2d/unused/Main.java new file mode 100644 index 0000000000..fdaa545e47 --- /dev/null +++ b/src/main/java/net/rptools/maptool/box2d/unused/Main.java @@ -0,0 +1,23 @@ +/* + * This software Copyright by the RPTools.net development team, and licensed under the Affero GPL Version 3 or, at your option, any later version. + * + * MapTool Source Code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License * along with this source Code. If not, please visit and specifically the Affero license text + * at . + */ +package net.rptools.maptool.box2d.unused; + +import com.badlogic.gdx.backends.lwjgl.LwjglApplication; +import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; + +public class Main { + public static void main(String[] args) { + LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration(); + cfg.title = "MapTool libgdx Test!"; + cfg.width = 1280; + cfg.height = 720; + + new LwjglApplication(new Box2dLightTest(), cfg); + } +} \ No newline at end of file diff --git a/src/main/java/net/rptools/maptool/client/AppActions.java b/src/main/java/net/rptools/maptool/client/AppActions.java index 35667e5544..4fd2a0d397 100644 --- a/src/main/java/net/rptools/maptool/client/AppActions.java +++ b/src/main/java/net/rptools/maptool/client/AppActions.java @@ -2004,6 +2004,18 @@ protected void executeAction() { } }; + public static final DefaultClientAction SHOW_BOX2D_TEST = + new DefaultClientAction() { + { + init("Show Box2D Test"); + } + + @Override + public void executeAction() { + MapTool.loadBox2dTest(); + } + }; + public static final DefaultClientAction ZOOM_RESET = new DefaultClientAction() { private Double lastZoom; diff --git a/src/main/java/net/rptools/maptool/client/MapTool.java b/src/main/java/net/rptools/maptool/client/MapTool.java index 48a7fa66b6..3dcd91c628 100644 --- a/src/main/java/net/rptools/maptool/client/MapTool.java +++ b/src/main/java/net/rptools/maptool/client/MapTool.java @@ -57,6 +57,7 @@ import net.rptools.lib.net.RPTURLStreamHandlerFactory; import net.rptools.lib.sound.SoundManager; import net.rptools.lib.swing.SwingUtil; +import net.rptools.maptool.box2d.DesktopLauncher; import net.rptools.maptool.client.functions.UserDefinedMacroFunctions; import net.rptools.maptool.client.swing.MapToolEventQueue; import net.rptools.maptool.client.swing.NoteFrame; @@ -172,6 +173,7 @@ public enum PreferencesEvent { private static String lastWhisperer; private static final MTWebAppServer webAppServer = new MTWebAppServer(); + private static DesktopLauncher MapToolLwjglApplication; // Jamz: To support new command line parameters for multi-monitor support & enhanced PrintStream private static boolean debug = false; @@ -182,6 +184,8 @@ public enum PreferencesEvent { private static int windowX = -1; private static int windowY = -1; private static String loadCampaignOnStartPath = ""; + private static boolean startLibGDX = false; + public static boolean libgdxLoaded = false; public static Dimension getThumbnailSize() { return THUMBNAIL_SIZE; @@ -1257,6 +1261,23 @@ public static MapToolFrame getFrame() { return clientFrame; } + public static DesktopLauncher getApp() { + return MapToolLwjglApplication; + } + + public static void loadBox2dTest() { + if (MapToolLwjglApplication == null) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + MapToolLwjglApplication = new DesktopLauncher(clientFrame); + libgdxLoaded = true; + } + }); + } else if (!MapToolLwjglApplication.isVisible()) { + MapToolLwjglApplication.setVisible(true); + } + } + private static void configureJide() { LookAndFeelFactory.UIDefaultsCustomizer uiDefaultsCustomizer = defaults -> { @@ -1566,6 +1587,7 @@ public static void main(String[] args) { cmdOptions.addOption("r", "reset", false, "reset startup options to defaults"); cmdOptions.addOption("F", "file", true, "load campaign on startup"); + CommandLineParser cmdParser = new DefaultParser(); CommandLine cmd = null; boolean listMacros = false; @@ -1753,6 +1775,23 @@ public static void main(String[] args) { // Draw frame contents on resize tk.setDynamicLayout(true); + // Add a LibGDX App/window for testing + if (startLibGDX) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + MapToolLwjglApplication = new DesktopLauncher(clientFrame); + libgdxLoaded = true; + } + }); + + // LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration(); + // cfg.title = MapToolGame.TITLE; + // cfg.width = MapToolGame.SCREEN_WIDTH; + // cfg.height = MapToolGame.SCREEN_HEIGHT; + // + // MapToolLwjglApplication = new LwjglApplication(new MapToolGame(), cfg); + } + EventQueue.invokeLater( () -> { initialize(); diff --git a/src/main/java/net/rptools/maptool/client/ui/AppMenuBar.java b/src/main/java/net/rptools/maptool/client/ui/AppMenuBar.java index 0246c88cf2..63bf74df49 100644 --- a/src/main/java/net/rptools/maptool/client/ui/AppMenuBar.java +++ b/src/main/java/net/rptools/maptool/client/ui/AppMenuBar.java @@ -391,8 +391,8 @@ protected JMenu createHelpMenu() { menu.add(new JMenuItem(AppActions.GATHER_DEBUG_INFO)); // Jamz: Box2d Testing... - // menu.addSeparator(); - // menu.add(new JMenuItem(AppActions.SHOW_BOX2D_TEST)); + menu.addSeparator(); + menu.add(new JMenuItem(AppActions.SHOW_BOX2D_TEST)); if (!AppUtil.MAC_OS_X) { menu.addSeparator(); diff --git a/src/main/java/net/rptools/maptool/util/ImageManager.java b/src/main/java/net/rptools/maptool/util/ImageManager.java index 950624dc89..71b267d62f 100644 --- a/src/main/java/net/rptools/maptool/util/ImageManager.java +++ b/src/main/java/net/rptools/maptool/util/ImageManager.java @@ -22,8 +22,12 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Texture; import net.rptools.lib.MD5Key; import net.rptools.lib.image.ImageUtil; +import net.rptools.maptool.client.MapTool; import net.rptools.maptool.model.Asset; import net.rptools.maptool.model.AssetAvailableListener; import net.rptools.maptool.model.AssetManager; @@ -47,6 +51,7 @@ public class ImageManager { /** Cache of images loaded for assets. */ private static final Map imageMap = new HashMap(); + private static final Map textureMap = new HashMap(); /** Additional Soft-reference Cache of images that allows best . */ private static final Map backupImageMap = @@ -61,11 +66,13 @@ public class ImageManager { /** The buffered "?" image to display while transferring the image. */ public static BufferedImage TRANSFERING_IMAGE; + public static Texture TRANSFERING_TEXTURE; /** The broken image, a "X" is used for all situations where the asset or image was invalid. */ private static final String BROKEN_IMAGE_PNG = "net/rptools/maptool/client/image/broken.png"; public static BufferedImage BROKEN_IMAGE; + public static Texture BROKEN_TEXTURE; /** Small and large thread pools for background processing of asset raw image data. */ private static ExecutorService smallImageLoader = Executors.newFixedThreadPool(1); @@ -84,6 +91,7 @@ public class ImageManager { static { try { TRANSFERING_IMAGE = ImageUtil.getCompatibleImage(UNKNOWN_IMAGE_PNG); + } catch (IOException ioe) { log.error("static for 'unknown.png': not resolved; IOException", ioe); TRANSFERING_IMAGE = ImageUtil.createCompatibleImage(10, 10, 0); @@ -239,6 +247,45 @@ public static void flushImage(MD5Key assetId) { imageMap.remove(assetId); } + public static byte[] getTexture(MD5Key assetId, ImageObserver... observers) { + return getTexture(assetId, null, observers); + } + + public static byte[] getTexture(MD5Key assetId, Map hints, ImageObserver... observers) { + // Ugg, can't load textures before libgdx app is loaded... + if (TRANSFERING_TEXTURE == null) + TRANSFERING_TEXTURE = new Texture(Gdx.files.internal(UNKNOWN_IMAGE_PNG)); + + if (BROKEN_TEXTURE == null) + BROKEN_TEXTURE = new Texture(Gdx.files.internal(BROKEN_IMAGE_PNG)); + + if (assetId == null) { + return null; + } + + synchronized (imageLoaderMutex) { + byte[] texture = textureMap.get(assetId); + + if (texture != null) { + // System.out.println("here... "); + return texture; + } + // Make note that we're currently processing it + // textureMap.put(assetId, TRANSFERING_TEXTURE); + + // Make sure we are informed when it's done loading + addObservers(assetId, observers); + + // Force a load of the asset, this will trigger a transfer if the + // asset is not available locally + if (texture == null) { + AssetManager.getAssetAsynchronously(assetId, new AssetListener(assetId, hints)); + } + + return null; + } + } + /** * Add observers, and associated hints for image loading, to be notified when the asset has * completed loading. @@ -255,6 +302,51 @@ public static void addObservers(MD5Key assetId, ImageObserver... observers) { observerSet.addAll(Arrays.asList(observers)); } + private static class BackgroundTextureLoader implements Runnable { + private final Asset asset; + + /** + * Create a background image loader to load the asset image using the hints provided. + * + * @param asset + * Asset to load + */ + public BackgroundTextureLoader(Asset asset) { + this.asset = asset; + } + + /** + * Load the asset raw texture data and notify observers that the image is loaded. + */ + public void run() { + log.debug("Loading asset: " + asset.getId()); + byte[] texture = textureMap.get(asset.getId()); + + if ((texture != null) || !MapTool.libgdxLoaded) { + // We've somehow already loaded this texture + log.debug("Texture wasn't in transit: " + asset.getId()); + return; + } + + try { + assert asset.getImage() != null : "asset.getImage() for " + asset.toString() + "returns null?!"; + texture = asset.getImage(); + } catch (Exception e) { + log.error("BackgroundTextureLoader.run(" + asset.getName() + "," + asset.getId() + + "): texture not resolved", e); + System.out.println("BackgroundTextureLoader.run(" + asset.getName() + "," + asset.getId() + + "): texture not resolved :: " + e); + // texture = BROKEN_TEXTURE; + } + + synchronized (imageLoaderMutex) { + // Replace placeholder with actual image + textureMap.put(asset.getId(), texture); + } + } + } + + /** * Load the asset's raw image data into a BufferedImage. * diff --git a/src/main/resources/net/rptools/maptool/client/image/light_ball.png b/src/main/resources/net/rptools/maptool/client/image/light_ball.png new file mode 100644 index 0000000000000000000000000000000000000000..08e2824e75fe34e653e45b8c2ec0edec8e9ea981 GIT binary patch literal 2149 zcmV-r2%7haP)~x z{>MN@mBJvP6*(NGIm%w7k>C9>1e}1?M;RVvB;x?25@I|M-~jvq!0$vhN7>5t;ddqA z^sMnwCNhpdhC&Jwpjv<$z_Y&<@F#f_d6l1czY77SfS$=Xm63@Uk||gwfCOxT00n-M zwTv%v-TW#7yZ~GX__=_e!8isIY7y0d5}u`wuK@yfH2Z6jXBbZ;tb~yEBMGPk@IvGP zex89S0YlP&GO`LZAgBSaM8LCRCv&=lAlFt8etV;w{^tL-v} zD#PI^NCp2zu0Mkxn1k21mOKXU5(ESzG_FC_YtpQkUqNkJUqV0ywyo;_8RV1vZ2@-A zGhfh)Su^hvM6~jp1LPGYTqD6LXS$CqkyRqdnS-}S@L#|r7IGhhFAaP2nf?a-f|s#? zXO=`pL0T0HtG`=$M2vtj*!3egyGKy_1w?;iP)iH^HK}s|GBAy1dspC%%=VrVsjcM? zsz_{~0{;MOzIyzc98qxv@Dvd~p;avqz{wOQRl6<%G_hHL4|t$pX9`PFO*Zdu2;MS{ zf_@i^BDWMpsw4@hAdY_^5*8Hbj6M*2iiA2r047mu$RxKh0>+>La{@h!tn=js;6nz; zToMLGCW+xQ<`1g1CIKGu`8j2K^91;^$MS~i8Vq2C;nh=qL4DRh-bpoJ3IxnSG)a5W zIsy_f1Pz#iObC446TAY|+MeaeG?&+<3+n~GLmLVpp^o5~QITe75ip7nFr~b{PSo{W zB*AGw;N7zv2wq#dCGd*Uy0Nvp5JQ}BD3p&TbyfyOkT=DtG< zSQGTUCy^xT^ndo~NNOr%GWgnvzET7z_$m{;6{FN(Iw3;~O88z)$&*!|{OL(6(0~zL z$Evwq;2Vh7uPLz)fPj$c530zda&_u#DH#}97uWK0W?5O^-7GSc3xHywM z(*Wz{oJvm2_HVi8P=aRVgv}-R1D;&`U0Hw!wYIRTh~0Oozg6?QMLv-03yMhQSg|%2 zhU%20?zzBm_U{o67d;6pA|`?Od_f=!1AJc++>K`+pXoCSoj#%sg@Ml(i4>E;<^T^p z?!7b->YGP+WBhr2kD2v1{k@nihPfnqKnB(XP-@V|<6JaOa&FEeUsRgv=Lh z??gc8nRQxN&ZMAH5^hKwATenTCR18)4-II0lGPG6#H6@FLDiHdax)W=T8m2}?3M(S znF&}+J4}pEuiL`e`|^ADzDFmwfl2*9b3^cljOEqZUgLcM#?|TrxhF?!YI{Q?a{NIB zFL4XoZ`^r9Mb~DE1zt^RJe}`NhmNErCoX77^*50X5f#O^kL?U?j4!XKLR^D`^Ttk1?#_p2}Gy~gf0Raxp`#l3vlZTzucf_{je|ig8?3aFGYTk zJXy2v5|!Jvu{VGf)ffRxLeaCL6bo-TVZ)inSy%AiMHIaHGnY$%wwJ|9A@2sXAYXg*;^?8+tu*0)n48`gWFKN|CHA-4p9WQmyVD~3g|5s-HA0XgIO!adKaPm)B zebE!|DTSW8c#C{$Yb_+eW9vM7`yZtKY65Ei;aUQe1bop0WNUi}FE!5Qz$r#TS6t6o z>Z?0HD6xc@{zlGknUjiFJv{Og#omoO@9D>mtW>+awL-8%ZHyp?+vQiZx#Hw#DIoFC6t>gNB4#jf-Dif_@!^TFXV8QfNOUeL!ulH=ovqz@ zC)U)+A!6qTteRfz*c=vU@YvkunwR%CJUcvec0-bNXe#I2AXakUpsu%u>#JYh-{J6d z1vvzR=Tl?W$x(KKT&dpO@@4%UPmgPl&;U~C%H^FMZmdm=yS(HF9-sFv-E3iPX5Rht bp8x{@cppSb9lA2900000NkvXXu0mjflfCY} literal 0 HcmV?d00001 diff --git a/src/main/resources/net/rptools/maptool/client/image/soccer_ball.png b/src/main/resources/net/rptools/maptool/client/image/soccer_ball.png new file mode 100644 index 0000000000000000000000000000000000000000..81fa94838c33b6b78fcdcc018f4e3f6fa8f7a68a GIT binary patch literal 8001 zcmWky1ymGm6dgi9xm-lmi|UpkRh ziwt_J=JK2Z2liYxCWt(Vm4oR%v1%k!;VcEBi$p;IlXkEm5+go7D3$`jg&&POgT2mF z6d(F7GWzS)ir+hjAD_>E4c|6QOKw&i=hls4cjDluDL+O$3BoUvWgz((I?&s{vd$wN zj0<;#h;iyHnO@y6qd^w|;^LeSJF(j#H1A0~9H>(xyOWPD;*MxXHq#I-=nYz@N0Nvd zP7paH?Hey!0!b^P1?6V2YC{E>km-G472)@r??&jR znZ2PmnGm_+k*@e5XBF`#2Z&T=t#~tBR3X>^huaNXSC@x@eME(dlU&FQ-7HI*r`sp< zfk3bz(a+;=5LA#v0d{+Q<2^!HH8LU;-$-b}z0-kp_t4yY?RI0d+!Z8l#Uo(+mW#KJ zCg>?vkkf4u%RZ*9F-v-{hLdNJK-^8GjF3%?SSuAA`guIVQq_NtgS z>v52;AxPcg<+Eas1&SX=$tFMQW0|Ny}Y(rN@z3vXAZj=gGpdf3NWH$&hmWT7`e65ojz=0t7f?$r1GPEaM z)LfldbY1rry6~<|h2F@*d%IoRfNd0hYx?G=P>2{E=@1kiLeb%aV6yG zMt&lca3%U{hLhLD{yF$QrpzD?nHkeuB$|1&9&tT!;}wd^{g!< zm%Y^H0{jtr%3RDpNE66-iTxtwdWGSnQE~!o&57tLHScvMNGB90oS!pqbCqQaD$_8h ze3`R!sKpk2%LU^c3|r4#?^%DmPP@)@WPqD%F75XILVK0{`B!_@2OGp2f*V*?83HoM zcUjLDKNRYaJV|&dTUprnyc!YlflTnfEYaamN)@%@%A(Xs8e1ycbGzy-j~0@}R0hrT zG2MxwZKbXBEsPT{e1dR_(1A!B_6OP2*wi);yr`=))Jq;r#yl9%;S=WH&DhK&%5*{M zaWr!HQzU)GO;t^0O{L}F)hR=jpq5a0$YbP?PC}Wn_UkG|?8 z+BRiRKSZExKDg*ey${g8iNezFQSZ@`dygonF4Bcxc|=WG_uW4v1bNKX|nIh_*yf zy_w(2&;gZ}o~Bo>T#hJL+HDi6+AGa1X;Wy`zX~Rl8Bk?2WK*(97`d0bsXeQ`Sc+Rp zsUabDTE&BMD5foJmG|m!F5S<_Yc~$cQ+Fv{@@d=rOZS@hM(4)qZ|SKLz8+Q`J{)Tv ze}r1R?}?j>I6d#c{2@Zls7G3^*eum7edSG3^SJoCDaANNqFB3r!!`JtQ@>OHJ60@K zCRR0#9gY30=Nio=k4m1ZKUE(X{x)1R{3G*8wgmsQz-IPl_H_1glj%$Emt2h>8b4X7 z)ULlQ(cf?U>>Tz|RKHjc`O>IPu`;)k%G z!J4mXbZUHUW@Aoe)6`ehv!BwI^19`9+>Hb_LBuR!IsHrefLHbIZ3c<)`vFELQ|*$!P`K zG;A{STJR?6R!)CxD)vI1n;lR|o=LjruSu?n3oi*Q>6?5L?ra)t8q(@<$ukLCmJ4LQ zv%K@Y8;44RSkP=RqJm|D4bZPHeEpd^;-$pqtW}H9$iP!jo+^c2zzw&AF zOW8L3TB6n5s!up1Q9SnIbHXixEmHkF*81P3^m6r79M$MVc{r+soE_VjulJ54R&!VJ z*8He4cn6JKeF{gqPr^zm%Xmn+#L}eIBQ-_d{*fW(_&^!Uazy6E5|8WCP2X+vkat{Y zJaR_Pkb^<6*^SEmi_c+5} zU{#2Jif-g^n$jxY(@n1mXk+!&a0oW;`Wn*Jfab7^hs50od%e3by=SDQ$E&~GVD>jW zmsXM@D!Ph%o+_OpaE5)sdxJK@8+<;$k^Is=k3>UiOj%D^U8!8vol8|kp|&s5uAGc2HJ#k{1~4WtZm^jN z8>gGUPti|E=sZvO!MUqMIKbF`n|t8JO&~;ojLYd?WpHatzkJR>AU5Y2>sPUY zJ;~@vZ$r;(FPn9grI@Xqb!A{~(4zHCa{R~6lJB+BJR?z#pt!z|>aorjySeR<$rPKT z(b(M7+}8m-mkXxzMU8%&79-2{L@oy{#2zaX3U@J^Pd`5$F+BR@aa23ML8kjjH>+CA z#A(N4NBlNrQfr_!r!}jp+0dbR-?y#7&-#3uHcxnD@ubb?kn--wRGz5BV%xE=%X#1V z=`!VFfIHjG$WZI77u$a2XRXgBC(?T|vvP|OQ&I-E3o{1`f%ctV1;^tHO6OQ%p`*7+ zrwK%I_YyJ_hQbNLck@IfMMYPo+;6t8OXWr_M_KczZi{Y*s;DS=11_d^r$@#!#tYMr z(o;H|{EKgPI(Hvb&-ZutGqiv4e#~!t^5SZ*%WJ`l{@~p*k=D9DERg-q_Oj+wd#v;- zRfBb9b_^m@HO1>93G}NEzZco@HFn5ZZU|wxz7b#>UmNGtbSRKMVeIcb}jmj97!- z=H%q)1q9rt-ovBBZ#JwNNls2aL!nTfkj$QJGJN|yk27n&{6-3i;Z5BcN;fcdu-vii zxi!Y*f4PzV=jtXAe&5c{&XgJpD-;b=rl6yPk!xrq9e$rO<{k?R%ZG}JSV2KS|HDoU zB08_u#R$8s{hZx6(pT)@X5s`A%tH|wV%oJs5zm9Axbx*e#@yW80y`RgeSJQfIB-k~ zAKp!%Bauuhq~3W-aMEBH4m%fDuf+L6s1k$E`pnbMG6ns%_9G7nF zyS!FOk|$pBN$D5+uVLqKYnP_0y=}0)GaX6FRp&Le@UnvE|wFCOat| zooBt(uYB<~HMMKo!+g2@^-QDFygw4Tj5X$~G1V>#u}6oXP*#WD{*0r?*pH%7{M7h- z)c9g#&_}Z#tl#rZMA1bsVw|87yWFz%Nv%^c68yMWMP^()JTd|^?jSkn4Ep%m3HpFS zmERkxT~1JZxA`dguTT#k2+ed*QD+c=W>@O`D_h zK)ix`oo%lOgHR~&QYh#d`-#}-aVs~an)S<ODAc4Qh79pfABM}z%QEK;ELYslAEFr2NMwdOt8y}C_4HL53})jCG+wao{`^EK)`U&MdCx@D$kG<~Q@&s(!)21;tA`?RmG1R*xOolrb%2z=BxC=;02*|>IodJ4 zXAE^h7n=s?;J?3Srl+T8{4qW4@@06qt&*LKjSbtS?UXX$X4m9hO$~`!I*$SZK|&qg zJR)ts!-Rtlpa&zCHZfs*X<$GSCI1Y8IGkQM%7;Ee0RfY4L0zUnqnka9cNYVJl~q*% z`|Vfzp+)R1+@Dh5INigjpW2Y;h%JVo+&dJCVJZn8#jF%BuA0353gD6#Q|6P^c)ml6 z{uRbgBk0Lv^nz`AmE;0;T*Y@JrJA{4vvYDB=j!dqyz{U%CIeIZ@`p3*&0j}s5eL0p zRpW?8cLGGvYtH|Bx#O;5XJ?0Ndwbhg(DUhg_OH2=Ijas!E4~m2MSY(e-BRG)4R>>M zGtrN!DJII8;Gz%n=rDex_MQ_9=)Y;S&RQKJzW1uakbd>Vy6(Y1JpENfcX#({ax!UT(FfXg0|^QJw1e;zt@p(cLoODifKb-b z8u;^vZ}0f>wz#kmjcaJf?W$71l`5}Yv04+O)48cXXnnPbO6SBB2U$H)EX39+feWnjdg_D`I#p!l`@i|xB7 z;Rb0NSIWuot-QRvEL*{>GIrdfqoc9e*|L}b^JEX^lK%ewvFYgu@MCNDdB@+Ka=?vo zadCQ$jt{#V7H#W`-I4Yw)y7UL|?(B=9 z8lRt!85t>;h@pS#2^ePy@hh|oM#vx@xxerHd#R0fYHCWa)stJuaV7}R_SPdQ8RFxu zsHmu7KqqvB%-r1nB!M9TnGccg!bGo_KvHJUKh--u8G%jvEYD@$mFq{XJVZ)8IhG;Jd|i{U<`IH{>2(0cywJ z*WJA~vBVB609FG3cJ0qf4>dh~*rKzNmzVI%moNYHQJEC9wbAQV83waQ18o2bF*rPY zPbE3B&-~;39*B!lJY82f0quSU+KF!)u>wggSC69*GbbmWXDdC|koo3F?#0%-gg+}0 zjOKmO6vg#0oY-IIuO%4`d8pF34Z_>}&dp6tp~}k2PyUwz@`yK6_6okfElZ_u7EYd&0JTy?_IAD1$IVLa8|%a zk7H3N->E0WIGq5ToxvF1=Zjt|r@m$lFO#yf@nZUlOau?RU$$~FB&^NUSp1VA07Tf( zkuc%E@*f)`Mi1_+Cp9)#x2T)_d3*_V%5p@@vPTz9uf!=b&&|!bZcngST3InkNEq#6 zX;_FKwt2cm^aKNx7nGJ_gMI%iEX7PlMn)w-H9RKm6>7F9<+LJpS2}DYlHfhp5Q;q- z@MRG@AW;Ay7(+sjDWBo_=Bzm2Xb|P6Ui+9meAF~F-GhUJ!dOAe2Lqj*kgu|7 zK=}CkpILD*<>(?HxxgjJBffK1&k?0)iB4^^Rh^u8;1d$Af=se=bKms8hml4Vw6@Y3 z85#W)an7PrT?!0QRenEii{H2A*2YqNdhPPQqfAFuPUPuRT1Njr!93BWTKTtgXcs%> z)njvW(T$Bl?@LQd7Yy9nWs}!MGV}5zNn`pvnAug5m#S2)q^*aD8%7DRFxaEJM{=La zAjm<0h;hT(g?^Qml(?S#);~EpflVKqU}j~_2`B>X7Td5l8(%rhI8byj(! zA97LRLHNl@%Imd#=4btf9$s`N;{tb)9FiXY<<08Y)6^y>QI=29@ z@x7-?JFX@fDPQ*1>H&Ta0Puep83h(K)WAvHH8nIeh)GE?7CyrP^bg9fg=qTkQB;>g z(Sg>Bu--y8ZUhZ2t(*v5|3Sd{Q|070Q{}q5Y^*rwmij*ql0MnR**Os@zC+|Q+d4b< z7ptW|)7Hk|PRrB~KqBuAxPkS6$#a}4?{;pw!Wlh|99YZ9$@y20GBRkZhZhwsQYjM3 zR{lWshiX5$u7r#T4!DUO)3}l=Z1<1?mq-|a0SLLTuaBLRQw~sibW9B5*|Q*E$nIxm zX5wIlPHG0So|mFHN=izA@&@}H|Dp$m0x&{`u**`ZXR8DaZdk>Oatcftn3U9=n4%4b z2dkRm>XrQcL*F*8V03Vk;L>p)6scP8>gdOf*WL=41o3X(EFqRrTgczIfqyFnE8RX zK03O(J-eqR6_#xKW{!^dqN1V~T|@yNwbQJEH!sU`nUKgDKwu@_;_9x-1i>Sux?rsuC5TIP}sK;G|t=d-FB^ zmq&NN6bNPS*_!}laT$L4W2>(}%hIu&u(V_h&`3@}v5id4M9<4i3kN0-gzaL3H!v!d zQ#XLS4t@D%->b&=)ZVb&U$nTD5)+M?nfYQoA>fTop3koWxQcO_Rdv6(_$V_?T(_lw z*<#Coyzy~yD<|8NfG9LHG+Klc;dVdtVB_{|?Tmn500sZ~T{pUuJ>I`!eKgf1+i}sy z3md9+{?xF0D4tMQ$RvI?V{tK69dIwrDv%*zfC;C2iif&~53p1byZPzP6e9%%MMJ+i zKPEaF;KY^QC^B1HTWLP(-u3l$L5FNEk|?1N7!E!GL19r5x=Z^dD+Hs7)6B+R_c7M$ zu6Gnf{!a4W>s_{OwAq_$&}(w04-XIb@S=%RTsgk{(@UoHb69v8bHL3H&BGQe7dTL< zn{BQC(lH?)AD_~{fByymGUDUo3knHAcbsn|06@C{AOYU)M893f-(U2YtzVjQ|j- zrj?adWz(#qTL`Qm?)-U{t-Zw#5{b0vG95d-+{~}`5X=3?)4jcz?dNR=W%Y zetu5@$WKUw_sHwv(VIT82?=W(=_dW!S`uM3HT*asi4&Ue_$|0VM)dglGK*#=4L;Vl zY+)kCz-xZ6sl?ROu*Fs{i`^fUB0fiON1^!?(1LB&XULmWe?G!hXC(s%J{AV(Fuo2A zB{bI8U*`_2xvg((Fp=XHmY3rJ(_ql#tYBpHFPdYMlmBeOO$Uu!KnJ5iqhr@@bq7Fk z#W`Kdo*YNN4LVb%-QIe`bd4T9DB}SznkCtab!bIPF?`qHt1im3F$gr0NNMHzgEzA!gJhfGDJ<;cQ@}LtaJP?2Ug6{S)K{2vw8xueyd7sM)IXPp z>fI;u@2)ppIu843uWD;+Pw*TjS2i{_KHc43nekD(?tFjbe|om!5#N{&pHU9>oIB#GL?4(eTVbEN~W&i%q)(&NAXfDnyi1IcrtBOK5} ziL(}C+Gel&FmMg6){RQ~*`Mz(c8rdUD5|L32b~O1UaYJVAaA(1xF2oDACgm1$q{4b zNWP{48*^(wVZf7^)=miHSuQ6+HyT{@)8>k%tkC0p6*L z&Ij3*T~C=Ix`D2>L(s_7H#A7pc^xb@HJqhmh5RD0%?h8g?_2GQK^Pgu{rY81j2T>8 zD==7Fp(cHlwP#mnsiGYJlvJX3a1f`quFgy-+iibAbWBj9#ci#B3Je1#;#Om5(TQ;| z6H`(!I+pLY=3P2&q-wdyQd3huzN`d5x31II(xOn10T6K%qCNXP8;U}4%=W%;|iS6g>`#TGvE=~YZKX@R6L{b3F{->p%Ka1b^3fJC#;nBiN zBu#(OO@)aDvIaUO(3Nm=bAQz1ViR^=__Va*iXT-Z^3Hxy5Tf}DDzP2RH16Kp&Ar}V zXukLIl%4-!3j98xK)nWg3h%su=2x4E>FK49-}9r|G%ZEO8(0LmhiVyQ9f%OIadF$o zaxgRb{{8!Jfb2U$jY+N^zDcZ(P0XO!So}ZY3D4Mjot8ddVw6wq92^{Uly-FFj~fPBlZ#V1R_=nf7uC8UHo7peKvNJL|!4fny zG<>3>Q6nRoGmb(=5h?j(ssYv98tV04c#+bcr(cZFtST|)#N=cL z0|dALs8C{NW)#q;-@ku9N*`+IC@NYF8n?Cdmo$kRSYraMrvd^eOg00&3xzBP&3XIZ z9ZpM2OE6`ke`7hWrTG!A0@|2fliMSz9C07g+1XitE31tqpwtr0mS2*WkHr~ds}T+K|_EKnEvf48VBj+My}9 z0!*6CNRA9BDWLNV%(kg)m0XNb@?d&%YJB&kpGV^MV(kDVp?TI;&{qNR=Eaxx+|2j$ zSr+5Y-)gx)_ik*wR1CT^CxBxqqKFjG^>={!7! z67%z`HOk|ufI{&aH2(H?a@u1nE-oH$aBwgK*8bF22Jt;dy!$a*s5lMrOQb#$$q$T& z7N>62wKnjeKdOuj78Vu^bCZ$~jXuZLUV(uf%%o9#C={un#t^x}m$0y~HKFX`>FH_V z?=v&r&0s8d2U4FxKtQl{aG)ee6E?jYHtU!-`KbPm7Fx_|ii3UM)B`h0NJT+YzDm|K F Date: Sat, 3 Apr 2021 22:58:31 +0200 Subject: [PATCH 002/139] integrate gdxtest --- .../rptools/maptool/box2d/Box2dLightTest.java | 549 ++++++++++++++++++ .../rptools/maptool/box2d/NativeRenderer.java | 201 +++++++ .../maptool/box2d/NativeRenderingCanvas.java | 227 ++++++++ .../net/rptools/maptool/box2d/Viewport.java | 99 ++++ .../rptools/maptool/client/AppActions.java | 8 +- .../net/rptools/maptool/client/MapTool.java | 23 +- .../maptool/client/ui/MapToolFrame.java | 54 ++ src/main/resources/data/bg.png | Bin 0 -> 394660 bytes src/main/resources/data/marble.png | Bin 0 -> 9522 bytes 9 files changed, 1148 insertions(+), 13 deletions(-) create mode 100644 src/main/java/net/rptools/maptool/box2d/Box2dLightTest.java create mode 100644 src/main/java/net/rptools/maptool/box2d/NativeRenderer.java create mode 100644 src/main/java/net/rptools/maptool/box2d/NativeRenderingCanvas.java create mode 100644 src/main/java/net/rptools/maptool/box2d/Viewport.java create mode 100644 src/main/resources/data/bg.png create mode 100644 src/main/resources/data/marble.png diff --git a/src/main/java/net/rptools/maptool/box2d/Box2dLightTest.java b/src/main/java/net/rptools/maptool/box2d/Box2dLightTest.java new file mode 100644 index 0000000000..6ae95fe9a3 --- /dev/null +++ b/src/main/java/net/rptools/maptool/box2d/Box2dLightTest.java @@ -0,0 +1,549 @@ +package net.rptools.maptool.box2d; + +import java.util.ArrayList; + +import box2dLight.ChainLight; +import box2dLight.ConeLight; +import box2dLight.DirectionalLight; +import box2dLight.Light; +import box2dLight.PointLight; +import box2dLight.RayHandler; + +import com.badlogic.gdx.ApplicationListener; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input; +import com.badlogic.gdx.InputAdapter; +import com.badlogic.gdx.graphics.*; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.g2d.TextureRegion; +import com.badlogic.gdx.graphics.glutils.FrameBuffer; +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Matrix4; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.math.Vector3; +import com.badlogic.gdx.physics.box2d.Body; +import com.badlogic.gdx.physics.box2d.BodyDef; +import com.badlogic.gdx.physics.box2d.BodyDef.BodyType; +import com.badlogic.gdx.physics.box2d.ChainShape; +import com.badlogic.gdx.physics.box2d.CircleShape; +import com.badlogic.gdx.physics.box2d.Fixture; +import com.badlogic.gdx.physics.box2d.FixtureDef; +import com.badlogic.gdx.physics.box2d.QueryCallback; +import com.badlogic.gdx.physics.box2d.World; +import com.badlogic.gdx.physics.box2d.joints.MouseJoint; +import com.badlogic.gdx.physics.box2d.joints.MouseJointDef; + + +public class Box2dLightTest extends InputAdapter implements ApplicationListener { + + static final int RAYS_PER_BALL = 128; + static final int BALLSNUM = 5; + static final float LIGHT_DISTANCE = 16f; + static final float RADIUS = 1f; + + static final float viewportWidth = 48; + static final float viewportHeight = 32; + + OrthographicCamera camera; + + SpriteBatch batch; + BitmapFont font; + TextureRegion textureRegion; + Texture bg; + + /** our box2D world **/ + World world; + + /** our boxes **/ + ArrayList balls = new ArrayList(BALLSNUM); + + /** our ground box **/ + Body groundBody; + + /** our mouse joint **/ + MouseJoint mouseJoint = null; + + /** a hit body **/ + Body hitBody = null; + + /** pixel perfect projection for font rendering */ + Matrix4 normalProjection = new Matrix4(); + + boolean showText = true; + + /** BOX2D LIGHT STUFF */ + RayHandler rayHandler; + + ArrayList lights = new ArrayList(BALLSNUM); + + float sunDirection = -90f; + + private NativeRenderer jfxRenderer; + + public void setJfxRenderer(NativeRenderer renderer) { + jfxRenderer = renderer; + } + + @Override + public void create() { + + MathUtils.random.setSeed(Long.MIN_VALUE); + + camera = new OrthographicCamera(viewportWidth, viewportHeight); + camera.position.set(0, viewportHeight / 2f, 0); + camera.update(); + + batch = new SpriteBatch(); + font = new BitmapFont(); + font.setColor(Color.RED); + + textureRegion = new TextureRegion(new Texture( + Gdx.files.internal("data/marble.png"))); + bg = new Texture(Gdx.files.internal("data/bg.png")); + + createPhysicsWorld(); + Gdx.input.setInputProcessor(this); + + normalProjection.setToOrtho2D( + 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + + /** BOX2D LIGHT STUFF BEGIN */ + RayHandler.setGammaCorrection(true); + RayHandler.useDiffuseLight(true); + + rayHandler = new RayHandler(world); + rayHandler.setAmbientLight(0f, 0f, 0f, 0.5f); + rayHandler.setBlurNum(3); + + initPointLights(); + /** BOX2D LIGHT STUFF END */ + } + + @Override + public void render() { + /** Rotate directional light like sun :) */ + if (lightsType == 3) { + sunDirection += Gdx.graphics.getDeltaTime() * 4f; + lights.get(0).setDirection(sunDirection); + } + + camera.update(); + + boolean stepped = fixedStep(Gdx.graphics.getDeltaTime()); + Gdx.gl.glClearColor(0.3f, 0.3f, 0.3f, 1); + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + + batch.setProjectionMatrix(camera.combined); + batch.disableBlending(); + batch.begin(); + { + batch.draw(bg, -viewportWidth / 2f, 0, viewportWidth, viewportHeight); + batch.enableBlending(); + for (int i = 0; i < BALLSNUM; i++) { + Body ball = balls.get(i); + Vector2 position = ball.getPosition(); + float angle = MathUtils.radiansToDegrees * ball.getAngle(); + batch.draw( + textureRegion, + position.x - RADIUS, position.y - RADIUS, + RADIUS, RADIUS, + RADIUS * 2, RADIUS * 2, + 1f, 1f, + angle); + } + } + batch.end(); + + /** BOX2D LIGHT STUFF BEGIN */ + rayHandler.setCombinedMatrix(camera); + + if (stepped) rayHandler.update(); + rayHandler.render(); + /** BOX2D LIGHT STUFF END */ + + long time = System.nanoTime(); + + boolean atShadow = rayHandler.pointAtShadow(testPoint.x, + testPoint.y); + aika += System.nanoTime() - time; + + /** FONT */ + if (showText) { + batch.setProjectionMatrix(normalProjection); + batch.begin(); + + font.draw(batch, + "F1 - PointLight", + 0, Gdx.graphics.getHeight()); + font.draw(batch, + "F2 - ConeLight", + 0, Gdx.graphics.getHeight() - 15); + font.draw(batch, + "F3 - ChainLight", + 0, Gdx.graphics.getHeight() - 30); + font.draw(batch, + "F4 - DirectionalLight", + 0, Gdx.graphics.getHeight() - 45); + font.draw(batch, + "F5 - random lights colors", + 0, Gdx.graphics.getHeight() - 75); + font.draw(batch, + "F6 - random lights distance", + 0, Gdx.graphics.getHeight() - 90); + font.draw(batch, + "F9 - default blending (1.3)", + 0, Gdx.graphics.getHeight() - 120); + font.draw(batch, + "F10 - over-burn blending (default in 1.2)", + 0, Gdx.graphics.getHeight() - 135); + font.draw(batch, + "F11 - some other blending", + 0, Gdx.graphics.getHeight() - 150); + + font.draw(batch, + "F12 - toggle help text", + 0, Gdx.graphics.getHeight() - 180); + + font.draw(batch, + Integer.toString(Gdx.graphics.getFramesPerSecond()) + + "mouse at shadows: " + atShadow + + " time used for shadow calculation:" + + aika / ++times + "ns" , 0, 20); + + batch.end(); + } + if(jfxRenderer != null) { + var pixmap = Pixmap.createFromFrameBuffer(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + jfxRenderer.setGdxBuffer(pixmap.getPixels()); + pixmap.dispose(); + } + } + + void clearLights() { + if (lights.size() > 0) { + for (Light light : lights) { + light.remove(); + } + lights.clear(); + } + groundBody.setActive(true); + } + + void initPointLights() { + clearLights(); + for (int i = 0; i < BALLSNUM; i++) { + PointLight light = new PointLight( + rayHandler, RAYS_PER_BALL, null, LIGHT_DISTANCE, 0f, 0f); + light.attachToBody(balls.get(i), RADIUS / 2f, RADIUS / 2f); + light.setColor( + MathUtils.random(), + MathUtils.random(), + MathUtils.random(), + 1f); + lights.add(light); + } + } + + void initConeLights() { + clearLights(); + for (int i = 0; i < BALLSNUM; i++) { + ConeLight light = new ConeLight( + rayHandler, RAYS_PER_BALL, null, LIGHT_DISTANCE, + 0, 0, 0f, MathUtils.random(15f, 40f)); + light.attachToBody( + balls.get(i), + RADIUS / 2f, RADIUS / 2f, MathUtils.random(0f, 360f)); + light.setColor( + MathUtils.random(), + MathUtils.random(), + MathUtils.random(), + 1f); + lights.add(light); + } + } + + void initChainLights() { + clearLights(); + for (int i = 0; i < BALLSNUM; i++) { + ChainLight light = new ChainLight( + rayHandler, RAYS_PER_BALL, null, LIGHT_DISTANCE, 1, + new float[]{-5, 0, 0, 3, 5, 0}); + light.attachToBody( + balls.get(i), + MathUtils.random(0f, 360f)); + light.setColor( + MathUtils.random(), + MathUtils.random(), + MathUtils.random(), + 1f); + lights.add(light); + } + } + + void initDirectionalLight() { + clearLights(); + + groundBody.setActive(false); + sunDirection = MathUtils.random(0f, 360f); + + DirectionalLight light = new DirectionalLight( + rayHandler, 4 * RAYS_PER_BALL, null, sunDirection); + lights.add(light); + } + + private final static int MAX_FPS = 30; + private final static int MIN_FPS = 15; + public final static float TIME_STEP = 1f / MAX_FPS; + private final static float MAX_STEPS = 1f + MAX_FPS / MIN_FPS; + private final static float MAX_TIME_PER_FRAME = TIME_STEP * MAX_STEPS; + private final static int VELOCITY_ITERS = 6; + private final static int POSITION_ITERS = 2; + + float physicsTimeLeft; + long aika; + int times; + + private boolean fixedStep(float delta) { + physicsTimeLeft += delta; + if (physicsTimeLeft > MAX_TIME_PER_FRAME) + physicsTimeLeft = MAX_TIME_PER_FRAME; + + boolean stepped = false; + while (physicsTimeLeft >= TIME_STEP) { + world.step(TIME_STEP, VELOCITY_ITERS, POSITION_ITERS); + physicsTimeLeft -= TIME_STEP; + stepped = true; + } + return stepped; + } + + private void createPhysicsWorld() { + + world = new World(new Vector2(0, 0), true); + + float halfWidth = viewportWidth / 2f; + ChainShape chainShape = new ChainShape(); + chainShape.createLoop(new Vector2[] { + new Vector2(-halfWidth, 0f), + new Vector2(halfWidth, 0f), + new Vector2(halfWidth, viewportHeight), + new Vector2(-halfWidth, viewportHeight) }); + BodyDef chainBodyDef = new BodyDef(); + chainBodyDef.type = BodyType.StaticBody; + groundBody = world.createBody(chainBodyDef); + groundBody.createFixture(chainShape, 0); + chainShape.dispose(); + createBoxes(); + } + + private void createBoxes() { + CircleShape ballShape = new CircleShape(); + ballShape.setRadius(RADIUS); + + FixtureDef def = new FixtureDef(); + def.restitution = 0.9f; + def.friction = 0.01f; + def.shape = ballShape; + def.density = 1f; + BodyDef boxBodyDef = new BodyDef(); + boxBodyDef.type = BodyType.DynamicBody; + + for (int i = 0; i < BALLSNUM; i++) { + // Create the BodyDef, set a random position above the + // ground and create a new body + boxBodyDef.position.x = -20 + (float) (Math.random() * 40); + boxBodyDef.position.y = 10 + (float) (Math.random() * 15); + Body boxBody = world.createBody(boxBodyDef); + boxBody.createFixture(def); + balls.add(boxBody); + } + ballShape.dispose(); + } + + /** + * we instantiate this vector and the callback here so we don't irritate the + * GC + **/ + Vector3 testPoint = new Vector3(); + QueryCallback callback = new QueryCallback() { + @Override + public boolean reportFixture(Fixture fixture) { + if (fixture.getBody() == groundBody) + return true; + + if (fixture.testPoint(testPoint.x, testPoint.y)) { + hitBody = fixture.getBody(); + return false; + } else + return true; + } + }; + + @Override + public boolean touchDown(int x, int y, int pointer, int newParam) { + // translate the mouse coordinates to world coordinates + testPoint.set(x, y, 0); + camera.unproject(testPoint); + + // ask the world which bodies are within the given + // bounding box around the mouse pointer + hitBody = null; + world.QueryAABB(callback, testPoint.x - 0.1f, testPoint.y - 0.1f, + testPoint.x + 0.1f, testPoint.y + 0.1f); + + // if we hit something we create a new mouse joint + // and attach it to the hit body. + if (hitBody != null) { + MouseJointDef def = new MouseJointDef(); + def.bodyA = groundBody; + def.bodyB = hitBody; + def.collideConnected = true; + def.target.set(testPoint.x, testPoint.y); + def.maxForce = 1000.0f * hitBody.getMass(); + + mouseJoint = (MouseJoint) world.createJoint(def); + hitBody.setAwake(true); + } + + return false; + } + + /** another temporary vector **/ + Vector2 target = new Vector2(); + + @Override + public boolean touchDragged(int x, int y, int pointer) { + camera.unproject(testPoint.set(x, y, 0)); + target.set(testPoint.x, testPoint.y); + // if a mouse joint exists we simply update + // the target of the joint based on the new + // mouse coordinates + if (mouseJoint != null) { + mouseJoint.setTarget(target); + } + return false; + } + + @Override + public boolean touchUp(int x, int y, int pointer, int button) { + // if a mouse joint exists we simply destroy it + if (mouseJoint != null) { + world.destroyJoint(mouseJoint); + mouseJoint = null; + } + return false; + } + + @Override + public void dispose() { + rayHandler.dispose(); + world.dispose(); + } + + /** + * Type of lights to use: + * 0 - PointLight + * 1 - ConeLight + * 2 - ChainLight + * 3 - DirectionalLight + */ + int lightsType = 0; + + @Override + public boolean keyDown(int keycode) { + switch (keycode) { + + case Input.Keys.F1: + if (lightsType != 0) { + initPointLights(); + lightsType = 0; + } + return true; + + case Input.Keys.F2: + if (lightsType != 1) { + initConeLights(); + lightsType = 1; + } + return true; + + case Input.Keys.F3: + if (lightsType != 2) { + initChainLights(); + lightsType = 2; + } + return true; + + case Input.Keys.F4: + if (lightsType != 3) { + initDirectionalLight(); + lightsType = 3; + } + return true; + + case Input.Keys.F5: + for (Light light : lights) + light.setColor( + MathUtils.random(), + MathUtils.random(), + MathUtils.random(), + 1f); + return true; + + case Input.Keys.F6: + for (Light light : lights) + light.setDistance(MathUtils.random( + LIGHT_DISTANCE * 0.5f, LIGHT_DISTANCE * 2f)); + return true; + + case Input.Keys.F9: + rayHandler.diffuseBlendFunc.reset(); + return true; + + case Input.Keys.F10: + rayHandler.diffuseBlendFunc.set( + GL20.GL_DST_COLOR, GL20.GL_SRC_COLOR); + return true; + + case Input.Keys.F11: + rayHandler.diffuseBlendFunc.set( + GL20.GL_SRC_COLOR, GL20.GL_DST_COLOR); + return true; + + case Input.Keys.F12: + showText = !showText; + return true; + + default: + return false; + + } + } + + @Override + public boolean mouseMoved(int x, int y) { + testPoint.set(x, y, 0); + camera.unproject(testPoint); + return false; + } + + @Override + public boolean scrolled(float amountx, float amounty) { + camera.rotate((float) amountx * 3f, 0, 0, 1); + return false; + } + + @Override + public void pause() { + } + + @Override + public void resize(int arg0, int arg1) { + } + + @Override + public void resume() { + } + +} \ No newline at end of file diff --git a/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java b/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java new file mode 100644 index 0000000000..8daa5a78f9 --- /dev/null +++ b/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java @@ -0,0 +1,201 @@ +package net.rptools.maptool.box2d; + + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.InputProcessor; +import com.badlogic.gdx.backends.lwjgl.LwjglApplication; +import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; +import javafx.application.Platform; + +import javax.swing.*; +import java.awt.Canvas; +import java.nio.ByteBuffer; + +public class NativeRenderer implements InputProcessor { + private class RendererConfig { + public int width; + public int height; + public int currentBufferIndex; + public int singleBufferSize; + public ByteBuffer renderBuffer; + byte[] flippedBuffer; + } + + + private ByteBuffer gdxBuffer; + private RendererConfig oldConfig; + private RendererConfig newConfig; + + + public static final int BufferCount = 2; + public static final int BytePerInt = 4; + + private InputProcessor gdxInput; + private Canvas canvas; + private LwjglApplication app; + private NativeRenderingCanvas nativeCanvas; + + public NativeRenderer(Canvas dummyCanvas, NativeRenderingCanvas nativeRenderingCanvas) { + canvas = dummyCanvas; + nativeCanvas = nativeRenderingCanvas; + } + + // Initialization and disposal: + + public void setGdxBuffer(ByteBuffer buffer) { + + //synchronized (this) { + gdxBuffer = buffer; + fixColors(); + flip(); + var bufferIndex = render(); + Platform.runLater(() -> nativeCanvas.renderUpdate(oldConfig.renderBuffer, bufferIndex, oldConfig.width, oldConfig.height)); + checkSizeChange(); + //} + } + + private void checkSizeChange() + { + if(newConfig == oldConfig) + return; + + oldConfig = newConfig; + SwingUtilities.invokeLater(()->canvas.setSize(oldConfig.width, oldConfig.height)); + } + + // on mac this must be called when the canvas is isDisplayable + public void init() { + if (app != null) + return; + + canvas.setVisible(false); + + var config = new LwjglApplicationConfiguration(); + config.allowSoftwareMode = true; + config.forceExit = false; + + var box = new Box2dLightTest(); + box.setJfxRenderer(this); + gdxInput = box; + checkSizeChange(); + + app = new LwjglApplication(box, config, canvas); + } + + public void dispose() { + app.stop(); + } + + // Canvas creation and rendering: + + public void createCanvas(int width, int height) { + var cfg = new RendererConfig(); + + cfg.width = width; + cfg.height = height; + cfg.currentBufferIndex = 0; + + cfg.singleBufferSize = width * height * BytePerInt; + + cfg.renderBuffer = ByteBuffer.allocate(cfg.singleBufferSize * BufferCount); + cfg.flippedBuffer = new byte[cfg.singleBufferSize]; + newConfig = cfg; + + init(); + } + + private void fixColors() { + //fix colors RGBA -> BGRA + for (int i = 0; i < gdxBuffer.capacity(); i += BytePerInt) { + var red = gdxBuffer.get(i); + gdxBuffer.put(i, gdxBuffer.get(i + 2)); + gdxBuffer.put(i + 2, red); + } + } + + private void flip() { + if (oldConfig.flippedBuffer.length != gdxBuffer.capacity()) + return; + + int numBytesPerLine = oldConfig.width * BytePerInt; + for (int i = 0; i < oldConfig.height; i++) { + gdxBuffer.position((oldConfig.height - i - 1) * numBytesPerLine); + gdxBuffer.get(oldConfig.flippedBuffer, i * numBytesPerLine, numBytesPerLine); + } + } + + + public int render() { + oldConfig.currentBufferIndex += 1; + if (oldConfig.currentBufferIndex >= BufferCount) oldConfig.currentBufferIndex = 0; + + if (oldConfig.flippedBuffer != null && oldConfig.renderBuffer.capacity() == oldConfig.flippedBuffer.length * BufferCount + && oldConfig.flippedBuffer.length == oldConfig.singleBufferSize) { + + oldConfig.renderBuffer.position(oldConfig.currentBufferIndex * oldConfig.singleBufferSize); + oldConfig.renderBuffer.put(oldConfig.flippedBuffer); + oldConfig.renderBuffer.rewind(); + } + return oldConfig.currentBufferIndex; + } + + @Override + public boolean keyDown(int keycode) { + if (gdxInput == null) + return false; + return gdxInput.keyDown(keycode); + } + + @Override + public boolean keyUp(int keycode) { + if (gdxInput == null) + return false; + return gdxInput.keyUp(keycode); + } + + @Override + public boolean keyTyped(char character) { + if (gdxInput == null) + return false; + return gdxInput.keyTyped(character); + } + + @Override + public boolean touchDown(int screenX, int screenY, int pointer, int button) { + if (gdxInput == null) + return false; + return gdxInput.touchDown(screenX, screenY, pointer, button); + } + + @Override + public boolean touchUp(int screenX, int screenY, int pointer, int button) { + if (gdxInput == null) + return false; + return gdxInput.touchUp(screenX, screenY, pointer, button); + } + + @Override + public boolean touchDragged(int screenX, int screenY, int pointer) { + if (gdxInput == null) + return false; + return gdxInput.touchDragged(screenX, screenY, pointer); + } + + @Override + public boolean mouseMoved(int screenX, int screenY) { + if (gdxInput == null) + return false; + return gdxInput.mouseMoved(screenX, screenY); + } + + @Override + public boolean scrolled(float amountX, float amountY) { + if (gdxInput == null) + return false; + return gdxInput.scrolled(amountX, amountY); + } + + public void pause() { + app.stop(); + } +} \ No newline at end of file diff --git a/src/main/java/net/rptools/maptool/box2d/NativeRenderingCanvas.java b/src/main/java/net/rptools/maptool/box2d/NativeRenderingCanvas.java new file mode 100644 index 0000000000..4b2fb6d3a4 --- /dev/null +++ b/src/main/java/net/rptools/maptool/box2d/NativeRenderingCanvas.java @@ -0,0 +1,227 @@ +package net.rptools.maptool.box2d; + +import java.awt.*; +import java.nio.ByteBuffer; +import java.nio.IntBuffer; +import java.util.Timer; +import java.util.TimerTask; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import com.badlogic.gdx.Input; +import javafx.application.Platform; +import javafx.beans.property.ObjectProperty; +import javafx.beans.property.SimpleObjectProperty; +import javafx.beans.value.ChangeListener; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.EventHandler; +import javafx.geometry.Bounds; +import javafx.geometry.Rectangle2D; +import javafx.scene.Node; +import javafx.scene.image.*; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.layout.Pane; + + +/** + * A native rendering canvas. The assumption is that some native renderer + * produces an image provided as an IntBuffer or ByteBuffer. The PixelFormats + * must be IntArgbPre or ByteBgraPre respectively. For the API see NativeRenderer. + *

+ * This buffer is then used to create an Image which is bound to an ImageView. + * This class manages the direct display of this Image in a Pane and reacts to + * user input via mouse input or gestures on touch devices. + *

+ * TODOs: + * - Implement further user actions. + * - Handle different render scales. + * - Packaging of native part into jar file. + * + * @author Michael Paus + */ +public class NativeRenderingCanvas { + private final ObjectProperty fxImage; + private final ImageView imageView; + private final Pane canvasPane; + private final NativeRenderer nativeRenderer; + private final ChangeListener resizeListener; + + private ByteBuffer oldRawByteBuffer; + private ByteBuffer newRawByteBuffer; + private PixelBuffer pixelBuffer; + + private final Viewport emptyViewport = new Viewport(); + private Viewport nrViewport = emptyViewport; + + private int width; + private int height; + + + /** + * Create and initialize a NativeRenderingCanvas instance. + * @param dummyCanvas + */ + public NativeRenderingCanvas(Canvas dummyCanvas) { + nativeRenderer = new NativeRenderer(dummyCanvas, this); + canvasPane = new Pane(); + + fxImage = new SimpleObjectProperty<>(); + + imageView = new ImageView(); + + imageView.imageProperty().bind(fxImage); + imageView.fitWidthProperty().bind(canvasPane.widthProperty()); + imageView.fitHeightProperty().bind(canvasPane.heightProperty()); + imageView.setPreserveRatio(true); + imageView.setPickOnBounds(true); + + canvasPane.getChildren().add(imageView); + + + resizeListener = (v, o, n) -> { + width = (int) n.getWidth(); + height = (int) n.getHeight(); + if(width <= 0 || height <= 0) + return;; + + render(nrViewport.withSize(width, height)); + + }; + + init(); + } + + public void keyPressed(KeyEvent e) { + int newcode = switch (e.getCode()) { + default -> e.getCode().getCode(); + case F1 -> Input.Keys.F1; + case F2 -> Input.Keys.F2; + case F3 -> Input.Keys.F3; + case F4 -> Input.Keys.F4; + case F5 -> Input.Keys.F5; + case F6 -> Input.Keys.F6; + case F7 -> Input.Keys.F7; + case F8 -> Input.Keys.F8; + case F9 -> Input.Keys.F9; + case F10 -> Input.Keys.F10; + case F11 -> Input.Keys.F11; + case F12 -> Input.Keys.F12; + }; + + if(e.getCode() == KeyCode.ESCAPE) + nativeRenderer.pause(); + + nativeRenderer.keyDown(newcode); + } + + /** + * Must be called before the NativeRenderingCanvas can be used again after dispose() has been called. + */ + public void init() { + canvasPane.boundsInLocalProperty().addListener(resizeListener); + //nativeRenderer.init(); + + imageView.setOnMouseMoved(e -> { + if (!e.isSynthesized()) { + nativeRenderer.mouseMoved((int)e.getX(), (int)e.getY()); + e.consume(); + } + }); + + imageView.setOnKeyPressed(e -> { + nativeRenderer.keyDown(e.getCode().getCode()); + e.consume(); + });; + + imageView.setOnMouseReleased(e -> { + nativeRenderer.touchUp((int)e.getX(), (int)e.getY(), 0, 0); + e.consume(); + }); + + imageView.setOnMousePressed(e -> { + nativeRenderer.touchDown((int)e.getX(), (int)e.getY(), 0, 0); + }); + + imageView.setOnMouseDragged(e -> { + nativeRenderer.touchDragged((int)e.getX(), (int)e.getY(), 0); + e.consume(); + }); + + } + + /** + * Dispose all resources and disable all actions. Init() has to be called + * before the NativeRenderingCanvas instance can be used again. + */ + public void dispose() { + nrViewport = emptyViewport; + + canvasPane.boundsInLocalProperty().removeListener(resizeListener); + + imageView.setOnMouseClicked(null); + imageView.setOnMousePressed(null); + imageView.setOnMouseReleased(null); + imageView.setOnMouseDragged(null); + imageView.setOnScrollStarted(null); + imageView.setOnScrollFinished(null); + imageView.setOnScroll(null); + imageView.setOnZoom(null); + imageView.setOnRotate(null); + + fxImage.set(null); + nativeRenderer.dispose(); + } + + /** + * Return the root node of the NativeRenderingCanvas which can be directly + * added to some layout-pane. + * + * @return the root node of the NativeRenderingCanvas. + */ + public Node getRoot() { + return canvasPane; + } + + private void render(Viewport viewport) { + if (viewport.isEmpty() || viewport.getWidth() <= 0 || viewport.getHeight() <= 0) + return; + + renderAction(viewport, nrViewport); + } + + // Can be called on any thread. + private void renderAction(Viewport newViewport, Viewport oldViewport) { + if (newViewport != oldViewport) { + if (newViewport.getWidth() != oldViewport.getWidth() || newViewport.getHeight() != oldViewport.getHeight()) { + nativeRenderer.createCanvas(newViewport.getWidth(), newViewport.getHeight()); + } + } + //nativeRenderer.moveTo(newViewport.getMinX(), newViewport.getMinY()); + } + + // Must be called on JavaFX application thread. + public void renderUpdate(ByteBuffer renderBuffer, int bufferIndex, int width, int height) { + assert Platform.isFxApplicationThread() : "Not called on JavaFX application thread."; + + if(this.width != width || this.height != height || renderBuffer.capacity() != width * height * NativeRenderer.BufferCount * NativeRenderer.BytePerInt) + return; + + if (renderBuffer != oldRawByteBuffer) { + oldRawByteBuffer = renderBuffer; + pixelBuffer = new PixelBuffer<>(width, NativeRenderer.BufferCount * height, renderBuffer, PixelFormat.getByteBgraPreInstance()); + fxImage.set(new WritableImage(pixelBuffer)); + } + pixelBuffer.updateBuffer(pb -> { + final Rectangle2D renderedFrame = new Rectangle2D( + 0, + bufferIndex * height, + Math.min(canvasPane.getWidth(), width), + Math.min(canvasPane.getHeight(), height)); + imageView.setViewport(renderedFrame); + return renderedFrame; + }); + } +} \ No newline at end of file diff --git a/src/main/java/net/rptools/maptool/box2d/Viewport.java b/src/main/java/net/rptools/maptool/box2d/Viewport.java new file mode 100644 index 0000000000..c6d5b5592a --- /dev/null +++ b/src/main/java/net/rptools/maptool/box2d/Viewport.java @@ -0,0 +1,99 @@ +package net.rptools.maptool.box2d; + +import java.util.Objects; + +/** + * Immutable viewport class. + * + * @author Michael Paus + */ +public class Viewport { + + private final int minX; + private final int minY; + private final int width; + private final int height; + + public Viewport() { + this(0, 0, -1, -1); + } + + public Viewport(int minX, int minY, int width, int height) { + this.minX = minX; + this.minY = minY; + this.width = width; + this.height = height; + } + + public Viewport withLocation(int minX, int minY) { + return new Viewport(minX, minY, width, height); + } + + public Viewport withDeltaLocation(int deltaX, int deltaY) { + return new Viewport(minX + deltaX, minY + deltaY, width, height); + } + + public Viewport withSize(int width, int height) { + return new Viewport(minX, minY, width, height); + } + + // Increment or decrement the view size in steps of view_incr. + public Viewport withSizeIncrement(int width, int height, int sizeIncrement) { + if (width > 0 && height > 0 && sizeIncrement > 0) { + int newNrViewWidth = (width % sizeIncrement > 0) ? (width / sizeIncrement + 1) * sizeIncrement : (width / sizeIncrement) * sizeIncrement; + int newNrViewHeight = (height % sizeIncrement > 0) ? (height / sizeIncrement + 1) * sizeIncrement : (height / sizeIncrement) * sizeIncrement; + + if (newNrViewWidth != this.width || newNrViewHeight != this.height) { + return this.withSize(newNrViewWidth, newNrViewHeight); + } + } + return this; + } + + public Viewport withDeltaSize(int deltaWidth, int deltaHeight) { + return new Viewport(minX, minY, width + deltaWidth, height + deltaHeight); + } + + public int getMinX() { + return minX; + } + + public int getMinY() { + return minY; + } + + public int getWidth() { + return width; + } + + public int getHeight() { + return height; + } + + public boolean isEmpty() { + return width < 0 || height < 0; + } + + @Override + public int hashCode() { + return Objects.hash(height, minX, minY, width); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Viewport other = (Viewport) obj; + return height == other.height && minX == other.minX && minY == other.minY && width == other.width; + } + + @Override + public String toString() { + return "Viewport [minX=" + minX + ", minY=" + minY + ", width=" + width + ", height=" + height + "]"; + } + +} \ No newline at end of file diff --git a/src/main/java/net/rptools/maptool/client/AppActions.java b/src/main/java/net/rptools/maptool/client/AppActions.java index 4fd2a0d397..243755e017 100644 --- a/src/main/java/net/rptools/maptool/client/AppActions.java +++ b/src/main/java/net/rptools/maptool/client/AppActions.java @@ -57,6 +57,7 @@ import net.rptools.lib.FileUtil; import net.rptools.lib.MD5Key; import net.rptools.lib.image.ImageUtil; +import net.rptools.lib.swing.PositionalLayout; import net.rptools.maptool.client.tool.BoardTool; import net.rptools.maptool.client.tool.GridTool; import net.rptools.maptool.client.ui.AddResourceDialog; @@ -2007,12 +2008,15 @@ protected void executeAction() { public static final DefaultClientAction SHOW_BOX2D_TEST = new DefaultClientAction() { { - init("Show Box2D Test"); + init("Show/Hide jfx"); + //init("Show Box2D Test"); } @Override public void executeAction() { - MapTool.loadBox2dTest(); + MapTool.getFrame().addJfx(); + //MapTool.loadBox2dTest(); + } }; diff --git a/src/main/java/net/rptools/maptool/client/MapTool.java b/src/main/java/net/rptools/maptool/client/MapTool.java index 3dcd91c628..3a3535c59f 100644 --- a/src/main/java/net/rptools/maptool/client/MapTool.java +++ b/src/main/java/net/rptools/maptool/client/MapTool.java @@ -23,16 +23,8 @@ import io.sentry.SentryClientFactory; import io.sentry.event.BreadcrumbBuilder; import io.sentry.event.UserBuilder; -import java.awt.Color; -import java.awt.Desktop; -import java.awt.Dimension; -import java.awt.EventQueue; -import java.awt.Font; -import java.awt.Graphics2D; -import java.awt.GraphicsDevice; -import java.awt.GraphicsEnvironment; -import java.awt.Toolkit; -import java.awt.Transparency; + +import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.image.BufferedImage; @@ -43,10 +35,17 @@ import java.net.URL; import java.text.MessageFormat; import java.util.*; +import java.util.List; import javax.imageio.ImageIO; import javax.imageio.spi.IIORegistry; import javax.swing.*; import javax.swing.plaf.FontUIResource; + +import javafx.application.Platform; +import javafx.embed.swing.SwingNode; +import javafx.scene.Scene; +import javafx.scene.control.Label; +import javafx.scene.layout.StackPane; import net.rptools.clientserver.hessian.client.ClientConnection; import net.rptools.lib.BackupManager; import net.rptools.lib.DebugStream; @@ -58,6 +57,7 @@ import net.rptools.lib.sound.SoundManager; import net.rptools.lib.swing.SwingUtil; import net.rptools.maptool.box2d.DesktopLauncher; +import net.rptools.maptool.box2d.NativeRenderingCanvas; import net.rptools.maptool.client.functions.UserDefinedMacroFunctions; import net.rptools.maptool.client.swing.MapToolEventQueue; import net.rptools.maptool.client.swing.NoteFrame; @@ -1779,7 +1779,7 @@ public static void main(String[] args) { if (startLibGDX) { SwingUtilities.invokeLater(new Runnable() { public void run() { - MapToolLwjglApplication = new DesktopLauncher(clientFrame); + //MapToolLwjglApplication = new DesktopLauncher(clientFrame); libgdxLoaded = true; } }); @@ -1792,6 +1792,7 @@ public void run() { // MapToolLwjglApplication = new LwjglApplication(new MapToolGame(), cfg); } + EventQueue.invokeLater( () -> { initialize(); diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index 0b84d20a0e..760cf229d9 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -27,6 +27,7 @@ import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; @@ -43,6 +44,13 @@ import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; import javax.xml.parsers.ParserConfigurationException; + +import javafx.application.Platform; +import javafx.embed.swing.JFXPanel; +import javafx.embed.swing.SwingNode; +import javafx.scene.Scene; +import javafx.scene.control.Label; +import javafx.scene.layout.StackPane; import net.rptools.lib.AppEvent; import net.rptools.lib.AppEventListener; import net.rptools.lib.FileUtil; @@ -53,6 +61,7 @@ import net.rptools.lib.swing.PositionalLayout; import net.rptools.lib.swing.SwingUtil; import net.rptools.lib.swing.preference.WindowPreferences; +import net.rptools.maptool.box2d.NativeRenderingCanvas; import net.rptools.maptool.client.AppActions; import net.rptools.maptool.client.AppActions.ClientAction; import net.rptools.maptool.client.AppConstants; @@ -223,6 +232,7 @@ public class MapToolFrame extends DefaultDockableHolder private final GlobalPanel globalPanel = new GlobalPanel(); private final SelectionPanel selectionPanel = new SelectionPanel(); private final ImpersonatePanel impersonatePanel = new ImpersonatePanel(); + private final JFXPanel jfxPanel = new JFXPanel(); private final DragImageGlassPane dragImageGlassPane = new DragImageGlassPane(); @@ -436,6 +446,7 @@ public MapToolFrame(JMenuBar menuBar) { pointerToolOverlay = new PointerToolOverlay(); zoneRendererPanel.add(pointerToolOverlay, PositionalLayout.Position.CENTER, 0); + // Put it all together setJMenuBar(menuBar); add(BorderLayout.NORTH, toolbarPanel); @@ -475,8 +486,45 @@ public MapToolFrame(JMenuBar menuBar) { chatTyperTimers.addObserver(chatTyperObserver); chatTimer = getChatTimer(); setChatTypingLabelColor(AppPreferences.getChatNotificationColor()); + + Platform.runLater(()->{ + var root = new StackPane(); + var panel = new JPanel(); + var dummyCanvas = new Canvas(); + panel.add(dummyCanvas); + final SwingNode swingNode = new SwingNode(); + swingNode.setVisible(false); + + SwingUtilities.invokeLater(() -> { + swingNode.setContent(panel); + }); + + + var canvas = new NativeRenderingCanvas(dummyCanvas); + + javafx.scene.control.Label label = new Label("This is JavaFX"); + label.setMouseTransparent(true); + label.setStyle("-fx-font-size: 64pt; -fx-font-family: Arial; -fx-font-weight: bold; -fx-text-fill: white; -fx-opacity: 0.8;"); + + + + root.getChildren().addAll(/*swingNode,*/ canvas.getRoot(), + label); + + Scene scene = new Scene(root); + jfxPanel.setScene(scene); + }); + zoneRendererPanel.add(jfxPanel, PositionalLayout.Position.CENTER); + zoneRendererPanel.setComponentZOrder(jfxPanel, 0); + jfxPanel.setVisible(false); } + public void addJfx(){ + jfxPanel.setSize(zoneRendererPanel.getSize()); + jfxPanel.setVisible(!jfxPanel.isVisible()); + } + + public ChatNotificationTimers getChatNotificationTimers() { return chatTyperTimers; } @@ -879,6 +927,12 @@ public ZoomStatusBar getZoomStatusBar() { return zoomStatusBar; } + public JFXPanel getJfxPanel() { + return jfxPanel; + } + + + public AssetCacheStatusBar getAssetCacheStatusBar() { if (assetCacheStatusBar == null) { assetCacheStatusBar = new AssetCacheStatusBar(); diff --git a/src/main/resources/data/bg.png b/src/main/resources/data/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..d0630ebc2d80dbf9f1d936c89ef75f019cddd1c8 GIT binary patch literal 394660 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

!_*{qA?DgEr1m_-RlO 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 i9LiJ{XzjM$s-iE>Q|WRPf=n|BIb*2g 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Ƹ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

sv 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℞fWnWspdSj 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

MRlVrYdd6>R2t1$15Q=e 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%0D;h+N?vF zzN<7 z&^|04kGwFW0ZX{^q-5 z4nVFfRCl2Z?it3m0@v&2#7Rc-#TQ!ard6@n`dSHeLf}!#C{;7w*!s%0RyiZH_E8x* zGh)#UQW=?{tkEjz>5(8EY^=!1wpCGIZnf&AR{D9N^x$A)g*+^1T&eiWntsab&bPem z3)Xz|vV1!G!}Z}SchBR1D)kJ_TW_sC*o53&n#}-Xz;{il2$ZJ%1gPLqHgkNP&?WlgbV1NJ2rI zgutyed-v|`r%xZ3P8UUr?jlRl3+i&&SX2!mmv}g^VP~ z9d3uA>Gt;B?|u8-AAWd0Hvaa}_HBN0&1sjLGkI7j12Rg-A#dr}UzwMm5q#mx@o7|^Yng~1-k(McUwVvc~&hpxm z*3NXTDhrovh%_+N!rYsaFd{p+ALjrxAgPI;1}}Sd%>HTWux&g-CkJ| zV8TmnkS1?In;4f;J3z#gN>mgn8SUCO7>+WP;TN&`8q)#FY#bAy>HqV9+)MVEp% zR}om}^E$WExWp1Qk8m?WO_@39-3&c(t6ozuXO`o+@a@uy3g#Ugy0D_3wXZ``8Vwneg!VXd1WItag)P=*U=zBqQjQLMgyPD0Wk(<{0M9 z*<~bB8gowbR>7ae-67$PNM(j3Te-o=)4GspnO+S$V6Bx+5K+4- zok)Yv04kE^cDgMW^mQ$L1m#51{i3uCWgMoP_c}~#@#7U<1ZHS)JC@3~QfiBto{C5} zE#?GDo4jaKM47oFOH5N(Pce&ZB$Q;SZ!+c_2Myh}I6FqrYROcm9pO=pI!>E?rI$lM z&N9@`xl-pV40YvYHCtBn)U2z5mawdH6#+Le2Nh)AKl^t> z#A*R@xg^fr@8YtCIg|~`M1liX^@q%)#^xlo#v5vtvR#SwZXG@b0X+QpkN=zB`~5%p z{^x(O_16N3^Q;2ygeJ2RO*+-Ieu@(9bP}@3HK|ZJ(#ryBkKg^`-~apH{QBQzeBby@X69uk@-zC8oK@wW zC_NyPpx}{<#+>D{);i<9fMPB8H%qud6Pqar!2ETB>~jvx(JWzWXp2R@Ls2oVz49P5 z$ABqf8bgS=PoB258c(f^Ho(-HUr?WL6b?6=HNa+$V9G=b5!N4m{a3&I`Ct5H%;yV# z31%~m<7TEcfGeeBWoDPb+ZLnHczP5IBO@8RSqGaE%GVJoa7N8Mlf{-;EtHTdSk?l( z)^C%p*t&m}@Qmm!$switc8p_;!PR#f=@}Jel0|=%G9qTppzbCf-uW<#a6Gb=z&6%AA+3#c$=$~42)S{Y&%j@z1hs{%nMAOYCOZ2_H|wcfm! zghr>5)tAy1W5zC}TT6M(1p*pJP?mw5Niim7M7`tn<;yrwfz~Uf3_8J|1T4X=Ka4R` zdU^h&9M^}3{Wu(*WO;i7aeeSlFE1aTKOOV6Z=XJmuXp=dZkLFUTh1Pis_jL}=RQAu zc&~XgOwEx;C_b7EAgpm^iqcTEOQ?uk)?h6_&%Ctu7$PjctS-BOkWQ!?wZvfL@y? zk|r;0pRbafL7>bZbyPz==L2;$b||bxMVv?Gwv_{wk}2q1TT>~$t;j$#bNA15BpQLj zI%npW>w%<0czW1wNAUXfZFl*VoYc`M`g&H352=k5TL9GX&#-Y0aA&?8|XR5~>k)^Pw1Vg@e#Kht=4X(RfmxhH?0z?7kqL_$EMswYCZezSse?yG_`ea_bK=N^&{cSOmD^nu&^yaA0^2T60SGg47jq$q&?=91j+h}##0;poRSRqFHG|E2Xu2(z z`^qX>Hmnp{d$7v*i{a$uy4{YOcW-_%^TZ_8F9;0U5Jul3xxd;!db#|ku??Sp^X3TO zufq^6?3he6I&*A3HD54x9@BjXr=0?KH!n(qQmrDFk;wtZh{(A;Kj(+vzIW`)W{CQ! zT3JoO5fSb%YR-d9KYL0u!tzeRsmy243WT-KxZQ5bTjy)_HgOvp$KvkIP~vL49O6#+vS)M+-~uf58t)R8{>iaSPESMGvW3Wc`^6fyj{8> zFR%%E+S}iLzyInNzqq~ptsU>(&uEG-I1x2=_twWDx2w_3E1DQq1{s8{^^2Ave2r*t zox5Xq?N;yTKpZU&svr49oanjht_@D!$)GDa9fRDhq{ujnCe~6{1RbjAVhQe^VpbHq zTWge5(WPca$!Ihh+%3%H#bc0XWX9ln+<*#Gs1H+`mZTa=P{pEdGt$i8ynQ?8UK{vA zGZ#Wq3PaN7{n%e-`33j$)Iu6Bq#TXKEU$QRl|vY-y8-~4Qe!w%=3(92n&hR?UszJHKUfY>^@KqXmf8~ zdB#jO>-{2YW|w37cKMqAm?2Qs%IEGtF9%h9S%*thD1!=)nKQC)+je=#5m0gs^okQB zTPW=XHKBFiwnkG<0F@#U88Enax8_FKsJvY=od>bYeO&&_|L(v4AAk7t|K5J{f4v)Q z^XX^^8`ngm8O#(J&&=I3n}D(id|q*SsWWR8Q#LzufjNfeV9tg}%W=Yp(kh2cl^I^j z{jvnXm|h8k{L&9ve_b431HDyjzdq#YEIojJl z$d3Ls%Q)}6>WqkPg4FT+4#@(B_!e%bVZ-{XhK0Fa9Rxr~rqx2O>Wo`X_9G2GRbY%HHJXpwicDh7MCH{ zDuNtQMj`vc0ao;LXsJk@$lm+dN5p)2`IrcL)NkaZa?F^mx#Er*2FqG;r@QLBWN@ZL zxR;a8eT5nccfzPD?YyEu1Ry6ozy9X!I4;k>{lyW-609x`ez^_I-NAh*V=7Ku3okHidST4OK6ilN0E zWp!Mu9Jh)NN=>ugtc_VSh>dI+3Mf64wxX^&cPjz2 zwQdq%mZF=zJb!w9eJ#g`RtSj9tR!}8NK|PrK*kv^vQ{xhvs7ZaLeLBdZrpzK^^e|v zcz$^ug^zN#5Tu&BpZh71j5#BzX6wz02!q2!F4D8nN?8F|IdeTR%a~%6wFQ%w{r( zmQw5tH=WA*nwr)~%(~H1eFeiITV;V{K?yOnB5JXs%^+2zfo<;YZ76dbhMR~fgoyZb zyQOkR(s`LPVy-jNlnzv6rA~$68H>h*<@2XcpFVx45vmdUtK8n|G!co-umTKs zFgWl#;W+wT?*IKi&0|91p&u+KZF>hdr`t6LV!m8|QbpE9YT9A4I zkxC-1vAJ^3bK>#4lGC!i#R@pCaCnrE*h-;ky!&;L1?XCh>UToFaHCm70Nu3$iDeu51EvO$wv*lyk;Rr(gT_ z7Q{Sm07%b>=3ZuP6T{Y~q)y3{Mf$eA+4_cjouN#O5a|YbRs3lZi?GLpdzbo5CX92` zd0?(FUvnOPYX&G8%r)A`8pTvMn5m>&B}aKXF=XX+jaVmW$N;;KzUZ>8c=+_RQu`-5 z`!`>|i_DkXA=rx3r~uT0_UeoiJEd#x<}2-%bh&4KC#OIB?`PZDgcZ5Q{ewgP2x4%Cdv46lQ>$ zP_SJuvP3>#wvccnCfe3ux*=!zVu=p+5n&`S8b5dUxI^FS)%42|NqBQQ*oE!wySIwR z*E!H%QVARs%&TJV5RJz<0?x(5JJlKb-O>NOIdG}9wp*7!{q&#wx4-;XfAyRH@6XvU zJXe)PIS8~r{fGbfU;XR<^SJ#IzE4IksT5xy+L)EaJ2!KFk;hq4y(myj0{gN5{ICA{ zI9|Pbeu*aXtldX7S<5ZHDhWteVGE7mO%Uub14o`n>J#s_s1amrKoS!Pg9C18Kn9rQ zv27=rj(I0-m4eEu-WFENdp}xJb56m{YGCTM1|+#u*%d#uq#~6# z$%sf}b4zLFG*z2nsoAX=bIx%Gzh&ag7Cg(SnkAhs1=V(zZ0#b=YJI;*`zZi>nk~~q z-M8=G|1jtAz%(~tp3lbmLbZJDUSp)%nl7sNsWj*(BPQp_WyMvTnM&R5>dl`XAAb1w z3vtL`D)_(#J|%p3svl}Y7WurNGFF`Bw!tSz%^CAxgwOyZTTFN}b9mS5{+h}n8c7*B2}=b;rEOdNK4IRhcZqWj z_vY>eG;y|!s9Cue{up$EM8K48ZsZX$dT;ZVjUCZ{`8U5lI7(0C){b#3^^kvd&aeWB zLf+h11At}UQ&qJ|ojIa2reglQ znKbG_F)Q^fvUFE8;bbc>U}0?ppjvL;WuWItLnJ)~xl!(uJDA98vj;;T$BRQf23#-C z`*!^0o6Gy@`)$YGHn;tvXo2adup9ao8mhxR!wd4h=EqFXoseY;j)-99s_}qkNR7-C zHs0B2b@XHjvyY*g{W!YV0%(?bH=ltWA zm#XTlau?lh=!P~n7Hw=9Aq3b$SQrV(Z#?nBSK^~s;sYQaEW?A5@J+sTcXe0gEi&_e zIcM*+<{UiCwNFGgghHjrQfB;bd#^PwWBi8Ne(kvo_n9f00C*YwDMII!%kls&pnvk_ z?N?v_X3sba4#?Y-3>=_h)Xkrik&AnbPQuOKy!ym|JzmIBIVyL|4q#v#{3JwjR0>zr zrVX_x(vL2HqoHgIcJnRX{^Sq-%m4l#{4f9PkN;$R`>)pa8{M7>tBGEwG2gv@{l)w5 zz7b!9s{t-INY-0JCJY!o%Pld9)0jgNP^D>ETg$O$?(RvO3QJc-R3l&^i^2pGs%^Ur z@M3%LUI<6{NBx19_@{pSSQ95hx^ztLGKo>WQ3-57ryHE|X3gQvvX&@jpc$}4IB=rm z2qcinF>{?*QTN5q`oQOzBArO}tfd{0$X=X~nh5!^7iL8PDr4rYvApeQl0(e^*d7@< zgEh-LmxSc7m3$>Lp;tXp(n3`aVKbAq=4B=0nzEG&C?=Yj=;kdmm_yl>;Z_~PjNh>e ziWiN;NdSGs%;}V{G~ZDU%+)FTPyvnBiD6()7Dqp-XnV-*BrMTAgqu@ zhBV3;BXxOrbGf{^zI1XCT!hfwB7%Z1?&g+#m^adT2wrKebDrsBX5`q7V(b3UZ%ABz z8f^3)BM?sQmQxNSOM04>OJb4M^hQf?1F|hGqY>{+pAOrs!T8WS$9PF>fe5}D@w(D_ zTFE>zD$#*pNNL6MF*R2?c3FYoHg!p4xW-Zl9+tiUW~L}%buIoJaAhG#{f=wMgqzG3!lzLvgg_3& zsDRbT$eIRJn3a??lX^riCtP(}p$H|GB{ZyMMe&9L<|Q6oT0?_5nsbbF06!CDu28{%`(Ce)~_Iziu%sXLH9i>J4#u zx&EN`WZGKN-Q^U@C0I!ylg32*=mS9{MKNU4IvYTcteHkrwkfwf4=jl`GOAm45OQfi zornfn$^r~{JNRe;_t^xQIcym+Xe`Xd(xmhphC#10%V{Pvxm#;+M{~F@X*Q+O`%uVZ z_~r81Vol@5gpIUJMUD{B>O&L~7O*VZD3z&5jHr=-G=S8)toul_W)YnfW9JGx!C%qe(gfZrNyF}=ObQH)V3tjwY@jgXV&+C>fdX6B zHdUki7X~agk!Xai%WCG%MmCI%NRT6Asx48!nPC;d8OWqd4y+lzm@|iQm~Hg^`S}~0 zHst1oT(tyuX=m;W$D;JOJiPfUsYm6q$G`WN|M2g8`Q2|6-<@wa+pkhLg`&bC47RW> zJ#=0MB*l_>aer-X-N#kBjqyD1c#xS65dn2#gv{3mU(WBpdx0&z2d%qp;2v={TVjkH zQsR7iNN~^L%fbvCnRuDez}7${eC%y>f0y{(Ob>p;v9~ylab1j2`Wz!X3hA1$q)xC# z8<96}h)C!Heq#1HmY1Oy^#_QstJ;W$yuFcr4%;=lks71bJqjq1wYdNz33FNlAd9S6 z;bMU`Lqj@b=eB<Y3Wbd;jhK@IU?+sh|GKfBAo3Z~u<`bL9K6KWE>GbYm)%a{Aac zb^z|o@{duoPg5pJq#vyaAl2^oE~U{P0J!atDsSV!#2zXP8G%F(b!(Y6WP-yqgrp<0 zH;W~s)x^~tD9#cZsUc?Bat&-L&q}2vNZWg4rng49+tNry0F16Gqbk-kBXVF_T8x~r zT|}af*rfqx<|yl2s*_A#*7GuQ7s3~&)Y{sXbAr}%IxVF3eFI!DH*;qAXFJ}l4{vUJ z_huNk+vE2wd&{^%27&h%N~S#iaEBkWRECy0GW&Goe!S?d@25bG%jxmV@oxEajR#9K zq}gVIX}Jr5_z@}yK%-r3Ih}O-)j$5n|L}k9zy8OzJg-A1mPvLN^3wSI-~S!=h;glm zykn$oK&y)Va91AVcYG9bTLM8cGb2W^_sXF&hj2;mqwT$o@PH=}P<|LFDHTyB61I8Z zPfcZ+dSu0_eBx``hgYDcrqTb8qg}ytUS*YZi!1 zZ~WoAZ@>QX%Np0vEJO6x2U_!YZ{9+na&;>9%wD3CJfh%)(pZ~YTYOpkUA+A4gunUM z{_6ky=99lB$xNiES0i0mOb?EWqABjy3a6a8B9`cgT|}%)UrsOLv(Uxen4m#uIK$uk z(ck*J50}@=vO?8In1nHuG78#*y>oPJo5ipQk7$|qSPiP$hAiBck}0e!K>(hZcd;4R=SINn;G9 zrmA=bEtP#Tahx@!_=^ZY87e6K@e1UJ+!SH-(RxqP1YZehGnFBXQOq*RA4ubdQGd{3rk9ANBFn7LA)KEN|{$ zFy_zmknrCrG*f>v<)i{&ZbyGpH2fGtOKZ)1v9vwvq+qmxoF&2?&LbE#111l7&D8Ce z5exu2E$iS5Go_o@KnAdswG>pnH-`zvYR!fsgSeZdKDOuUcNlxCH3KQ2wT1-T07g!} zf~Lij%ES2lL5VawB$ntrDn44JBE?MPpy!4F03ZNKL_t&!2T}$d`BPBkj!k`{5iMcL zs2+I6b#MgZ0}A~f)j7Xk1S_zzv_Ky$2r%R{k*2wel~e@#@K?>9SmYESWwv!)dmjnU z3MQG(yT}|dAS|D}`%BxGUu(QK-f*kJuhBmlZolPp~LbG~)H^hrMqjduB{ls%3JIoO}*yQBoGA&MHiV=A;@H zqd7Ik(wbSjoZmeC@O5aUK-%cr;^tOc^S;2*mlgp2rl7!-NZeKh-UjE>B|FeJn zFaGz5F(JVv6vRTFs1ku)jc9J(mbA;`G0D0)6Lq{C($*lQ=*GxQStuZSYk;b!93yOs znE*2Sj8`gUPGmZrt@WMD>3qFCogYr-4GJ?Gp_29VF868dEsTINGlRKv+`jqEuNgfw zS|K=+rP^>*qOdu@h~>1Fln2`{*A53Mne$vzJdxVZvn_{-EYaau4s4&+{@B*M^u1sba4So(RL>lr(Hy4lP>JbxCLO7ef z2#D|s+?_;TI@qAb1XGsPTiI;B${IR_@;UW(0!$%qh6qz&qOB#>AP_Z*IHDCw3v3e~ z1jYn?z~qvY7)m$mqt|O<#^yxXo9ZT`(=bg2oU~9?TyT2mm_7h7xHU=OPX0*md#`g1 zENc{qkC9NAz2!u4v>CxEPHoB5s2}Oa6Y4j*xvl#E=-VDud6iMOGuPAW5vT9pZ!xm> zC-!}KPyCqypI&k&SpOk)d3?U_pEOj%ROaG^GxN)>5p$0DDE=j1vNR{QPM z>})(eUAM1)^QRb(`|a1U|M`MPQ&^ZrO5>n6mX0|y>iH+rj|EW87pE~11q3NDq0!7y z1_Binx&%3O$m-*4m~ys|m5Qo~1Gf7X%CedP%($VNGrfNOW?fGEzTfG4dEgfBQvKz$ zy4y&htx%zEJwlKbP0)QM5F@IFw(J3 z3=v615iUxBg~@af)MCV!zxgvzQ21e2OX*N-nce3Dz4tN3y%{Nq$&9*3W)@9Y_locT za{&O6m-TH=AMG^Ati*Sg3ukUD-R5LiU|SlP$i5n^V-=d=m%sc=FW3E+qu3H8#>iKf zbLMS5MUH5;%$_>pxCspRflW=5tNJXk8%TJ>Y#bv*vl02~)$5=C?tjqU{A{~j$Mvy6 zPQY8*sbgi92=dU?O|mra;}Y5j=Ld;Q8MIo(oLS`=8nW3~EyrO}m{C(UgDI@cW3!Vy z#MT+jT_b96Tl<59(Pg0$JVTWez$wwl%c$t`K8kO>QH5gV;RE-QBSan3e(woDs)ZvDD?-(J3o z{p-db8eU9UQ46VZSF4pMK$sxwIz~&RMFSi(0TBtrq1ysUC6{G&_da%-Ca5FBE64Ri zGVoobek7iv5iPZA#$MlR|EZ0kExq^i`MmFuGo$z}#L$P*wp3B7>%-{{;)sY4X(LkN z;w}1!2zUReQ<>xKQdXN`Y0aB&+pS)s2&1swUNU+{P{>FEtvOAzvQijp-JI@Fmw{fl z0#v5Pl5(}$6WrlE6?XdJKFn}8_clhSO$lLZUQq#eH`8%>)L%L^L>6TFWRA(lt~HE~jH1Kh zM%vu8XO4`vv_AUjbo$GG_@Df(|K{)g>wopnm^*Rej-Vp-~r2ECXT#m1l$#g(DigzE54supGnpCnin2ockhU#NZ_ zQ7y$^55!2QFkWG*XucxqyL-Jk`C%?LW8%w1F9Nd>6iDw8eNS_fa6Y}=_ML{zpvjxN zQ8^-qdHGuF8g?At>==`9l1CqLOu$92Ni7fMQlW(6-a`FFGdb{ZemjP&t=m4feGoXE zR>d%^Y@feeH?jM2i~PYo9Bi`G8aeadNGwas4AKZVoUrI)T~7qvT1iG}HZlluNxi&0>&%R3@TcRNL7V5`HWz9M(8$8~Ke`F<6BwT&o;xZ`9% zW>@aSn0C4{lQU;8Yi6{F1WVSx^PHQmSR(hA#@+K|Tm~P_%VS85ow~MV^Z_=eB6>F_ zVF**25^fDi;pFYLvh^q(gbH#OjMe%wF^XB!Mw+8i*=T8t?3A|3&S|a7VC#szIUx^` zre$r`+^l7Q9)><{?^nMyyDG0vLOw>s*sBs@Ryw9;-heGpAYE&{t6HImJlGcHBbn0Y z0%2rEQM-$sSWnbZ{^IVXh!_wfWL(W!#_h;v(~mZtV9tsEWM0QX;K(0Q4@=Lf8c2yt zR;G7~upF5q&3tiJRAPL!EQb#@LC3a@%Viy-w`L?Fb`nc#;OX({iDf$hN;$R05bmTc zGlQdQv-v6Iyuub=bBvK)$mTq)r{-Y4KdAG~ z=0XcIQ_%XFpzSvA$0;?XFf!~a?xBZ)M-oN|& z^S7UUhSTXK5RKgswU@*lV{kueA<4~_witZcJCEzoD9AF;#!KUAZL68!O$)9<+M%}9 z5%6A6eT|}i9-37!;D9O0QetM!k9q1nHM|JYlLf6p&Cf;OJ&UELUiDYjm!C82_wLuO zxJ#B`qXed6Ys6dQTETv}@t+gXtjP!K_cbgXza4c-|#ocS|{=Hu1>B#=&{KO!_C zQq#YKdUXr%Kk8Q>x7#g{&ri?aefM};A2MvajeVrxm*uCY<(2y;KKm)z21&Em%#$&t z0OWPfie}BZ7#!lm<<+}4?@;Fp%xyU@3$-`DET_+|yUf6$CTk{ht?P0+pWO+jNk%kc zX{eXIhP9T^fWZ}`@7v66PWpMUW?m(!<;2gPfQ z2lw;DH$mI}sQj+^_fUsY(T^0;`P|7`_$k`?^yc%yQ|H>XUPr_Fmey!yY?L!yJru$0 zj*aodcKdVXHxcip8>E=K63q83*?WbwmYzYrnt4gc6zXNe%rel<(7LIUVDYgTJ}X=C zlKMn+5o*nQSg=ti>&D?~<2 z+CMbGl_lJ+0r|{hpJWKSuY$(dTbl#-BQ*?Fi1^2FHz8q}Z`5vd4cgn!e*f?N{r~Cz z{J;JWXmNGXwx<+Jq+8@MDsFI60}NKm{DIB|t(Qm9Q-dqAW>PIjtZmU4vG*!|%*?Hpw7S=0$K;5hxm$)>TgqXVQ5X-503kQD zMr2Ox@zlD^mpkX3bYz~%ipDX?8j;FqW)-I9C_s4y)KyfF6~@I1tMc&h(0jK+lFe$o znrYm}IP;(usT1u+N^INSu6um-$N$f(hvx;`z1tv}N;e)({~B16@T8C;!NG96|!7s^rrKMqLyQ4}R==xjcB9y+dEx6`*@y^rg&_9Cgt=&|h$_15VQ zVQ$SX=W|Ao%*bU~msUc7sM@}~z-BAZH8v_qB9FSTTH#s8b{lo{JHq&ds_3?*CPtrZ#_8Q=~N~Nf4NKMqbe=Y$CfwYXU;Hp3fxr z+YQJuLTxQ#o*PXP(vZ#FjB!|fjXrm`^_9$_=rr^e)u%r1nuRlYpA7ktV155}@H_5R zRD$R!h?mRddVL}K;CtbTQAXS2m%X1?9FecNjdJHOeA zrVRYV)=zrAG;K?+xWtHv z!CG1AI9@U;t(xK|pZ|LRDz?ch;kbG;!FUh`X>@PP(#HS@ono}ebKfrtEYWZ)Ek5A^_+R5A!+n(H6@@X<;1V%=?TZy#5{* zB`}cM_uc3Z4;N{SzHQsad@@K{KnEp8bGdoBwaHz1HHNcLhN_g_u@5C7SAaSFC2mC+ zWhlp}f0H^ugDxEU10IoZu&SH#!w6`GP^CVs@2GmFM^C`dr#F3%i08Y=U3q_&HRI+< z%8&mq%qZmj0yyC7^;(1k)0$&kuPTss^i69}ZQklCD$XNh%Jb5Qq+wY?|oR#?z%y3G ze5Q^{&1e<-r_3b1AjL>!DG~%ija@|$~etyN1CJgNWyGA zU!)v;Uy7@~UTT)oZ?~njgJa66m7YJ-RB_=%!Xih`P>>nMaHn(RY&fiJq7^Y!s=@rA zCH-z20u&`WhQVT^P`b3aR5d@1h+Am+OMm5${_B_i-S+hDDNhDVyUCHsj3@&KffD{miR`7dlNRV?)-p44w}!N= z98$pnUd|8uzW33+)nZzAUQDAk(q#VdTesfFxVaBbX^BY<5=47rO3mId7eLlTBKacIj7>11TXh!9#LU3@D>ySh; zfu5>-E;BU=qmn^KDv`;Gu$};0B&~tW$Or+IvnF?=!BSOA)~>CNsiPyeBg}5?QtkWaA_3{bk*- z_jZI!%o1-Vj4(493&UCSdDcoN7A;L@PWAn?E@dJEIhc7LyBh$n6hz6*D_Ad&0p+3e zGSH6k0whEz#xOEd*B^es%gYKPvQ)^PT&*?Xpu7NJ^CeR+FV~0wcs`#Z$F^EazPWp3w$?%&(5uV&d_JpO__RU+ zPxHKhfWet=a?}SE4~-Niy|C(88sMd$pLll}Wt1H&G$$v$IU*v0P6_MM%&o^R2&sLq z{Ee$y&%oFg*K1+{6YQxmhwl-YDwt$u#u)p)-)^_l>Ex}|i1`49*wUae{_IzO`uz9; zF3DB|)96uItdM%|gjHLZ9aXo+$c!?UBO(N?%?-^+H)}+WzFl7k84wZo3}=E%0Z)}s ze*M+2Z@1^#>Q^9y#K2v&RbUbWZH%Z=26m%8`uf~XzmmN-d^+}@H~(n@xn~ZWzAHfK z`v&9si!Xl1`3hK1=La)mQ;+R*S#GzN>+J_y`sqyb9Q!8L>sA)gq3oGadAj9^D0(19 zQv1W&VtYn^j@whq@%G#h%CIV!5UADM==;yB#Uk2i^Y=@aC+~ z3cz#!o9*Dv+y&28)vXnH&oIWm7!hOiT~SZwI8v9vqX(Tr<<7CZ%5C$;7VdW17U}@~ofI_NT<##gJElALoIcqa0nAhQK$d0vM!}6 zXMjr)6O3-&e05tDwTW>c)86czt8=l;{fX*M1~??@wpcI|(qfICWYUr%vmvQ8Xvx8p z!CGtQeIJW0^)S&Jz=UNov~JOU>leTC`pswGKR(Z(uPkHSVrm)65n00hnBps|w;LuQ zMmG#+dQI02beNkoyrw@juQJs!S-L4h&Nji!Wd^UsLR39}?RVS`+7yK2mKZJveqBt!XubxI8_5`j>zI@2_t^ z{p$TccfEH=XbEtZd&BePt3Ur|8echY(v=n&0M^&9f4a1HkJs<4jrvw2i5ShSWFRfK zrPiJ4riEfNa#VZ)t4ww?L&e;WvERryiB~=1bRle)`aR-mEVE?fKtpqpL8Zlbb$RuN zKRjioff;$L9hGw_ZfPYML}X-`sc=s*SoevM)y_K2D>Qg&+-EOJy3)p&;$wGT+S%J; zmSFU_8iQjPh~${!VTO=~LUq+F3y9PpEt0^RGYfB;xr!cN65F8-7&1hpLZrDhw?<1^ zk|r6m6_d=tX1?c>FY(P+UtUh9+wBMAmAn~u_ZTBd?^}3VB4VPZ8U}1xf3lt)_AQp> zl7Yn*gK6ld^Q$+1=YNVs8kQJB)YxmGHscQKJpqV*zShGQWVMCWUgggY&~`XaGBj5kb(f`g+cMncQtk zh}vag8X9!OA0BYE*$I@sj&O-+mef;TZ}0!)tM;%7wq9QS?B~DB<^8|?;hU1Bc^+|z z$KQGH2h5wWj_k+-9s;YDTB+|I_?baSvkeO!g zz=p9`w0R;(7qA!c0d7|97|r0cdfxU(w?RSKIoEG!6$wy;jz|{xi9tjr59(q9%nW5H zJS8=A>?hlq4SA6etkpIJD&T87oo$RHk;x=sizq{uaaW4^f;9c%DsAjiRF9ZJ3GC-`Sg=b-$O6Z z4lD^5mU8eoH{`b&=DZ0bBWr4BW_|1KC&Ds_gv<=tM=U3?yo@s~&>?d_jlNl6S=jrS ztUsAD?T|7n6YXv9Mz@#i_40sBLCRnT#t@R{y--Ueb;Qz~Ki@NHkk~+09^Bp%WD5X>C}@WDPCy z-Zywb^>Iv4?#6a^0}NV-CGJ*aD2JjL)wL~F2OWQl7rA9>=X!J35x4fKP z*aw!Ur>FC&WnO0ksN#&QGk8`L?<5FpMT~@d9&vyUq;ZTC&b}Y*#1XA|S5T2OTHb9Dn9Rv$4rWA^U1l`1rfPs#qjQ-hSsr}PSf8Kt z>APQEpKaklZY7Em$mUSFzXX^sk8dyS`{Dw+^yR)zo$% zaC`=temIT*P!8JEVj9-fjmx^8A1;@De+JTgS_tY%;(hR@`>kWgK7v_~r^#Ga9jmnz z%@?y_?tRzyKYai7SHE&@%&T+oP#NPxYU^BRvaP zSv<=!f*Frwl-Bb}(Z_ysrK&Z%YpqjKfJx%VzU%VKIg8-~nA48+T?{B?&ilVy`{t|+ z4-p?Ud1bZpkG(rJx5*^w;!-2f80j!hzH?OJIcH@P*r5mk;jNz4M1DvPRz=|`Oi}xK z_eEkvg;pJh)FFvJK0zDl(lQRKM`nyMjB>}mcN3P=!{?uUK1LTJa+ktN*=3Q|VKQ94 z{_^{8zxy{`f3l3571v7<8b&Hxj%8^l!@xnjDOpR5G&AH2Z5Tnw%=$?8a|DD%770(7 z1b2eIi?D|gGL3>$q@rGxdI0xf>*f6OFMj&?^j)1^Q+ft#=TCd*$rofIVulk~fNSd2 zi0AG4KJ$hgrld&N;tjwS*~gsjW}sD^VcJ{=(lRq6r@TtVEItOG)0;(iUse%DoHCKw zg#gp7olX}c0y#2Rirlj9a~>lHA&nW3XlQ^*okv1Toxi1!l+s+afSQb~8fYJItm%eH zy8CG@=Y%Kx5UazM001BWNklPWZ&xteC$%`G9^JQtmY4r2o{+oa2`7yWc8{npcDv&u#T0z_Xc-y|B zznG8FQ)$LC@G8?AgD@+CL2AY%0Ff^EjH`ioXkS<>^g`6A^GN5KSNrUEXCi!z+OaER zF9d9v=qCFJGcxhW0-L+$BR`;g88gDoY+e_wnG?+n;Pv)A`pfF+>aJmxT?eDvR0R6ok6Ih=P!!duz`IaF&i|K#l_*V{Ehw02s(M8|D$ z5t-#kbB(37)g3|y3p8p#Q?NSm0!slHhcR-7!RB6CFe?k{)L?tWRKFG=p;9Cx6)C7j0uxGHzRk+Ns#kh0_mXCAc7i=X zGIk{#sXUM>l6z~djS+kAZY`^X2ioGrrpcVbjAD@&o9VtVk1ViYvsPrDL9p=GvwP0W z(8#m6ir!iqeK_G((^M^sEz4Pf+qM-fGh#!f%vYXR!TEr`^~5)kU#?a9pw-Q1)|5@T zHd_ok5L8Ypd9flOx89IuZUosPL9U4=G}!_)Qp`|}WxZ_OM?R!%;bxUgogb{<5Qc17 zPjBB`e)#^qK?Xy*sX>nRy6<`7!c4_5R^=Js^7`#h9v{DU?ruY|PhwkzW(k7Rm$sg0 zO_A$jMBN}I`aopPfwOtF95au(7Kx%+rSB5CD3^+5YfF8fNt!Jdh*aL~S)596BO8y9 z!E!4%UzJSskFh9|#WoACbf>qb!;&5;mHl5iH>WT&EN*@5W|pvw_0_}Y|Ir`($A9)` zzbZo?tvSwPxZq2>{NfkCe0jcAu}hkWkz2;@ROIG{=CVdmTw5O!uFJX;aeIDIJS`21 z1yGy1D0AAGY>6EVGRzQnNg}6|>L}F0+-uM6MycG`Fw)zaKSn^NDzhlepu`mH$_;pV zeu}6V*g3_|qODbgFteS$9|Nsn?{I6Gm&^GlhF8xoU(#>oo{5ON*Mp?eD=>mp<0y|T z(218hWFeRdyvK7@A9qT$0cq_0rFPYs`4`L5iR0&y?D%0Bd(R*%agL?L5h*EFZ@q7s zbmMwnEeDyVX0X6G#P7wl$b)2^WGpMG#?;tlZq3)$?Dl+}3yCA7mykj3C)xr z5X@Li<3|&&T1l09eR;KyUBS!4L-Zizo)Q&-q`5`L7}tyimc=>wKs+gVlI_B`)b?rx zvqZlj&3%y)bh9-BhDime9po5&F{3tWlvpgmG2~bzUM_D1-?kU9Gk02OC~~-8&JUkG z{qVJsrH!WXkRL)wYj(T7{OO;*C_yZB2Pz5p_3=tq_VC34A0wRx+CKXB{hu3dY%yML z-b`JIlx&QyBy921d1>dq?PJ>kMRuu8rRfyFL#c>VCT)%cq@0`|gOrhg8q`RbujW0p zj~pSiOJl`6~%*QyLcvsQ5a>f?LAn)}1UDKfX) zUg0ZjZdnMkvmg{7O#=LMj%Ee|#00wwg+ zNKKb^vkw6(%d%$Vx9`7xe)_Jpt22)E{KRyWUOz%dWB^kh!OP_>tle&pOWXfKy5#f~ zM}u0WS6dm!jsuyr$UKx=_nFajQA`tgO|cAC&U9-KN(A}Q1yHR;el&ObsMh9TB-EXP z006C-_F?3*+TM3#H_C{Hm9#`0%E%eqG;tQJu!%|Hp}EpVYTG){ssG>M&xa5CF};pJ z!bZBAyEmhya=TrtawZ3AbJ zzPdgCurN*06a+@cvb_HMlP_K#zgze+f0V`p$XFr8?rW3uaCs>Ath*QAi7i$aw40(( zRpcqLnyt6($!v^%b(axJWMoK2FM(ksGCd;ub}K(r?^#3>#2ob)30Nv|gp$tjpVPe* z%1v0@AJ+Ah*hjpG0mHJa!SNw(@6h*|nkK_*cKs1Z$$cFog#9QS^CA+k9^`=W( zNTXZ1Uwt7k=)HNWbf1yg;kINBH!CC9(g%O`TVJI5_2qk^u#_Jd`u8Mv_fpslOezpWmI&uU?*?FXuJJUYudwg_;I0Ep=@t=qeLGl!3*U>fUW8#VbZ- z-Oh1y{hr(?6MmG6@X;8i>|GS+t64Lhbh;FMgtd~Br`rPA7{L`|2ym&HwFITwd00sb zOfY!)J7TWDlOI)*by}NMMCFIm|HGfntgZWqw{PCAZFzirJfGIJRkxo~2a=W`CZ?mT zY2xjw%-!3d1t0|?n8PI&jG%i_64Sz%b~R?hd7!+UX$-Dh?f>ZLP$IyB>n*Zke|QvPr)-cxsOW%}g746hr{`k{hUe0eNw_Wg; z$c*8&NEvzBdKXD$WL(0pDlicfLC|NmJFKb`r2yeAf`Dg&(Fg%IMk>)nGSx?2v@T*} z;1^&1{r7L*k>}dJ)P&1~%oHRdtQ9{2H+T0V;K7H->-BPJe#x;di&a9O$_Xx)hliU5 z7?0CxU-1_ZW(XxjlbIf77LJU3{rYt##^|T}k$xt+QV?90SLX{e?}mrA3u0KCk916e zIr=srD!MvsINS#jGf*gto54AiEi7}+4JnB+hI>xAkY5$)BhH$VINAAkM(ztZNS zDIy~>HK*ZHP;xTks(SKBN(jk{4X!%fDGKOUz2N5;k5`)M!DX2( z0`1-b#GF4tSq3yv4#2b`8JXMIGDEnSHTO!GiK+k2EVk>!Q3awvpm6ZT0d&luo_8L6 zGO2^2!^3;uw%&xyAOmzn7X}L;$DMpNR}LVXnu~d$SBI2=OgTPc&FrdSsFqD=BB{(h z78B;gPg0#_=AS4seY>1Zx+aS@L8 zfn$;nXJ6Jgt-W@nYD9Lz#%8`fiuC85S3t^=8l*tY9K#-_+QfSBRoIj?5SKO~ZQ z5*X>k0^DUJ*;9a6TT`S0R)`%So81uWcD;x`Vls4!4!qmWKoy-!717>D#kCQ6ZzFv; z)}G7bMMM?_I4*{sIVP@oIs`$P(alMwr;0^{sro3J8w2kMXO=UzjiKP_lTW|=!w=ty zzN_Dl4;PXSkBD>?qqOb_G^@HhIxrAP=$=bF9kV4#jHW{l`4r8-7+05z#;a@V(OMu-R%szRF-b8-VyXl9J) zITp#28GY+YffzvsWBA1uQGt*CjOG4pkyv&BnLfbh_1;7AE%sAI^{4^`SLLwF$ZJ zRpoiH%>Di^RY@YG3@^2mBfR1ziXuurCty!F_~GT*W6^e?%PxDI=GfR1T6PBf9>B~Z zGX!0jpa~5#ST1u`8Hv#SBd~lcfql69vi*2o@Biqpd0ZpOj6QPoWzmSv9GQbTM7@-q zGpc6KngJ5xY5{sgxK~SlpbTU$ylT%lFM~$v?(eE(5P<{@RG+|GR_}FeD9mown|ow> z^kuOrj-(`Dt5L*($MdBihzTzvbTCD=n8|(kX}#OFadY$Pdbt1*b<#)n-b)=+Fp6r{ zd7O@Ql|ruD*<_P+1LzUOcA;Dq%3TwPe1$ohqvE`|Dl+JqsL;c^2sw(Z85tU zDc6ffjeKGVdLosI!$l8ami;F)VQt~We@zHL8Nf#7y59B?K8BhHE;GM@f}A_$LKTo} z%IeWb*y0n`NJwb`D49_4{To9*XVR;seXQ-q78yP=MugK#?@^~kkW`sCkv*zrfVIR5 zaMaVn=O@}nje;40AhT1+&TTu3BG{!t1kmtwqY@oR;f>J8@WwlhyTla{DukK_BV|BC zHN(By6X6RP=p4-#|7zFS$Xq}j;GtEmWfG|>tI)zV+(^z=2^O(q&Gx6W$IIu}9D&!3 zxM$VF5XLY`V@V8lv^6OV34CGCnSCxdpLu@3Jz%*@EBuYj1(?+x37B-&^Z^L zGI#8Ju~Xgk#V;6s`#3%)IClKCGJA;TYqY70;5J+bZataM0bpS|05@2wqr<#j+2_G|#AD$3I zZL4#KR7jK%x7EGPkQ&z~lZ|Xi@${r(@6EZF;i4yLYeuh9eHTXx$!%OmI@Pj({7CLw z8Er*A<<|Y~?)B;B)(0r-wq2-2r;y$&*lu53l~v)#{hR`%^izu_vDo5WAQo_E@g^;c z`5_a3F^%h@&kleYM<*y$fGkiAkokt_>BuPAt7p21^)1C1cqnxSN3}Sm$Vb4hqFRY03j;JcQ$PxGz7{gNJ%liQ5lTOmBiqSFd0Xj8t0s4ZJXHZV%cVH5Kv z#pFf>+b1?#0Ci%7c4QB3mN&vHC53lj5dC)fQ1agWJqhDH?q^Z4ZJQ9Stw+LTRn_>!vI(Esk_e@X0-Qq)Lj-U_7QyHq*|T zL+(~UAY|rp7PXM2clN2rrywY#^rTL1XE`TF$yhwbcD|5dYNPk3(=BCL)^p!75#B?K zi&2SV!P+XrGSK^Ycz+&)=kp^go2U@wIYcC?Ws2Opx2e8xKkDxq#lZwyAH0J>tNC6kV6}Eo^4EUnCj^L=5$ZtR*L*&rub|% z3v4w!TvP!>jM@=MB6D2F@SBF^!_R;H&p!J37k~cm{_S}C-R8lLJ>FJ`M9ML81>oVx z?0xic6-6Ic(awy9B}YIYrpR&K9w_$1!&mF6T&P+0(yfnzKClArshO_U*7a6IBq}Dy zW9$=Jkpgr|nFa#~tx_n%yQ7PVinXHWg4i^8|rfN`tB6h^Y7=j zv%=|n9!>+kKtas0xv1T}`sCdGd_8N;ToWW4C86CBnS=+X;<=)$>I_3x?KprSAzVU? zK17uek0ex>!XTXj)nNo=g9V5YIa4NkQb<)si`cdS*{*&$Wp)#2sx(Uw0TH4(n(C&1 zH1JvwY(v$Bwl1g0Epvn`WstEq&NIPek9fZ`k|=Uop|g*tRQK><8aRL^x&zcviF?_xe-F{lsI{B{jQ~^8VGoB)yculSc(l z1Qi4{8=(>GV?>M@Wrt%4280~pbUuB*HC2D!g-k5T(*gi<;W-I(N~IuCOmpnP#4HCm z_XRm1IWsK*XiKlTKN()eqL`mJgh{|%WAs~CFrkr}w$oZcHp&`dC6P}L*;SJQm^DB% zC2)eQ^(-FVt?3NdV>&8*TnQ@KBmh^nNI_~sj0(7q4KY-Z?&Ovjv+)X8;V9fQCX8$k zFcqZE{RD*VBn8i^5K~0W5@rW5XIIl{Ju3sz`pz>V(rY;&!j$kPZ@-my-~VrG@92+B zBDyNf<1#0_PZFR>S*Zyjh~bQZ(yWtBl1QJ%3?6lcMv7Qk_Qh?;rx$#nKBPU;({S6g z++Hc-WE$xn>#~xb9Ec(tbHDo%#H>z5D}|`pYO;WeU~&xHI9`AD^IyDL*1!Irf5Gi< zPWoQL-CIsxd6Jf5$%Llpt?3CF$nNf@()-nis{*;qSVw}CF@~u4@TKB%B9REtheHXX z&~IiYz_wks?LqR&+=P)4r7Qy|dP2^muw+o6Vnw`HYk{m71QD|~lUo^GWr!su#T05_ zPysjyNy$(o)|2Yu=j}0Iq%PKCwxMdeLYOEzQ&KsP8564B+`W;!gunCt0PjSoLR3l| z9l0hX;3kj|!2+A|zq!Mngy=a=m&4a8K?yOGJw_DBLCMJUOl^~*CR{B|t*fYH6O8QL zHzJ^N4G%@jRiR+;F0S#KNwZ7)4DGWR4|aMGNrv`|2d+RysH%%(3<+1#b5C0ZWT=kE zciJwGyhi)<<6r&DFMj!F|MfTjG2*WqMu3?r+NhFo73qjUDZaYYR#3%c3UfdX<{+Fb z`hwI@9{IwX_Iy7vFhHdXLlumOll|;^`6TQcnW$3=H6v8iR3mn=FhUrCYr+$rPiZPy z1qGjx!4Lh2T5Ty~t^jKuwNGyM`zomphEfsq@M1Rsr6@>Afv+N#ksenvMfR4Q=zS=`&1b@ zC}@plPyr28CL!aU=6l5@#szRls0uWOJHVc=9p*SM33g#FZXHsddJmS+Ln092WSEv+ zZcts#ZGl*bLR*!9rm}iO5=|O#-{d2cvv4pe3_8X&a(J`Ia3l<&m8c22E+XQO=e~UT zD_K9u|MgeBhqRrt9ZXY<@+76^*533)8AATdO`ddm9C@v)P?&b zVHe{(3H?ct$xWsRCvu=7Ch){)$DU6;;fQ=DTf)v2XZkdJW%WPRjYgyw@-ug6^XOS( zeo#c4K$)cU+Lj?QrIh*07|}qb&9{fhMDGJrSdEB5)mp6p@C+YbYw`R0yG!=~-@Lis zHhK5(h>4Jxf(qGJLq){yBS1qCfso9A>MW*iFU`H|y@E}MJ#Z96M! z)$KC9--4+ZI9hy(cp@%kWZBI#rn!7(upzBAS?+v{W)--&d3uGa7IN~*y*U3M9`owU z3=u`r!#N|Io+MvY1|@;ikt1|@zpdBh6aD;8_}~A0!#AgP-L4(Bfzf0!lk{mCluBgl zgA_BS4^fHkMVYDVi2#Bkl2N+uVZxkA#c$7jEbSKYo;U-}LVO%NbShv(Wcu(xY{6ct z%82TvT1JLIa=PPujHsEOhEU>Z%vmvaUJngs3gJw^i;S-d5sA`NdV0cr%w}6k%>a~Y z3rNY~eO*sb**4dz>I9-e1x1}qve_bHk(aUk%u+Rwiw#2gk_t_0>Q8C;#Hl{`tSE zGujkpvaDC`_1L6|8UFSt4BUX|3&W|Glv8_ zbm>J$yo(>6XHPu+CqGf&KRtPw(-K3WH0c@Vfxq{s|3FW#BA;HX9+43{Hz}XJ`iuAS z{A|d>yfc#)eu`Xp@g|@Bh{>XgNh8>!Vvkpjh~ZwY=4U5i{%F0t9}kr#FXd61sSF4I zXs+#^xxnOzXMFzl`1Ea-54CRhsN~u>M0I0$c(pvD(o~FM@|2Y%NJYSw`*37RmWgf$ zu(%KRKCKWw!iW2a=#dV%`!%zZPIi$&>F?fu|M2+3G`LPw*%N6U%m{$+5vHxKAKw|p z`2+wzYKR1~_pL6uNi(j%sf?JPc(_M;e|Y%za`_>$%RUpD3Dd{J_dqtq0TGJl*9@Pw zF-%`R{_y8_uRhu~B+V1`EGulzPr*(5o@ST)k|5mO!y}_eCD?JwJU`$ejmylQ88ros=wnU0};`;e$MPHOrK0Ks%iH%s){PjL`_t1TJ_s+zZ%=)>84c}cIDCop$cnMqbNn8LRE+Y^uU;zQ6#CX zTP7u9IW705H#KY!A@xW(;h}4Kdb(kDjjC$axaYFu6E-mqVvR@LU!!hrcdv-mL;w;o zx6X!C?s;3b2s3lzfBWt4PIuQ@b-IIP? zoj@klQjhsH`g~B%G;lfkfa;;E{>|8B#dV&0$xUT9I|-l}l96K!sQG%EuRl3` z^2Iq$*ktQitVP-O6FxkrucAlaj#1_3RcbD_~ z)mG5TXFdfI2ui9#@uU}=b|NX5$<7*xUHp>@wA0OfULS_@i6X-%ox+cwfP}k4MMSM> zPx#24YJ`L;(K){{a7>y{D4^03ZNKL_t(|+O@lBtZi#{p7o5co6TBlH|Lyv+S}Fb z%PyC11tfy`1AhoeL4^>4C=!IoD1a3yfF*>CKs1RZAP5{{SvWSPj4%lau}uO_B-@c3 zWP>8baV1c$x+z!HZO_^5YG?N~gCBFBTjfTGa?FyZw6xY)>|LBjpJS|JoEFnGtx}rq#%VkohVEfM^bc~*51n-nLI@A6HFs6@ zB&ED4rFap+Iv2fj2NAQ$rCi2T&Qsy3vHskLa2}jJH^y9waBYlithIYe4h#@y)URyZ_c7`?lnfZ|9GH{D1h%q<$~sG@8TV;P(5SKkWBS-|ZLEIGn^d-5H1R ztRMRODNYY^iD#(ZMdZ}`a8iYEY@J)FmNv#%rIef&#Tc8s_oKD8Q`qHPHo54Hin%c& zmqyHmh@4w17si@PYu&Z?VN+Gjp=sK_Z5PvGu}pPUm#{b~|K`8(Fa6#s;Nhdk{K+5u zPbH-+<22cE=)-QmZ#J9FYPZ|oIqY{2hQ50=jl<(SfzDP209r z6{=v23Atn!V>CG>lT$&EVvNbw*<_5FRGCsr{VS@!o z&zfd=xoDR+%jIgfSS-7yZKt}bvk$)5YN6lvy?^K*Tmk>>PyIzC_A*V$^uy@;eyI1m z-DN+)rZ4C}_4ZrqCU_#dfzl-EDV| zZr1CUciYXYeRp`Zl=4ETn)}Pu@yYS=$>L~rTpz8L?r60zi$z0Kd9lt?R3&GnD2Nyg z22{zppd}+xuokQl%_(cw^}5~c%6hv^H=E6Lvsrh$-F7!kJNwAHs^e4jQc2r z>Kk?4{>Eal{MusKe$X`aWmSir3vRI1W^7aboj?As{eM@$k9^^Ori^>(`pyl*q2BE_ z$9=bdwB2rB+uYoIdbiuX9jEk4+b$kFc<|`>r59hWA3u7*-?{t1ES4vDSBW6xT*!H3 z7+-Np}|-~A%RAUPC&#vN82>ib&GWlfSigB{ixgRrd-`z=8LO~ z>E`D8u;1^mwN{?-qE z;(z+<7@cGoM>mX9wcYGaHkx81DY$tk^ce0==m{)U zj75y0@?MrzBdg`oERR-pxmvlpZ3585DYkvzwbL}zF-|V!ShSP~l8kZLI$wfy`uTtH zU)KNiXa3@ElGpuK1$c`bvf5GzT{j%<_ua$G%gtNYmsg+L@7CXKjJ$IH{)0QOz4lu3 z_8V`xCy!s0jl0Y6@7v6(K9+Qb@U=Mac!c zQ=Er_;;dq9!5DDXvRo`B)U{bGm!Yj&D;U=gLs+k`E9o>0V`EcF0#>Z82vv)!3?|3) zV?Xt?O;LQ`PphFHAKl#S-oCzCf9~db|BfK9J$m%;&RcJN zy86!V_zwH{;bUo=6@nvWOUi~=EJ-|=3bhsmimk|aQW1uvKt^0fT)|}_mqIRzB3N;h z;)uyGO*%)Zw-_Lo3}g^+&dKTORBBg=s+ex<&33;woAr(D``+Y&7*mN43#uw=U1d!v ztDQy#^tXk;fA^RF8gb|(rsQ|K{c^Y4KRQ3ZeEa}0?Hx@@(-jF24Kvdi$CW&D|$2zgoZjneR3)ed=`<%Z8j1MGAS&;iRI(QYa{jl2EcLVjRWS z;A>oHXi8Bv25g134XDEy(W-Vdi;AkULP>}!szMe^N{JK`C1;E&bEu?(vw3!7XE;7O zk=I^*Q#P9}tZ(|&M<0A7H`i;dt&?+AUxjKPLeW6e0lI>vba z;_B+n^JnLuJ%4ubMnB|x_a41cf9j1l&C4&p%yM;%ia|}Lm_(9^BubX&3Mdo{h#YDX!p> zV1wiI^o&ov`j)x4*!iog!*aXXV$3E6-y9Z;)q1&DZl@gkqIoJ>%1{0DU%OR6N-~X; z&$%3Lw!2raFR#Aq^5W|4&CTY1v$|6~e&LCE@#PmdK3Sm(35U9hOe8BLg`5qALR3K! z#2TElYMjNIhIDjH>U)X;VsQ0>P_OXS0^>cdayTbwn&1{AS|gAXqD4%J5s60M6RF!F%=(~|v${Yfr!8c1>-C{#UQHUv_D%eor zLWNj|7=sui^Y@vUp{OAj$OQ_PA`Zk6LQPU(vmfOA{Mu|c2d9V+l`qY*-Y-|}bybB; zQ-{GBEzU`iLpQj-AC8}1T)y`7ql@pjzTCdL+w`kYH|GBRGw$C%W6`ussgN{-WW*HI zSQ3t?hAC$y}HU1Dvu48f?%9SvBa3^`yQ8>AKC?K5n?ptG?AtOYYk!zq8_mh zDvOBK5{pbkQU;S1XN8QV*gz=(i9!`D$4AH9fB1mYduQhA{3dMH`_rrI^{0+5m(Na5 zkKaF9wI5G0?yPgkWvukE_6v zGnym7Y;`pZsZdna21lp@z7B-ip};sKy2HSJe_+4gbJ%Z@{y;Yl^kYw5FA#*13#bz6 znp~i2giu#l=jVzYlB$p7WF(h@h{f74D?lucdU+&IKFd=ZEDl4udC~;_1WsE zdE@wG^^MazM_&s~b5S+z=%$o#KC~C>!%G)e+t)X{@yWi|AoY>d$7j^56U2J@aYAFk zHiESt5$$IltMwyxR}2?D}*XamKBV2uG*5dPy#@ z?|QP%n+wM78uAE6 zu)$+pg*BewTB>G2)h=n4ryQpV6+>2V&SR^VMO`6Upjf3Knj>jCF!mj3>@a1-J7%om zJ*En%b&SL4*X#Z1(e>t)i>sSg9-Q6z($xEFcf7Ffqi5F-Zr0luyD>fP5`oa-+7+Q* zU~C|!LO%?|0!#%vDAfejQV2~;s4J?t`Hx z&omw`&}oZmLX5@OfVF`TT0*^$(5z@yXY@m_V@w>6lPr%))!{HayuQ4C;jlYeA+m^tBe7c5a}5XRhl$;G$L0AoSC?yc>ovRW zj>9n0j|1Id%e1{9_m^lM5Cm&H)g*id1r70v1)-M*vidWJEg*0DHRVST`QOVNp8 z>~y=ilI`^cW4A#{#2LjqL*Ea?tl&H}3lPtkvpsb2bhq6-UaxN+KRP>Jxvr0=SDWt1 zH038Jt9hh0zC55$bRs*!fN!c`U@EJN3^ z*=|{HwtCoilBS51h>?OdLN_Lo8VEJgtWY94_2$sUX6S}T*X!-0qH@ozcZbKjE{aU9=OfT=GCE_9`?g@lu{81fDtf| zP{yJR8L}0U3aKb1Wt2i0Cw7M(x!$rp^u%#wyV`UY&zSUQHOP_iNhhGd8Y z#J9L=Bp0EiM9j$y*_`f2eX!}`6Swb&x2A4<)a{3+#Efy7k|U`k#x!vlM|NXmVLf6! zg1P1K0PBcZS#NfX(@3}96UR}U53G()v^hFLF{Hkyn+7=?w)BUMj@=#^CnS|mT5~~= z`Mn?sD5|zFCK%O{OfAU-k{HbtPL7TU#-V0zy(5;013Pgtm1 zdW|)P(>wRDE{HK+`zf;BcXG2?v)i0A?k-9F7MUibly9M9X7WSyIbTskrKqMgQJoZN zDXxXkV12+DOWU-l5o}dcEmkVt3tCWB$~e(x$B`P0b#yyNZ-lWE4r*;wcV|fDQ!a^r zNv%Ik#ySZBTQ~Ts!g&v3h(#GwVaf$pz+_E}TzyR1UZTSuO%XxANzKgc0RreJ9~Q_1TCVA&ruYR?E%BkIs%k=L zXxkQF1wvgj44uXprKE)TiEIPn0@gXi2$`9B8%va2z)abek)7Prpuo^>s>jiR1yKAad*UGHbwm zi{z@mMGczK*pUxwVz(j15n~K(U9()a6fI0~#Povd4AI3J9F7n?RTT(TMW`BFXoxX_ zm?o!u>ayAezP7$yQB^g|)hzsKxu9)p>bjx|fhq*Nb?Tg>t^#%CsJ+EGgR=r!h{J)y z^(FnyQ+B}tnbhq_o2Qh+GbHaZHqY&?m`}3)oB(gle=C3%h1>V2qLNS&&Iol~vskp$ zb-)^>q(mt*Wfs$MMy z?P5U{JXRF)M2S6`Mudbl^V|`cQ>%gL|S+*@l%Z8I>ps5Yc7*?(4c-3;UYA6d2vEWn0h=2=-4H)Aw28>vY z@rXFM^?>L2=eYue+44nabXl}eY>lq&(%w1c^mxVbvS!&>f(1>M)ObW|n)(w4iK5Cd zjO@Le6_JIZ&yvG3l%!ct;&PO%C zyz@7RLvanpVvNPuZ-#^OZjNyj)eM@jnsA!%7;uKuWy8aJcUV7sfb1WUY=;{woG4g- z>jf4g<`e56GAlsLj4t(g7<|(Mv?NqB1w-~naQc|l{rlX#bHwSY=BV`q3*Lhd!WaWZ z!N{!al;JQ;RMi}A)0DZ{4}@`0>*$R$Ygf7O%vtAs2q(7k##e!=4!5OaW@?c_N)uyW z=(NxpAq9&GmexB?S2Yjr9&_{HK6(341`fC(;7BUgf(;_Z-CEzM+y=fpPlC^@z;jH@ zoC7FH(M%C9rMZLLdCcnE;qxVpNnna}6<%*iOvEKA8ops2MFybywr)pPe`$=SWT zOq&Pn%K_6_Tp4D!w*fI8G4_+V7b7$4e;faD3ySo%5~!9L1gWB~Mi&nVXOB5KJLBwl z!K!vR^E^Z%stGHCx0cEof^oMLyfWrM(>p@ra8;nHtK@UMab|koHNpM;rVjU)nUuV> zF3b?udXF);qr;*Y1Kt@zaQNWFd85_}&O#G}lU2pp-4lk*Lu~9RLDc3wRtm;AHO9-V zfNxqJnX$jfH@6kabA+gKHd1kDSgAdEBu5V(arW>o_fD6rnt%~yObIO+G~FT!i;;Pv ztOy>N>%X-#IP!+3a;Z-CvU2)Ww`}~obyL08VuwSf;+9`8Wlka~3*H!cm(H zxoaTqF*#x>m|N&OTi@{9^s@qH)K?T#WUdmvMcTVmCyzO~|ConoC!C!$EGkPXic%P( zFd0L(7R8_<6lUr!X=coYF_n3sQ|9}7D_igEQ}6hiTP?$fmF20Faw#dl)b)`rSQ-a8 z%q7c(fC~;3#xYT1Mq?5yqCQxRovpBF1NY93rLGO#s@8se#B|u8;~tZGF&Z&i)QEx@ z%IyOS3X%b(Afm>Dt<^TiRL2iFx&M%}`*-B*xZ$X_Y7I z6Cpc`6Jbh4rj*ntgLj7G*3mXg#-obE(L%PXW8H7I4Ev3wehbq9lLxHMFu7nTJg*2k zCqd&Vu0g{}s^zI3-@VV-y;He=(s0yRyn#|?4-eL`@Loj0+j(Sm>-dbC>2hK}jI4JP zm+OJ+-N4k3eTeZxC;3Ao_S!9c**`vQ-}_(_-y1U5`(htP^(3iLQ=wRL%#5NGBLriy zB4kyHDk&GyoYl|C1?vo@4fJirZrO5kv|_zJV!zoCyA6zcq>M;OSk+tDdJBq-M_din z0&SMGt7DE%k2qO1ENg=|phbzPkdi_{D(mpIWvPXj3u7+yIWZx}pfaM?8jif>sP?pVpss4YsTvNumZ{%U;((NdXhB787oh^q)>z-Dt7}YC(Jm{F zS2ay#)rwGxl4B;tJP$?HU=S*2@ODnBF&8$IB@V*IL=uKW61t&~#x#W~zwaddhWEn< z%S9F4W#9ASz53b1tHoC~UHOWNzHv}F8H>_K=tm(~gYjUj%&F{lbL%;RRU?v&XjH}L za{E9+WerXO!B}c<+17zWzhH_pLn{D=c{pMm-qlpj&j2hysDwHQR+N(G-XNu0W_n&g zxFv8E?}XY4VDQe81U6&FxI{5CQye630_Cf%)uZEJkN+K@C#Kq;vn-5Pu=r-#w_By?_FZy^p<-2AE~7+58n;{@bmazSP=j8;mevaSu)_%8>Yt{lur= zSbp&F*#E8TuDo)X^8Nk9r@9EsY$#&UTO_BLd3j0PJTTRQh!8cCqLMRcF4B6d(s=A` zzDQYTbeS?%KUOU0sIdsac0%CyyWgFqy0Y17O*U*ewv}L zQ07=PP!cdH(=_Am5DW=n(t<5uP-2ED7MZ4kvyg5(pW9YQklEX<%njJwFwfngsLs(K z^S$kD3C{Cv*{gD+a2es|5b3wOuI#t(+F}1U!npgJVc2}F)NL%KM{M}*yTbqEKmHH% z-~5H2C&tV=*N6Lej=wyvV{M5|pRkI1b4awi(c3V;QWgc1qp}Dq2|P zVppk96`d!$IUA;I7-Au(jA1TIAs9knrqrxq%CnM&Q7J0;%2L-t2w;rzd?c#RS)p6u zi_F6J6b1?dv(-Blwnezfa1jgV>w(K>o89*5)mQrSi(e?~>z~u@2ftRE2I#-T99+2w;OQ42{0DKjQ6w_319h$z!7U)TYMtZd6I z$SKSV8wL8D*z6B%uh-YxXIEe9&#!)Q+FbpD-hA};!uGu@vwFm^{R%(w!++u1KQ#5D z|I06NGbp}2ll88gYj>e}zq#nPLIkEc-FP)EE0s zm;FC77W+;vye=wttT9zp1z9W_j#f3tOUJ5)%4Vz~C&jzkXNx>%XOk>tE5$)4wym|M%Xr55DUV z$C2UUL%#51KlBfNaPr^(!Y|>7Xvx$jgzFsc9g=ygi~7zumCvOtZ>hK!U1(40wyoMl zW0s4GwibdYP76|I7R*@iUT7+ZcTfe3SfR*FSt-xA%t6VhC_@(3Tf_Br=CJ8BPlrv( zhxhY%{dY@u@vDCS;s2S2{g*cv=a*-XUnmSaKKS^GpZUU{{k=On`=9*8U&m4Aj>Wd- zFiwkYA0O{0-t4pg&WwNC`S7Z*>Ln}8UmW}E|9i3i^$$*)x=ZaHrc|h# zhCllse*f?N+2KF^h5rp?UX+R{v+p{0h<-H`|0t>X6gIpjzJ3MQyl7ng*w}E-h&w_| zqly=Uv))+mt?|}~L2-8G9kap|Gg(#Vxn?dUO=Br(T}nEihVH{|zkP4q-h5sAn|DLp zzFQ5KAFOxpZ_i%*wEC&Tl|-pl{O}L{!2dsor=P$6t<807*qoM6N<$g6L!j0ssI2 literal 0 HcmV?d00001 From 5fc30e7fb99ce3dedce0610a8e96a86c7aa0cbad Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sun, 4 Apr 2021 01:54:16 +0200 Subject: [PATCH 003/139] integrate better --- gradle.properties | 2 +- .../rptools/maptool/box2d/NativeRenderer.java | 3 +- .../maptool/box2d/NativeRenderingCanvas.java | 25 +---- .../net/rptools/maptool/box2d/Viewport.java | 99 ------------------- .../rptools/maptool/client/AppActions.java | 2 +- .../maptool/client/ui/MapToolFrame.java | 26 +++-- .../maptool/client/ui/zone/ZoneRenderer.java | 13 +++ 7 files changed, 36 insertions(+), 134 deletions(-) delete mode 100644 src/main/java/net/rptools/maptool/box2d/Viewport.java diff --git a/gradle.properties b/gradle.properties index 5ad1acdd6c..19438d6ea9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ description=Virtual Tabletop for playing roleplaying games with remote players o # Versioning is controlled via git tag for that commit. For developing you can pass a -version=2.1 -vendor=Nerps if needed tagVersion=0.0.0 -defaultVersion=0.0.1 +defaultVersion=1.8.4 # Change executable by attaching developerRelease to App name to make it an unique install developerRelease=-Dev-Release diff --git a/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java b/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java index 8daa5a78f9..d636966311 100644 --- a/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java +++ b/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java @@ -1,6 +1,5 @@ package net.rptools.maptool.box2d; - import com.badlogic.gdx.Gdx; import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.backends.lwjgl.LwjglApplication; @@ -80,6 +79,8 @@ public void init() { checkSizeChange(); app = new LwjglApplication(box, config, canvas); + Gdx.graphics.setContinuousRendering(false); + Gdx.graphics.requestRendering(); } public void dispose() { diff --git a/src/main/java/net/rptools/maptool/box2d/NativeRenderingCanvas.java b/src/main/java/net/rptools/maptool/box2d/NativeRenderingCanvas.java index 4b2fb6d3a4..e62eb279e2 100644 --- a/src/main/java/net/rptools/maptool/box2d/NativeRenderingCanvas.java +++ b/src/main/java/net/rptools/maptool/box2d/NativeRenderingCanvas.java @@ -50,12 +50,8 @@ public class NativeRenderingCanvas { private final ChangeListener resizeListener; private ByteBuffer oldRawByteBuffer; - private ByteBuffer newRawByteBuffer; private PixelBuffer pixelBuffer; - private final Viewport emptyViewport = new Viewport(); - private Viewport nrViewport = emptyViewport; - private int width; private int height; @@ -77,6 +73,7 @@ public NativeRenderingCanvas(Canvas dummyCanvas) { imageView.fitHeightProperty().bind(canvasPane.heightProperty()); imageView.setPreserveRatio(true); imageView.setPickOnBounds(true); + imageView.setMouseTransparent(true); canvasPane.getChildren().add(imageView); @@ -87,7 +84,7 @@ public NativeRenderingCanvas(Canvas dummyCanvas) { if(width <= 0 || height <= 0) return;; - render(nrViewport.withSize(width, height)); + nativeRenderer.createCanvas(width, height); }; @@ -157,7 +154,6 @@ public void init() { * before the NativeRenderingCanvas instance can be used again. */ public void dispose() { - nrViewport = emptyViewport; canvasPane.boundsInLocalProperty().removeListener(resizeListener); @@ -185,23 +181,6 @@ public Node getRoot() { return canvasPane; } - private void render(Viewport viewport) { - if (viewport.isEmpty() || viewport.getWidth() <= 0 || viewport.getHeight() <= 0) - return; - - renderAction(viewport, nrViewport); - } - - // Can be called on any thread. - private void renderAction(Viewport newViewport, Viewport oldViewport) { - if (newViewport != oldViewport) { - if (newViewport.getWidth() != oldViewport.getWidth() || newViewport.getHeight() != oldViewport.getHeight()) { - nativeRenderer.createCanvas(newViewport.getWidth(), newViewport.getHeight()); - } - } - //nativeRenderer.moveTo(newViewport.getMinX(), newViewport.getMinY()); - } - // Must be called on JavaFX application thread. public void renderUpdate(ByteBuffer renderBuffer, int bufferIndex, int width, int height) { assert Platform.isFxApplicationThread() : "Not called on JavaFX application thread."; diff --git a/src/main/java/net/rptools/maptool/box2d/Viewport.java b/src/main/java/net/rptools/maptool/box2d/Viewport.java deleted file mode 100644 index c6d5b5592a..0000000000 --- a/src/main/java/net/rptools/maptool/box2d/Viewport.java +++ /dev/null @@ -1,99 +0,0 @@ -package net.rptools.maptool.box2d; - -import java.util.Objects; - -/** - * Immutable viewport class. - * - * @author Michael Paus - */ -public class Viewport { - - private final int minX; - private final int minY; - private final int width; - private final int height; - - public Viewport() { - this(0, 0, -1, -1); - } - - public Viewport(int minX, int minY, int width, int height) { - this.minX = minX; - this.minY = minY; - this.width = width; - this.height = height; - } - - public Viewport withLocation(int minX, int minY) { - return new Viewport(minX, minY, width, height); - } - - public Viewport withDeltaLocation(int deltaX, int deltaY) { - return new Viewport(minX + deltaX, minY + deltaY, width, height); - } - - public Viewport withSize(int width, int height) { - return new Viewport(minX, minY, width, height); - } - - // Increment or decrement the view size in steps of view_incr. - public Viewport withSizeIncrement(int width, int height, int sizeIncrement) { - if (width > 0 && height > 0 && sizeIncrement > 0) { - int newNrViewWidth = (width % sizeIncrement > 0) ? (width / sizeIncrement + 1) * sizeIncrement : (width / sizeIncrement) * sizeIncrement; - int newNrViewHeight = (height % sizeIncrement > 0) ? (height / sizeIncrement + 1) * sizeIncrement : (height / sizeIncrement) * sizeIncrement; - - if (newNrViewWidth != this.width || newNrViewHeight != this.height) { - return this.withSize(newNrViewWidth, newNrViewHeight); - } - } - return this; - } - - public Viewport withDeltaSize(int deltaWidth, int deltaHeight) { - return new Viewport(minX, minY, width + deltaWidth, height + deltaHeight); - } - - public int getMinX() { - return minX; - } - - public int getMinY() { - return minY; - } - - public int getWidth() { - return width; - } - - public int getHeight() { - return height; - } - - public boolean isEmpty() { - return width < 0 || height < 0; - } - - @Override - public int hashCode() { - return Objects.hash(height, minX, minY, width); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - Viewport other = (Viewport) obj; - return height == other.height && minX == other.minX && minY == other.minY && width == other.width; - } - - @Override - public String toString() { - return "Viewport [minX=" + minX + ", minY=" + minY + ", width=" + width + ", height=" + height + "]"; - } - -} \ No newline at end of file diff --git a/src/main/java/net/rptools/maptool/client/AppActions.java b/src/main/java/net/rptools/maptool/client/AppActions.java index 243755e017..68e4dce88d 100644 --- a/src/main/java/net/rptools/maptool/client/AppActions.java +++ b/src/main/java/net/rptools/maptool/client/AppActions.java @@ -2008,7 +2008,7 @@ protected void executeAction() { public static final DefaultClientAction SHOW_BOX2D_TEST = new DefaultClientAction() { { - init("Show/Hide jfx"); + init("Show jfx"); //init("Show Box2D Test"); } diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index 760cf229d9..418f71e6e5 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -51,6 +51,8 @@ import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.layout.StackPane; +import javafx.scene.web.WebEngine; +import javafx.scene.web.WebView; import net.rptools.lib.AppEvent; import net.rptools.lib.AppEventListener; import net.rptools.lib.FileUtil; @@ -426,7 +428,7 @@ public MapToolFrame(JMenuBar menuBar) { // zoneMiniMapPanel.setSize(100, 100); zoneRendererPanel = new JPanel(new PositionalLayout(5)); - zoneRendererPanel.setBackground(Color.black); + //zoneRendererPanel.setBackground(Color.black); // zoneRendererPanel.add(zoneMiniMapPanel, PositionalLayout.Position.SE); // zoneRendererPanel.add(getChatTypingLabel(), PositionalLayout.Position.NW); zoneRendererPanel.add(getChatTypingPanel(), PositionalLayout.Position.NW); @@ -489,15 +491,16 @@ public MapToolFrame(JMenuBar menuBar) { Platform.runLater(()->{ var root = new StackPane(); + var panel = new JPanel(); var dummyCanvas = new Canvas(); panel.add(dummyCanvas); final SwingNode swingNode = new SwingNode(); swingNode.setVisible(false); - SwingUtilities.invokeLater(() -> { + // SwingUtilities.invokeLater(() -> { swingNode.setContent(panel); - }); + // }); var canvas = new NativeRenderingCanvas(dummyCanvas); @@ -506,21 +509,26 @@ public MapToolFrame(JMenuBar menuBar) { label.setMouseTransparent(true); label.setStyle("-fx-font-size: 64pt; -fx-font-family: Arial; -fx-font-weight: bold; -fx-text-fill: white; -fx-opacity: 0.8;"); +/* + WebView browser = new WebView(); + WebEngine webEngine = browser.getEngine(); + webEngine.load("https://www.youtube.com/embed/18pRUdKNlGw?rel=0&autoplay=1"); + root.getChildren().add(browser); - - root.getChildren().addAll(/*swingNode,*/ canvas.getRoot(), - label); + */ + root.getChildren().addAll(/*swingNode,*/ canvas.getRoot(),label); Scene scene = new Scene(root); jfxPanel.setScene(scene); }); zoneRendererPanel.add(jfxPanel, PositionalLayout.Position.CENTER); - zoneRendererPanel.setComponentZOrder(jfxPanel, 0); - jfxPanel.setVisible(false); + //zoneRendererPanel.setComponentZOrder(jfxPanel, 0); + +// jfxPanel.setVisible(false); } public void addJfx(){ - jfxPanel.setSize(zoneRendererPanel.getSize()); + //jfxPanel.setSize(zoneRendererPanel.getSize()); jfxPanel.setVisible(!jfxPanel.isVisible()); } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index d0ec3484f2..863d6e17a3 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -53,6 +53,8 @@ import javax.imageio.ImageIO; import javax.swing.JComponent; import javax.swing.SwingUtilities; + +import com.badlogic.gdx.Gdx; import net.rptools.lib.CodeTimer; import net.rptools.lib.MD5Key; import net.rptools.lib.swing.ImageBorder; @@ -902,6 +904,13 @@ public void paintComponent(Graphics g) { } } + @Override + public void repaint() { + super.repaint(); + if(Gdx.graphics != null) + Gdx.graphics.requestRendering(); + } + public PlayerView getPlayerView() { return getPlayerView(MapTool.getPlayer().getEffectiveRole()); } @@ -1115,6 +1124,9 @@ public void invalidateCurrentViewCache() { * @param view PlayerView object that describes whether the view is a Player or GM view */ public void renderZone(Graphics2D g2d, PlayerView view) { + if(MapTool.getFrame().getJfxPanel().isVisible()) + return; + timer.start("setup"); g2d.setFont(AppStyle.labelFont); Object oldAA = SwingUtil.useAntiAliasing(g2d); @@ -1215,6 +1227,7 @@ public void renderZone(Graphics2D g2d, PlayerView view) { // Rendering pipeline if (zone.drawBoard()) { + Rectangle fill = new Rectangle(getWidth(), getHeight()); timer.start("board"); renderBoard(g2d, view); timer.stop("board"); From 3a28ebf3dc00b9f5a02ac016458be7cbe6aa492d Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sun, 4 Apr 2021 20:38:14 +0200 Subject: [PATCH 004/139] integrate better --- .../net/rptools/maptool/box2d/NativeRenderingCanvas.java | 1 - .../java/net/rptools/maptool/client/ui/MapToolFrame.java | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/rptools/maptool/box2d/NativeRenderingCanvas.java b/src/main/java/net/rptools/maptool/box2d/NativeRenderingCanvas.java index e62eb279e2..95399b79cc 100644 --- a/src/main/java/net/rptools/maptool/box2d/NativeRenderingCanvas.java +++ b/src/main/java/net/rptools/maptool/box2d/NativeRenderingCanvas.java @@ -73,7 +73,6 @@ public NativeRenderingCanvas(Canvas dummyCanvas) { imageView.fitHeightProperty().bind(canvasPane.heightProperty()); imageView.setPreserveRatio(true); imageView.setPickOnBounds(true); - imageView.setMouseTransparent(true); canvasPane.getChildren().add(imageView); diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index 418f71e6e5..0b2ebd297e 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -425,11 +425,11 @@ public MapToolFrame(JMenuBar menuBar) { statusPanel.addPanel(new SpacerStatusBar(25)); zoneMiniMapPanel = new ZoneMiniMapPanel(); - // zoneMiniMapPanel.setSize(100, 100); + //zoneMiniMapPanel.setSize(100, 100); zoneRendererPanel = new JPanel(new PositionalLayout(5)); //zoneRendererPanel.setBackground(Color.black); - // zoneRendererPanel.add(zoneMiniMapPanel, PositionalLayout.Position.SE); + //zoneRendererPanel.add(zoneMiniMapPanel, PositionalLayout.Position.SE); // zoneRendererPanel.add(getChatTypingLabel(), PositionalLayout.Position.NW); zoneRendererPanel.add(getChatTypingPanel(), PositionalLayout.Position.NW); zoneRendererPanel.add(getChatActionLabel(), PositionalLayout.Position.SW); @@ -524,7 +524,7 @@ public MapToolFrame(JMenuBar menuBar) { zoneRendererPanel.add(jfxPanel, PositionalLayout.Position.CENTER); //zoneRendererPanel.setComponentZOrder(jfxPanel, 0); -// jfxPanel.setVisible(false); + jfxPanel.setVisible(false); } public void addJfx(){ From 68b224f0c2d845eea928613456eac10d42c8e973 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 5 Apr 2021 01:35:47 +0200 Subject: [PATCH 005/139] defaultboard renders now. --- .../maptool/box2d/MapToolRenderer.java | 127 ++++++++++++++++++ .../rptools/maptool/box2d/NativeRenderer.java | 21 +-- .../maptool/box2d/NativeRenderingCanvas.java | 4 +- .../box2d/{ => unused}/Box2dRenderer.java | 2 +- .../box2d/{ => unused}/DebugPointLight.java | 2 +- .../box2d/{ => unused}/DesktopLauncher.java | 3 +- .../box2d/{ => unused}/MapToolGame.java | 4 +- .../{ => unused}/MapTool_InputProcessor.java | 3 +- .../net/rptools/maptool/client/MapTool.java | 8 +- .../maptool/client/ui/MapToolFrame.java | 12 +- 10 files changed, 160 insertions(+), 26 deletions(-) create mode 100644 src/main/java/net/rptools/maptool/box2d/MapToolRenderer.java rename src/main/java/net/rptools/maptool/box2d/{ => unused}/Box2dRenderer.java (99%) rename src/main/java/net/rptools/maptool/box2d/{ => unused}/DebugPointLight.java (98%) rename src/main/java/net/rptools/maptool/box2d/{ => unused}/DesktopLauncher.java (95%) rename src/main/java/net/rptools/maptool/box2d/{ => unused}/MapToolGame.java (93%) rename src/main/java/net/rptools/maptool/box2d/{ => unused}/MapTool_InputProcessor.java (96%) diff --git a/src/main/java/net/rptools/maptool/box2d/MapToolRenderer.java b/src/main/java/net/rptools/maptool/box2d/MapToolRenderer.java new file mode 100644 index 0000000000..111a078d4c --- /dev/null +++ b/src/main/java/net/rptools/maptool/box2d/MapToolRenderer.java @@ -0,0 +1,127 @@ +package net.rptools.maptool.box2d; + +import com.badlogic.gdx.ApplicationAdapter; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.backends.lwjgl.LwjglApplication; +import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; +import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.OrthographicCamera; +import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.g2d.TextureRegion; +import com.badlogic.gdx.utils.viewport.Viewport; +import net.rptools.lib.AppEvent; +import net.rptools.lib.AppEventListener; +import net.rptools.maptool.client.MapTool; +import net.rptools.maptool.model.ModelChangeEvent; +import net.rptools.maptool.model.ModelChangeListener; +import net.rptools.maptool.model.ZoneFactory; +import net.rptools.maptool.model.drawing.DrawableTexturePaint; +import net.rptools.maptool.util.ImageManager; + +public class MapToolRenderer extends ApplicationAdapter implements AppEventListener, ModelChangeListener { + + private Texture defaultBackgroundTexture; + + private OrthographicCamera cam; + //private Viewport viewport; + private SpriteBatch batch; + private NativeRenderer jfxRenderer; + private int width; + private int height; + + public MapToolRenderer() { + MapTool.getEventDispatcher().addListener(this, MapTool.ZoneEvent.Activated); + } + + + @Override + public void create() { + defaultBackgroundTexture = new Texture(Gdx.files.internal("net/rptools/maptool/client/image/grass.png")); + var zone = ZoneFactory.createZone(); + var backgroundPaint = zone.getBackgroundPaint(); + if(backgroundPaint instanceof DrawableTexturePaint) { + var texturePaint = (DrawableTexturePaint)backgroundPaint; + var image = texturePaint.getAsset().getImage(); + defaultBackgroundTexture = new Texture(new Pixmap(image, 0, image.length)); + } + defaultBackgroundTexture.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat); + + + var gridSize = zone.getGrid().getSize(); + width = Gdx.graphics.getWidth(); + height = Gdx.graphics.getHeight(); + + cam = new OrthographicCamera(); + + //viewport = new MapToolViewport(cam); + cam.setToOrtho(false); + //cam.position.set(cam.viewportWidth / 2f, cam.viewportHeight / 2f, 0); + //viewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());//, true); + + batch = new SpriteBatch(); + } + + @Override + public void render() { + cam.update(); + batch.setProjectionMatrix(cam.combined); + + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + + batch.begin(); + + + batch.draw(defaultBackgroundTexture, 0, 0, 0, 0, width, height); + + batch.end(); + + if(jfxRenderer != null) { + var pixmap = Pixmap.createFromFrameBuffer(0, 0, width, height); + jfxRenderer.setGdxBuffer(pixmap.getPixels()); + pixmap.dispose(); + } + } + + @Override + public void resize(int width, int height) { + cam.viewportWidth = width; + cam.viewportHeight = height; + cam.position.x = width /2f; + cam.position.y = height /2f; + cam.update(); + this.width = width; + this.height = height; + } + + @Override + public void dispose() { + batch.dispose(); + } + + public void setJfxRenderer(NativeRenderer renderer) { + jfxRenderer = renderer; + } + + public static void main(String[] args) { + LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration(); + cfg.title = "MapTool libgdx Test!"; + cfg.width = 800; + cfg.height = 600; + + new LwjglApplication(new MapToolRenderer(), cfg); + } + + @Override + public void handleAppEvent(AppEvent event) { + if(event.getId() != MapTool.ZoneEvent.Activated) + return; + + } + + @Override + public void modelChanged(ModelChangeEvent event) { + + } +} diff --git a/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java b/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java index d636966311..c0380143b6 100644 --- a/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java +++ b/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java @@ -59,6 +59,7 @@ private void checkSizeChange() return; oldConfig = newConfig; + SwingUtilities.invokeLater(()->canvas.setSize(oldConfig.width, oldConfig.height)); } @@ -67,20 +68,24 @@ public void init() { if (app != null) return; - canvas.setVisible(false); + //canvas.setVisible(false); + checkSizeChange(); var config = new LwjglApplicationConfiguration(); config.allowSoftwareMode = true; config.forceExit = false; + //config.width = oldConfig.width; + //config.height = newConfig.height; + + //var appListender = new OrthographicCameraExample(); + var appListender = new MapToolRenderer(); + appListender.setJfxRenderer(this); + //gdxInput = box; - var box = new Box2dLightTest(); - box.setJfxRenderer(this); - gdxInput = box; - checkSizeChange(); - app = new LwjglApplication(box, config, canvas); - Gdx.graphics.setContinuousRendering(false); - Gdx.graphics.requestRendering(); + app = new LwjglApplication(appListender, config, canvas); + //Gdx.graphics.setContinuousRendering(false); + //Gdx.graphics.requestRendering(); } public void dispose() { diff --git a/src/main/java/net/rptools/maptool/box2d/NativeRenderingCanvas.java b/src/main/java/net/rptools/maptool/box2d/NativeRenderingCanvas.java index 95399b79cc..9d4f78e051 100644 --- a/src/main/java/net/rptools/maptool/box2d/NativeRenderingCanvas.java +++ b/src/main/java/net/rptools/maptool/box2d/NativeRenderingCanvas.java @@ -71,8 +71,8 @@ public NativeRenderingCanvas(Canvas dummyCanvas) { imageView.imageProperty().bind(fxImage); imageView.fitWidthProperty().bind(canvasPane.widthProperty()); imageView.fitHeightProperty().bind(canvasPane.heightProperty()); - imageView.setPreserveRatio(true); - imageView.setPickOnBounds(true); + //imageView.setPreserveRatio(true); + //imageView.setPickOnBounds(true); canvasPane.getChildren().add(imageView); diff --git a/src/main/java/net/rptools/maptool/box2d/Box2dRenderer.java b/src/main/java/net/rptools/maptool/box2d/unused/Box2dRenderer.java similarity index 99% rename from src/main/java/net/rptools/maptool/box2d/Box2dRenderer.java rename to src/main/java/net/rptools/maptool/box2d/unused/Box2dRenderer.java index 35820fd707..ccf86df294 100644 --- a/src/main/java/net/rptools/maptool/box2d/Box2dRenderer.java +++ b/src/main/java/net/rptools/maptool/box2d/unused/Box2dRenderer.java @@ -6,7 +6,7 @@ * You should have received a copy of the GNU Affero General Public License * along with this source Code. If not, please visit and specifically the Affero license text * at . */ -package net.rptools.maptool.box2d; +package net.rptools.maptool.box2d.unused; import java.awt.geom.AffineTransform; import java.awt.geom.Area; diff --git a/src/main/java/net/rptools/maptool/box2d/DebugPointLight.java b/src/main/java/net/rptools/maptool/box2d/unused/DebugPointLight.java similarity index 98% rename from src/main/java/net/rptools/maptool/box2d/DebugPointLight.java rename to src/main/java/net/rptools/maptool/box2d/unused/DebugPointLight.java index 0b3eaa4f27..19a6e636ee 100644 --- a/src/main/java/net/rptools/maptool/box2d/DebugPointLight.java +++ b/src/main/java/net/rptools/maptool/box2d/unused/DebugPointLight.java @@ -6,7 +6,7 @@ * You should have received a copy of the GNU Affero General Public License * along with this source Code. If not, please visit and specifically the Affero license text * at . */ -package net.rptools.maptool.box2d; +package net.rptools.maptool.box2d.unused; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; diff --git a/src/main/java/net/rptools/maptool/box2d/DesktopLauncher.java b/src/main/java/net/rptools/maptool/box2d/unused/DesktopLauncher.java similarity index 95% rename from src/main/java/net/rptools/maptool/box2d/DesktopLauncher.java rename to src/main/java/net/rptools/maptool/box2d/unused/DesktopLauncher.java index 9426ca7ed7..c807bd43cc 100644 --- a/src/main/java/net/rptools/maptool/box2d/DesktopLauncher.java +++ b/src/main/java/net/rptools/maptool/box2d/unused/DesktopLauncher.java @@ -6,13 +6,12 @@ * You should have received a copy of the GNU Affero General Public License * along with this source Code. If not, please visit and specifically the Affero license text * at . */ -package net.rptools.maptool.box2d; +package net.rptools.maptool.box2d.unused; import javax.swing.JFrame; import javax.swing.SwingUtilities; import com.badlogic.gdx.backends.lwjgl.LwjglAWTCanvas; -import com.badlogic.gdx.backends.lwjgl.LwjglApplication; import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; import net.rptools.maptool.client.ui.MapToolFrame; diff --git a/src/main/java/net/rptools/maptool/box2d/MapToolGame.java b/src/main/java/net/rptools/maptool/box2d/unused/MapToolGame.java similarity index 93% rename from src/main/java/net/rptools/maptool/box2d/MapToolGame.java rename to src/main/java/net/rptools/maptool/box2d/unused/MapToolGame.java index 0c9918b045..fb61a3a817 100644 --- a/src/main/java/net/rptools/maptool/box2d/MapToolGame.java +++ b/src/main/java/net/rptools/maptool/box2d/unused/MapToolGame.java @@ -6,7 +6,7 @@ * You should have received a copy of the GNU Affero General Public License * along with this source Code. If not, please visit and specifically the Affero license text * at . */ -package net.rptools.maptool.box2d; +package net.rptools.maptool.box2d.unused; import com.badlogic.gdx.Game; import com.badlogic.gdx.graphics.OrthographicCamera; @@ -15,6 +15,8 @@ import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.physics.box2d.World; +import net.rptools.maptool.box2d.unused.Box2dRenderer; +import net.rptools.maptool.box2d.unused.DesktopLauncher; import net.rptools.maptool.client.ui.MapToolFrame; public class MapToolGame extends Game { diff --git a/src/main/java/net/rptools/maptool/box2d/MapTool_InputProcessor.java b/src/main/java/net/rptools/maptool/box2d/unused/MapTool_InputProcessor.java similarity index 96% rename from src/main/java/net/rptools/maptool/box2d/MapTool_InputProcessor.java rename to src/main/java/net/rptools/maptool/box2d/unused/MapTool_InputProcessor.java index c1a01e3a33..98a30b3986 100644 --- a/src/main/java/net/rptools/maptool/box2d/MapTool_InputProcessor.java +++ b/src/main/java/net/rptools/maptool/box2d/unused/MapTool_InputProcessor.java @@ -6,13 +6,14 @@ * You should have received a copy of the GNU Affero General Public License * along with this source Code. If not, please visit and specifically the Affero license text * at . */ -package net.rptools.maptool.box2d; +package net.rptools.maptool.box2d.unused; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input.Buttons; import com.badlogic.gdx.Input.Keys; import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.math.Vector3; +import net.rptools.maptool.box2d.unused.Box2dRenderer; public class MapTool_InputProcessor implements InputProcessor { Box2dRenderer renderer; diff --git a/src/main/java/net/rptools/maptool/client/MapTool.java b/src/main/java/net/rptools/maptool/client/MapTool.java index 3a3535c59f..626a018782 100644 --- a/src/main/java/net/rptools/maptool/client/MapTool.java +++ b/src/main/java/net/rptools/maptool/client/MapTool.java @@ -41,11 +41,6 @@ import javax.swing.*; import javax.swing.plaf.FontUIResource; -import javafx.application.Platform; -import javafx.embed.swing.SwingNode; -import javafx.scene.Scene; -import javafx.scene.control.Label; -import javafx.scene.layout.StackPane; import net.rptools.clientserver.hessian.client.ClientConnection; import net.rptools.lib.BackupManager; import net.rptools.lib.DebugStream; @@ -56,8 +51,7 @@ import net.rptools.lib.net.RPTURLStreamHandlerFactory; import net.rptools.lib.sound.SoundManager; import net.rptools.lib.swing.SwingUtil; -import net.rptools.maptool.box2d.DesktopLauncher; -import net.rptools.maptool.box2d.NativeRenderingCanvas; +import net.rptools.maptool.box2d.unused.DesktopLauncher; import net.rptools.maptool.client.functions.UserDefinedMacroFunctions; import net.rptools.maptool.client.swing.MapToolEventQueue; import net.rptools.maptool.client.swing.NoteFrame; diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index 0b2ebd297e..97fe1ffc47 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -492,16 +492,22 @@ public MapToolFrame(JMenuBar menuBar) { Platform.runLater(()->{ var root = new StackPane(); + + //var frame = new JFrame(); + //frame.setSize(640, 480); var panel = new JPanel(); + var dummyCanvas = new Canvas(); panel.add(dummyCanvas); + //frame.add(dummyCanvas); + //frame.setVisible(true); final SwingNode swingNode = new SwingNode(); - swingNode.setVisible(false); + //swingNode.setVisible(false); - // SwingUtilities.invokeLater(() -> { + // SwingUtilities.invokeLater(() -> { swingNode.setContent(panel); // }); - +// var canvas = new NativeRenderingCanvas(dummyCanvas); From af485aead96108aeb00871940a9b7ce6fced4120 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 5 Apr 2021 22:13:43 +0200 Subject: [PATCH 006/139] coupled pan&zoom --- .../maptool/box2d/MapToolRenderer.java | 179 ++++++++++++++---- .../rptools/maptool/box2d/NativeRenderer.java | 8 +- .../maptool/client/ui/MapToolFrame.java | 52 ++--- .../maptool/client/ui/ToolbarPanel.java | 26 +++ .../maptool/client/ui/zone/ZoneRenderer.java | 8 + 5 files changed, 198 insertions(+), 75 deletions(-) diff --git a/src/main/java/net/rptools/maptool/box2d/MapToolRenderer.java b/src/main/java/net/rptools/maptool/box2d/MapToolRenderer.java index 111a078d4c..721f0ede71 100644 --- a/src/main/java/net/rptools/maptool/box2d/MapToolRenderer.java +++ b/src/main/java/net/rptools/maptool/box2d/MapToolRenderer.java @@ -4,32 +4,47 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.backends.lwjgl.LwjglApplication; import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; -import com.badlogic.gdx.graphics.GL20; -import com.badlogic.gdx.graphics.OrthographicCamera; -import com.badlogic.gdx.graphics.Pixmap; -import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.*; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.graphics.g2d.SpriteBatch; -import com.badlogic.gdx.graphics.g2d.TextureRegion; -import com.badlogic.gdx.utils.viewport.Viewport; +import com.badlogic.gdx.utils.ScreenUtils; import net.rptools.lib.AppEvent; import net.rptools.lib.AppEventListener; import net.rptools.maptool.client.MapTool; -import net.rptools.maptool.model.ModelChangeEvent; -import net.rptools.maptool.model.ModelChangeListener; -import net.rptools.maptool.model.ZoneFactory; +import net.rptools.maptool.client.ui.Scale; +import net.rptools.maptool.model.*; +import net.rptools.maptool.model.drawing.DrawableColorPaint; import net.rptools.maptool.model.drawing.DrawableTexturePaint; -import net.rptools.maptool.util.ImageManager; public class MapToolRenderer extends ApplicationAdapter implements AppEventListener, ModelChangeListener { - private Texture defaultBackgroundTexture; + private static MapToolRenderer _instance; + public static MapToolRenderer getInstance() { + if(_instance == null) + _instance = new MapToolRenderer(); + return _instance; + } + + private boolean useFbo = false; + + + // zone specific resources + private Zone zone; + private Sprite background; + private Sprite map; + + // general resources private OrthographicCamera cam; - //private Viewport viewport; private SpriteBatch batch; private NativeRenderer jfxRenderer; + private boolean initialized = false; private int width; private int height; + private int offsetX = 0; + private int offsetY = 0; + private float zoom = 1.0f; public MapToolRenderer() { MapTool.getEventDispatcher().addListener(this, MapTool.ZoneEvent.Activated); @@ -38,29 +53,15 @@ public MapToolRenderer() { @Override public void create() { - defaultBackgroundTexture = new Texture(Gdx.files.internal("net/rptools/maptool/client/image/grass.png")); - var zone = ZoneFactory.createZone(); - var backgroundPaint = zone.getBackgroundPaint(); - if(backgroundPaint instanceof DrawableTexturePaint) { - var texturePaint = (DrawableTexturePaint)backgroundPaint; - var image = texturePaint.getAsset().getImage(); - defaultBackgroundTexture = new Texture(new Pixmap(image, 0, image.length)); - } - defaultBackgroundTexture.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat); - - - var gridSize = zone.getGrid().getSize(); width = Gdx.graphics.getWidth(); height = Gdx.graphics.getHeight(); cam = new OrthographicCamera(); - - //viewport = new MapToolViewport(cam); cam.setToOrtho(false); - //cam.position.set(cam.viewportWidth / 2f, cam.viewportHeight / 2f, 0); - //viewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());//, true); batch = new SpriteBatch(); + initialized = true; + initializeZoneResources(); } @Override @@ -72,27 +73,48 @@ public void render() { batch.begin(); + if (background != null) { + var startX = (cam.position.x - cam.viewportWidth*zoom/2); + startX = (int)(startX/background.getWidth()) * background.getWidth() - background.getWidth(); + var endX = cam.position.x + cam.viewportWidth/2*zoom; + var startY = (cam.position.y - cam.viewportHeight*zoom/2); + startY= (int)(startY/background.getHeight()) * background.getHeight() - background.getHeight(); + var endY = (cam.position.y + cam.viewportHeight/2*zoom); + + for(var i = startX; i < endX; i+= background.getWidth()) + for(var j = startY; j < endY; j += background.getHeight()) { + background.setPosition(i, j); + background.draw(batch); + } + } - batch.draw(defaultBackgroundTexture, 0, 0, 0, 0, width, height); + if (map != null) + map.draw(batch); batch.end(); - if(jfxRenderer != null) { - var pixmap = Pixmap.createFromFrameBuffer(0, 0, width, height); + if (jfxRenderer != null) { + Pixmap pixmap = ScreenUtils.getFrameBufferPixmap(0, 0, width, height); jfxRenderer.setGdxBuffer(pixmap.getPixels()); pixmap.dispose(); } } + @Override public void resize(int width, int height) { + this.width = width; + this.height = height; + updateCam(); + } + + private void updateCam() { cam.viewportWidth = width; cam.viewportHeight = height; - cam.position.x = width /2f; - cam.position.y = height /2f; + cam.position.x = zoom *(width / 2f + offsetX); + cam.position.y = zoom *(height / 2f * - 1 + offsetY); + cam.zoom = zoom; cam.update(); - this.width = width; - this.height = height; } @Override @@ -113,15 +135,100 @@ public static void main(String[] args) { new LwjglApplication(new MapToolRenderer(), cfg); } + private void disposeZoneResources() { + if (!initialized) + return; + + cam.zoom = 1.0f; + offsetX = 0; + offsetY = 0; + + Gdx.app.postRunnable(() -> { + updateCam(); + var background = this.background; + this.background = null; + if (background != null) { + background.getTexture().dispose(); + } + + var map = this.map; + this.map = null; + if (map != null) { + map.getTexture().dispose(); + } + }); + } + + private void initializeZoneResources() { + if (zone == null || !initialized) + return; + + var backgroundPaint = zone.getBackgroundPaint(); + if (backgroundPaint instanceof DrawableTexturePaint) { + var texturePaint = (DrawableTexturePaint) backgroundPaint; + var image = texturePaint.getAsset().getImage(); + Gdx.app.postRunnable(() -> { + var pix = new Pixmap(image, 0, image.length); + background = new Sprite(new Texture(pix)); + background.setSize(pix.getWidth(), pix.getHeight()); + background.setPosition(0, -1 * background.getHeight()); + pix.dispose(); + }); + } + if (backgroundPaint instanceof DrawableColorPaint) { + var colorPaint = (DrawableColorPaint) backgroundPaint; + var colorValue = colorPaint.getColor(); + var color = new Color(); + Color.argb8888ToColor(color, colorValue); + Gdx.app.postRunnable(() -> { + var pix = new Pixmap(64, 64, Pixmap.Format.RGBA8888); + + pix.setColor(color); + pix.fill(); + background = new Sprite(new Texture(pix)); + background.setSize(pix.getWidth(), pix.getHeight()); + background.setPosition(0, -1 * background.getHeight()); + pix.dispose(); + }); + } + var mapAssetId = zone.getMapAssetId(); + if (mapAssetId != null) { + var mapBytes = AssetManager.getAsset(mapAssetId).getImage(); + Gdx.app.postRunnable(() -> { + var pix = new Pixmap(mapBytes, 0, mapBytes.length); + map = new Sprite(new Texture(pix)); + map.setPosition(zone.getBoardX(), zone.getBoardY() - pix.getHeight()); + map.setSize(pix.getWidth(), pix.getHeight()); + pix.dispose(); + }); + } + + } + + @Override public void handleAppEvent(AppEvent event) { - if(event.getId() != MapTool.ZoneEvent.Activated) + if (event.getId() != MapTool.ZoneEvent.Activated) return; + if (zone != null) + disposeZoneResources(); + + this.zone = (Zone) event.getNewValue(); + initializeZoneResources(); } @Override public void modelChanged(ModelChangeEvent event) { + // for now quick and dirty + disposeZoneResources(); + initializeZoneResources(); + } + public void setScale(Scale scale) { + offsetX = scale.getOffsetX() * -1; + offsetY = scale.getOffsetY(); + zoom = (float)(1f/scale.getScale()); + updateCam(); } } diff --git a/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java b/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java index c0380143b6..b775c21be5 100644 --- a/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java +++ b/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java @@ -68,21 +68,17 @@ public void init() { if (app != null) return; - //canvas.setVisible(false); checkSizeChange(); var config = new LwjglApplicationConfiguration(); config.allowSoftwareMode = true; config.forceExit = false; - //config.width = oldConfig.width; - //config.height = newConfig.height; + LwjglApplicationConfiguration.disableAudio = true; - //var appListender = new OrthographicCameraExample(); - var appListender = new MapToolRenderer(); + var appListender = MapToolRenderer.getInstance(); appListender.setJfxRenderer(this); //gdxInput = box; - app = new LwjglApplication(appListender, config, canvas); //Gdx.graphics.setContinuousRendering(false); //Gdx.graphics.requestRendering(); diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index 97fe1ffc47..be18c684f8 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -14,16 +14,12 @@ */ package net.rptools.maptool.client.ui; +import com.badlogic.gdx.backends.lwjgl.LwjglApplication; +import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; import com.jidesoft.docking.DefaultDockableHolder; import com.jidesoft.docking.DockableFrame; import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.WindowEvent; -import java.awt.event.WindowListener; +import java.awt.event.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; @@ -63,6 +59,7 @@ import net.rptools.lib.swing.PositionalLayout; import net.rptools.lib.swing.SwingUtil; import net.rptools.lib.swing.preference.WindowPreferences; +import net.rptools.maptool.box2d.MapToolRenderer; import net.rptools.maptool.box2d.NativeRenderingCanvas; import net.rptools.maptool.client.AppActions; import net.rptools.maptool.client.AppActions.ClientAction; @@ -490,55 +487,44 @@ public MapToolFrame(JMenuBar menuBar) { setChatTypingLabelColor(AppPreferences.getChatNotificationColor()); Platform.runLater(()->{ - var root = new StackPane(); - + var gdxCanvas = new Canvas(); - //var frame = new JFrame(); - //frame.setSize(640, 480); - var panel = new JPanel(); + var frame = new JFrame(); + frame.setSize(getSize()); + frame.add(gdxCanvas); + frame.setVisible(true); - var dummyCanvas = new Canvas(); - panel.add(dummyCanvas); - //frame.add(dummyCanvas); - //frame.setVisible(true); - final SwingNode swingNode = new SwingNode(); - //swingNode.setVisible(false); - // SwingUtilities.invokeLater(() -> { - swingNode.setContent(panel); - // }); -// +/* + var panel = new JPanel(); + panel.add(gdxCanvas); + panel.setSize(getSize()); + SwingNode swingNode = new SwingNode(); + swingNode.setContent(panel); +*/ - var canvas = new NativeRenderingCanvas(dummyCanvas); javafx.scene.control.Label label = new Label("This is JavaFX"); label.setMouseTransparent(true); label.setStyle("-fx-font-size: 64pt; -fx-font-family: Arial; -fx-font-weight: bold; -fx-text-fill: white; -fx-opacity: 0.8;"); -/* - WebView browser = new WebView(); - WebEngine webEngine = browser.getEngine(); - webEngine.load("https://www.youtube.com/embed/18pRUdKNlGw?rel=0&autoplay=1"); - root.getChildren().add(browser); + var canvas = new NativeRenderingCanvas(gdxCanvas); - */ - root.getChildren().addAll(/*swingNode,*/ canvas.getRoot(),label); + var root = new StackPane(); + root.getChildren().addAll(/*swingNode, */canvas.getRoot(),label); Scene scene = new Scene(root); jfxPanel.setScene(scene); }); zoneRendererPanel.add(jfxPanel, PositionalLayout.Position.CENTER); - //zoneRendererPanel.setComponentZOrder(jfxPanel, 0); jfxPanel.setVisible(false); } public void addJfx(){ - //jfxPanel.setSize(zoneRendererPanel.getSize()); jfxPanel.setVisible(!jfxPanel.isVisible()); } - public ChatNotificationTimers getChatNotificationTimers() { return chatTyperTimers; } diff --git a/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java b/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java index f904d7b49b..19560e77f4 100644 --- a/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java +++ b/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java @@ -218,6 +218,13 @@ public ToolbarPanel(Toolbox tbox) { tokenSelectionButtonAll.setSelected(true); // Jamz: End panel + add( + createJfxButton( + "net/rptools/maptool/client/image/audio/mute.png", + "net/rptools/maptool/client/image/audio/volume.png", + I18N.getText("tools.mute.tooltip"), + I18N.getText("tools.unmute.tooltip"))); + // the "Select Map" button add(createZoneSelectionButton()); @@ -385,6 +392,25 @@ private JToggleButton createMuteButton( return button; } + private JToggleButton createJfxButton( + final String icon, final String offIcon, String mutetooltip, String unmutetooltip) { + final JToggleButton button = new JToggleButton(); + button.setToolTipText(mutetooltip); + button.addActionListener( + e -> { + MapTool.getFrame().addJfx(); + }); + + try { + button.setIcon(createIcon(offIcon, 25, 25)); + button.setSelectedIcon(createIcon(icon, 25, 25)); + } catch (IOException ioe) { + ioe.printStackTrace(); + } + + return button; + } + private ImageIcon createIcon(String strResource, int w, int h) throws IOException { return ImageUtil.resizeImage( new ImageIcon(ImageIO.read(getClass().getClassLoader().getResourceAsStream(strResource))), diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index 863d6e17a3..0615580282 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -60,6 +60,7 @@ import net.rptools.lib.swing.ImageBorder; import net.rptools.lib.swing.ImageLabel; import net.rptools.lib.swing.SwingUtil; +import net.rptools.maptool.box2d.MapToolRenderer; import net.rptools.maptool.client.AppActions; import net.rptools.maptool.client.AppConstants; import net.rptools.maptool.client.AppPreferences; @@ -791,21 +792,25 @@ public void removeOverlay(ZoneOverlay overlay) { public void moveViewBy(int dx, int dy) { setViewOffset(getViewOffsetX() + dx, getViewOffsetY() + dy); + MapToolRenderer.getInstance().setScale(zoneScale); } public void zoomReset(int x, int y) { zoneScale.zoomReset(x, y); MapTool.getFrame().getZoomStatusBar().update(); + MapToolRenderer.getInstance().setScale(zoneScale); } public void zoomIn(int x, int y) { zoneScale.zoomIn(x, y); MapTool.getFrame().getZoomStatusBar().update(); + MapToolRenderer.getInstance().setScale(zoneScale); } public void zoomOut(int x, int y) { zoneScale.zoomOut(x, y); MapTool.getFrame().getZoomStatusBar().update(); + MapToolRenderer.getInstance().setScale(zoneScale); } public void setView(int x, int y, double scale) { @@ -814,6 +819,7 @@ public void setView(int x, int y, double scale) { zoneScale.setScale(scale); MapTool.getFrame().getZoomStatusBar().update(); + MapToolRenderer.getInstance().setScale(zoneScale); } public void enforceView(int x, int y, double scale, int gmWidth, int gmHeight) { @@ -834,6 +840,7 @@ public void enforceView(int x, int y, double scale, int gmWidth, int gmHeight) { setScale(scale); centerOn(new ZonePoint(x, y)); + MapToolRenderer.getInstance().setScale(zoneScale); } public void restoreView() { @@ -842,6 +849,7 @@ public void restoreView() { centerOn(previousZonePoint); setScale(previousScale); + MapToolRenderer.getInstance().setScale(zoneScale); } public void forcePlayersView() { From 907c159db717b0c6beb6daa7f6abd1d2e7879443 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Tue, 6 Apr 2021 03:02:09 +0200 Subject: [PATCH 007/139] add renderZone and calles methods. Now only the method bodies are missing ;) --- .../rptools/maptool/box2d/GdxRenderer.java | 565 ++++++++++++++++++ .../maptool/box2d/MapToolRenderer.java | 234 -------- .../rptools/maptool/box2d/NativeRenderer.java | 3 +- .../maptool/client/ui/MapToolFrame.java | 7 - .../maptool/client/ui/zone/ZoneRenderer.java | 86 +-- 5 files changed, 616 insertions(+), 279 deletions(-) create mode 100644 src/main/java/net/rptools/maptool/box2d/GdxRenderer.java delete mode 100644 src/main/java/net/rptools/maptool/box2d/MapToolRenderer.java diff --git a/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java b/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java new file mode 100644 index 0000000000..0ad8e8a365 --- /dev/null +++ b/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java @@ -0,0 +1,565 @@ +package net.rptools.maptool.box2d; + +import com.badlogic.gdx.ApplicationAdapter; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.backends.lwjgl.LwjglApplication; +import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; +import com.badlogic.gdx.graphics.*; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.Sprite; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.utils.ScreenUtils; +import net.rptools.lib.AppEvent; +import net.rptools.lib.AppEventListener; +import net.rptools.lib.CodeTimer; +import net.rptools.lib.MD5Key; +import net.rptools.maptool.client.AppState; +import net.rptools.maptool.client.MapTool; +import net.rptools.maptool.client.ui.Scale; +import net.rptools.maptool.client.ui.zone.PlayerView; +import net.rptools.maptool.client.ui.zone.ZoneRenderer; +import net.rptools.maptool.model.*; +import net.rptools.maptool.model.drawing.DrawableColorPaint; +import net.rptools.maptool.model.drawing.DrawableTexturePaint; +import net.rptools.maptool.model.drawing.DrawnElement; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.util.*; +import java.util.List; + +public class GdxRenderer extends ApplicationAdapter implements AppEventListener, ModelChangeListener { + + private static final Logger log = LogManager.getLogger(GdxRenderer.class); + + private static GdxRenderer _instance; + + public static GdxRenderer getInstance() { + if (_instance == null) + _instance = new GdxRenderer(); + return _instance; + } + + // zone specific resources + private Zone zone; + private ZoneRenderer zoneRenderer; + private Sprite background; + private MD5Key mapAssetId; + private final Map sprites = new HashMap<>(); + private int offsetX = 0; + private int offsetY = 0; + private float zoom = 1.0f; + + // general resources + private OrthographicCamera cam; + private OrthographicCamera hudCam; + private SpriteBatch batch; + private SpriteBatch hudBatch; + private NativeRenderer jfxRenderer; + private boolean initialized = false; + private int width; + private int height; + private BitmapFont font; + private CodeTimer timer; + + public GdxRenderer() { + MapTool.getEventDispatcher().addListener(this, MapTool.ZoneEvent.Activated); + } + + @Override + public void create() { + width = Gdx.graphics.getWidth(); + height = Gdx.graphics.getHeight(); + + cam = new OrthographicCamera(); + cam.setToOrtho(false); + + hudCam = new OrthographicCamera(); + hudCam.setToOrtho(false); + + batch = new SpriteBatch(); + hudBatch = new SpriteBatch(); + font = new BitmapFont(); + initialized = true; + initializeZoneResources(); + } + + @Override + public void dispose() { + batch.dispose(); + hudBatch.dispose(); + font.dispose(); + disposeZoneResources(); + } + + @Override + public void resize(int width, int height) { + this.width = width; + this.height = height; + updateCam(); + } + + + private void updateCam() { + cam.viewportWidth = width; + cam.viewportHeight = height; + cam.position.x = zoom * (width / 2f + offsetX); + cam.position.y = zoom * (height / 2f * -1 + offsetY); + cam.zoom = zoom; + cam.update(); + + hudCam.viewportWidth = width; + hudCam.viewportHeight = height; + hudCam.position.x = width / 2f; + hudCam.position.y = height / 2f; + hudCam.update(); + } + + @Override + public void render() { + Gdx.gl.glClearColor(0, 0, 0, 0); + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + + if (zone == null) + return; + + initializeTimer(); + + timer.start("paintComponent:createView"); + PlayerView playerView = zoneRenderer.getPlayerView(); + timer.stop("paintComponent:createView"); + + batch.setProjectionMatrix(cam.combined); + hudBatch.setProjectionMatrix(hudCam.combined); + + batch.begin(); + + + renderZone(playerView); + batch.end(); + + hudBatch.begin(); + if (zoneRenderer.isLoading()) + drawBoxedString(zoneRenderer.getLoadingProgress(), width / 2, height / 2); + else if (MapTool.getCampaign().isBeingSerialized()) + drawBoxedString(" Please Wait ", width / 2, height / 2); + + int noteVPos = 20; + if (!zone.isVisible() && playerView.isGMView()) { + drawBoxedString( + "Map not visible to players", width / 2, height - noteVPos); + noteVPos += 20; + } + if (AppState.isShowAsPlayer()) { + drawBoxedString("Player View", width / 2, height - noteVPos); + } + + drawBoxedString(String.valueOf(Gdx.graphics.getFramesPerSecond()), 10, 20); + + hudBatch.end(); + + collectTimerResults(); + + copyFramebufferToJfx(); + } + + private void collectTimerResults() { + if (timer.isEnabled()) { + String results = timer.toString(); + MapTool.getProfilingNoteFrame().addText(results); + if (log.isDebugEnabled()) { + log.debug(results); + } + timer.clear(); + } + } + + private void initializeTimer() { + if (timer == null) { + timer = new CodeTimer("ZoneRenderer.renderZone"); + } + timer.setEnabled(AppState.isCollectProfilingData() || log.isDebugEnabled()); + timer.clear(); + timer.setThreshold(10); + } + + private void copyFramebufferToJfx() { + if (jfxRenderer != null) { + Pixmap pixmap = Pixmap.createFromFrameBuffer(0, 0, width, height); + jfxRenderer.setGdxBuffer(pixmap.getPixels()); + pixmap.dispose(); + } + } + + private void renderZone(PlayerView view) { + if (zoneRenderer.isLoading() || MapTool.getCampaign().isBeingSerialized()) + return; + + renderBoard(); + + if (Zone.Layer.BACKGROUND.isEnabled()) { + List drawables = zone.getBackgroundDrawnElements(); + + timer.start("drawableBackground"); + renderDrawableOverlay(view, drawables); + timer.stop("drawableBackground"); + + List background = zone.getBackgroundStamps(false); + if (!background.isEmpty()) { + timer.start("tokensBackground"); + renderTokens(background, view, false); + timer.stop("tokensBackground"); + } + } + if (Zone.Layer.OBJECT.isEnabled()) { + // Drawables on the object layer are always below the grid, and... + List drawables = zone.getObjectDrawnElements(); + // if (!drawables.isEmpty()) { + timer.start("drawableObjects"); + renderDrawableOverlay(view, drawables); + timer.stop("drawableObjects"); + // } + } + timer.start("grid"); + renderGrid(view); + timer.stop("grid"); + + if (Zone.Layer.OBJECT.isEnabled()) { + // ... Images on the object layer are always ABOVE the grid. + List stamps = zone.getStampTokens(false); + if (!stamps.isEmpty()) { + timer.start("tokensStamp"); + renderTokens(stamps, view, false); + timer.stop("tokensStamp"); + } + } + if (Zone.Layer.TOKEN.isEnabled()) { + timer.start("lights"); + renderLights(view); + timer.stop("lights"); + + timer.start("auras"); + renderAuras(view); + timer.stop("auras"); + } + + /* + * The following sections used to handle rendering of the Hidden (i.e. "GM") layer followed by + * the Token layer. The problem was that we want all drawables to appear below all tokens, and + * the old configuration performed the rendering in the following order: + * + *

    + *
  1. Render Hidden-layer tokens + *
  2. Render Hidden-layer drawables + *
  3. Render Token-layer drawables + *
  4. Render Token-layer tokens + *
+ * + * That's fine for players, but clearly wrong if the view is for the GM. We now use: + * + *
    + *
  1. Render Token-layer drawables // Player-drawn images shouldn't obscure GM's images? + *
  2. Render Hidden-layer drawables // GM could always use "View As Player" if needed? + *
  3. Render Hidden-layer tokens + *
  4. Render Token-layer tokens + *
+ */ + if (Zone.Layer.TOKEN.isEnabled()) { + List drawables = zone.getDrawnElements(); + // if (!drawables.isEmpty()) { + timer.start("drawableTokens"); + renderDrawableOverlay(view, drawables); + timer.stop("drawableTokens"); + // } + + if (view.isGMView() && Zone.Layer.GM.isEnabled()) { + drawables = zone.getGMDrawnElements(); + // if (!drawables.isEmpty()) { + timer.start("drawableGM"); + renderDrawableOverlay(view, drawables); + timer.stop("drawableGM"); + // } + List stamps = zone.getGMStamps(false); + if (!stamps.isEmpty()) { + timer.start("tokensGM"); + renderTokens(stamps, view, false); + timer.stop("tokensGM"); + } + } + List tokens = zone.getTokens(false); + if (!tokens.isEmpty()) { + timer.start("tokens"); + renderTokens(tokens, view, false); + timer.stop("tokens"); + } + timer.start("unowned movement"); + showBlockedMoves(view, zoneRenderer.getUnOwnedMovementSet(view)); + timer.stop("unowned movement"); + } + + /* + * FJE It's probably not appropriate for labels to be above everything, including tokens. Above + * drawables, yes. Above tokens, no. (Although in that case labels could be completely obscured. + * Hm.) + */ + // Drawing labels is slooooow. :( + // Perhaps we should draw the fog first and use hard fog to determine whether labels need to be + // drawn? + // (This method has it's own 'timer' calls) + if (AppState.getShowTextLabels()) { + renderLabels(view); + } + + // (This method has it's own 'timer' calls) + if (zone.hasFog()) { + renderFog(view); + } + + if (Zone.Layer.TOKEN.isEnabled()) { + // Jamz: If there is fog or vision we may need to re-render vision-blocking type tokens + // For example. this allows a "door" stamp to block vision but still allow you to see the + // door. + List vblTokens = zone.getTokensAlwaysVisible(); + if (!vblTokens.isEmpty()) { + timer.start("tokens - always visible"); + renderTokens(vblTokens, view, true); + timer.stop("tokens - always visible"); + } + + // if there is fog or vision we may need to re-render figure type tokens + // and figure tokens need sorting via alternative logic. + List tokens = zone.getFigureTokens(); + List sortedTokens = new ArrayList<>(tokens); + sortedTokens.sort(zone.getFigureZOrderComparator()); + if (!tokens.isEmpty()) { + timer.start("tokens - figures"); + renderTokens(sortedTokens, view, true); + timer.stop("tokens - figures"); + } + + timer.start("owned movement"); + showBlockedMoves(view, zoneRenderer.getOwnedMovementSet(view)); + timer.stop("owned movement"); + + // Text associated with tokens being moved is added to a list to be drawn after, i.e. on top + // of, the tokens + // themselves. + // So if one moving token is on top of another moving token, at least the textual identifiers + // will be + // visible. + timer.start("token name/labels"); + renderRenderables(); + timer.stop("token name/labels"); + } + + // if (zone.visionType ...) + if (view.isGMView()) { + timer.start("visionOverlayGM"); + renderGMVisionOverlay(view); + timer.stop("visionOverlayGM"); + } else { + timer.start("visionOverlayPlayer"); + renderPlayerVisionOverlay(view); + timer.stop("visionOverlayPlayer"); + } + } + + private void renderPlayerVisionOverlay(PlayerView view) { + } + + private void renderGMVisionOverlay(PlayerView view) { + } + + private void renderRenderables() { + } + + private void renderFog(PlayerView view) { + } + + private void renderLabels(PlayerView view) { + } + + private void showBlockedMoves(PlayerView view, Set unOwnedMovementSet) { + } + + private void renderAuras(PlayerView view) { + } + + private void renderLights(PlayerView view) { + } + + private void renderGrid(PlayerView view) { + } + + private void renderDrawableOverlay(PlayerView view, List drawables) { + } + + private void drawBoxedString(String text, int centerX, int centerY) { + font.draw(hudBatch, text, centerX, centerY); + } + + private void renderBoard() { + if (!zone.drawBoard()) + return; + + if (background != null) { + var startX = (cam.position.x - cam.viewportWidth * zoom / 2); + startX = (int) (startX / background.getWidth()) * background.getWidth() - background.getWidth(); + var endX = cam.position.x + cam.viewportWidth / 2 * zoom; + var startY = (cam.position.y - cam.viewportHeight * zoom / 2); + startY = (int) (startY / background.getHeight()) * background.getHeight() - background.getHeight(); + var endY = (cam.position.y + cam.viewportHeight / 2 * zoom); + + for (var i = startX; i < endX; i += background.getWidth()) + for (var j = startY; j < endY; j += background.getHeight()) { + background.setPosition(i, j); + background.draw(batch); + } + } + + if (mapAssetId != null) { + var map = sprites.get(mapAssetId); + if (map != null) { + map.setPosition(zone.getBoardX(), zone.getBoardY() - map.getHeight()); + map.draw(batch); + } + } + } + + private void renderTokens(List background, PlayerView view, boolean figuresOnly) { + for (var token : background) { + var assetId = token.getImageAssetId(); + var sprite = sprites.get(assetId); + if (sprite == null) + continue; + + sprite.setPosition(token.getX(), -1 * token.getY() - token.getHeight()); + sprite.draw(batch); + } + } + + public void setJfxRenderer(NativeRenderer renderer) { + jfxRenderer = renderer; + } + + public static void main(String[] args) { + LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration(); + cfg.title = "MapTool libgdx Test!"; + cfg.width = 800; + cfg.height = 600; + + new LwjglApplication(new GdxRenderer(), cfg); + } + + private void disposeZoneResources() { + if (!initialized) + return; + + cam.zoom = 1.0f; + offsetX = 0; + offsetY = 0; + + Gdx.app.postRunnable(() -> { + updateCam(); + var background = this.background; + this.background = null; + if (background != null) { + background.getTexture().dispose(); + } + + for (var sprite : sprites.values()) { + sprite.getTexture().dispose(); + } + sprites.clear(); + }); + } + + private void initializeZoneResources() { + if (zone == null || !initialized) + return; + + var backgroundPaint = zone.getBackgroundPaint(); + if (backgroundPaint instanceof DrawableTexturePaint) { + var texturePaint = (DrawableTexturePaint) backgroundPaint; + var image = texturePaint.getAsset().getImage(); + Gdx.app.postRunnable(() -> { + var pix = new Pixmap(image, 0, image.length); + background = new Sprite(new Texture(pix)); + background.setSize(pix.getWidth(), pix.getHeight()); + background.setPosition(0, -1 * background.getHeight()); + pix.dispose(); + }); + } + if (backgroundPaint instanceof DrawableColorPaint) { + var colorPaint = (DrawableColorPaint) backgroundPaint; + var colorValue = colorPaint.getColor(); + var color = new Color(); + Color.argb8888ToColor(color, colorValue); + Gdx.app.postRunnable(() -> { + var pix = new Pixmap(64, 64, Pixmap.Format.RGBA8888); + + pix.setColor(color); + pix.fill(); + background = new Sprite(new Texture(pix)); + background.setSize(pix.getWidth(), pix.getHeight()); + background.setPosition(0, -1 * background.getHeight()); + pix.dispose(); + }); + } + mapAssetId = zone.getMapAssetId(); + + // FIXME: zonechanges during wait for resources + new Thread(() -> { + try { + while (zoneRenderer.isLoading()) { + Thread.sleep(100); + } + + // create sprites for all assets + //TODO: create textureAtlas ? + Gdx.app.postRunnable(() -> { + for (var assetId : zone.getAllAssetIds()) { + var bytes = AssetManager.getAsset(assetId).getImage(); + + var pix = new Pixmap(bytes, 0, bytes.length); + var sprite = new Sprite(new Texture(pix)); + sprite.setSize(pix.getWidth(), pix.getHeight()); + sprites.put(assetId, sprite); + pix.dispose(); + } + }); + } catch (InterruptedException e) {} + }).start(); + + + } + + + @Override + public void handleAppEvent(AppEvent event) { + if (event.getId() != MapTool.ZoneEvent.Activated) + return; + + if (zone != null) + disposeZoneResources(); + + this.zone = (Zone) event.getNewValue(); + this.zoneRenderer = MapTool.getFrame().getZoneRenderer(this.zone); + initializeZoneResources(); + } + + @Override + public void modelChanged(ModelChangeEvent event) { + // for now quick and dirty + disposeZoneResources(); + initializeZoneResources(); + } + + public void setScale(Scale scale) { + offsetX = scale.getOffsetX() * -1; + offsetY = scale.getOffsetY(); + zoom = (float) (1f / scale.getScale()); + updateCam(); + } +} diff --git a/src/main/java/net/rptools/maptool/box2d/MapToolRenderer.java b/src/main/java/net/rptools/maptool/box2d/MapToolRenderer.java deleted file mode 100644 index 721f0ede71..0000000000 --- a/src/main/java/net/rptools/maptool/box2d/MapToolRenderer.java +++ /dev/null @@ -1,234 +0,0 @@ -package net.rptools.maptool.box2d; - -import com.badlogic.gdx.ApplicationAdapter; -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.backends.lwjgl.LwjglApplication; -import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; -import com.badlogic.gdx.graphics.*; -import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.g2d.Sprite; -import com.badlogic.gdx.graphics.g2d.SpriteBatch; -import com.badlogic.gdx.utils.ScreenUtils; -import net.rptools.lib.AppEvent; -import net.rptools.lib.AppEventListener; -import net.rptools.maptool.client.MapTool; -import net.rptools.maptool.client.ui.Scale; -import net.rptools.maptool.model.*; -import net.rptools.maptool.model.drawing.DrawableColorPaint; -import net.rptools.maptool.model.drawing.DrawableTexturePaint; - -public class MapToolRenderer extends ApplicationAdapter implements AppEventListener, ModelChangeListener { - - private static MapToolRenderer _instance; - public static MapToolRenderer getInstance() { - if(_instance == null) - _instance = new MapToolRenderer(); - return _instance; - } - - private boolean useFbo = false; - - - // zone specific resources - private Zone zone; - private Sprite background; - private Sprite map; - - - // general resources - private OrthographicCamera cam; - private SpriteBatch batch; - private NativeRenderer jfxRenderer; - private boolean initialized = false; - private int width; - private int height; - private int offsetX = 0; - private int offsetY = 0; - private float zoom = 1.0f; - - public MapToolRenderer() { - MapTool.getEventDispatcher().addListener(this, MapTool.ZoneEvent.Activated); - } - - - @Override - public void create() { - width = Gdx.graphics.getWidth(); - height = Gdx.graphics.getHeight(); - - cam = new OrthographicCamera(); - cam.setToOrtho(false); - - batch = new SpriteBatch(); - initialized = true; - initializeZoneResources(); - } - - @Override - public void render() { - cam.update(); - batch.setProjectionMatrix(cam.combined); - - Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); - - batch.begin(); - - if (background != null) { - var startX = (cam.position.x - cam.viewportWidth*zoom/2); - startX = (int)(startX/background.getWidth()) * background.getWidth() - background.getWidth(); - var endX = cam.position.x + cam.viewportWidth/2*zoom; - var startY = (cam.position.y - cam.viewportHeight*zoom/2); - startY= (int)(startY/background.getHeight()) * background.getHeight() - background.getHeight(); - var endY = (cam.position.y + cam.viewportHeight/2*zoom); - - for(var i = startX; i < endX; i+= background.getWidth()) - for(var j = startY; j < endY; j += background.getHeight()) { - background.setPosition(i, j); - background.draw(batch); - } - } - - if (map != null) - map.draw(batch); - - batch.end(); - - if (jfxRenderer != null) { - Pixmap pixmap = ScreenUtils.getFrameBufferPixmap(0, 0, width, height); - jfxRenderer.setGdxBuffer(pixmap.getPixels()); - pixmap.dispose(); - } - } - - - @Override - public void resize(int width, int height) { - this.width = width; - this.height = height; - updateCam(); - } - - private void updateCam() { - cam.viewportWidth = width; - cam.viewportHeight = height; - cam.position.x = zoom *(width / 2f + offsetX); - cam.position.y = zoom *(height / 2f * - 1 + offsetY); - cam.zoom = zoom; - cam.update(); - } - - @Override - public void dispose() { - batch.dispose(); - } - - public void setJfxRenderer(NativeRenderer renderer) { - jfxRenderer = renderer; - } - - public static void main(String[] args) { - LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration(); - cfg.title = "MapTool libgdx Test!"; - cfg.width = 800; - cfg.height = 600; - - new LwjglApplication(new MapToolRenderer(), cfg); - } - - private void disposeZoneResources() { - if (!initialized) - return; - - cam.zoom = 1.0f; - offsetX = 0; - offsetY = 0; - - Gdx.app.postRunnable(() -> { - updateCam(); - var background = this.background; - this.background = null; - if (background != null) { - background.getTexture().dispose(); - } - - var map = this.map; - this.map = null; - if (map != null) { - map.getTexture().dispose(); - } - }); - } - - private void initializeZoneResources() { - if (zone == null || !initialized) - return; - - var backgroundPaint = zone.getBackgroundPaint(); - if (backgroundPaint instanceof DrawableTexturePaint) { - var texturePaint = (DrawableTexturePaint) backgroundPaint; - var image = texturePaint.getAsset().getImage(); - Gdx.app.postRunnable(() -> { - var pix = new Pixmap(image, 0, image.length); - background = new Sprite(new Texture(pix)); - background.setSize(pix.getWidth(), pix.getHeight()); - background.setPosition(0, -1 * background.getHeight()); - pix.dispose(); - }); - } - if (backgroundPaint instanceof DrawableColorPaint) { - var colorPaint = (DrawableColorPaint) backgroundPaint; - var colorValue = colorPaint.getColor(); - var color = new Color(); - Color.argb8888ToColor(color, colorValue); - Gdx.app.postRunnable(() -> { - var pix = new Pixmap(64, 64, Pixmap.Format.RGBA8888); - - pix.setColor(color); - pix.fill(); - background = new Sprite(new Texture(pix)); - background.setSize(pix.getWidth(), pix.getHeight()); - background.setPosition(0, -1 * background.getHeight()); - pix.dispose(); - }); - } - var mapAssetId = zone.getMapAssetId(); - if (mapAssetId != null) { - var mapBytes = AssetManager.getAsset(mapAssetId).getImage(); - Gdx.app.postRunnable(() -> { - var pix = new Pixmap(mapBytes, 0, mapBytes.length); - map = new Sprite(new Texture(pix)); - map.setPosition(zone.getBoardX(), zone.getBoardY() - pix.getHeight()); - map.setSize(pix.getWidth(), pix.getHeight()); - pix.dispose(); - }); - } - - } - - - @Override - public void handleAppEvent(AppEvent event) { - if (event.getId() != MapTool.ZoneEvent.Activated) - return; - - if (zone != null) - disposeZoneResources(); - - this.zone = (Zone) event.getNewValue(); - initializeZoneResources(); - } - - @Override - public void modelChanged(ModelChangeEvent event) { - // for now quick and dirty - disposeZoneResources(); - initializeZoneResources(); - } - - public void setScale(Scale scale) { - offsetX = scale.getOffsetX() * -1; - offsetY = scale.getOffsetY(); - zoom = (float)(1f/scale.getScale()); - updateCam(); - } -} diff --git a/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java b/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java index b775c21be5..6647eed9f5 100644 --- a/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java +++ b/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java @@ -1,6 +1,5 @@ package net.rptools.maptool.box2d; -import com.badlogic.gdx.Gdx; import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.backends.lwjgl.LwjglApplication; import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; @@ -75,7 +74,7 @@ public void init() { config.forceExit = false; LwjglApplicationConfiguration.disableAudio = true; - var appListender = MapToolRenderer.getInstance(); + var appListender = GdxRenderer.getInstance(); appListender.setJfxRenderer(this); //gdxInput = box; diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index be18c684f8..7a00db1062 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -14,8 +14,6 @@ */ package net.rptools.maptool.client.ui; -import com.badlogic.gdx.backends.lwjgl.LwjglApplication; -import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; import com.jidesoft.docking.DefaultDockableHolder; import com.jidesoft.docking.DockableFrame; import java.awt.*; @@ -23,7 +21,6 @@ import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; -import java.lang.reflect.InvocationTargetException; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; @@ -43,12 +40,9 @@ import javafx.application.Platform; import javafx.embed.swing.JFXPanel; -import javafx.embed.swing.SwingNode; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.layout.StackPane; -import javafx.scene.web.WebEngine; -import javafx.scene.web.WebView; import net.rptools.lib.AppEvent; import net.rptools.lib.AppEventListener; import net.rptools.lib.FileUtil; @@ -59,7 +53,6 @@ import net.rptools.lib.swing.PositionalLayout; import net.rptools.lib.swing.SwingUtil; import net.rptools.lib.swing.preference.WindowPreferences; -import net.rptools.maptool.box2d.MapToolRenderer; import net.rptools.maptool.box2d.NativeRenderingCanvas; import net.rptools.maptool.client.AppActions; import net.rptools.maptool.client.AppActions.ClientAction; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index 0615580282..3d9d0e9c41 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -60,7 +60,7 @@ import net.rptools.lib.swing.ImageBorder; import net.rptools.lib.swing.ImageLabel; import net.rptools.lib.swing.SwingUtil; -import net.rptools.maptool.box2d.MapToolRenderer; +import net.rptools.maptool.box2d.GdxRenderer; import net.rptools.maptool.client.AppActions; import net.rptools.maptool.client.AppConstants; import net.rptools.maptool.client.AppPreferences; @@ -792,25 +792,25 @@ public void removeOverlay(ZoneOverlay overlay) { public void moveViewBy(int dx, int dy) { setViewOffset(getViewOffsetX() + dx, getViewOffsetY() + dy); - MapToolRenderer.getInstance().setScale(zoneScale); + GdxRenderer.getInstance().setScale(zoneScale); } public void zoomReset(int x, int y) { zoneScale.zoomReset(x, y); MapTool.getFrame().getZoomStatusBar().update(); - MapToolRenderer.getInstance().setScale(zoneScale); + GdxRenderer.getInstance().setScale(zoneScale); } public void zoomIn(int x, int y) { zoneScale.zoomIn(x, y); MapTool.getFrame().getZoomStatusBar().update(); - MapToolRenderer.getInstance().setScale(zoneScale); + GdxRenderer.getInstance().setScale(zoneScale); } public void zoomOut(int x, int y) { zoneScale.zoomOut(x, y); MapTool.getFrame().getZoomStatusBar().update(); - MapToolRenderer.getInstance().setScale(zoneScale); + GdxRenderer.getInstance().setScale(zoneScale); } public void setView(int x, int y, double scale) { @@ -819,7 +819,7 @@ public void setView(int x, int y, double scale) { zoneScale.setScale(scale); MapTool.getFrame().getZoomStatusBar().update(); - MapToolRenderer.getInstance().setScale(zoneScale); + GdxRenderer.getInstance().setScale(zoneScale); } public void enforceView(int x, int y, double scale, int gmWidth, int gmHeight) { @@ -840,7 +840,7 @@ public void enforceView(int x, int y, double scale, int gmWidth, int gmHeight) { setScale(scale); centerOn(new ZonePoint(x, y)); - MapToolRenderer.getInstance().setScale(zoneScale); + GdxRenderer.getInstance().setScale(zoneScale); } public void restoreView() { @@ -849,7 +849,7 @@ public void restoreView() { centerOn(previousZonePoint); setScale(previousScale); - MapToolRenderer.getInstance().setScale(zoneScale); + GdxRenderer.getInstance().setScale(zoneScale); } public void forcePlayersView() { @@ -892,16 +892,23 @@ public void paintComponent(Graphics g) { PlayerView pl = getPlayerView(); timer.stop("paintComponent:createView"); - renderZone(g2d, pl); - int noteVPos = 20; - if (!zone.isVisible() && pl.isGMView()) { - GraphicsUtil.drawBoxedString( - g2d, "Map not visible to players", getSize().width / 2, noteVPos); - noteVPos += 20; - } - if (AppState.isShowAsPlayer()) { - GraphicsUtil.drawBoxedString(g2d, "Player View", getSize().width / 2, noteVPos); + if(MapTool.getFrame().getJfxPanel().isVisible()) { + // zoneoverlays and gridcoordinates are still drawn with Graphics2D + renderOverlays(g2d, pl); + return; + } else { + renderZone(g2d, pl); + int noteVPos = 20; + if (!zone.isVisible() && pl.isGMView()) { + GraphicsUtil.drawBoxedString( + g2d, "Map not visible to players", getSize().width / 2, noteVPos); + noteVPos += 20; + } + if (AppState.isShowAsPlayer()) { + GraphicsUtil.drawBoxedString(g2d, "Player View", getSize().width / 2, noteVPos); + } } + if (timer.isEnabled()) { String results = timer.toString(); MapTool.getProfilingNoteFrame().addText(results); @@ -1132,9 +1139,6 @@ public void invalidateCurrentViewCache() { * @param view PlayerView object that describes whether the view is a Player or GM view */ public void renderZone(Graphics2D g2d, PlayerView view) { - if(MapTool.getFrame().getJfxPanel().isVisible()) - return; - timer.start("setup"); g2d.setFont(AppStyle.labelFont); Object oldAA = SwingUtil.useAntiAliasing(g2d); @@ -1420,6 +1424,25 @@ public void renderZone(Graphics2D g2d, PlayerView view) { renderPlayerVisionOverlay(g2d, view); timer.stop("visionOverlayPlayer"); } + + renderOverlays(g2d, view); + // g2d.setColor(Color.red); + // for (AreaMeta meta : getTopologyAreaData().getAreaList()) { + // Area area = new + // Area(meta.getArea().getBounds()).createTransformedArea(AffineTransform.getScaleInstance(getScale(), + // getScale())); + // area = + // area.createTransformedArea(AffineTransform.getTranslateInstance(zoneScale.getOffsetX(), + // zoneScale.getOffsetY())); + // g2d.draw(area); + // } + SwingUtil.restoreAntiAliasing(g2d, oldAA); + if (resetClip) { + g2d.setClip(null); + } + } + + private void renderOverlays(Graphics2D g2d, PlayerView view) { timer.start("overlays"); for (ZoneOverlay overlay : overlayList) { String msg = null; @@ -1443,20 +1466,6 @@ public void renderZone(Graphics2D g2d, PlayerView view) { lightSourceIconOverlay.paintOverlay(this, g2d); } timer.stop("lightSourceIconOverlay.paintOverlay"); - // g2d.setColor(Color.red); - // for (AreaMeta meta : getTopologyAreaData().getAreaList()) { - // Area area = new - // Area(meta.getArea().getBounds()).createTransformedArea(AffineTransform.getScaleInstance(getScale(), - // getScale())); - // area = - // area.createTransformedArea(AffineTransform.getTranslateInstance(zoneScale.getOffsetX(), - // zoneScale.getOffsetY())); - // g2d.draw(area); - // } - SwingUtil.restoreAntiAliasing(g2d, oldAA); - if (resetClip) { - g2d.setClip(null); - } } private void delayRendering(ItemRenderer renderer) { @@ -2028,6 +2037,11 @@ public Area getVisibleArea(Token token) { return zoneView.getVisibleArea(token); } + public String getLoadingProgress() { + return loadingProgress; + } + + public boolean isLoading() { if (isLoaded) { // We're done, until the cache is cleared @@ -2151,7 +2165,7 @@ protected void renderCoordinates(Graphics2D g, PlayerView view) { } } - private Set getOwnedMovementSet(PlayerView view) { + public Set getOwnedMovementSet(PlayerView view) { Set movementSet = new HashSet(); for (SelectionSet selection : selectionSetMap.values()) { if (selection.getPlayerId().equals(MapTool.getPlayer().getName())) { @@ -2161,7 +2175,7 @@ private Set getOwnedMovementSet(PlayerView view) { return movementSet; } - private Set getUnOwnedMovementSet(PlayerView view) { + public Set getUnOwnedMovementSet(PlayerView view) { Set movementSet = new HashSet(); for (SelectionSet selection : selectionSetMap.values()) { if (!selection.getPlayerId().equals(MapTool.getPlayer().getName())) { From 16b5ab4c2d903d4ef1342d8e115b4b0628a57b96 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Tue, 6 Apr 2021 03:27:31 +0200 Subject: [PATCH 008/139] center hudtext --- src/main/java/net/rptools/maptool/box2d/GdxRenderer.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java b/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java index 0ad8e8a365..d83b716578 100644 --- a/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java @@ -7,6 +7,7 @@ import com.badlogic.gdx.graphics.*; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.GlyphLayout; import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.utils.ScreenUtils; @@ -61,6 +62,7 @@ public static GdxRenderer getInstance() { private int width; private int height; private BitmapFont font; + private GlyphLayout glyphLayout; private CodeTimer timer; public GdxRenderer() { @@ -81,6 +83,7 @@ public void create() { batch = new SpriteBatch(); hudBatch = new SpriteBatch(); font = new BitmapFont(); + glyphLayout = new GlyphLayout(); initialized = true; initializeZoneResources(); } @@ -155,7 +158,7 @@ else if (MapTool.getCampaign().isBeingSerialized()) drawBoxedString("Player View", width / 2, height - noteVPos); } - drawBoxedString(String.valueOf(Gdx.graphics.getFramesPerSecond()), 10, 20); + drawBoxedString(String.valueOf(Gdx.graphics.getFramesPerSecond()), 10, 10); hudBatch.end(); @@ -396,7 +399,8 @@ private void renderDrawableOverlay(PlayerView view, List drawables } private void drawBoxedString(String text, int centerX, int centerY) { - font.draw(hudBatch, text, centerX, centerY); + glyphLayout.setText(font, text); + font.draw(hudBatch, text, centerX-glyphLayout.width/2, centerY+glyphLayout.height/2); } private void renderBoard() { From db5e6c9116dddd1bd89e2b9271d857385c07bbe2 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Tue, 6 Apr 2021 21:32:46 +0200 Subject: [PATCH 009/139] start with token rendering --- .../rptools/maptool/box2d/GdxRenderer.java | 584 +++++++++++++++++- .../maptool/client/ui/zone/ZoneRenderer.java | 7 +- .../java/net/rptools/maptool/model/Token.java | 17 + 3 files changed, 595 insertions(+), 13 deletions(-) diff --git a/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java b/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java index d83b716578..58106bb0cb 100644 --- a/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java @@ -15,18 +15,34 @@ import net.rptools.lib.AppEventListener; import net.rptools.lib.CodeTimer; import net.rptools.lib.MD5Key; -import net.rptools.maptool.client.AppState; -import net.rptools.maptool.client.MapTool; +import net.rptools.lib.swing.ImageBorder; +import net.rptools.lib.swing.ImageLabel; +import net.rptools.lib.swing.SwingUtil; +import net.rptools.maptool.client.*; +import net.rptools.maptool.client.tool.drawing.FreehandExposeTool; +import net.rptools.maptool.client.tool.drawing.OvalExposeTool; +import net.rptools.maptool.client.tool.drawing.PolygonExposeTool; +import net.rptools.maptool.client.tool.drawing.RectangleExposeTool; import net.rptools.maptool.client.ui.Scale; +import net.rptools.maptool.client.ui.Tool; +import net.rptools.maptool.client.ui.token.AbstractTokenOverlay; +import net.rptools.maptool.client.ui.token.BarTokenOverlay; import net.rptools.maptool.client.ui.zone.PlayerView; import net.rptools.maptool.client.ui.zone.ZoneRenderer; +import net.rptools.maptool.client.ui.zone.ZoneView; import net.rptools.maptool.model.*; import net.rptools.maptool.model.drawing.DrawableColorPaint; import net.rptools.maptool.model.drawing.DrawableTexturePaint; import net.rptools.maptool.model.drawing.DrawnElement; +import net.rptools.maptool.util.GraphicsUtil; +import net.rptools.maptool.util.StringUtil; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import javax.swing.*; +import java.awt.*; +import java.awt.geom.*; +import java.awt.image.BufferedImage; import java.util.*; import java.util.List; @@ -35,6 +51,10 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private static final Logger log = LogManager.getLogger(GdxRenderer.class); private static GdxRenderer _instance; + //from renderToken: + private Area visibleScreenArea; + private Area exposedFogArea; + public static GdxRenderer getInstance() { if (_instance == null) @@ -45,6 +65,7 @@ public static GdxRenderer getInstance() { // zone specific resources private Zone zone; private ZoneRenderer zoneRenderer; + private ZoneView zoneView; private Sprite background; private MD5Key mapAssetId; private final Map sprites = new HashMap<>(); @@ -199,6 +220,19 @@ private void renderZone(PlayerView view) { if (zoneRenderer.isLoading() || MapTool.getCampaign().isBeingSerialized()) return; + // Calculations + timer.start("calcs-1"); + if (visibleScreenArea == null && zoneView.isUsingVision()) { + timer.start("ZoneRenderer-getVisibleArea"); + visibleScreenArea = zoneView.getVisibleArea(view); + timer.stop("ZoneRenderer-getVisibleArea"); + } + + timer.stop("calcs-1"); + timer.start("calcs-2"); + exposedFogArea = new Area(zone.getExposedArea()); + timer.stop("calcs-2"); + renderBoard(); if (Zone.Layer.BACKGROUND.isEnabled()) { @@ -431,16 +465,527 @@ private void renderBoard() { } } - private void renderTokens(List background, PlayerView view, boolean figuresOnly) { - for (var token : background) { - var assetId = token.getImageAssetId(); - var sprite = sprites.get(assetId); - if (sprite == null) + private void renderTokens(List tokenList, PlayerView view, boolean figuresOnly) { + boolean isGMView = view.isGMView(); // speed things up + + Set tempVisTokens = new HashSet(); + + List tokenPostProcessing = new ArrayList(tokenList.size()); + for (Token token : tokenList) { + if (token.getShape() != Token.TokenShape.FIGURE && figuresOnly && !token.isAlwaysVisible()) { continue; + } + + timer.start("tokenlist-1"); + try { + if (token.isStamp() && zoneRenderer.isTokenMoving(token)) { + continue; + } + // Don't bother if it's not visible + // NOTE: Not going to use zone.isTokenVisible as it is very slow. In fact, it's faster + // to just draw the tokens and let them be clipped + if ((!token.isVisible() || token.isGMStamp()) && !isGMView) { + continue; + } + if (token.isVisibleOnlyToOwner() && !AppUtil.playerOwns(token)) { + continue; + } + } finally { + // This ensures that the timer is always stopped + timer.stop("tokenlist-1"); + } + + timer.start("tokenlist-1b"); + + // get token image sprite, using image table if present + var imageKey = token.getTokenImageAssetId(); + var image = sprites.get(imageKey); + if (image == null) + continue; + + timer.stop("tokenlist-1b"); + + timer.start("tokenlist-1a"); + Rectangle footprintBounds = token.getBounds(zone); + image.setPosition(footprintBounds.x, - footprintBounds.y - footprintBounds.height); + image.setSize(footprintBounds.width, footprintBounds.height); + + // Rotated + if (token.hasFacing() && token.getShape() == Token.TokenShape.TOP_DOWN) + image.setRotation(-token.getFacing() - 90); + + timer.stop("tokenlist-1a"); + + timer.start("tokenlist-1e"); + try { + var awtRect = toAwtRect(image.getBoundingRectangle()); + + // Vision visibility + if (!isGMView && token.isToken() && zoneView.isUsingVision()) { + if (!GraphicsUtil.intersects(visibleScreenArea, new Area(awtRect))) { + continue; + } + } + } finally { + // This ensures that the timer is always stopped + timer.stop("tokenlist-1e"); + } + + // Add the token to our visible set. + tempVisTokens.add(token.getId()); + + // Previous path + timer.start("renderTokens:ShowPath"); + if (zoneRenderer.getShowPathList().contains(token) && token.getLastPath() != null) { + renderPath(token.getLastPath(), token.getFootprint(zone.getGrid())); + } + timer.stop("renderTokens:ShowPath"); + + timer.start("tokenlist-5"); + + // handle flipping + image.setFlip(token.isFlippedX(), token.isFlippedY()); + timer.stop("tokenlist-5"); + + timer.start("tokenlist-5a"); + if (token.isFlippedIso()) { + //FIXME: later + /* + if (flipIsoImageMap.get(token) == null) { + workImage = IsometricGrid.isoImage(workImage); + flipIsoImageMap.put(token, workImage); + } else { + workImage = flipIsoImageMap.get(token); + } + token.setHeight(workImage.getHeight()); + token.setWidth(workImage.getWidth()); + footprintBounds = token.getBounds(zone);*/ + } + timer.stop("tokenlist-5a"); +/* + timer.start("tokenlist-6"); + // Position + // For Isometric Grid we alter the height offset + double iso_ho = 0; + Dimension imgSize = new Dimension(workImage.getWidth(), workImage.getHeight()); + if (token.getShape() == Token.TokenShape.FIGURE) { + double th = token.getHeight() * (double) footprintBounds.width / token.getWidth(); + iso_ho = footprintBounds.height - th; + footprintBounds = + new Rectangle( + footprintBounds.x, + footprintBounds.y - (int) iso_ho, + footprintBounds.width, + (int) th); + iso_ho = iso_ho * getScale(); + } + SwingUtil.constrainTo(imgSize, footprintBounds.width, footprintBounds.height); +*/ + + timer.stop("tokenlist-6"); +/* + // Render Halo + if (token.hasHalo()) { + tokenG.setStroke(new BasicStroke(AppPreferences.getHaloLineWidth())); + tokenG.setColor(token.getHaloColor()); + tokenG.draw(zone.getGrid().getTokenCellArea(tokenBounds)); + } + */ + + // Calculate alpha Transparency from token and use opacity for indicating that token is moving + float opacity = token.getTokenOpacity(); + if (zoneRenderer.isTokenMoving(token)) opacity = opacity / 2.0f; + + // Finally render the token image + timer.start("tokenlist-7"); + if (!isGMView && zoneView.isUsingVision() && (token.getShape() == Token.TokenShape.FIGURE)) { + Area cb = zone.getGrid().getTokenCellArea(toAwtRect(image.getBoundingRectangle())); + if (GraphicsUtil.intersects(visibleScreenArea, cb)) { + // the cell intersects visible area so + var oldAlpha = image.getColor().a; + image.setAlpha(opacity); + image.draw(batch); + image.setAlpha(oldAlpha); + } + } else if (!isGMView && zoneView.isUsingVision() && token.isAlwaysVisible()) { + // Jamz: Always Visible tokens will get rendered again here to place on top of FoW + Area cb = zone.getGrid().getTokenCellArea(toAwtRect(image.getBoundingRectangle())); + if (GraphicsUtil.intersects(visibleScreenArea, cb)) { + // if we can see a portion of the stamp/token, draw the whole thing, defaults to 2/9ths + // the cell intersects visible area so + var oldAlpha = image.getColor().a; + image.setAlpha(opacity); + image.draw(batch); + image.setAlpha(oldAlpha); + } + } else { + // fallthrough normal token rendered against visible area + image.draw(batch); + } + timer.stop("tokenlist-7"); +/* + timer.start("tokenlist-8"); + + // Facing ? + // TODO: Optimize this by doing it once per token per facing + if (token.hasFacing()) { + Token.TokenShape tokenType = token.getShape(); + switch (tokenType) { + case FIGURE: + if (token.getHasImageTable() + && token.hasFacing() + && AppPreferences.getForceFacingArrow() == false) { + break; + } + Shape arrow = getFigureFacingArrow(token.getFacing(), footprintBounds.width / 2); + + if (!zone.getGrid().isIsometric()) { + arrow = getCircleFacingArrow(token.getFacing(), footprintBounds.width / 2); + } + + double fx = location.x + location.scaledWidth / 2; + double fy = location.y + location.scaledHeight / 2; + + tokenG.translate(fx, fy); + if (token.getFacing() < 0) { + tokenG.setColor(java.awt.Color.yellow); + } else { + tokenG.setColor(TRANSLUCENT_YELLOW); + } + tokenG.fill(arrow); + tokenG.setColor(java.awt.Color.darkGray); + tokenG.draw(arrow); + tokenG.translate(-fx, -fy); + break; + case TOP_DOWN: + if (AppPreferences.getForceFacingArrow() == false) { + break; + } + case CIRCLE: + arrow = getCircleFacingArrow(token.getFacing(), footprintBounds.width / 2); + if (zone.getGrid().isIsometric()) { + arrow = getFigureFacingArrow(token.getFacing(), footprintBounds.width / 2); + } + + double cx = location.x + location.scaledWidth / 2; + double cy = location.y + location.scaledHeight / 2; + + tokenG.translate(cx, cy); + tokenG.setColor(java.awt.Color.yellow); + tokenG.fill(arrow); + tokenG.setColor(java.awt.Color.darkGray); + tokenG.draw(arrow); + tokenG.translate(-cx, -cy); + break; + case SQUARE: + if (zone.getGrid().isIsometric()) { + arrow = getFigureFacingArrow(token.getFacing(), footprintBounds.width / 2); + cx = location.x + location.scaledWidth / 2; + cy = location.y + location.scaledHeight / 2; + } else { + int facing = token.getFacing(); + while (facing < 0) { + facing += 360; + } // TODO: this should really be done in Token.setFacing() but I didn't want to take + // the chance + // of breaking something, so change this when it's safe to break stuff + facing %= 360; + arrow = getSquareFacingArrow(facing, footprintBounds.width / 2); + + cx = location.x + location.scaledWidth / 2; + cy = location.y + location.scaledHeight / 2; + + // Find the edge of the image + // TODO: Man, this is horrible, there's gotta be a better way to do this + double xp = location.scaledWidth / 2; + double yp = location.scaledHeight / 2; + if (facing >= 45 && facing <= 135 || facing >= 225 && facing <= 315) { + xp = (int) (yp / Math.tan(Math.toRadians(facing))); + if (facing > 180) { + xp = -xp; + yp = -yp; + } + } else { + yp = (int) (xp * Math.tan(Math.toRadians(facing))); + if (facing > 90 && facing < 270) { + xp = -xp; + yp = -yp; + } + } + cx += xp; + cy -= yp; + } + + tokenG.translate(cx, cy); + tokenG.setColor(java.awt.Color.yellow); + tokenG.fill(arrow); + tokenG.setColor(java.awt.Color.darkGray); + tokenG.draw(arrow); + tokenG.translate(-cx, -cy); + break; + } + } + timer.stop("tokenlist-8"); + + timer.start("tokenlist-9"); + // Set up the graphics so that the overlay can just be painted. + Graphics2D locg = + (Graphics2D) + tokenG.create( + (int) tokenBounds.getBounds().getX(), + (int) tokenBounds.getBounds().getY(), + (int) tokenBounds.getBounds().getWidth(), + (int) tokenBounds.getBounds().getHeight()); + Rectangle bounds = + new Rectangle( + 0, + 0, + (int) tokenBounds.getBounds().getWidth(), + (int) tokenBounds.getBounds().getHeight()); + + // Check each of the set values + for (String state : MapTool.getCampaign().getTokenStatesMap().keySet()) { + Object stateValue = token.getState(state); + AbstractTokenOverlay overlay = MapTool.getCampaign().getTokenStatesMap().get(state); + if (stateValue instanceof AbstractTokenOverlay) { + overlay = (AbstractTokenOverlay) stateValue; + } + if (overlay == null + || overlay.isMouseover() && token != tokenUnderMouse + || !overlay.showPlayer(token, MapTool.getPlayer())) { + continue; + } + overlay.paintOverlay(locg, token, bounds, stateValue); + } + timer.stop("tokenlist-9"); + + timer.start("tokenlist-10"); - sprite.setPosition(token.getX(), -1 * token.getY() - token.getHeight()); - sprite.draw(batch); + for (String bar : MapTool.getCampaign().getTokenBarsMap().keySet()) { + Object barValue = token.getState(bar); + BarTokenOverlay overlay = MapTool.getCampaign().getTokenBarsMap().get(bar); + if (overlay == null + || overlay.isMouseover() && token != tokenUnderMouse + || !overlay.showPlayer(token, MapTool.getPlayer())) { + continue; + } + + overlay.paintOverlay(locg, token, bounds, barValue); + } // endfor + locg.dispose(); + timer.stop("tokenlist-10"); + + timer.start("tokenlist-11"); + // Keep track of which tokens have been drawn so we can perform post-processing on them later + // (such as selection borders and names/labels) + if (zoneRenderer.getActiveLayer().equals(token.getLayer())) { + tokenPostProcessing.add(token); + } + timer.stop("tokenlist-11"); +*/ } + /* + timer.start("tokenlist-12"); + boolean useIF = MapTool.getServerPolicy().isUseIndividualFOW(); + // Selection and labels + for (Token token : tokenPostProcessing) { + ZoneRenderer.TokenLocation location = tokenLocationCache.get(token); + if (location == null) { + continue; + } + Area bounds = location.bounds; + + // TODO: This isn't entirely accurate as it doesn't account for the actual text + // to be in the clipping bounds, but I'll fix that later + if (!bounds.getBounds().intersects(clipBounds)) { + continue; + } + Rectangle footprintBounds = token.getBounds(zone); + + boolean isSelected = selectedTokenSet.contains(token.getId()); + if (isSelected) { + ScreenPoint sp = ScreenPoint.fromZonePoint(this, footprintBounds.x, footprintBounds.y); + double width = footprintBounds.width * getScale(); + double height = footprintBounds.height * getScale(); + + ImageBorder selectedBorder = + token.isStamp() ? AppStyle.selectedStampBorder : AppStyle.selectedBorder; + if (highlightCommonMacros.contains(token)) { + selectedBorder = AppStyle.commonMacroBorder; + } + if (!AppUtil.playerOwns(token)) { + selectedBorder = AppStyle.selectedUnownedBorder; + } + if (useIF && !token.isStamp() && zoneView.isUsingVision()) { + Tool tool = MapTool.getFrame().getToolbox().getSelectedTool(); + if (tool + instanceof + RectangleExposeTool // XXX Change to use marker interface such as ExposeTool? + || tool instanceof OvalExposeTool + || tool instanceof FreehandExposeTool + || tool instanceof PolygonExposeTool) { + selectedBorder = AppConstants.FOW_TOOLS_BORDER; + } + } + if (token.hasFacing() + && (token.getShape() == Token.TokenShape.TOP_DOWN || token.isStamp())) { + AffineTransform oldTransform = clippedG.getTransform(); + + // Rotated + clippedG.translate(sp.x, sp.y); + clippedG.rotate( + Math.toRadians(-token.getFacing() - 90), + width / 2 - (token.getAnchor().x * scale), + height / 2 - (token.getAnchor().y * scale)); // facing defaults to down, or -90 + // degrees + selectedBorder.paintAround(clippedG, 0, 0, (int) width, (int) height); + + clippedG.setTransform(oldTransform); + } else { + selectedBorder.paintAround(clippedG, (int) sp.x, (int) sp.y, (int) width, (int) height); + } + // Remove labels from the cache if the corresponding tokens are deselected + } else if (!AppState.isShowTokenNames()) { + labelRenderingCache.remove(token.getId()); + } + + // Token names and labels + boolean showCurrentTokenLabel = AppState.isShowTokenNames() || token == tokenUnderMouse; + + // if policy does not auto-reveal FoW, check if fog covers the token (slow) + if (showCurrentTokenLabel + && !isGMView + && (!zoneView.isUsingVision() || !MapTool.getServerPolicy().isAutoRevealOnMovement()) + && !zone.isTokenVisible(token)) { + showCurrentTokenLabel = false; + } + if (showCurrentTokenLabel) { + GUID tokId = token.getId(); + int offset = 3; // Keep it from tramping on the token border. + ImageLabel background; + java.awt.Color foreground; + + if (token.isVisible()) { + if (token.getType() == Token.Type.NPC) { + background = GraphicsUtil.BLUE_LABEL; + foreground = java.awt.Color.WHITE; + } else { + background = GraphicsUtil.GREY_LABEL; + foreground = java.awt.Color.BLACK; + } + } else { + background = GraphicsUtil.DARK_GREY_LABEL; + foreground = java.awt.Color.WHITE; + } + String name = token.getName(); + if (isGMView && token.getGMName() != null && !StringUtil.isEmpty(token.getGMName())) { + name += " (" + token.getGMName() + ")"; + } + if (!view.equals(lastView) || !labelRenderingCache.containsKey(tokId)) { + // if ((lastView != null && !lastView.equals(view)) || + // !labelRenderingCache.containsKey(tokId)) { + boolean hasLabel = false; + + // Calculate image dimensions + FontMetrics fm = g.getFontMetrics(); + Font f = g.getFont(); + int strWidth = SwingUtilities.computeStringWidth(fm, name); + + int width = strWidth + GraphicsUtil.BOX_PADDINGX * 2; + int height = fm.getHeight() + GraphicsUtil.BOX_PADDINGY * 2; + int labelHeight = height; + + // If token has a label (in addition to name). + if (token.getLabel() != null && token.getLabel().trim().length() > 0) { + hasLabel = true; + height = height * 2; // Double the image height for two boxed strings. + int labelWidth = + SwingUtilities.computeStringWidth(fm, token.getLabel()) + + GraphicsUtil.BOX_PADDINGX * 2; + width = Math.max(width, labelWidth); + } + + // Set up the image + BufferedImage labelRender = new BufferedImage(width, height, Transparency.TRANSLUCENT); + Graphics2D gLabelRender = labelRender.createGraphics(); + gLabelRender.setFont(f); // Match font used in the main graphics context. + gLabelRender.setRenderingHints(g.getRenderingHints()); // Match rendering style. + + // Draw name and label to image + if (hasLabel) { + GraphicsUtil.drawBoxedString( + gLabelRender, + token.getLabel(), + width / 2, + height - (labelHeight / 2), + SwingUtilities.CENTER, + background, + foreground); + } + GraphicsUtil.drawBoxedString( + gLabelRender, + name, + width / 2, + labelHeight / 2, + SwingUtilities.CENTER, + background, + foreground); + + // Add image to cache + labelRenderingCache.put(tokId, labelRender); + } + // Create LabelRenderer using cached label. + Rectangle r = bounds.getBounds(); + delayRendering( + new ZoneRenderer.LabelRenderer( + name, + r.x + r.width / 2, + r.y + r.height + offset, + SwingUtilities.CENTER, + background, + foreground, + tokId)); + } + } + timer.stop("tokenlist-12"); + + timer.start("tokenlist-13"); + // Stacks + if (!tokenList.isEmpty() + && !tokenList.get(0).isStamp()) { // TODO: find a cleaner way to indicate token layer + if (tokenStackMap != null) { // FIXME Needed to prevent NPE but how can it be null? + for (Token token : tokenStackMap.keySet()) { + Area bounds = getTokenBounds(token); + if (bounds == null) { + // token is offscreen + continue; + } + BufferedImage stackImage = AppStyle.stackImage; + clippedG.drawImage( + stackImage, + bounds.getBounds().x + bounds.getBounds().width - stackImage.getWidth() + 2, + bounds.getBounds().y - 2, + null); + } + } + } + + // Markers + // for (TokenLocation location : getMarkerLocations()) { + // BufferedImage stackImage = AppStyle.markerImage; + // g.drawImage(stackImage, location.bounds.getBounds().x, location.bounds.getBounds().y, null); + // } + + timer.stop("tokenlist-13"); + + if (figuresOnly) { + tempVisTokens.addAll(visibleTokenSet); + } + + visibleTokenSet = Collections.unmodifiableSet(tempVisTokens);*/ + } + + private void renderPath(Path lastPath, TokenFootprint footprint) { } public void setJfxRenderer(NativeRenderer renderer) { @@ -539,17 +1084,32 @@ private void initializeZoneResources() { } + public java.awt.Rectangle toAwtRect(com.badlogic.gdx.math.Rectangle rectangle) + { + var awtRect = new java.awt.Rectangle(); + awtRect.x = (int) rectangle.x; + awtRect.y = (int) rectangle.y; + awtRect.width = (int) rectangle.width; + awtRect.height = (int) rectangle.height; + return awtRect; + } @Override public void handleAppEvent(AppEvent event) { if (event.getId() != MapTool.ZoneEvent.Activated) return; - if (zone != null) + if (zone != null) { disposeZoneResources(); + zone.removeModelChangeListener(this); + } + + var newZone = (Zone) event.getNewValue(); + newZone.addModelChangeListener(this); - this.zone = (Zone) event.getNewValue(); - this.zoneRenderer = MapTool.getFrame().getZoneRenderer(this.zone); + zone = newZone; + zoneView = new ZoneView(zone); + zoneRenderer = MapTool.getFrame().getZoneRenderer(zone); initializeZoneResources(); } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index 3d9d0e9c41..933a0759ef 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -340,6 +340,11 @@ public void clearShowPaths() { // repaintDebouncer.dispatch(); } + public List getShowPathList() { + return showPathList; + } + + /** * Resets the token panels, fire onTokenSelection, repaints. The impersonation panel is only reset * if no token is currently impersonated. @@ -3810,7 +3815,7 @@ private boolean isTokenInNeedOfClipping(Token token, Area tokenCellArea, boolean return true; } - private boolean canSeeMarker(Token token) { + public boolean canSeeMarker(Token token) { return MapTool.getPlayer().isGM() || !StringUtil.isEmpty(token.getNotes()); } diff --git a/src/main/java/net/rptools/maptool/model/Token.java b/src/main/java/net/rptools/maptool/model/Token.java index ae56fb29db..18a0f89481 100644 --- a/src/main/java/net/rptools/maptool/model/Token.java +++ b/src/main/java/net/rptools/maptool/model/Token.java @@ -1106,6 +1106,23 @@ public MD5Key getImageAssetId() { return assetId; } + public MD5Key getTokenImageAssetId() { + if (!getHasImageTable() || !hasFacing() || getImageTableName() == null) + return getImageAssetId(); + + LookupTable lookupTable = MapTool.getCampaign().getLookupTableMap().get(getImageTableName()); + if(lookupTable == null) + return getImageAssetId(); + + try { + LookupTable.LookupEntry result = lookupTable.getLookup(getFacing().toString()); + if (result != null) return result.getImageId(); + + } catch (ParserException p) { /* do nothing */ } + + return getImageAssetId(); + } + /** * Store the token image, and set the native Width and Height. * From be8e59874ebe8f469be7f3512b83df5431855cad Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Wed, 7 Apr 2021 13:09:18 +0200 Subject: [PATCH 010/139] add gdx-vfx --- build.gradle | 2 + .../rptools/maptool/box2d/GdxRenderer.java | 104 ++++++++++-------- .../rptools/maptool/box2d/NativeRenderer.java | 69 ++++++------ .../maptool/client/ui/MapToolFrame.java | 3 +- 4 files changed, 94 insertions(+), 84 deletions(-) diff --git a/build.gradle b/build.gradle index 90f6e95c67..ae8decf045 100644 --- a/build.gradle +++ b/build.gradle @@ -374,6 +374,8 @@ dependencies { implementation "com.badlogicgames.gdx:gdx-backend-lwjgl:$gdxVersion" implementation "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop" implementation "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-desktop" + implementation 'com.crashinvaders.vfx:gdx-vfx-core:0.5.0' + implementation 'com.crashinvaders.vfx:gdx-vfx-effects:0.5.0' } diff --git a/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java b/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java index 58106bb0cb..5f36656007 100644 --- a/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java @@ -4,29 +4,22 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.backends.lwjgl.LwjglApplication; import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; -import com.badlogic.gdx.graphics.*; import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.*; import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.GlyphLayout; import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.graphics.g2d.SpriteBatch; -import com.badlogic.gdx.utils.ScreenUtils; +import com.crashinvaders.vfx.VfxManager; +import com.crashinvaders.vfx.effects.*; import net.rptools.lib.AppEvent; import net.rptools.lib.AppEventListener; import net.rptools.lib.CodeTimer; import net.rptools.lib.MD5Key; -import net.rptools.lib.swing.ImageBorder; -import net.rptools.lib.swing.ImageLabel; -import net.rptools.lib.swing.SwingUtil; -import net.rptools.maptool.client.*; -import net.rptools.maptool.client.tool.drawing.FreehandExposeTool; -import net.rptools.maptool.client.tool.drawing.OvalExposeTool; -import net.rptools.maptool.client.tool.drawing.PolygonExposeTool; -import net.rptools.maptool.client.tool.drawing.RectangleExposeTool; +import net.rptools.maptool.client.AppState; +import net.rptools.maptool.client.AppUtil; +import net.rptools.maptool.client.MapTool; import net.rptools.maptool.client.ui.Scale; -import net.rptools.maptool.client.ui.Tool; -import net.rptools.maptool.client.ui.token.AbstractTokenOverlay; -import net.rptools.maptool.client.ui.token.BarTokenOverlay; import net.rptools.maptool.client.ui.zone.PlayerView; import net.rptools.maptool.client.ui.zone.ZoneRenderer; import net.rptools.maptool.client.ui.zone.ZoneView; @@ -35,44 +28,33 @@ import net.rptools.maptool.model.drawing.DrawableTexturePaint; import net.rptools.maptool.model.drawing.DrawnElement; import net.rptools.maptool.util.GraphicsUtil; -import net.rptools.maptool.util.StringUtil; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import javax.swing.*; + import java.awt.*; -import java.awt.geom.*; -import java.awt.image.BufferedImage; -import java.util.*; +import java.awt.geom.Area; import java.util.List; +import java.util.*; public class GdxRenderer extends ApplicationAdapter implements AppEventListener, ModelChangeListener { private static final Logger log = LogManager.getLogger(GdxRenderer.class); private static GdxRenderer _instance; + private final Map sprites = new HashMap<>(); //from renderToken: private Area visibleScreenArea; private Area exposedFogArea; - - - public static GdxRenderer getInstance() { - if (_instance == null) - _instance = new GdxRenderer(); - return _instance; - } - // zone specific resources private Zone zone; private ZoneRenderer zoneRenderer; private ZoneView zoneView; private Sprite background; private MD5Key mapAssetId; - private final Map sprites = new HashMap<>(); private int offsetX = 0; private int offsetY = 0; private float zoom = 1.0f; - // general resources private OrthographicCamera cam; private OrthographicCamera hudCam; @@ -85,11 +67,28 @@ public static GdxRenderer getInstance() { private BitmapFont font; private GlyphLayout glyphLayout; private CodeTimer timer; + private VfxManager vfxManager; + private ChainVfxEffect vfxEffect; public GdxRenderer() { MapTool.getEventDispatcher().addListener(this, MapTool.ZoneEvent.Activated); } + public static GdxRenderer getInstance() { + if (_instance == null) + _instance = new GdxRenderer(); + return _instance; + } + + public static void main(String[] args) { + LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration(); + cfg.title = "MapTool libgdx Test!"; + cfg.width = 800; + cfg.height = 600; + + new LwjglApplication(new GdxRenderer(), cfg); + } + @Override public void create() { width = Gdx.graphics.getWidth(); @@ -105,6 +104,10 @@ public void create() { hudBatch = new SpriteBatch(); font = new BitmapFont(); glyphLayout = new GlyphLayout(); + vfxManager = new VfxManager(Pixmap.Format.RGBA8888); + vfxEffect = new BloomEffect(); + vfxManager.addEffect(vfxEffect); + initialized = true; initializeZoneResources(); } @@ -114,6 +117,8 @@ public void dispose() { batch.dispose(); hudBatch.dispose(); font.dispose(); + vfxManager.dispose(); + vfxEffect.dispose(); disposeZoneResources(); } @@ -122,9 +127,9 @@ public void resize(int width, int height) { this.width = width; this.height = height; updateCam(); + vfxManager.resize(width, height); } - private void updateCam() { cam.viewportWidth = width; cam.viewportHeight = height; @@ -142,9 +147,28 @@ private void updateCam() { @Override public void render() { + vfxManager.cleanUpBuffers(); + + // Begin render to an off-screen buffer. + vfxManager.beginInputCapture(); + doRendering(); + vfxManager.endInputCapture(); + + // Apply the effects chain to the captured frame. + // In our case, only one effect (gaussian blur) will be applied. + vfxManager.applyEffects(); + + copyFramebufferToJfx(); + // Render result to the screen. + vfxManager.renderToScreen(); + + } + + private void doRendering() { Gdx.gl.glClearColor(0, 0, 0, 0); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + if (zone == null) return; @@ -184,8 +208,6 @@ else if (MapTool.getCampaign().isBeingSerialized()) hudBatch.end(); collectTimerResults(); - - copyFramebufferToJfx(); } private void collectTimerResults() { @@ -212,6 +234,7 @@ private void copyFramebufferToJfx() { if (jfxRenderer != null) { Pixmap pixmap = Pixmap.createFromFrameBuffer(0, 0, width, height); jfxRenderer.setGdxBuffer(pixmap.getPixels()); + pixmap.dispose(); } } @@ -434,7 +457,7 @@ private void renderDrawableOverlay(PlayerView view, List drawables private void drawBoxedString(String text, int centerX, int centerY) { glyphLayout.setText(font, text); - font.draw(hudBatch, text, centerX-glyphLayout.width/2, centerY+glyphLayout.height/2); + font.draw(hudBatch, text, centerX - glyphLayout.width / 2, centerY + glyphLayout.height / 2); } private void renderBoard() { @@ -507,7 +530,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure timer.start("tokenlist-1a"); Rectangle footprintBounds = token.getBounds(zone); - image.setPosition(footprintBounds.x, - footprintBounds.y - footprintBounds.height); + image.setPosition(footprintBounds.x, -footprintBounds.y - footprintBounds.height); image.setSize(footprintBounds.width, footprintBounds.height); // Rotated @@ -992,15 +1015,6 @@ public void setJfxRenderer(NativeRenderer renderer) { jfxRenderer = renderer; } - public static void main(String[] args) { - LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration(); - cfg.title = "MapTool libgdx Test!"; - cfg.width = 800; - cfg.height = 600; - - new LwjglApplication(new GdxRenderer(), cfg); - } - private void disposeZoneResources() { if (!initialized) return; @@ -1078,14 +1092,14 @@ private void initializeZoneResources() { pix.dispose(); } }); - } catch (InterruptedException e) {} + } catch (InterruptedException e) { + } }).start(); } - public java.awt.Rectangle toAwtRect(com.badlogic.gdx.math.Rectangle rectangle) - { + public java.awt.Rectangle toAwtRect(com.badlogic.gdx.math.Rectangle rectangle) { var awtRect = new java.awt.Rectangle(); awtRect.x = (int) rectangle.x; awtRect.y = (int) rectangle.y; diff --git a/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java b/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java index 6647eed9f5..cbf6ddda54 100644 --- a/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java +++ b/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java @@ -6,60 +6,41 @@ import javafx.application.Platform; import javax.swing.*; -import java.awt.Canvas; +import java.awt.*; import java.nio.ByteBuffer; public class NativeRenderer implements InputProcessor { - private class RendererConfig { - public int width; - public int height; - public int currentBufferIndex; - public int singleBufferSize; - public ByteBuffer renderBuffer; - byte[] flippedBuffer; - } - - + public static final int BufferCount = 2; + public static final int BytePerInt = 4; private ByteBuffer gdxBuffer; private RendererConfig oldConfig; private RendererConfig newConfig; - - - public static final int BufferCount = 2; - public static final int BytePerInt = 4; - private InputProcessor gdxInput; private Canvas canvas; private LwjglApplication app; private NativeRenderingCanvas nativeCanvas; - public NativeRenderer(Canvas dummyCanvas, NativeRenderingCanvas nativeRenderingCanvas) { canvas = dummyCanvas; nativeCanvas = nativeRenderingCanvas; } - // Initialization and disposal: - public void setGdxBuffer(ByteBuffer buffer) { + gdxBuffer = buffer; + fixColors(); + flip(); - //synchronized (this) { - gdxBuffer = buffer; - fixColors(); - flip(); - var bufferIndex = render(); - Platform.runLater(() -> nativeCanvas.renderUpdate(oldConfig.renderBuffer, bufferIndex, oldConfig.width, oldConfig.height)); - checkSizeChange(); - //} + var bufferIndex = render(); + Platform.runLater(() -> nativeCanvas.renderUpdate(oldConfig.renderBuffer, bufferIndex, oldConfig.width, oldConfig.height)); + checkSizeChange(); } - private void checkSizeChange() - { - if(newConfig == oldConfig) + private void checkSizeChange() { + if (newConfig == oldConfig) return; oldConfig = newConfig; - SwingUtilities.invokeLater(()->canvas.setSize(oldConfig.width, oldConfig.height)); + SwingUtilities.invokeLater(() -> canvas.setSize(oldConfig.width, oldConfig.height)); } // on mac this must be called when the canvas is isDisplayable @@ -87,8 +68,6 @@ public void dispose() { app.stop(); } - // Canvas creation and rendering: - public void createCanvas(int width, int height) { var cfg = new RendererConfig(); @@ -105,12 +84,16 @@ public void createCanvas(int width, int height) { init(); } + // Canvas creation and rendering: + private void fixColors() { //fix colors RGBA -> BGRA - for (int i = 0; i < gdxBuffer.capacity(); i += BytePerInt) { - var red = gdxBuffer.get(i); - gdxBuffer.put(i, gdxBuffer.get(i + 2)); - gdxBuffer.put(i + 2, red); + if (gdxBuffer != null) { + for (int i = 0; i < gdxBuffer.capacity(); i += BytePerInt) { + var red = gdxBuffer.get(i); + gdxBuffer.put(i, gdxBuffer.get(i + 2)); + gdxBuffer.put(i + 2, red); + } } } @@ -125,7 +108,6 @@ private void flip() { } } - public int render() { oldConfig.currentBufferIndex += 1; if (oldConfig.currentBufferIndex >= BufferCount) oldConfig.currentBufferIndex = 0; @@ -137,6 +119,8 @@ public int render() { oldConfig.renderBuffer.put(oldConfig.flippedBuffer); oldConfig.renderBuffer.rewind(); } + + return oldConfig.currentBufferIndex; } @@ -199,4 +183,13 @@ public boolean scrolled(float amountX, float amountY) { public void pause() { app.stop(); } + + private class RendererConfig { + public int width; + public int height; + public int currentBufferIndex; + public int singleBufferSize; + public ByteBuffer renderBuffer; + byte[] flippedBuffer; + } } \ No newline at end of file diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index 7a00db1062..8249a9fe44 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -53,6 +53,7 @@ import net.rptools.lib.swing.PositionalLayout; import net.rptools.lib.swing.SwingUtil; import net.rptools.lib.swing.preference.WindowPreferences; +import net.rptools.maptool.box2d.GdxRenderer; import net.rptools.maptool.box2d.NativeRenderingCanvas; import net.rptools.maptool.client.AppActions; import net.rptools.maptool.client.AppActions.ClientAction; @@ -514,7 +515,7 @@ public MapToolFrame(JMenuBar menuBar) { jfxPanel.setVisible(false); } - public void addJfx(){ + public void addJfx() { jfxPanel.setVisible(!jfxPanel.isVisible()); } From 9252f4010a9095a1cbc493b7f75d4004b712c629 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Wed, 7 Apr 2021 16:42:12 +0200 Subject: [PATCH 011/139] handle token rotation and topdown scaling + positioning --- .../rptools/maptool/box2d/GdxRenderer.java | 53 +++++++++++-------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java b/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java index 5f36656007..3fc93489b1 100644 --- a/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java @@ -106,7 +106,7 @@ public void create() { glyphLayout = new GlyphLayout(); vfxManager = new VfxManager(Pixmap.Format.RGBA8888); vfxEffect = new BloomEffect(); - vfxManager.addEffect(vfxEffect); + //vfxManager.addEffect(vfxEffect); initialized = true; initializeZoneResources(); @@ -126,8 +126,9 @@ public void dispose() { public void resize(int width, int height) { this.width = width; this.height = height; - updateCam(); vfxManager.resize(width, height); + updateCam(); + } private void updateCam() { @@ -148,20 +149,12 @@ private void updateCam() { @Override public void render() { vfxManager.cleanUpBuffers(); - - // Begin render to an off-screen buffer. vfxManager.beginInputCapture(); doRendering(); vfxManager.endInputCapture(); - - // Apply the effects chain to the captured frame. - // In our case, only one effect (gaussian blur) will be applied. vfxManager.applyEffects(); - - copyFramebufferToJfx(); - // Render result to the screen. vfxManager.renderToScreen(); - + copyFramebufferToJfx(); } private void doRendering() { @@ -173,6 +166,7 @@ private void doRendering() { return; initializeTimer(); + setScale(zoneRenderer.getZoneScale()); timer.start("paintComponent:createView"); PlayerView playerView = zoneRenderer.getPlayerView(); @@ -522,7 +516,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure // get token image sprite, using image table if present var imageKey = token.getTokenImageAssetId(); - var image = sprites.get(imageKey); + Sprite image = sprites.get(imageKey); if (image == null) continue; @@ -531,11 +525,18 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure timer.start("tokenlist-1a"); Rectangle footprintBounds = token.getBounds(zone); image.setPosition(footprintBounds.x, -footprintBounds.y - footprintBounds.height); - image.setSize(footprintBounds.width, footprintBounds.height); + var factorX = footprintBounds.width/image.getWidth(); + var factorY = footprintBounds.height/image.getHeight(); + + var factor = Math.min(factorX, factorY); + + image.setSize(image.getWidth()*factor, image.getHeight()*factor); + image.setOriginCenter(); // Rotated - if (token.hasFacing() && token.getShape() == Token.TokenShape.TOP_DOWN) - image.setRotation(-token.getFacing() - 90); + if (token.hasFacing() && token.getShape() == Token.TokenShape.TOP_DOWN) { + image.setRotation(token.getFacing() + 90); + } timer.stop("tokenlist-1a"); @@ -585,12 +586,12 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure footprintBounds = token.getBounds(zone);*/ } timer.stop("tokenlist-5a"); -/* + timer.start("tokenlist-6"); // Position // For Isometric Grid we alter the height offset - double iso_ho = 0; - Dimension imgSize = new Dimension(workImage.getWidth(), workImage.getHeight()); + float iso_ho = 0; + /* Dimension imgSize = new Dimension(workImage.getWidth(), workImage.getHeight()); if (token.getShape() == Token.TokenShape.FIGURE) { double th = token.getHeight() * (double) footprintBounds.width / token.getWidth(); iso_ho = footprintBounds.height - th; @@ -604,6 +605,16 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure } SwingUtil.constrainTo(imgSize, footprintBounds.width, footprintBounds.height); */ + if (token.isSnapToScale()) { + var offsetx = (image.getWidth() < footprintBounds.width + ? (footprintBounds.width - image.getWidth()) / 2 : 0); + var offsety = (image.getHeight() < footprintBounds.height + ? (footprintBounds.height - image.getHeight()) / 2 : 0); + + image.setPosition(image.getX() + offsetx, image.getY() + offsety + iso_ho); + } + + timer.stop("tokenlist-6"); /* @@ -1096,7 +1107,8 @@ private void initializeZoneResources() { } }).start(); - + zoneView = new ZoneView(zone); + zoneRenderer = MapTool.getFrame().getZoneRenderer(zone); } public java.awt.Rectangle toAwtRect(com.badlogic.gdx.math.Rectangle rectangle) { @@ -1122,8 +1134,7 @@ public void handleAppEvent(AppEvent event) { newZone.addModelChangeListener(this); zone = newZone; - zoneView = new ZoneView(zone); - zoneRenderer = MapTool.getFrame().getZoneRenderer(zone); + initializeZoneResources(); } From 4c91491a0a2ca5cce3e1c35cd4fe56d10f4581e6 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 8 Apr 2021 00:44:53 +0200 Subject: [PATCH 012/139] start with grid --- .../rptools/maptool/box2d/GdxRenderer.java | 143 +++++++++++++++++- .../rptools/maptool/box2d/NativeRenderer.java | 1 + 2 files changed, 143 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java b/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java index 3fc93489b1..f349c92902 100644 --- a/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java @@ -10,6 +10,8 @@ import com.badlogic.gdx.graphics.g2d.GlyphLayout; import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.math.Vector3; import com.crashinvaders.vfx.VfxManager; import com.crashinvaders.vfx.effects.*; import net.rptools.lib.AppEvent; @@ -34,6 +36,7 @@ import java.awt.*; import java.awt.geom.Area; +import java.awt.geom.PathIterator; import java.util.List; import java.util.*; @@ -69,6 +72,10 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private CodeTimer timer; private VfxManager vfxManager; private ChainVfxEffect vfxEffect; + private ShapeRenderer shape; + + private Vector3 tmpWorldCoord; + private Vector3 tmpScreenCoord; public GdxRenderer() { MapTool.getEventDispatcher().addListener(this, MapTool.ZoneEvent.Activated); @@ -100,6 +107,7 @@ public void create() { hudCam = new OrthographicCamera(); hudCam.setToOrtho(false); + shape = new ShapeRenderer(); batch = new SpriteBatch(); hudBatch = new SpriteBatch(); font = new BitmapFont(); @@ -108,6 +116,9 @@ public void create() { vfxEffect = new BloomEffect(); //vfxManager.addEffect(vfxEffect); + tmpWorldCoord = new Vector3(); + tmpScreenCoord = new Vector3(); + initialized = true; initializeZoneResources(); } @@ -119,6 +130,7 @@ public void dispose() { font.dispose(); vfxManager.dispose(); vfxEffect.dispose(); + shape.dispose(); disposeZoneResources(); } @@ -159,13 +171,16 @@ public void render() { private void doRendering() { Gdx.gl.glClearColor(0, 0, 0, 0); - Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT | (Gdx.graphics.getBufferFormat().coverageSampling?GL20.GL_COVERAGE_BUFFER_BIT_NV:0)); if (zone == null) return; initializeTimer(); + if(zoneRenderer == null) + return; + setScale(zoneRenderer.getZoneScale()); timer.start("paintComponent:createView"); @@ -174,6 +189,7 @@ private void doRendering() { batch.setProjectionMatrix(cam.combined); hudBatch.setProjectionMatrix(hudCam.combined); + shape.setProjectionMatrix(cam.combined); batch.begin(); @@ -275,9 +291,11 @@ private void renderZone(PlayerView view) { timer.stop("drawableObjects"); // } } + batch.end(); timer.start("grid"); renderGrid(view); timer.stop("grid"); + batch.begin(); if (Zone.Layer.OBJECT.isEnabled()) { // ... Images on the object layer are always ABOVE the grid. @@ -444,6 +462,129 @@ private void renderLights(PlayerView view) { } private void renderGrid(PlayerView view) { + /* int gridSize = (int) (zone.getGrid().getSize() * 1/cam.zoom); + if (!AppState.isShowGrid() || gridSize < ZoneRenderer.MIN_GRID_SIZE) { + return; + } + var grid = zone.getGrid(); + if(grid instanceof GridlessGrid) { + // do nothing + } else if(grid instanceof HexGrid) { + + } else if(grid instanceof SquareGrid) { + renderGrid((SquareGrid) grid); + } else if (grid instanceof IsometricGrid) { + + } +*/ + + int gridSize = (int) (zone.getGrid().getSize() * zoneRenderer.getScale()); + + if (!AppState.isShowGrid() || gridSize < ZoneRenderer.MIN_GRID_SIZE) { + return; + } + var scale = zoneRenderer.getScale(); + + float gridWidth = (float) (zone.getGrid().getCellWidth() * scale); + float gridHeight = (float) (zone.getGrid().getCellHeight() * scale); + + java.awt.Color gridColor = new java.awt.Color(zone.getGridColor()); + + shape.begin(ShapeRenderer.ShapeType.Line); + shape.setProjectionMatrix(hudCam.combined); + shape.identity(); + + shape.setColor(gridColor.getRed(), gridColor.getGreen(), gridColor.getBlue(), 4f); + float[] gridVertices = areaToVertices(zone.getGrid().getCellShape()); + + float transX = ((width / gridWidth) + 1) * -gridWidth; + + var x = cam.position.x - cam.viewportWidth/2; + var y = cam.position.y - cam.viewportHeight/2; + + var startCol = (((int) (x / gridWidth))-1) * gridWidth - offsetX + 1; + var startRow = (((int) (y / gridHeight))-1) * gridHeight - offsetY; + + + //for (int h = 0; h <= height / gridHeight + 1; h++) { + for (var row = startRow; row < y + height + 2 * gridHeight; row += gridHeight) { + for (var col = startCol; col < x + cam.viewportWidth + gridSize; col += gridWidth) { + shape.identity(); + shape.translate(col , height + row, 0); + shape.polygon(gridVertices); + } + } + + shape.end(); + } + + private void renderGrid(SquareGrid grid) { + double scale = zoneRenderer.getScale(); + double gridSize = grid.getSize() * scale; + + var camX = cam.position.x - cam.viewportWidth * cam.zoom/2; + var camY = cam.position.y - cam.viewportHeight * cam.zoom/2; + + var hudHeight = hudCam.viewportHeight * hudCam.zoom; + var hudWidth = hudCam.viewportWidth * hudCam.zoom; + var hudX = hudCam.position.x - hudCam.viewportWidth * hudCam.zoom/2; + var hudY = hudCam.position.y - hudCam.viewportHeight * hudCam.zoom/2; + + + shape.setColor(Color.BLACK); + shape.setProjectionMatrix(hudCam.combined); + shape.begin(ShapeRenderer.ShapeType.Filled); + //g.setColor(new java.awt.Color(getZone().getGridColor())); + + // float offX = (float) (grid.getOffsetX() * scale); + int offY = (int) (zoneRenderer.getViewOffsetY() % gridSize - grid.getOffsetY() * scale); + + float startCol = (int) ((int) (hudX / gridSize) * gridSize) + grid.getOffsetX(); + float startRow = (int) ((int) (camY / gridSize) * gridSize); + + tmpWorldCoord.x = startCol; + tmpWorldCoord.y = startRow; + tmpWorldCoord.z = 0; + tmpScreenCoord = cam.project(tmpWorldCoord); + tmpWorldCoord = hudCam.unproject(tmpScreenCoord); + + startCol = tmpWorldCoord.x; + startRow = tmpWorldCoord.y; + + var lineWidth = AppState.getGridSize(); + + /* for (float row = startRow; row > bounds.y + gridSize; row -= gridSize) { + shape.rectLine(bounds.x, (int) (row + offY), bounds.x + bounds.width, (int) (row + offY), lineWidth); + }*/ + for (float col = startCol; col < startCol + width + gridSize; col += gridSize) { + shape.rectLine(col, hudY, col, hudY + height, lineWidth); + } + shape.end(); + } + + private float[] areaToVertices(Area area) { + if (area.isEmpty()) + return new float[0]; + + PathIterator iterator = area.getPathIterator(null); + float[] floats = new float[60]; + float[] vertices = new float[1000]; + int count1 = 0; + + while (!iterator.isDone()) { + int type = iterator.currentSegment(floats); + + if (type != PathIterator.SEG_CLOSE) { + vertices[count1++] = floats[0]; + vertices[count1++] = floats[1]; + } + iterator.next(); + } + + float[] finalVertices = new float[count1]; + System.arraycopy(vertices, 0, finalVertices, 0, count1); + + return finalVertices; } private void renderDrawableOverlay(PlayerView view, List drawables) { diff --git a/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java b/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java index cbf6ddda54..342e2ec05c 100644 --- a/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java +++ b/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java @@ -53,6 +53,7 @@ public void init() { var config = new LwjglApplicationConfiguration(); config.allowSoftwareMode = true; config.forceExit = false; + config.samples = 4; LwjglApplicationConfiguration.disableAudio = true; var appListender = GdxRenderer.getInstance(); From 46ba5900fe842ce6674f546d96ba32fca903c17c Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 8 Apr 2021 16:19:48 +0200 Subject: [PATCH 013/139] sqaregrid done --- .../rptools/maptool/box2d/GdxRenderer.java | 106 +++++------------- 1 file changed, 31 insertions(+), 75 deletions(-) diff --git a/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java b/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java index f349c92902..46c7316794 100644 --- a/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java @@ -76,6 +76,7 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private Vector3 tmpWorldCoord; private Vector3 tmpScreenCoord; + private Color tmpColor; public GdxRenderer() { MapTool.getEventDispatcher().addListener(this, MapTool.ZoneEvent.Activated); @@ -118,6 +119,7 @@ public void create() { tmpWorldCoord = new Vector3(); tmpScreenCoord = new Vector3(); + tmpColor = new Color(); initialized = true; initializeZoneResources(); @@ -462,11 +464,14 @@ private void renderLights(PlayerView view) { } private void renderGrid(PlayerView view) { - /* int gridSize = (int) (zone.getGrid().getSize() * 1/cam.zoom); + var grid = zone.getGrid(); + var scale = (float)zoneRenderer.getScale(); + int gridSize = (int) (grid.getSize() * scale); + if (!AppState.isShowGrid() || gridSize < ZoneRenderer.MIN_GRID_SIZE) { return; } - var grid = zone.getGrid(); + if(grid instanceof GridlessGrid) { // do nothing } else if(grid instanceof HexGrid) { @@ -476,89 +481,39 @@ private void renderGrid(PlayerView view) { } else if (grid instanceof IsometricGrid) { } -*/ - - int gridSize = (int) (zone.getGrid().getSize() * zoneRenderer.getScale()); - - if (!AppState.isShowGrid() || gridSize < ZoneRenderer.MIN_GRID_SIZE) { - return; - } - var scale = zoneRenderer.getScale(); - - float gridWidth = (float) (zone.getGrid().getCellWidth() * scale); - float gridHeight = (float) (zone.getGrid().getCellHeight() * scale); - - java.awt.Color gridColor = new java.awt.Color(zone.getGridColor()); - - shape.begin(ShapeRenderer.ShapeType.Line); - shape.setProjectionMatrix(hudCam.combined); - shape.identity(); - - shape.setColor(gridColor.getRed(), gridColor.getGreen(), gridColor.getBlue(), 4f); - float[] gridVertices = areaToVertices(zone.getGrid().getCellShape()); - - float transX = ((width / gridWidth) + 1) * -gridWidth; - - var x = cam.position.x - cam.viewportWidth/2; - var y = cam.position.y - cam.viewportHeight/2; - - var startCol = (((int) (x / gridWidth))-1) * gridWidth - offsetX + 1; - var startRow = (((int) (y / gridHeight))-1) * gridHeight - offsetY; - - - //for (int h = 0; h <= height / gridHeight + 1; h++) { - for (var row = startRow; row < y + height + 2 * gridHeight; row += gridHeight) { - for (var col = startCol; col < x + cam.viewportWidth + gridSize; col += gridWidth) { - shape.identity(); - shape.translate(col , height + row, 0); - shape.polygon(gridVertices); - } - } - - shape.end(); } private void renderGrid(SquareGrid grid) { - double scale = zoneRenderer.getScale(); - double gridSize = grid.getSize() * scale; + var scale = (float)zoneRenderer.getScale(); + int gridSize = (int) (grid.getSize() * scale); - var camX = cam.position.x - cam.viewportWidth * cam.zoom/2; - var camY = cam.position.y - cam.viewportHeight * cam.zoom/2; + shape.begin(ShapeRenderer.ShapeType.Filled); + shape.setProjectionMatrix(hudCam.combined); + shape.identity(); - var hudHeight = hudCam.viewportHeight * hudCam.zoom; - var hudWidth = hudCam.viewportWidth * hudCam.zoom; - var hudX = hudCam.position.x - hudCam.viewportWidth * hudCam.zoom/2; - var hudY = hudCam.position.y - hudCam.viewportHeight * hudCam.zoom/2; + Color.argb8888ToColor(tmpColor, zone.getGridColor()); + shape.setColor(tmpColor); - shape.setColor(Color.BLACK); - shape.setProjectionMatrix(hudCam.combined); - shape.begin(ShapeRenderer.ShapeType.Filled); - //g.setColor(new java.awt.Color(getZone().getGridColor())); + var x = hudCam.position.x - hudCam.viewportWidth/2; + var y = hudCam.position.y - hudCam.viewportHeight/2; + var w = hudCam.viewportWidth; + var h = hudCam.viewportHeight; - // float offX = (float) (grid.getOffsetX() * scale); - int offY = (int) (zoneRenderer.getViewOffsetY() % gridSize - grid.getOffsetY() * scale); + var offX = (int) (zoneRenderer.getViewOffsetX() % gridSize + grid.getOffsetX() * scale) +1; + var offY = (int) (zoneRenderer.getViewOffsetY() % gridSize + grid.getOffsetY() * scale) +1; - float startCol = (int) ((int) (hudX / gridSize) * gridSize) + grid.getOffsetX(); - float startRow = (int) ((int) (camY / gridSize) * gridSize); + var startCol = ((int) (x / gridSize) * gridSize); + var startRow = ((int) (y / gridSize) * gridSize); - tmpWorldCoord.x = startCol; - tmpWorldCoord.y = startRow; - tmpWorldCoord.z = 0; - tmpScreenCoord = cam.project(tmpWorldCoord); - tmpWorldCoord = hudCam.unproject(tmpScreenCoord); + var lineWidth = AppState.getGridSize(); - startCol = tmpWorldCoord.x; - startRow = tmpWorldCoord.y; + for (float row = startRow; row < y + h + gridSize; row += gridSize) + shape.rectLine(x,(int)(h - (row + offY)) , x + w,(int)(h - (row + offY)), lineWidth); - var lineWidth = AppState.getGridSize(); + for (float col = startCol; col < x + w + gridSize; col += gridSize) + shape.rectLine((int)(col + offX), y, (int) (col + offX), y + h, lineWidth); - /* for (float row = startRow; row > bounds.y + gridSize; row -= gridSize) { - shape.rectLine(bounds.x, (int) (row + offY), bounds.x + bounds.width, (int) (row + offY), lineWidth); - }*/ - for (float col = startCol; col < startCol + width + gridSize; col += gridSize) { - shape.rectLine(col, hudY, col, hudY + height, lineWidth); - } shape.end(); } @@ -1247,9 +1202,6 @@ private void initializeZoneResources() { } catch (InterruptedException e) { } }).start(); - - zoneView = new ZoneView(zone); - zoneRenderer = MapTool.getFrame().getZoneRenderer(zone); } public java.awt.Rectangle toAwtRect(com.badlogic.gdx.math.Rectangle rectangle) { @@ -1270,10 +1222,14 @@ public void handleAppEvent(AppEvent event) { disposeZoneResources(); zone.removeModelChangeListener(this); } + // first disable rendering during intitialisation; + zone = null; var newZone = (Zone) event.getNewValue(); newZone.addModelChangeListener(this); + zoneView = new ZoneView(newZone); + zoneRenderer = MapTool.getFrame().getZoneRenderer(newZone); zone = newZone; initializeZoneResources(); From aefed066a81c74a8c7e4e5c0a6bb5b4aa0375cba Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 8 Apr 2021 21:24:25 +0200 Subject: [PATCH 014/139] Isogrid + HorizontalGrid done. Vertical one has a wrong offset --- .../rptools/maptool/box2d/GdxRenderer.java | 391 ++++++++++++++++-- .../net/rptools/maptool/model/HexGrid.java | 19 +- .../maptool/model/HexGridHorizontal.java | 8 +- .../maptool/model/HexGridVertical.java | 8 +- 4 files changed, 381 insertions(+), 45 deletions(-) diff --git a/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java b/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java index 46c7316794..98ae211966 100644 --- a/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java @@ -11,6 +11,7 @@ import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.math.EarClippingTriangulator; import com.badlogic.gdx.math.Vector3; import com.crashinvaders.vfx.VfxManager; import com.crashinvaders.vfx.effects.*; @@ -18,6 +19,7 @@ import net.rptools.lib.AppEventListener; import net.rptools.lib.CodeTimer; import net.rptools.lib.MD5Key; +import net.rptools.lib.swing.SwingUtil; import net.rptools.maptool.client.AppState; import net.rptools.maptool.client.AppUtil; import net.rptools.maptool.client.MapTool; @@ -32,11 +34,16 @@ import net.rptools.maptool.util.GraphicsUtil; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.bouncycastle.util.encoders.Hex; +import javax.swing.*; import java.awt.*; +import java.awt.geom.AffineTransform; import java.awt.geom.Area; +import java.awt.geom.GeneralPath; import java.awt.geom.PathIterator; +import java.awt.image.BufferedImage; import java.util.List; import java.util.*; @@ -49,6 +56,21 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, //from renderToken: private Area visibleScreenArea; private Area exposedFogArea; + + //renderFog + // Private cache variables just for renderFog() and no one else. :) + Integer fogX = null; + Integer fogY = null; + Texture fogBufferTexture; + Pixmap fogPaintPixmap; + Color fogPaintColor = new Color(); + + /** + * I don't like this, at all, but it'll work for now, basically keep track of when the fog cache + * needs to be flushed in the case of switching views + */ + private boolean flushFog = true; + // zone specific resources private Zone zone; private ZoneRenderer zoneRenderer; @@ -73,6 +95,7 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private VfxManager vfxManager; private ChainVfxEffect vfxEffect; private ShapeRenderer shape; + private EarClippingTriangulator triangulator = new EarClippingTriangulator(); private Vector3 tmpWorldCoord; private Vector3 tmpScreenCoord; @@ -449,6 +472,166 @@ private void renderRenderables() { } private void renderFog(PlayerView view) { + Dimension size = zoneRenderer.getSize(); + Area fogClip = new Area(new Rectangle(0, 0, size.width, size.height)); + Area combined = null; + + // Optimization for panning + if (!flushFog + && fogX != null + && fogY != null + && (fogX != zoneRenderer.getViewOffsetX() || fogY != zoneRenderer.getViewOffsetY())) { + flushFog = true; + } + boolean cacheNotValid = + (fogBufferTexture == null + || fogBufferTexture.getWidth() != size.width + || fogBufferTexture.getHeight() != size.height); + timer.start("renderFog"); + if (flushFog || cacheNotValid) { + timer.start("renderFog-allocateBufferedImage"); + var fogBuffer = new Pixmap(width, height, Pixmap.Format.RGBA8888); + timer.stop("renderFog-allocateBufferedImage"); + fogX = zoneRenderer.getViewOffsetX(); + fogY = zoneRenderer.getViewOffsetY(); + + timer.start("renderFog-fill"); + // Fill + float scale = (float)zoneRenderer.getScale(); + + fogBuffer.setBlending(Pixmap.Blending.None); + if(fogPaintPixmap != null) { + var pix = fogPaintPixmap; + var w = pix.getWidth(); + var h = pix.getHeight(); + fogBuffer.drawPixmap(pix,fogX, fogY, w, h, 0, 0, (int)(w*scale), (int)(h*scale)); + //buffG.setPaint(zone.getFogPaint().getPaint(fogX, fogY, scale)); + //buffG.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC, view.isGMView() ? .6f : 1f)); // JFJ this + + } else { + var color = fogPaintColor; + fogBuffer.setColor(color.r, color.g, color.b, view.isGMView() ? .6f : 1f); + } + + + // fixes the GM exposed area view. + fogBuffer.fillRectangle(0, 0, size.width, size.height); + timer.stop("renderFog-fill"); + + /* // Cut out the exposed area + AffineTransform af = new AffineTransform(); + af.translate(fogX, fogY); + af.scale(scale, scale); +*/ + + timer.start("renderFog-visibleArea"); + Area visibleArea = zoneView.getVisibleArea(view); + timer.stop("renderFog-visibleArea"); + + String msg = null; + if (timer.isEnabled()) { + List list = view.getTokens(); + msg = "renderFog-combined(" + (list == null ? 0 : list.size()) + ")"; + } + timer.start(msg); + combined = zone.getExposedArea(view); + timer.stop(msg); + + timer.start("renderFogArea"); + Area exposedArea = null; + Area tempArea = new Area(); + boolean combinedView = + !zoneView.isUsingVision() + || MapTool.isPersonalServer() + || !MapTool.getServerPolicy().isUseIndividualFOW() + || view.isGMView(); + + if (view.getTokens() != null) { + // if there are tokens selected combine the areas, then, if individual FOW is enabled + // we pass the combined exposed area to build the soft FOW and visible area. + for (Token tok : view.getTokens()) { + ExposedAreaMetaData meta = zone.getExposedAreaMetaData(tok.getExposedAreaGUID()); + exposedArea = meta.getExposedAreaHistory(); + tempArea.add(new Area(exposedArea)); + } + if (combinedView) { + var triangles = triangulator.computeTriangles(areaToVertices(combined)); + for(int i = 0; i< triangles.size; i+=6) + fogBuffer.fillTriangle(triangles.get(i), triangles.get(i+1), triangles.get(i+2), + triangles.get(i+3), triangles.get(i+4), triangles.get(i+5)); + + renderFogArea(fogBuffer, view, combined, visibleArea); + renderFogOutline(fogBuffer, view, combined); + } else { + // 'combined' already includes the area encompassed by 'tempArea', so just + // use 'combined' instead in this block of code? + tempArea.add(combined); + + var triangles = triangulator.computeTriangles(areaToVertices(tempArea)); + for(int i = 0; i< triangles.size; i+=6) + fogBuffer.fillTriangle(triangles.get(i), triangles.get(i+1), triangles.get(i+2), + triangles.get(i+3), triangles.get(i+4), triangles.get(i+5)); + renderFogArea(fogBuffer, view, tempArea, visibleArea); + renderFogOutline(fogBuffer, view, tempArea); + } + } else { + // No tokens selected, so if we are using Individual FOW, we build up all the owned tokens + // exposed area's to build the soft FOW. + if (combinedView) { + if (combined.isEmpty()) { + combined = zone.getExposedArea(); + } + var triangles = triangulator.computeTriangles(areaToVertices(combined)); + for(int i = 0; i< triangles.size; i+=6) + fogBuffer.fillTriangle(triangles.get(i), triangles.get(i+1), triangles.get(i+2), + triangles.get(i+3), triangles.get(i+4), triangles.get(i+5)); + renderFogArea(fogBuffer, view, combined, visibleArea); + renderFogOutline(fogBuffer, view, combined); + } else { + Area myCombined = new Area(); + List myToks = zone.getTokens(); + for (Token tok : myToks) { + if (!AppUtil.playerOwns( + tok)) { // Only here if !isGMview() so should the tokens already be in + // PlayerView.getTokens()? + continue; + } + ExposedAreaMetaData meta = zone.getExposedAreaMetaData(tok.getExposedAreaGUID()); + exposedArea = meta.getExposedAreaHistory(); + myCombined.add(new Area(exposedArea)); + } + var triangles = triangulator.computeTriangles(areaToVertices(myCombined)); + for(int i = 0; i< triangles.size; i+=6) + fogBuffer.fillTriangle(triangles.get(i), triangles.get(i+1), triangles.get(i+2), + triangles.get(i+3), triangles.get(i+4), triangles.get(i+5)); + renderFogArea(fogBuffer, view, myCombined, visibleArea); + renderFogOutline(fogBuffer, view, myCombined); + } + } + // renderFogArea(buffG, view, combined, visibleArea); + timer.stop("renderFogArea"); + + // timer.start("renderFogOutline"); + // renderFogOutline(buffG, view, combined); + // timer.stop("renderFogOutline"); + + flushFog = false; + if(fogBufferTexture != null) { + fogBufferTexture.dispose(); + } + fogBufferTexture = new Texture(fogBuffer); + fogBuffer.dispose(); + } + timer.stop("renderFog"); + batch.setProjectionMatrix(hudCam.combined); + batch.draw(fogBufferTexture, 0, 0); + batch.setProjectionMatrix(cam.combined); + } + + private void renderFogArea(Pixmap fogBuffer, PlayerView view, Area tempArea, Area visibleArea) { + } + + private void renderFogOutline(Pixmap fogBuffer, PlayerView view, Area combined) { } private void renderLabels(PlayerView view) { @@ -475,12 +658,115 @@ private void renderGrid(PlayerView view) { if(grid instanceof GridlessGrid) { // do nothing } else if(grid instanceof HexGrid) { - + renderGrid((HexGrid)grid); } else if(grid instanceof SquareGrid) { renderGrid((SquareGrid) grid); } else if (grid instanceof IsometricGrid) { + renderGrid((IsometricGrid)grid); + } + } + + private void renderGrid(HexGrid grid) { + shape.begin(ShapeRenderer.ShapeType.Line); + shape.setProjectionMatrix(hudCam.combined); + shape.identity(); + + Color.argb8888ToColor(tmpColor, zone.getGridColor()); + + shape.setColor(tmpColor); + var path = grid.createShape(zoneRenderer.getScale()); + var vertices = pathToVertices(path); + + int offU = grid.getOffU(zoneRenderer); + int offV = grid.getOffV(zoneRenderer); + int count = 0; + + Gdx.gl.glLineWidth(AppState.getGridSize()); + + for (double v = offV % (grid.getScaledMinorRadius() * 2) - (grid.getScaledMinorRadius() * 2); + v < grid.getRendererSizeV(zoneRenderer); + v += grid.getScaledMinorRadius()) { + double offsetU = (int) ((count & 1) == 0 ? 0 : -(grid.getScaledEdgeProjection() + grid.getScaledEdgeLength())); + count++; + + double start = + offU % (2 * grid.getScaledEdgeLength() + 2 * grid.getScaledEdgeProjection()) + - (2 * grid.getScaledEdgeLength() + 2 * grid.getScaledEdgeProjection()); + double end = grid.getRendererSizeU(zoneRenderer) + 2 * grid.getScaledEdgeLength() + 2 * grid.getScaledEdgeProjection(); + double incr = 2 * grid.getScaledEdgeLength() + 2 * grid.getScaledEdgeProjection(); + for (double u = start; u < end; u += incr) { + float transX = 0; + float transY = 0; + if(grid instanceof HexGridVertical) { + transX = (float)(u + offsetU); + transY = height - (float)v; + } + else { + transX = (float)v; + transY = height - (float)(u + offsetU); + } + + shape.translate(transX, transY, 0); + shape.polyline(vertices); + shape.translate(-transX, -transY, 0); + } + } + + shape.end(); + } + + private void renderGrid(IsometricGrid grid) { + var scale = (float)zoneRenderer.getScale(); + int gridSize = (int) (grid.getSize() * scale); + + shape.begin(ShapeRenderer.ShapeType.Filled); + shape.setProjectionMatrix(hudCam.combined); + shape.identity(); + + Color.argb8888ToColor(tmpColor, zone.getGridColor()); + + shape.setColor(tmpColor); + + var x = hudCam.position.x - hudCam.viewportWidth/2; + var y = hudCam.position.y - hudCam.viewportHeight/2; + var w = hudCam.viewportWidth; + var h = hudCam.viewportHeight; + + double isoHeight = grid.getSize() * scale; + double isoWidth = grid.getSize() * 2 * scale; + + int offX = (int) (zoneRenderer.getViewOffsetX() % isoWidth + grid.getOffsetX() * scale) + 1; + int offY = (int) (zoneRenderer.getViewOffsetY() % gridSize + grid.getOffsetY() * scale) + 1; + + int startCol = (int) ((int) (x / isoWidth) * isoWidth); + int startRow = (int) ((int) (y / gridSize) * gridSize); + + for (double row = startRow; row < y + h + gridSize; row += gridSize) { + for (double col = startCol; col < x + w + isoWidth; col += isoWidth) { + drawHatch(grid, (int) (col + offX), h - (int) (row + offY)); + } + } + for (double row = startRow - (isoHeight / 2); + row < y + h + gridSize; + row += gridSize) { + for (double col = startCol - (isoWidth / 2); + col < x + w + isoWidth; + col += isoWidth) { + drawHatch(grid, (int) (col + offX), h - (int) (row + offY)); + } } + shape.end(); + } + + private void drawHatch(IsometricGrid grid, float x, float y) { + double isoWidth = grid.getSize() * zoneRenderer.getScale(); + int hatchSize = isoWidth > 10 ? (int) isoWidth / 8 : 2; + + var lineWidth = AppState.getGridSize(); + + shape.rectLine(x - (hatchSize * 2), y - hatchSize, x + (hatchSize * 2), y + hatchSize, lineWidth); + shape.rectLine(x - (hatchSize * 2), y + hatchSize, x + (hatchSize * 2), y - hatchSize, lineWidth); } private void renderGrid(SquareGrid grid) { @@ -542,6 +828,28 @@ private float[] areaToVertices(Area area) { return finalVertices; } + private float[] pathToVertices(GeneralPath path) { + PathIterator iterator = path.getPathIterator(null); + float[] floats = new float[60]; + float[] vertices = new float[1000]; + int count1 = 0; + + while (!iterator.isDone()) { + int type = iterator.currentSegment(floats); + + if (type != PathIterator.SEG_CLOSE) { + vertices[count1++] = floats[0]; + vertices[count1++] = floats[1]; + } + iterator.next(); + } + + float[] finalVertices = new float[count1]; + System.arraycopy(vertices, 0, finalVertices, 0, count1); + + return finalVertices; + } + private void renderDrawableOverlay(PlayerView view, List drawables) { } @@ -616,23 +924,13 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure if (image == null) continue; + image.setSize(image.getTexture().getWidth(), image.getTexture().getHeight()); + timer.stop("tokenlist-1b"); timer.start("tokenlist-1a"); Rectangle footprintBounds = token.getBounds(zone); image.setPosition(footprintBounds.x, -footprintBounds.y - footprintBounds.height); - var factorX = footprintBounds.width/image.getWidth(); - var factorY = footprintBounds.height/image.getHeight(); - - var factor = Math.min(factorX, factorY); - - image.setSize(image.getWidth()*factor, image.getHeight()*factor); - image.setOriginCenter(); - - // Rotated - if (token.hasFacing() && token.getShape() == Token.TokenShape.TOP_DOWN) { - image.setRotation(token.getFacing() + 90); - } timer.stop("tokenlist-1a"); @@ -667,19 +965,15 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure image.setFlip(token.isFlippedX(), token.isFlippedY()); timer.stop("tokenlist-5"); + image.setOriginCenter(); + timer.start("tokenlist-5a"); if (token.isFlippedIso()) { - //FIXME: later - /* - if (flipIsoImageMap.get(token) == null) { - workImage = IsometricGrid.isoImage(workImage); - flipIsoImageMap.put(token, workImage); - } else { - workImage = flipIsoImageMap.get(token); - } - token.setHeight(workImage.getHeight()); - token.setWidth(workImage.getWidth()); - footprintBounds = token.getBounds(zone);*/ + image.setRotation(45); + image.setSize(image.getWidth(), image.getHeight()/2); + token.setHeight((int)image.getHeight()); + token.setWidth((int)image.getWidth()); + footprintBounds = token.getBounds(zone); } timer.stop("tokenlist-5a"); @@ -687,9 +981,9 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure // Position // For Isometric Grid we alter the height offset float iso_ho = 0; - /* Dimension imgSize = new Dimension(workImage.getWidth(), workImage.getHeight()); + if (token.getShape() == Token.TokenShape.FIGURE) { - double th = token.getHeight() * (double) footprintBounds.width / token.getWidth(); + float th = token.getHeight() * (float) footprintBounds.width / token.getWidth(); iso_ho = footprintBounds.height - th; footprintBounds = new Rectangle( @@ -697,10 +991,22 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure footprintBounds.y - (int) iso_ho, footprintBounds.width, (int) th); - iso_ho = iso_ho * getScale(); + iso_ho = iso_ho * (float)zoneRenderer.getScale(); } - SwingUtil.constrainTo(imgSize, footprintBounds.width, footprintBounds.height); -*/ + + var factorX = footprintBounds.width/image.getWidth(); + var factorY = footprintBounds.height/image.getHeight(); + + var factor = Math.min(factorX, factorY); + + image.setSize(image.getWidth()*factor, image.getHeight()*factor); + image.setOriginCenter(); + + // Rotated + if (token.hasFacing() && token.getShape() == Token.TokenShape.TOP_DOWN) { + image.setRotation(token.getFacing() + 90); + } + if (token.isSnapToScale()) { var offsetx = (image.getWidth() < footprintBounds.width ? (footprintBounds.width - image.getWidth()) / 2 : 0); @@ -1129,6 +1435,8 @@ private void disposeZoneResources() { cam.zoom = 1.0f; offsetX = 0; offsetY = 0; + fogX = null; + fogY = null; Gdx.app.postRunnable(() -> { updateCam(); @@ -1142,6 +1450,13 @@ private void disposeZoneResources() { sprite.getTexture().dispose(); } sprites.clear(); + fogPaintColor = null; + if(fogPaintPixmap != null) + fogPaintPixmap.dispose(); + fogPaintPixmap = null; + if(fogBufferTexture != null) + fogBufferTexture.dispose(); + fogBufferTexture = null; }); } @@ -1177,6 +1492,20 @@ private void initializeZoneResources() { pix.dispose(); }); } + var fogPaint = zone.getFogPaint(); + if (fogPaint instanceof DrawableTexturePaint) { + var texturePaint = (DrawableTexturePaint) fogPaint; + var image = texturePaint.getAsset().getImage(); + Gdx.app.postRunnable(() -> { + fogPaintPixmap = new Pixmap(image, 0, image.length); + }); + } + if (fogPaint instanceof DrawableColorPaint) { + var colorPaint = (DrawableColorPaint) fogPaint; + var colorValue = colorPaint.getColor(); + Color.argb8888ToColor(fogPaintColor, colorValue); + } + mapAssetId = zone.getMapAssetId(); // FIXME: zonechanges during wait for resources @@ -1238,8 +1567,8 @@ public void handleAppEvent(AppEvent event) { @Override public void modelChanged(ModelChangeEvent event) { // for now quick and dirty - disposeZoneResources(); - initializeZoneResources(); + //disposeZoneResources(); + //initializeZoneResources(); } public void setScale(Scale scale) { diff --git a/src/main/java/net/rptools/maptool/model/HexGrid.java b/src/main/java/net/rptools/maptool/model/HexGrid.java index 70e7f14e02..964b58649f 100644 --- a/src/main/java/net/rptools/maptool/model/HexGrid.java +++ b/src/main/java/net/rptools/maptool/model/HexGrid.java @@ -145,6 +145,12 @@ public double getMinorRadius() { return minorRadius; } + public double getScaledMinorRadius() { return scaledMinorRadius; } + + public double getScaledEdgeProjection() { return scaledEdgeProjection; } + + public double getScaledEdgeLength() { return scaledEdgeLength; } + public void setMinorRadius(double minorRadius) { this.minorRadius = minorRadius; } @@ -256,9 +262,9 @@ public void setSize(int size) { super.setSize(size); } - protected void createShape(double scale) { + public GeneralPath createShape(double scale) { if (lastScale == scale && scaledHex != null) { - return; + return scaledHex; } scaledMinorRadius = minorRadius * scale; scaledEdgeLength = edgeLength * scale; @@ -267,6 +273,7 @@ protected void createShape(double scale) { scaledHex = createHalfShape(scaledMinorRadius, scaledEdgeProjection, scaledEdgeLength); lastScale = scale; + return scaledHex; } private GeneralPath createShape(double minorRadius, double edgeProjection, double edgeLength) { @@ -397,13 +404,13 @@ public int getTokenSpace() { protected abstract void setGridDrawTranslation(Graphics2D g, double u, double v); - protected abstract double getRendererSizeU(ZoneRenderer renderer); + public abstract double getRendererSizeU(ZoneRenderer renderer); - protected abstract double getRendererSizeV(ZoneRenderer renderer); + public abstract double getRendererSizeV(ZoneRenderer renderer); - protected abstract int getOffV(ZoneRenderer renderer); + public abstract int getOffV(ZoneRenderer renderer); - protected abstract int getOffU(ZoneRenderer renderer); + public abstract int getOffU(ZoneRenderer renderer); @Override public void draw(ZoneRenderer renderer, Graphics2D g, Rectangle bounds) { diff --git a/src/main/java/net/rptools/maptool/model/HexGridHorizontal.java b/src/main/java/net/rptools/maptool/model/HexGridHorizontal.java index ed73c7169a..86188d2600 100644 --- a/src/main/java/net/rptools/maptool/model/HexGridHorizontal.java +++ b/src/main/java/net/rptools/maptool/model/HexGridHorizontal.java @@ -253,22 +253,22 @@ protected void setGridDrawTranslation(Graphics2D g, double U, double V) { } @Override - protected double getRendererSizeV(ZoneRenderer renderer) { + public double getRendererSizeV(ZoneRenderer renderer) { return renderer.getSize().getWidth(); } @Override - protected double getRendererSizeU(ZoneRenderer renderer) { + public double getRendererSizeU(ZoneRenderer renderer) { return renderer.getSize().getHeight(); } @Override - protected int getOffV(ZoneRenderer renderer) { + public int getOffV(ZoneRenderer renderer) { return (int) (renderer.getViewOffsetX() + getOffsetX() * renderer.getScale()); } @Override - protected int getOffU(ZoneRenderer renderer) { + public int getOffU(ZoneRenderer renderer) { return (int) (renderer.getViewOffsetY() + getOffsetY() * renderer.getScale()); } diff --git a/src/main/java/net/rptools/maptool/model/HexGridVertical.java b/src/main/java/net/rptools/maptool/model/HexGridVertical.java index c07098820c..dd3c17fa5e 100644 --- a/src/main/java/net/rptools/maptool/model/HexGridVertical.java +++ b/src/main/java/net/rptools/maptool/model/HexGridVertical.java @@ -230,22 +230,22 @@ protected void setGridDrawTranslation(Graphics2D g, double U, double V) { } @Override - protected double getRendererSizeV(ZoneRenderer renderer) { + public double getRendererSizeV(ZoneRenderer renderer) { return renderer.getSize().getHeight(); } @Override - protected double getRendererSizeU(ZoneRenderer renderer) { + public double getRendererSizeU(ZoneRenderer renderer) { return renderer.getSize().getWidth(); } @Override - protected int getOffV(ZoneRenderer renderer) { + public int getOffV(ZoneRenderer renderer) { return (int) (renderer.getViewOffsetY() + getOffsetY() * renderer.getScale()); } @Override - protected int getOffU(ZoneRenderer renderer) { + public int getOffU(ZoneRenderer renderer) { return (int) (renderer.getViewOffsetX() + getOffsetX() * renderer.getScale()); } From cececd1dfeccd1320336d3a5763417fff70df70f Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Fri, 9 Apr 2021 01:22:47 +0200 Subject: [PATCH 015/139] fix transparency and add fow via fb --- .../rptools/maptool/box2d/Box2dLightTest.java | 549 ------------------ .../rptools/maptool/box2d/NativeRenderer.java | 3 + .../maptool/client/ui/MapToolFrame.java | 1 - .../ui/zone}/GdxRenderer.java | 385 ++++++------ .../maptool/client/ui/zone/ZoneRenderer.java | 1 - 5 files changed, 198 insertions(+), 741 deletions(-) delete mode 100644 src/main/java/net/rptools/maptool/box2d/Box2dLightTest.java rename src/main/java/net/rptools/maptool/{box2d => client/ui/zone}/GdxRenderer.java (86%) diff --git a/src/main/java/net/rptools/maptool/box2d/Box2dLightTest.java b/src/main/java/net/rptools/maptool/box2d/Box2dLightTest.java deleted file mode 100644 index 6ae95fe9a3..0000000000 --- a/src/main/java/net/rptools/maptool/box2d/Box2dLightTest.java +++ /dev/null @@ -1,549 +0,0 @@ -package net.rptools.maptool.box2d; - -import java.util.ArrayList; - -import box2dLight.ChainLight; -import box2dLight.ConeLight; -import box2dLight.DirectionalLight; -import box2dLight.Light; -import box2dLight.PointLight; -import box2dLight.RayHandler; - -import com.badlogic.gdx.ApplicationListener; -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.Input; -import com.badlogic.gdx.InputAdapter; -import com.badlogic.gdx.graphics.*; -import com.badlogic.gdx.graphics.g2d.BitmapFont; -import com.badlogic.gdx.graphics.g2d.SpriteBatch; -import com.badlogic.gdx.graphics.g2d.TextureRegion; -import com.badlogic.gdx.graphics.glutils.FrameBuffer; -import com.badlogic.gdx.math.MathUtils; -import com.badlogic.gdx.math.Matrix4; -import com.badlogic.gdx.math.Vector2; -import com.badlogic.gdx.math.Vector3; -import com.badlogic.gdx.physics.box2d.Body; -import com.badlogic.gdx.physics.box2d.BodyDef; -import com.badlogic.gdx.physics.box2d.BodyDef.BodyType; -import com.badlogic.gdx.physics.box2d.ChainShape; -import com.badlogic.gdx.physics.box2d.CircleShape; -import com.badlogic.gdx.physics.box2d.Fixture; -import com.badlogic.gdx.physics.box2d.FixtureDef; -import com.badlogic.gdx.physics.box2d.QueryCallback; -import com.badlogic.gdx.physics.box2d.World; -import com.badlogic.gdx.physics.box2d.joints.MouseJoint; -import com.badlogic.gdx.physics.box2d.joints.MouseJointDef; - - -public class Box2dLightTest extends InputAdapter implements ApplicationListener { - - static final int RAYS_PER_BALL = 128; - static final int BALLSNUM = 5; - static final float LIGHT_DISTANCE = 16f; - static final float RADIUS = 1f; - - static final float viewportWidth = 48; - static final float viewportHeight = 32; - - OrthographicCamera camera; - - SpriteBatch batch; - BitmapFont font; - TextureRegion textureRegion; - Texture bg; - - /** our box2D world **/ - World world; - - /** our boxes **/ - ArrayList balls = new ArrayList(BALLSNUM); - - /** our ground box **/ - Body groundBody; - - /** our mouse joint **/ - MouseJoint mouseJoint = null; - - /** a hit body **/ - Body hitBody = null; - - /** pixel perfect projection for font rendering */ - Matrix4 normalProjection = new Matrix4(); - - boolean showText = true; - - /** BOX2D LIGHT STUFF */ - RayHandler rayHandler; - - ArrayList lights = new ArrayList(BALLSNUM); - - float sunDirection = -90f; - - private NativeRenderer jfxRenderer; - - public void setJfxRenderer(NativeRenderer renderer) { - jfxRenderer = renderer; - } - - @Override - public void create() { - - MathUtils.random.setSeed(Long.MIN_VALUE); - - camera = new OrthographicCamera(viewportWidth, viewportHeight); - camera.position.set(0, viewportHeight / 2f, 0); - camera.update(); - - batch = new SpriteBatch(); - font = new BitmapFont(); - font.setColor(Color.RED); - - textureRegion = new TextureRegion(new Texture( - Gdx.files.internal("data/marble.png"))); - bg = new Texture(Gdx.files.internal("data/bg.png")); - - createPhysicsWorld(); - Gdx.input.setInputProcessor(this); - - normalProjection.setToOrtho2D( - 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); - - /** BOX2D LIGHT STUFF BEGIN */ - RayHandler.setGammaCorrection(true); - RayHandler.useDiffuseLight(true); - - rayHandler = new RayHandler(world); - rayHandler.setAmbientLight(0f, 0f, 0f, 0.5f); - rayHandler.setBlurNum(3); - - initPointLights(); - /** BOX2D LIGHT STUFF END */ - } - - @Override - public void render() { - /** Rotate directional light like sun :) */ - if (lightsType == 3) { - sunDirection += Gdx.graphics.getDeltaTime() * 4f; - lights.get(0).setDirection(sunDirection); - } - - camera.update(); - - boolean stepped = fixedStep(Gdx.graphics.getDeltaTime()); - Gdx.gl.glClearColor(0.3f, 0.3f, 0.3f, 1); - Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); - - batch.setProjectionMatrix(camera.combined); - batch.disableBlending(); - batch.begin(); - { - batch.draw(bg, -viewportWidth / 2f, 0, viewportWidth, viewportHeight); - batch.enableBlending(); - for (int i = 0; i < BALLSNUM; i++) { - Body ball = balls.get(i); - Vector2 position = ball.getPosition(); - float angle = MathUtils.radiansToDegrees * ball.getAngle(); - batch.draw( - textureRegion, - position.x - RADIUS, position.y - RADIUS, - RADIUS, RADIUS, - RADIUS * 2, RADIUS * 2, - 1f, 1f, - angle); - } - } - batch.end(); - - /** BOX2D LIGHT STUFF BEGIN */ - rayHandler.setCombinedMatrix(camera); - - if (stepped) rayHandler.update(); - rayHandler.render(); - /** BOX2D LIGHT STUFF END */ - - long time = System.nanoTime(); - - boolean atShadow = rayHandler.pointAtShadow(testPoint.x, - testPoint.y); - aika += System.nanoTime() - time; - - /** FONT */ - if (showText) { - batch.setProjectionMatrix(normalProjection); - batch.begin(); - - font.draw(batch, - "F1 - PointLight", - 0, Gdx.graphics.getHeight()); - font.draw(batch, - "F2 - ConeLight", - 0, Gdx.graphics.getHeight() - 15); - font.draw(batch, - "F3 - ChainLight", - 0, Gdx.graphics.getHeight() - 30); - font.draw(batch, - "F4 - DirectionalLight", - 0, Gdx.graphics.getHeight() - 45); - font.draw(batch, - "F5 - random lights colors", - 0, Gdx.graphics.getHeight() - 75); - font.draw(batch, - "F6 - random lights distance", - 0, Gdx.graphics.getHeight() - 90); - font.draw(batch, - "F9 - default blending (1.3)", - 0, Gdx.graphics.getHeight() - 120); - font.draw(batch, - "F10 - over-burn blending (default in 1.2)", - 0, Gdx.graphics.getHeight() - 135); - font.draw(batch, - "F11 - some other blending", - 0, Gdx.graphics.getHeight() - 150); - - font.draw(batch, - "F12 - toggle help text", - 0, Gdx.graphics.getHeight() - 180); - - font.draw(batch, - Integer.toString(Gdx.graphics.getFramesPerSecond()) - + "mouse at shadows: " + atShadow - + " time used for shadow calculation:" - + aika / ++times + "ns" , 0, 20); - - batch.end(); - } - if(jfxRenderer != null) { - var pixmap = Pixmap.createFromFrameBuffer(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); - jfxRenderer.setGdxBuffer(pixmap.getPixels()); - pixmap.dispose(); - } - } - - void clearLights() { - if (lights.size() > 0) { - for (Light light : lights) { - light.remove(); - } - lights.clear(); - } - groundBody.setActive(true); - } - - void initPointLights() { - clearLights(); - for (int i = 0; i < BALLSNUM; i++) { - PointLight light = new PointLight( - rayHandler, RAYS_PER_BALL, null, LIGHT_DISTANCE, 0f, 0f); - light.attachToBody(balls.get(i), RADIUS / 2f, RADIUS / 2f); - light.setColor( - MathUtils.random(), - MathUtils.random(), - MathUtils.random(), - 1f); - lights.add(light); - } - } - - void initConeLights() { - clearLights(); - for (int i = 0; i < BALLSNUM; i++) { - ConeLight light = new ConeLight( - rayHandler, RAYS_PER_BALL, null, LIGHT_DISTANCE, - 0, 0, 0f, MathUtils.random(15f, 40f)); - light.attachToBody( - balls.get(i), - RADIUS / 2f, RADIUS / 2f, MathUtils.random(0f, 360f)); - light.setColor( - MathUtils.random(), - MathUtils.random(), - MathUtils.random(), - 1f); - lights.add(light); - } - } - - void initChainLights() { - clearLights(); - for (int i = 0; i < BALLSNUM; i++) { - ChainLight light = new ChainLight( - rayHandler, RAYS_PER_BALL, null, LIGHT_DISTANCE, 1, - new float[]{-5, 0, 0, 3, 5, 0}); - light.attachToBody( - balls.get(i), - MathUtils.random(0f, 360f)); - light.setColor( - MathUtils.random(), - MathUtils.random(), - MathUtils.random(), - 1f); - lights.add(light); - } - } - - void initDirectionalLight() { - clearLights(); - - groundBody.setActive(false); - sunDirection = MathUtils.random(0f, 360f); - - DirectionalLight light = new DirectionalLight( - rayHandler, 4 * RAYS_PER_BALL, null, sunDirection); - lights.add(light); - } - - private final static int MAX_FPS = 30; - private final static int MIN_FPS = 15; - public final static float TIME_STEP = 1f / MAX_FPS; - private final static float MAX_STEPS = 1f + MAX_FPS / MIN_FPS; - private final static float MAX_TIME_PER_FRAME = TIME_STEP * MAX_STEPS; - private final static int VELOCITY_ITERS = 6; - private final static int POSITION_ITERS = 2; - - float physicsTimeLeft; - long aika; - int times; - - private boolean fixedStep(float delta) { - physicsTimeLeft += delta; - if (physicsTimeLeft > MAX_TIME_PER_FRAME) - physicsTimeLeft = MAX_TIME_PER_FRAME; - - boolean stepped = false; - while (physicsTimeLeft >= TIME_STEP) { - world.step(TIME_STEP, VELOCITY_ITERS, POSITION_ITERS); - physicsTimeLeft -= TIME_STEP; - stepped = true; - } - return stepped; - } - - private void createPhysicsWorld() { - - world = new World(new Vector2(0, 0), true); - - float halfWidth = viewportWidth / 2f; - ChainShape chainShape = new ChainShape(); - chainShape.createLoop(new Vector2[] { - new Vector2(-halfWidth, 0f), - new Vector2(halfWidth, 0f), - new Vector2(halfWidth, viewportHeight), - new Vector2(-halfWidth, viewportHeight) }); - BodyDef chainBodyDef = new BodyDef(); - chainBodyDef.type = BodyType.StaticBody; - groundBody = world.createBody(chainBodyDef); - groundBody.createFixture(chainShape, 0); - chainShape.dispose(); - createBoxes(); - } - - private void createBoxes() { - CircleShape ballShape = new CircleShape(); - ballShape.setRadius(RADIUS); - - FixtureDef def = new FixtureDef(); - def.restitution = 0.9f; - def.friction = 0.01f; - def.shape = ballShape; - def.density = 1f; - BodyDef boxBodyDef = new BodyDef(); - boxBodyDef.type = BodyType.DynamicBody; - - for (int i = 0; i < BALLSNUM; i++) { - // Create the BodyDef, set a random position above the - // ground and create a new body - boxBodyDef.position.x = -20 + (float) (Math.random() * 40); - boxBodyDef.position.y = 10 + (float) (Math.random() * 15); - Body boxBody = world.createBody(boxBodyDef); - boxBody.createFixture(def); - balls.add(boxBody); - } - ballShape.dispose(); - } - - /** - * we instantiate this vector and the callback here so we don't irritate the - * GC - **/ - Vector3 testPoint = new Vector3(); - QueryCallback callback = new QueryCallback() { - @Override - public boolean reportFixture(Fixture fixture) { - if (fixture.getBody() == groundBody) - return true; - - if (fixture.testPoint(testPoint.x, testPoint.y)) { - hitBody = fixture.getBody(); - return false; - } else - return true; - } - }; - - @Override - public boolean touchDown(int x, int y, int pointer, int newParam) { - // translate the mouse coordinates to world coordinates - testPoint.set(x, y, 0); - camera.unproject(testPoint); - - // ask the world which bodies are within the given - // bounding box around the mouse pointer - hitBody = null; - world.QueryAABB(callback, testPoint.x - 0.1f, testPoint.y - 0.1f, - testPoint.x + 0.1f, testPoint.y + 0.1f); - - // if we hit something we create a new mouse joint - // and attach it to the hit body. - if (hitBody != null) { - MouseJointDef def = new MouseJointDef(); - def.bodyA = groundBody; - def.bodyB = hitBody; - def.collideConnected = true; - def.target.set(testPoint.x, testPoint.y); - def.maxForce = 1000.0f * hitBody.getMass(); - - mouseJoint = (MouseJoint) world.createJoint(def); - hitBody.setAwake(true); - } - - return false; - } - - /** another temporary vector **/ - Vector2 target = new Vector2(); - - @Override - public boolean touchDragged(int x, int y, int pointer) { - camera.unproject(testPoint.set(x, y, 0)); - target.set(testPoint.x, testPoint.y); - // if a mouse joint exists we simply update - // the target of the joint based on the new - // mouse coordinates - if (mouseJoint != null) { - mouseJoint.setTarget(target); - } - return false; - } - - @Override - public boolean touchUp(int x, int y, int pointer, int button) { - // if a mouse joint exists we simply destroy it - if (mouseJoint != null) { - world.destroyJoint(mouseJoint); - mouseJoint = null; - } - return false; - } - - @Override - public void dispose() { - rayHandler.dispose(); - world.dispose(); - } - - /** - * Type of lights to use: - * 0 - PointLight - * 1 - ConeLight - * 2 - ChainLight - * 3 - DirectionalLight - */ - int lightsType = 0; - - @Override - public boolean keyDown(int keycode) { - switch (keycode) { - - case Input.Keys.F1: - if (lightsType != 0) { - initPointLights(); - lightsType = 0; - } - return true; - - case Input.Keys.F2: - if (lightsType != 1) { - initConeLights(); - lightsType = 1; - } - return true; - - case Input.Keys.F3: - if (lightsType != 2) { - initChainLights(); - lightsType = 2; - } - return true; - - case Input.Keys.F4: - if (lightsType != 3) { - initDirectionalLight(); - lightsType = 3; - } - return true; - - case Input.Keys.F5: - for (Light light : lights) - light.setColor( - MathUtils.random(), - MathUtils.random(), - MathUtils.random(), - 1f); - return true; - - case Input.Keys.F6: - for (Light light : lights) - light.setDistance(MathUtils.random( - LIGHT_DISTANCE * 0.5f, LIGHT_DISTANCE * 2f)); - return true; - - case Input.Keys.F9: - rayHandler.diffuseBlendFunc.reset(); - return true; - - case Input.Keys.F10: - rayHandler.diffuseBlendFunc.set( - GL20.GL_DST_COLOR, GL20.GL_SRC_COLOR); - return true; - - case Input.Keys.F11: - rayHandler.diffuseBlendFunc.set( - GL20.GL_SRC_COLOR, GL20.GL_DST_COLOR); - return true; - - case Input.Keys.F12: - showText = !showText; - return true; - - default: - return false; - - } - } - - @Override - public boolean mouseMoved(int x, int y) { - testPoint.set(x, y, 0); - camera.unproject(testPoint); - return false; - } - - @Override - public boolean scrolled(float amountx, float amounty) { - camera.rotate((float) amountx * 3f, 0, 0, 1); - return false; - } - - @Override - public void pause() { - } - - @Override - public void resize(int arg0, int arg1) { - } - - @Override - public void resume() { - } - -} \ No newline at end of file diff --git a/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java b/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java index 342e2ec05c..5acd4d35de 100644 --- a/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java +++ b/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java @@ -4,6 +4,7 @@ import com.badlogic.gdx.backends.lwjgl.LwjglApplication; import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; import javafx.application.Platform; +import net.rptools.maptool.client.ui.zone.GdxRenderer; import javax.swing.*; import java.awt.*; @@ -94,6 +95,8 @@ private void fixColors() { var red = gdxBuffer.get(i); gdxBuffer.put(i, gdxBuffer.get(i + 2)); gdxBuffer.put(i + 2, red); + // set alpha to 1 + gdxBuffer.put(i+3, (byte)0xff); } } } diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index 8249a9fe44..b708c86076 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -53,7 +53,6 @@ import net.rptools.lib.swing.PositionalLayout; import net.rptools.lib.swing.SwingUtil; import net.rptools.lib.swing.preference.WindowPreferences; -import net.rptools.maptool.box2d.GdxRenderer; import net.rptools.maptool.box2d.NativeRenderingCanvas; import net.rptools.maptool.client.AppActions; import net.rptools.maptool.client.AppActions.ClientAction; diff --git a/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java similarity index 86% rename from src/main/java/net/rptools/maptool/box2d/GdxRenderer.java rename to src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 98ae211966..880a1c7af4 100644 --- a/src/main/java/net/rptools/maptool/box2d/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -1,9 +1,10 @@ -package net.rptools.maptool.box2d; +package net.rptools.maptool.client.ui.zone; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.backends.lwjgl.LwjglApplication; import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; +import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.*; import com.badlogic.gdx.graphics.g2d.BitmapFont; @@ -11,39 +12,33 @@ import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; -import com.badlogic.gdx.math.EarClippingTriangulator; import com.badlogic.gdx.math.Vector3; import com.crashinvaders.vfx.VfxManager; -import com.crashinvaders.vfx.effects.*; +import com.crashinvaders.vfx.effects.BloomEffect; +import com.crashinvaders.vfx.effects.ChainVfxEffect; +import com.crashinvaders.vfx.framebuffer.VfxFrameBuffer; import net.rptools.lib.AppEvent; import net.rptools.lib.AppEventListener; import net.rptools.lib.CodeTimer; import net.rptools.lib.MD5Key; -import net.rptools.lib.swing.SwingUtil; +import net.rptools.maptool.box2d.NativeRenderer; import net.rptools.maptool.client.AppState; import net.rptools.maptool.client.AppUtil; import net.rptools.maptool.client.MapTool; import net.rptools.maptool.client.ui.Scale; -import net.rptools.maptool.client.ui.zone.PlayerView; -import net.rptools.maptool.client.ui.zone.ZoneRenderer; -import net.rptools.maptool.client.ui.zone.ZoneView; import net.rptools.maptool.model.*; import net.rptools.maptool.model.drawing.DrawableColorPaint; +import net.rptools.maptool.model.drawing.DrawablePaint; import net.rptools.maptool.model.drawing.DrawableTexturePaint; import net.rptools.maptool.model.drawing.DrawnElement; import net.rptools.maptool.util.GraphicsUtil; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.bouncycastle.util.encoders.Hex; - -import javax.swing.*; import java.awt.*; -import java.awt.geom.AffineTransform; import java.awt.geom.Area; import java.awt.geom.GeneralPath; import java.awt.geom.PathIterator; -import java.awt.image.BufferedImage; import java.util.List; import java.util.*; @@ -53,29 +48,18 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private static GdxRenderer _instance; private final Map sprites = new HashMap<>(); + //renderFog + Texture fogBufferTexture; //from renderToken: private Area visibleScreenArea; private Area exposedFogArea; - //renderFog - // Private cache variables just for renderFog() and no one else. :) - Integer fogX = null; - Integer fogY = null; - Texture fogBufferTexture; - Pixmap fogPaintPixmap; - Color fogPaintColor = new Color(); - - /** - * I don't like this, at all, but it'll work for now, basically keep track of when the fog cache - * needs to be flushed in the case of switching views - */ - private boolean flushFog = true; - // zone specific resources private Zone zone; private ZoneRenderer zoneRenderer; private ZoneView zoneView; private Sprite background; + private Sprite fog; private MD5Key mapAssetId; private int offsetX = 0; private int offsetY = 0; @@ -95,11 +79,14 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private VfxManager vfxManager; private ChainVfxEffect vfxEffect; private ShapeRenderer shape; - private EarClippingTriangulator triangulator = new EarClippingTriangulator(); + private VfxFrameBuffer fogBuffer; + private Integer fogX; + private Integer fogY; private Vector3 tmpWorldCoord; private Vector3 tmpScreenCoord; private Color tmpColor; + private boolean flushFog = true; public GdxRenderer() { MapTool.getEventDispatcher().addListener(this, MapTool.ZoneEvent.Activated); @@ -136,6 +123,8 @@ public void create() { hudBatch = new SpriteBatch(); font = new BitmapFont(); glyphLayout = new GlyphLayout(); + fogBuffer = new VfxFrameBuffer(Pixmap.Format.RGBA8888); + fogBuffer.initialize(width, height); vfxManager = new VfxManager(Pixmap.Format.RGBA8888); vfxEffect = new BloomEffect(); //vfxManager.addEffect(vfxEffect); @@ -143,9 +132,11 @@ public void create() { tmpWorldCoord = new Vector3(); tmpScreenCoord = new Vector3(); tmpColor = new Color(); + fogBuffer.addRenderer(new VfxFrameBuffer.BatchRendererAdapter(batch)); + fogBuffer.addRenderer(new VfxFrameBuffer.ShapeRendererAdapter(shape)); initialized = true; - initializeZoneResources(); + initializeZoneResources(zone); } @Override @@ -164,6 +155,9 @@ public void resize(int width, int height) { this.width = width; this.height = height; vfxManager.resize(width, height); + fogBuffer.initialize(width, height); + // this texture is bound to the buffer + fogBufferTexture = null; updateCam(); } @@ -195,15 +189,15 @@ public void render() { } private void doRendering() { - Gdx.gl.glClearColor(0, 0, 0, 0); - Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT | (Gdx.graphics.getBufferFormat().coverageSampling?GL20.GL_COVERAGE_BUFFER_BIT_NV:0)); + Gdx.gl.glClearColor(0, 0, 0, 1); + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); if (zone == null) return; initializeTimer(); - if(zoneRenderer == null) + if (zoneRenderer == null) return; setScale(zoneRenderer.getZoneScale()); @@ -472,8 +466,8 @@ private void renderRenderables() { } private void renderFog(PlayerView view) { - Dimension size = zoneRenderer.getSize(); - Area fogClip = new Area(new Rectangle(0, 0, size.width, size.height)); + + Area combined = null; // Optimization for panning @@ -485,32 +479,51 @@ private void renderFog(PlayerView view) { } boolean cacheNotValid = (fogBufferTexture == null - || fogBufferTexture.getWidth() != size.width - || fogBufferTexture.getHeight() != size.height); + || fogBufferTexture.getWidth() != width + || fogBufferTexture.getHeight() != height); timer.start("renderFog"); if (flushFog || cacheNotValid) { + + + fogBuffer.begin(); + Gdx.gl.glClearColor(0, 0, 0, 1); + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + + batch.setProjectionMatrix(cam.combined); + timer.start("renderFog-allocateBufferedImage"); - var fogBuffer = new Pixmap(width, height, Pixmap.Format.RGBA8888); timer.stop("renderFog-allocateBufferedImage"); fogX = zoneRenderer.getViewOffsetX(); fogY = zoneRenderer.getViewOffsetY(); timer.start("renderFog-fill"); // Fill - float scale = (float)zoneRenderer.getScale(); + if(fog == null) + fog = paintToSprite(zone.getFogPaint()); + fillViewportWith(fog); + + batch.end(); + shape.begin(ShapeRenderer.ShapeType.Filled); + shape.setProjectionMatrix(cam.combined); + + shape.setColor(Color.BLUE); + shape.circle(0, 0, 50); + shape.end(); + batch.begin(); +/* fogBuffer.setBlending(Pixmap.Blending.None); - if(fogPaintPixmap != null) { + if (fogPaintPixmap != null) { var pix = fogPaintPixmap; var w = pix.getWidth(); var h = pix.getHeight(); - fogBuffer.drawPixmap(pix,fogX, fogY, w, h, 0, 0, (int)(w*scale), (int)(h*scale)); + fillViewportWith(); + fogBuffer.drawPixmap(pix, fogX, fogY, w, h, 0, 0, (int) (w * scale), (int) (h * scale)); //buffG.setPaint(zone.getFogPaint().getPaint(fogX, fogY, scale)); //buffG.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC, view.isGMView() ? .6f : 1f)); // JFJ this } else { - var color = fogPaintColor; - fogBuffer.setColor(color.r, color.g, color.b, view.isGMView() ? .6f : 1f); + fogBuffer.setColor(fogPaintColor); } @@ -518,12 +531,6 @@ private void renderFog(PlayerView view) { fogBuffer.fillRectangle(0, 0, size.width, size.height); timer.stop("renderFog-fill"); - /* // Cut out the exposed area - AffineTransform af = new AffineTransform(); - af.translate(fogX, fogY); - af.scale(scale, scale); -*/ - timer.start("renderFog-visibleArea"); Area visibleArea = zoneView.getVisibleArea(view); timer.stop("renderFog-visibleArea"); @@ -556,23 +563,23 @@ private void renderFog(PlayerView view) { } if (combinedView) { var triangles = triangulator.computeTriangles(areaToVertices(combined)); - for(int i = 0; i< triangles.size; i+=6) - fogBuffer.fillTriangle(triangles.get(i), triangles.get(i+1), triangles.get(i+2), - triangles.get(i+3), triangles.get(i+4), triangles.get(i+5)); + for (int i = 0; i < triangles.size; i += 6) + fogBuffer.fillTriangle(triangles.get(i), triangles.get(i + 1), triangles.get(i + 2), + triangles.get(i + 3), triangles.get(i + 4), triangles.get(i + 5)); - renderFogArea(fogBuffer, view, combined, visibleArea); - renderFogOutline(fogBuffer, view, combined); + renderFogArea(view, combined, visibleArea); + renderFogOutline(view, combined); } else { // 'combined' already includes the area encompassed by 'tempArea', so just // use 'combined' instead in this block of code? tempArea.add(combined); var triangles = triangulator.computeTriangles(areaToVertices(tempArea)); - for(int i = 0; i< triangles.size; i+=6) - fogBuffer.fillTriangle(triangles.get(i), triangles.get(i+1), triangles.get(i+2), - triangles.get(i+3), triangles.get(i+4), triangles.get(i+5)); - renderFogArea(fogBuffer, view, tempArea, visibleArea); - renderFogOutline(fogBuffer, view, tempArea); + for (int i = 0; i < triangles.size; i += 6) + fogBuffer.fillTriangle(triangles.get(i), triangles.get(i + 1), triangles.get(i + 2), + triangles.get(i + 3), triangles.get(i + 4), triangles.get(i + 5)); + renderFogArea(view, tempArea, visibleArea); + renderFogOutline(view, tempArea); } } else { // No tokens selected, so if we are using Individual FOW, we build up all the owned tokens @@ -582,11 +589,11 @@ private void renderFog(PlayerView view) { combined = zone.getExposedArea(); } var triangles = triangulator.computeTriangles(areaToVertices(combined)); - for(int i = 0; i< triangles.size; i+=6) - fogBuffer.fillTriangle(triangles.get(i), triangles.get(i+1), triangles.get(i+2), - triangles.get(i+3), triangles.get(i+4), triangles.get(i+5)); - renderFogArea(fogBuffer, view, combined, visibleArea); - renderFogOutline(fogBuffer, view, combined); + for (int i = 0; i < triangles.size; i += 6) + fogBuffer.fillTriangle(triangles.get(i), triangles.get(i + 1), triangles.get(i + 2), + triangles.get(i + 3), triangles.get(i + 4), triangles.get(i + 5)); + renderFogArea(view, combined, visibleArea); + renderFogOutline(view, combined); } else { Area myCombined = new Area(); List myToks = zone.getTokens(); @@ -601,37 +608,37 @@ private void renderFog(PlayerView view) { myCombined.add(new Area(exposedArea)); } var triangles = triangulator.computeTriangles(areaToVertices(myCombined)); - for(int i = 0; i< triangles.size; i+=6) - fogBuffer.fillTriangle(triangles.get(i), triangles.get(i+1), triangles.get(i+2), - triangles.get(i+3), triangles.get(i+4), triangles.get(i+5)); - renderFogArea(fogBuffer, view, myCombined, visibleArea); - renderFogOutline(fogBuffer, view, myCombined); + for (int i = 0; i < triangles.size; i += 6) + fogBuffer.fillTriangle(triangles.get(i), triangles.get(i + 1), triangles.get(i + 2), + triangles.get(i + 3), triangles.get(i + 4), triangles.get(i + 5)); + renderFogArea(view, myCombined, visibleArea); + renderFogOutline(view, myCombined); } } - // renderFogArea(buffG, view, combined, visibleArea); timer.stop("renderFogArea"); +*/ + flushFog = false; - // timer.start("renderFogOutline"); - // renderFogOutline(buffG, view, combined); - // timer.stop("renderFogOutline"); + fogBuffer.end(); - flushFog = false; - if(fogBufferTexture != null) { - fogBufferTexture.dispose(); - } - fogBufferTexture = new Texture(fogBuffer); - fogBuffer.dispose(); + if(fogBufferTexture == null) + fogBufferTexture = fogBuffer.getTexture(); } - timer.stop("renderFog"); + batch.setProjectionMatrix(hudCam.combined); - batch.draw(fogBufferTexture, 0, 0); + var batchColor = batch.getColor(); + batch.setColor(batchColor.r, batchColor.g, batchColor.b, view.isGMView() ? .6f : 1f); + batch.draw(fogBufferTexture, 0, 0, width, height, 0, 0, + fogBufferTexture.getWidth(), fogBufferTexture.getHeight(), false, true); + batch.setColor(batchColor); batch.setProjectionMatrix(cam.combined); + timer.stop("renderFog"); } - private void renderFogArea(Pixmap fogBuffer, PlayerView view, Area tempArea, Area visibleArea) { + private void renderFogArea(PlayerView view, Area tempArea, Area visibleArea) { } - private void renderFogOutline(Pixmap fogBuffer, PlayerView view, Area combined) { + private void renderFogOutline(PlayerView view, Area combined) { } private void renderLabels(PlayerView view) { @@ -648,21 +655,21 @@ private void renderLights(PlayerView view) { private void renderGrid(PlayerView view) { var grid = zone.getGrid(); - var scale = (float)zoneRenderer.getScale(); + var scale = (float) zoneRenderer.getScale(); int gridSize = (int) (grid.getSize() * scale); if (!AppState.isShowGrid() || gridSize < ZoneRenderer.MIN_GRID_SIZE) { return; } - if(grid instanceof GridlessGrid) { + if (grid instanceof GridlessGrid) { // do nothing - } else if(grid instanceof HexGrid) { - renderGrid((HexGrid)grid); - } else if(grid instanceof SquareGrid) { + } else if (grid instanceof HexGrid) { + renderGrid((HexGrid) grid); + } else if (grid instanceof SquareGrid) { renderGrid((SquareGrid) grid); - } else if (grid instanceof IsometricGrid) { - renderGrid((IsometricGrid)grid); + } else if (grid instanceof IsometricGrid) { + renderGrid((IsometricGrid) grid); } } @@ -697,13 +704,12 @@ private void renderGrid(HexGrid grid) { for (double u = start; u < end; u += incr) { float transX = 0; float transY = 0; - if(grid instanceof HexGridVertical) { - transX = (float)(u + offsetU); - transY = height - (float)v; - } - else { - transX = (float)v; - transY = height - (float)(u + offsetU); + if (grid instanceof HexGridVertical) { + transX = (float) (u + offsetU); + transY = height - (float) v; + } else { + transX = (float) v; + transY = height - (float) (u + offsetU); } shape.translate(transX, transY, 0); @@ -716,7 +722,7 @@ private void renderGrid(HexGrid grid) { } private void renderGrid(IsometricGrid grid) { - var scale = (float)zoneRenderer.getScale(); + var scale = (float) zoneRenderer.getScale(); int gridSize = (int) (grid.getSize() * scale); shape.begin(ShapeRenderer.ShapeType.Filled); @@ -727,8 +733,8 @@ private void renderGrid(IsometricGrid grid) { shape.setColor(tmpColor); - var x = hudCam.position.x - hudCam.viewportWidth/2; - var y = hudCam.position.y - hudCam.viewportHeight/2; + var x = hudCam.position.x - hudCam.viewportWidth / 2; + var y = hudCam.position.y - hudCam.viewportHeight / 2; var w = hudCam.viewportWidth; var h = hudCam.viewportHeight; @@ -770,7 +776,7 @@ private void drawHatch(IsometricGrid grid, float x, float y) { } private void renderGrid(SquareGrid grid) { - var scale = (float)zoneRenderer.getScale(); + var scale = (float) zoneRenderer.getScale(); int gridSize = (int) (grid.getSize() * scale); shape.begin(ShapeRenderer.ShapeType.Filled); @@ -781,13 +787,13 @@ private void renderGrid(SquareGrid grid) { shape.setColor(tmpColor); - var x = hudCam.position.x - hudCam.viewportWidth/2; - var y = hudCam.position.y - hudCam.viewportHeight/2; + var x = hudCam.position.x - hudCam.viewportWidth / 2; + var y = hudCam.position.y - hudCam.viewportHeight / 2; var w = hudCam.viewportWidth; var h = hudCam.viewportHeight; - var offX = (int) (zoneRenderer.getViewOffsetX() % gridSize + grid.getOffsetX() * scale) +1; - var offY = (int) (zoneRenderer.getViewOffsetY() % gridSize + grid.getOffsetY() * scale) +1; + var offX = (int) (zoneRenderer.getViewOffsetX() % gridSize + grid.getOffsetX() * scale) + 1; + var offY = (int) (zoneRenderer.getViewOffsetY() % gridSize + grid.getOffsetY() * scale) + 1; var startCol = ((int) (x / gridSize) * gridSize); var startRow = ((int) (y / gridSize) * gridSize); @@ -795,10 +801,10 @@ private void renderGrid(SquareGrid grid) { var lineWidth = AppState.getGridSize(); for (float row = startRow; row < y + h + gridSize; row += gridSize) - shape.rectLine(x,(int)(h - (row + offY)) , x + w,(int)(h - (row + offY)), lineWidth); + shape.rectLine(x, (int) (h - (row + offY)), x + w, (int) (h - (row + offY)), lineWidth); for (float col = startCol; col < x + w + gridSize; col += gridSize) - shape.rectLine((int)(col + offX), y, (int) (col + offX), y + h, lineWidth); + shape.rectLine((int) (col + offX), y, (int) (col + offX), y + h, lineWidth); shape.end(); } @@ -862,20 +868,10 @@ private void renderBoard() { if (!zone.drawBoard()) return; - if (background != null) { - var startX = (cam.position.x - cam.viewportWidth * zoom / 2); - startX = (int) (startX / background.getWidth()) * background.getWidth() - background.getWidth(); - var endX = cam.position.x + cam.viewportWidth / 2 * zoom; - var startY = (cam.position.y - cam.viewportHeight * zoom / 2); - startY = (int) (startY / background.getHeight()) * background.getHeight() - background.getHeight(); - var endY = (cam.position.y + cam.viewportHeight / 2 * zoom); - - for (var i = startX; i < endX; i += background.getWidth()) - for (var j = startY; j < endY; j += background.getHeight()) { - background.setPosition(i, j); - background.draw(batch); - } - } + if (background == null) + background = paintToSprite(zone.getBackgroundPaint()); + + fillViewportWith(background); if (mapAssetId != null) { var map = sprites.get(mapAssetId); @@ -886,6 +882,21 @@ private void renderBoard() { } } + private void fillViewportWith(Sprite fill) { + var startX = (cam.position.x - cam.viewportWidth * zoom / 2); + startX = (int) (startX / fill.getWidth()) * fill.getWidth() - fill.getWidth(); + var endX = cam.position.x + cam.viewportWidth / 2 * zoom; + var startY = (cam.position.y - cam.viewportHeight * zoom / 2); + startY = (int) (startY / fill.getHeight()) * fill.getHeight() - fill.getHeight(); + var endY = (cam.position.y + cam.viewportHeight / 2 * zoom); + + for (var i = startX; i < endX; i += fill.getWidth()) + for (var j = startY; j < endY; j += fill.getHeight()) { + fill.setPosition(i, j); + fill.draw(batch); + } + } + private void renderTokens(List tokenList, PlayerView view, boolean figuresOnly) { boolean isGMView = view.isGMView(); // speed things up @@ -970,9 +981,9 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure timer.start("tokenlist-5a"); if (token.isFlippedIso()) { image.setRotation(45); - image.setSize(image.getWidth(), image.getHeight()/2); - token.setHeight((int)image.getHeight()); - token.setWidth((int)image.getWidth()); + image.setSize(image.getWidth(), image.getHeight() / 2); + token.setHeight((int) image.getHeight()); + token.setWidth((int) image.getWidth()); footprintBounds = token.getBounds(zone); } timer.stop("tokenlist-5a"); @@ -991,15 +1002,15 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure footprintBounds.y - (int) iso_ho, footprintBounds.width, (int) th); - iso_ho = iso_ho * (float)zoneRenderer.getScale(); + iso_ho = iso_ho * (float) zoneRenderer.getScale(); } - var factorX = footprintBounds.width/image.getWidth(); - var factorY = footprintBounds.height/image.getHeight(); + var factorX = footprintBounds.width / image.getWidth(); + var factorY = footprintBounds.height / image.getHeight(); var factor = Math.min(factorX, factorY); - image.setSize(image.getWidth()*factor, image.getHeight()*factor); + image.setSize(image.getWidth() * factor, image.getHeight() * factor); image.setOriginCenter(); // Rotated @@ -1009,15 +1020,14 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure if (token.isSnapToScale()) { var offsetx = (image.getWidth() < footprintBounds.width - ? (footprintBounds.width - image.getWidth()) / 2 : 0); + ? (footprintBounds.width - image.getWidth()) / 2 : 0); var offsety = (image.getHeight() < footprintBounds.height - ? (footprintBounds.height - image.getHeight()) / 2 : 0); + ? (footprintBounds.height - image.getHeight()) / 2 : 0); image.setPosition(image.getX() + offsetx, image.getY() + offsety + iso_ho); } - timer.stop("tokenlist-6"); /* // Render Halo @@ -1446,67 +1456,28 @@ private void disposeZoneResources() { background.getTexture().dispose(); } + var fog = this.fog; + this.fog = null; + if (fog != null) { + fog.getTexture().dispose(); + } + for (var sprite : sprites.values()) { sprite.getTexture().dispose(); } sprites.clear(); - fogPaintColor = null; - if(fogPaintPixmap != null) - fogPaintPixmap.dispose(); - fogPaintPixmap = null; - if(fogBufferTexture != null) - fogBufferTexture.dispose(); + fogBufferTexture = null; }); } - private void initializeZoneResources() { - if (zone == null || !initialized) + private void initializeZoneResources(Zone newZone) { + if (newZone == null || !initialized) return; - var backgroundPaint = zone.getBackgroundPaint(); - if (backgroundPaint instanceof DrawableTexturePaint) { - var texturePaint = (DrawableTexturePaint) backgroundPaint; - var image = texturePaint.getAsset().getImage(); - Gdx.app.postRunnable(() -> { - var pix = new Pixmap(image, 0, image.length); - background = new Sprite(new Texture(pix)); - background.setSize(pix.getWidth(), pix.getHeight()); - background.setPosition(0, -1 * background.getHeight()); - pix.dispose(); - }); - } - if (backgroundPaint instanceof DrawableColorPaint) { - var colorPaint = (DrawableColorPaint) backgroundPaint; - var colorValue = colorPaint.getColor(); - var color = new Color(); - Color.argb8888ToColor(color, colorValue); - Gdx.app.postRunnable(() -> { - var pix = new Pixmap(64, 64, Pixmap.Format.RGBA8888); - - pix.setColor(color); - pix.fill(); - background = new Sprite(new Texture(pix)); - background.setSize(pix.getWidth(), pix.getHeight()); - background.setPosition(0, -1 * background.getHeight()); - pix.dispose(); - }); - } - var fogPaint = zone.getFogPaint(); - if (fogPaint instanceof DrawableTexturePaint) { - var texturePaint = (DrawableTexturePaint) fogPaint; - var image = texturePaint.getAsset().getImage(); - Gdx.app.postRunnable(() -> { - fogPaintPixmap = new Pixmap(image, 0, image.length); - }); - } - if (fogPaint instanceof DrawableColorPaint) { - var colorPaint = (DrawableColorPaint) fogPaint; - var colorValue = colorPaint.getColor(); - Color.argb8888ToColor(fogPaintColor, colorValue); - } - - mapAssetId = zone.getMapAssetId(); + zoneView = new ZoneView(newZone); + zoneRenderer = MapTool.getFrame().getZoneRenderer(newZone); + mapAssetId = newZone.getMapAssetId(); // FIXME: zonechanges during wait for resources new Thread(() -> { @@ -1518,7 +1489,7 @@ private void initializeZoneResources() { // create sprites for all assets //TODO: create textureAtlas ? Gdx.app.postRunnable(() -> { - for (var assetId : zone.getAllAssetIds()) { + for (var assetId : newZone.getAllAssetIds()) { var bytes = AssetManager.getAsset(assetId).getImage(); var pix = new Pixmap(bytes, 0, bytes.length); @@ -1531,6 +1502,41 @@ private void initializeZoneResources() { } catch (InterruptedException e) { } }).start(); + + zone = newZone; + } + + private Sprite paintToSprite(DrawablePaint paint) { + if (paint instanceof DrawableTexturePaint) { + var texturePaint = (DrawableTexturePaint) paint; + var image = texturePaint.getAsset().getImage(); + var pix = new Pixmap(image, 0, image.length); + var sprite = new Sprite(new Texture(pix)); + sprite.setSize(pix.getWidth(), pix.getHeight()); + sprite.setPosition(0, -1 * sprite.getHeight()); + pix.dispose(); + return sprite; + } + if (paint instanceof DrawableColorPaint) { + var colorPaint = (DrawableColorPaint) paint; + var colorValue = colorPaint.getColor(); + var color = new Color(); + Color.argb8888ToColor(color, colorValue); + var pix = new Pixmap(64, 64, Pixmap.Format.RGBA8888); + + pix.setColor(color); + pix.fill(); + var sprite = new Sprite(new Texture(pix)); + sprite.setSize(pix.getWidth(), pix.getHeight()); + sprite.setPosition(0, -1 * sprite.getHeight()); + pix.dispose(); + return sprite; + } + return null; + } + + private void fillArea(Pixmap pix, Area area) { + } public java.awt.Rectangle toAwtRect(com.badlogic.gdx.math.Rectangle rectangle) { @@ -1547,21 +1553,20 @@ public void handleAppEvent(AppEvent event) { if (event.getId() != MapTool.ZoneEvent.Activated) return; - if (zone != null) { - disposeZoneResources(); - zone.removeModelChangeListener(this); - } + var oldZone = zone; // first disable rendering during intitialisation; zone = null; + if (oldZone != null) { + disposeZoneResources(); + oldZone.removeModelChangeListener(this); + } + var newZone = (Zone) event.getNewValue(); newZone.addModelChangeListener(this); - - zoneView = new ZoneView(newZone); - zoneRenderer = MapTool.getFrame().getZoneRenderer(newZone); + initializeZoneResources(newZone); + // just in case we are running before create was called and hence initializeZoneResources does nothing zone = newZone; - - initializeZoneResources(); } @Override diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index 933a0759ef..db0fb9bbe8 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -60,7 +60,6 @@ import net.rptools.lib.swing.ImageBorder; import net.rptools.lib.swing.ImageLabel; import net.rptools.lib.swing.SwingUtil; -import net.rptools.maptool.box2d.GdxRenderer; import net.rptools.maptool.client.AppActions; import net.rptools.maptool.client.AppConstants; import net.rptools.maptool.client.AppPreferences; From 0e86d4b24361229ad44930c13f41d7c908670a5a Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Fri, 9 Apr 2021 15:59:54 +0200 Subject: [PATCH 016/139] fog rendering works now. --- .../maptool/client/ui/zone/GdxRenderer.java | 204 +++++++++++++----- .../maptool/client/ui/zone/ZoneRenderer.java | 1 + 2 files changed, 149 insertions(+), 56 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 880a1c7af4..0a4f9ea2a7 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -12,7 +12,11 @@ import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.math.Bezier; +import com.badlogic.gdx.math.EarClippingTriangulator; +import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector3; +import com.badlogic.gdx.utils.FloatArray; import com.crashinvaders.vfx.VfxManager; import com.crashinvaders.vfx.effects.BloomEffect; import com.crashinvaders.vfx.effects.ChainVfxEffect; @@ -42,6 +46,17 @@ import java.util.List; import java.util.*; +/** + * Done: + * - Board + * - Grids + * + * Bugs: + * - y offset of VerticalHexgrid is wrong + * - ismetric mode for token does't work + */ + + public class GdxRenderer extends ApplicationAdapter implements AppEventListener, ModelChangeListener { private static final Logger log = LogManager.getLogger(GdxRenderer.class); @@ -50,6 +65,7 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private final Map sprites = new HashMap<>(); //renderFog Texture fogBufferTexture; + private boolean flushFog = true; //from renderToken: private Area visibleScreenArea; private Area exposedFogArea; @@ -64,6 +80,7 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private int offsetX = 0; private int offsetY = 0; private float zoom = 1.0f; + // general resources private OrthographicCamera cam; private OrthographicCamera hudCam; @@ -82,11 +99,21 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private VfxFrameBuffer fogBuffer; private Integer fogX; private Integer fogY; + private EarClippingTriangulator triangulator; + //temorary objects. Stored here to avoid garbage collection; private Vector3 tmpWorldCoord; private Vector3 tmpScreenCoord; private Color tmpColor; - private boolean flushFog = true; + private float[] floatsFromArea; + private FloatArray tmpFloat; + private Vector2 tmpVectorOut; + private Vector2 tmpVector; + private Vector2 tmpVector0; + private Vector2 tmpVector1; + private Vector2 tmpVector2; + private Vector2 tmpVector3; + public GdxRenderer() { MapTool.getEventDispatcher().addListener(this, MapTool.ZoneEvent.Activated); @@ -98,15 +125,6 @@ public static GdxRenderer getInstance() { return _instance; } - public static void main(String[] args) { - LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration(); - cfg.title = "MapTool libgdx Test!"; - cfg.width = 800; - cfg.height = 600; - - new LwjglApplication(new GdxRenderer(), cfg); - } - @Override public void create() { width = Gdx.graphics.getWidth(); @@ -125,6 +143,8 @@ public void create() { glyphLayout = new GlyphLayout(); fogBuffer = new VfxFrameBuffer(Pixmap.Format.RGBA8888); fogBuffer.initialize(width, height); + triangulator = new EarClippingTriangulator(); + vfxManager = new VfxManager(Pixmap.Format.RGBA8888); vfxEffect = new BloomEffect(); //vfxManager.addEffect(vfxEffect); @@ -132,6 +152,15 @@ public void create() { tmpWorldCoord = new Vector3(); tmpScreenCoord = new Vector3(); tmpColor = new Color(); + tmpFloat = new FloatArray(); + floatsFromArea = new float[6]; + tmpVector = new Vector2(); + tmpVector0 = new Vector2(); + tmpVector1 = new Vector2(); + tmpVector2 = new Vector2(); + tmpVector3 = new Vector2(); + tmpVectorOut = new Vector2(); + fogBuffer.addRenderer(new VfxFrameBuffer.BatchRendererAdapter(batch)); fogBuffer.addRenderer(new VfxFrameBuffer.ShapeRendererAdapter(shape)); @@ -486,7 +515,7 @@ private void renderFog(PlayerView view) { fogBuffer.begin(); - Gdx.gl.glClearColor(0, 0, 0, 1); + Gdx.gl.glClearColor(0, 0, 0, 0); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); batch.setProjectionMatrix(cam.combined); @@ -507,30 +536,6 @@ private void renderFog(PlayerView view) { shape.begin(ShapeRenderer.ShapeType.Filled); shape.setProjectionMatrix(cam.combined); - shape.setColor(Color.BLUE); - shape.circle(0, 0, 50); - shape.end(); - batch.begin(); -/* - fogBuffer.setBlending(Pixmap.Blending.None); - if (fogPaintPixmap != null) { - var pix = fogPaintPixmap; - var w = pix.getWidth(); - var h = pix.getHeight(); - fillViewportWith(); - fogBuffer.drawPixmap(pix, fogX, fogY, w, h, 0, 0, (int) (w * scale), (int) (h * scale)); - //buffG.setPaint(zone.getFogPaint().getPaint(fogX, fogY, scale)); - //buffG.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC, view.isGMView() ? .6f : 1f)); // JFJ this - - } else { - fogBuffer.setColor(fogPaintColor); - } - - - // fixes the GM exposed area view. - fogBuffer.fillRectangle(0, 0, size.width, size.height); - timer.stop("renderFog-fill"); - timer.start("renderFog-visibleArea"); Area visibleArea = zoneView.getVisibleArea(view); timer.stop("renderFog-visibleArea"); @@ -553,6 +558,8 @@ private void renderFog(PlayerView view) { || !MapTool.getServerPolicy().isUseIndividualFOW() || view.isGMView(); + shape.setColor(Color.CLEAR); + if (view.getTokens() != null) { // if there are tokens selected combine the areas, then, if individual FOW is enabled // we pass the combined exposed area to build the soft FOW and visible area. @@ -562,11 +569,7 @@ private void renderFog(PlayerView view) { tempArea.add(new Area(exposedArea)); } if (combinedView) { - var triangles = triangulator.computeTriangles(areaToVertices(combined)); - for (int i = 0; i < triangles.size; i += 6) - fogBuffer.fillTriangle(triangles.get(i), triangles.get(i + 1), triangles.get(i + 2), - triangles.get(i + 3), triangles.get(i + 4), triangles.get(i + 5)); - + fillArea(combined); renderFogArea(view, combined, visibleArea); renderFogOutline(view, combined); } else { @@ -574,10 +577,7 @@ private void renderFog(PlayerView view) { // use 'combined' instead in this block of code? tempArea.add(combined); - var triangles = triangulator.computeTriangles(areaToVertices(tempArea)); - for (int i = 0; i < triangles.size; i += 6) - fogBuffer.fillTriangle(triangles.get(i), triangles.get(i + 1), triangles.get(i + 2), - triangles.get(i + 3), triangles.get(i + 4), triangles.get(i + 5)); + fillArea(tempArea); renderFogArea(view, tempArea, visibleArea); renderFogOutline(view, tempArea); } @@ -588,10 +588,7 @@ private void renderFog(PlayerView view) { if (combined.isEmpty()) { combined = zone.getExposedArea(); } - var triangles = triangulator.computeTriangles(areaToVertices(combined)); - for (int i = 0; i < triangles.size; i += 6) - fogBuffer.fillTriangle(triangles.get(i), triangles.get(i + 1), triangles.get(i + 2), - triangles.get(i + 3), triangles.get(i + 4), triangles.get(i + 5)); + fillArea(combined); renderFogArea(view, combined, visibleArea); renderFogOutline(view, combined); } else { @@ -607,16 +604,15 @@ private void renderFog(PlayerView view) { exposedArea = meta.getExposedAreaHistory(); myCombined.add(new Area(exposedArea)); } - var triangles = triangulator.computeTriangles(areaToVertices(myCombined)); - for (int i = 0; i < triangles.size; i += 6) - fogBuffer.fillTriangle(triangles.get(i), triangles.get(i + 1), triangles.get(i + 2), - triangles.get(i + 3), triangles.get(i + 4), triangles.get(i + 5)); + fillArea(myCombined); renderFogArea(view, myCombined, visibleArea); renderFogOutline(view, myCombined); } } timer.stop("renderFogArea"); -*/ + + shape.end(); + batch.begin(); flushFog = false; fogBuffer.end(); @@ -1535,8 +1531,73 @@ private Sprite paintToSprite(DrawablePaint paint) { return null; } - private void fillArea(Pixmap pix, Area area) { + private void fillArea(Area area) { + if (area.isEmpty()) + return; + + var pointsPerBezier = 10.0f; + + for (var it = area.getPathIterator(null); !it.isDone(); it.next()) { + int type = it.currentSegment(floatsFromArea); + + switch (type) { + case PathIterator.SEG_MOVETO: + System.out.println("Move to: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + ")"); + tmpFloat.add(floatsFromArea[0], -floatsFromArea[1]); + + break; + case PathIterator.SEG_CLOSE: +// tmpFloat.add(tmpFloat.get(0), tmpFloat.get(1)); + var indicies = triangulator.computeTriangles(tmpFloat.items, 0, tmpFloat.size); + for (int i = 0; i < indicies.size - 2; i = i + 3) + { + float x1 = tmpFloat.get(indicies.get(i) * 2); + float y1 = tmpFloat.get((indicies.get(i) * 2) + 1); + + float x2 = tmpFloat.get((indicies.get(i + 1)) * 2); + float y2 = tmpFloat.get((indicies.get(i + 1) * 2) + 1); + + float x3 = tmpFloat.get(indicies.get(i + 2) * 2); + float y3 = tmpFloat.get((indicies.get(i + 2) * 2) + 1); + shape.triangle(x1, y1, x2, y2, x3, y3); + } + tmpFloat.clear(); + break; + case PathIterator.SEG_LINETO: + System.out.println("Line to: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + ")"); + tmpFloat.add(floatsFromArea[0], -floatsFromArea[1]); + break; + case PathIterator.SEG_QUADTO: + System.out.println("quadratic bezier with: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + + "), (" + floatsFromArea[2] + ", " + floatsFromArea[3] + ")"); + + tmpVector0.set(tmpFloat.get(tmpFloat.size-2), tmpFloat.get(tmpFloat.size-1)); + tmpVector1.set(floatsFromArea[0], -floatsFromArea[1]); + tmpVector2.set(floatsFromArea[2], -floatsFromArea[3]); + for(var i = 1; i <= pointsPerBezier; i++) { + Bezier.quadratic(tmpVectorOut, i / pointsPerBezier, tmpVector0, tmpVector1, tmpVector2, tmpVector); + tmpFloat.add(tmpVectorOut.x, tmpVectorOut.y); + } + break; + case PathIterator.SEG_CUBICTO: + System.out.println("cubic bezier with: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + + "), (" + floatsFromArea[2] + ", " + floatsFromArea[3] + + "), (" + floatsFromArea[4] + ", " + floatsFromArea[5] + ")"); + + tmpVector0.set(tmpFloat.get(tmpFloat.size-2), tmpFloat.get(tmpFloat.size-1)); + tmpVector1.set(floatsFromArea[0], -floatsFromArea[1]); + tmpVector2.set(floatsFromArea[2], -floatsFromArea[3]); + tmpVector3.set(floatsFromArea[4], -floatsFromArea[5]); + for(var i = 1; i <= pointsPerBezier; i++) { + Bezier.cubic(tmpVectorOut, i / pointsPerBezier, tmpVector0, tmpVector1, tmpVector2, tmpVector3, tmpVector); + tmpFloat.add(tmpVectorOut.x, tmpVectorOut.y); + } + break; + default: + System.out.println("Type: " + type); + } + } } public java.awt.Rectangle toAwtRect(com.badlogic.gdx.math.Rectangle rectangle) { @@ -1571,9 +1632,37 @@ public void handleAppEvent(AppEvent event) { @Override public void modelChanged(ModelChangeEvent event) { + Object evt = event.getEvent(); + + if (evt == Zone.Event.TOPOLOGY_CHANGED) { + flushFog(); + //flushLight(); + return; + } + if (evt == Zone.Event.FOG_CHANGED) { + flushFog = true; + return; + } + /* + if (evt == Zone.Event.TOKEN_CHANGED + || evt == Zone.Event.TOKEN_REMOVED + || evt == Zone.Event.TOKEN_ADDED) { + if (event.getArg() instanceof List) { + @SuppressWarnings("unchecked") + List list = (List) (event.getArg()); + for (Token token : list) { + zoneRenderer.flush(token); + } + } else { + zoneRenderer.flush((Token) event.getArg()); + } + }*/ + + var currentZone = zone; + // for now quick and dirty - //disposeZoneResources(); - //initializeZoneResources(); + disposeZoneResources(); + initializeZoneResources(currentZone); } public void setScale(Scale scale) { @@ -1582,4 +1671,7 @@ public void setScale(Scale scale) { zoom = (float) (1f / scale.getScale()); updateCam(); } + + public void flushFog() { flushFog = true; } + } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index db0fb9bbe8..fdff40f1ff 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -778,6 +778,7 @@ public void flushFog() { flushFog = true; visibleScreenArea = null; repaintDebouncer.dispatch(); + GdxRenderer.getInstance().flushFog(); } /** @return the Zone */ From 40a314db440a64263f1a1e77a863e875b68c4be0 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 10 Apr 2021 11:02:53 +0200 Subject: [PATCH 017/139] save --- .../maptool/client/ui/ToolbarPanel.java | 9 +- .../maptool/client/ui/zone/GdxRenderer.java | 293 ++++++++++++------ .../maptool/client/ui/zone/ZoneRenderer.java | 8 +- .../rptools/maptool/client/image/javafx.png | Bin 0 -> 13861 bytes 4 files changed, 200 insertions(+), 110 deletions(-) create mode 100644 src/main/resources/net/rptools/maptool/client/image/javafx.png diff --git a/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java b/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java index 19560e77f4..148de0041a 100644 --- a/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java +++ b/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java @@ -220,8 +220,7 @@ public ToolbarPanel(Toolbox tbox) { add( createJfxButton( - "net/rptools/maptool/client/image/audio/mute.png", - "net/rptools/maptool/client/image/audio/volume.png", + "net/rptools/maptool/client/image/javafx.png", I18N.getText("tools.mute.tooltip"), I18N.getText("tools.unmute.tooltip"))); @@ -393,7 +392,7 @@ private JToggleButton createMuteButton( } private JToggleButton createJfxButton( - final String icon, final String offIcon, String mutetooltip, String unmutetooltip) { + final String icon, String mutetooltip, String unmutetooltip) { final JToggleButton button = new JToggleButton(); button.setToolTipText(mutetooltip); button.addActionListener( @@ -402,8 +401,8 @@ private JToggleButton createJfxButton( }); try { - button.setIcon(createIcon(offIcon, 25, 25)); - button.setSelectedIcon(createIcon(icon, 25, 25)); + button.setIcon(createIcon(icon, 25, 25)); + //button.setSelectedIcon(createIcon(icon, 25, 25)); } catch (IOException ioe) { ioe.printStackTrace(); } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 0a4f9ea2a7..ea23084069 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -2,15 +2,9 @@ import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.backends.lwjgl.LwjglApplication; -import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; -import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.*; -import com.badlogic.gdx.graphics.g2d.BitmapFont; -import com.badlogic.gdx.graphics.g2d.GlyphLayout; -import com.badlogic.gdx.graphics.g2d.Sprite; -import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.g2d.*; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.math.Bezier; import com.badlogic.gdx.math.EarClippingTriangulator; @@ -25,7 +19,9 @@ import net.rptools.lib.AppEventListener; import net.rptools.lib.CodeTimer; import net.rptools.lib.MD5Key; +import net.rptools.lib.swing.ImageLabel; import net.rptools.maptool.box2d.NativeRenderer; +import net.rptools.maptool.client.AppPreferences; import net.rptools.maptool.client.AppState; import net.rptools.maptool.client.AppUtil; import net.rptools.maptool.client.MapTool; @@ -39,6 +35,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import javax.swing.*; import java.awt.*; import java.awt.geom.Area; import java.awt.geom.GeneralPath; @@ -50,7 +47,7 @@ * Done: * - Board * - Grids - * + *

* Bugs: * - y offset of VerticalHexgrid is wrong * - ismetric mode for token does't work @@ -69,11 +66,11 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, //from renderToken: private Area visibleScreenArea; private Area exposedFogArea; + private PlayerView lastView; // zone specific resources private Zone zone; private ZoneRenderer zoneRenderer; - private ZoneView zoneView; private Sprite background; private Sprite fog; private MD5Key mapAssetId; @@ -100,6 +97,8 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private Integer fogX; private Integer fogY; private EarClippingTriangulator triangulator; + private Texture greyLabelTexture; + private NinePatch greyLabel; //temorary objects. Stored here to avoid garbage collection; private Vector3 tmpWorldCoord; @@ -145,6 +144,12 @@ public void create() { fogBuffer.initialize(width, height); triangulator = new EarClippingTriangulator(); + var pix = new Pixmap(Gdx.files.internal("net/rptools/maptool/client/image/grayLabelbox.png")); + greyLabelTexture = new Texture(pix); + pix.dispose(); + var topBottom = greyLabelTexture.getHeight()/2 - 1; + greyLabel = new NinePatch(greyLabelTexture, 10, 10, 0, 0); + vfxManager = new VfxManager(Pixmap.Format.RGBA8888); vfxEffect = new BloomEffect(); //vfxManager.addEffect(vfxEffect); @@ -176,6 +181,7 @@ public void dispose() { vfxManager.dispose(); vfxEffect.dispose(); shape.dispose(); + greyLabelTexture.dispose(); disposeZoneResources(); } @@ -245,26 +251,40 @@ private void doRendering() { renderZone(playerView); batch.end(); + glyphLayout.setText(font, "test"); + + + hudBatch.begin(); + //hudBatch.draw(greyLabelTexture, 20,20); + greyLabel.draw(hudBatch, 20, 20 , 100, 100); + font.draw(hudBatch, "test", 20, 20); + if (zoneRenderer.isLoading()) - drawBoxedString(zoneRenderer.getLoadingProgress(), width / 2, height / 2); + drawBoxedString(hudBatch, zoneRenderer.getLoadingProgress(), width / 2, height / 2); else if (MapTool.getCampaign().isBeingSerialized()) - drawBoxedString(" Please Wait ", width / 2, height / 2); + drawBoxedString(hudBatch, " Please Wait ", width / 2, height / 2); int noteVPos = 20; if (!zone.isVisible() && playerView.isGMView()) { - drawBoxedString( + drawBoxedString(hudBatch, "Map not visible to players", width / 2, height - noteVPos); noteVPos += 20; } if (AppState.isShowAsPlayer()) { - drawBoxedString("Player View", width / 2, height - noteVPos); + drawBoxedString(hudBatch, "Player View", width / 2, height - noteVPos); } - drawBoxedString(String.valueOf(Gdx.graphics.getFramesPerSecond()), 10, 10); + drawBoxedString(hudBatch, String.valueOf(Gdx.graphics.getFramesPerSecond()), 10, 10); hudBatch.end(); + shape.begin(ShapeRenderer.ShapeType.Line); + shape.setProjectionMatrix(hudCam.combined); + shape.setColor(Color.BLUE); + shape.rect(20,20, glyphLayout.width, glyphLayout.height); + shape.end(); + collectTimerResults(); } @@ -297,15 +317,33 @@ private void copyFramebufferToJfx() { } } + public void invalidateCurrentViewCache() { + flushFog = true; + // renderedLightMap = null; + // renderedAuraMap = null; + visibleScreenArea = null; + lastView = null; + + var zoneView = zoneRenderer.getZoneView(); + if (zoneView != null) { + zoneView.flush(); + } + } + private void renderZone(PlayerView view) { if (zoneRenderer.isLoading() || MapTool.getCampaign().isBeingSerialized()) return; + if (lastView != null && !lastView.equals(view)) { + invalidateCurrentViewCache(); + } + lastView = view; + // Calculations timer.start("calcs-1"); - if (visibleScreenArea == null && zoneView.isUsingVision()) { + if (visibleScreenArea == null && zoneRenderer.getZoneView().isUsingVision()) { timer.start("ZoneRenderer-getVisibleArea"); - visibleScreenArea = zoneView.getVisibleArea(view); + visibleScreenArea = zoneRenderer.getZoneView().getVisibleArea(view); timer.stop("ZoneRenderer-getVisibleArea"); } @@ -511,11 +549,11 @@ private void renderFog(PlayerView view) { || fogBufferTexture.getWidth() != width || fogBufferTexture.getHeight() != height); timer.start("renderFog"); - if (flushFog || cacheNotValid) { + // if (flushFog || cacheNotValid) + { fogBuffer.begin(); - Gdx.gl.glClearColor(0, 0, 0, 0); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); batch.setProjectionMatrix(cam.combined); @@ -526,10 +564,14 @@ private void renderFog(PlayerView view) { fogY = zoneRenderer.getViewOffsetY(); timer.start("renderFog-fill"); + + // Fill - if(fog == null) + if (fog == null) fog = paintToSprite(zone.getFogPaint()); + var color = fog.getColor(); + fog.setColor(color.r, color.g, color.b, view.isGMView() ? .6f : 1f); fillViewportWith(fog); batch.end(); @@ -537,7 +579,7 @@ private void renderFog(PlayerView view) { shape.setProjectionMatrix(cam.combined); timer.start("renderFog-visibleArea"); - Area visibleArea = zoneView.getVisibleArea(view); + Area visibleArea = zoneRenderer.getZoneView().getVisibleArea(view); timer.stop("renderFog-visibleArea"); String msg = null; @@ -553,7 +595,7 @@ private void renderFog(PlayerView view) { Area exposedArea = null; Area tempArea = new Area(); boolean combinedView = - !zoneView.isUsingVision() + !zoneRenderer.getZoneView().isUsingVision() || MapTool.isPersonalServer() || !MapTool.getServerPolicy().isUseIndividualFOW() || view.isGMView(); @@ -569,17 +611,17 @@ private void renderFog(PlayerView view) { tempArea.add(new Area(exposedArea)); } if (combinedView) { - fillArea(combined); - renderFogArea(view, combined, visibleArea); - renderFogOutline(view, combined); + paintArea(combined); + renderFogArea(combined, visibleArea); + renderFogOutline(); } else { // 'combined' already includes the area encompassed by 'tempArea', so just // use 'combined' instead in this block of code? tempArea.add(combined); - fillArea(tempArea); - renderFogArea(view, tempArea, visibleArea); - renderFogOutline(view, tempArea); + paintArea(tempArea); + renderFogArea(tempArea, visibleArea); + renderFogOutline(); } } else { // No tokens selected, so if we are using Individual FOW, we build up all the owned tokens @@ -588,9 +630,9 @@ private void renderFog(PlayerView view) { if (combined.isEmpty()) { combined = zone.getExposedArea(); } - fillArea(combined); - renderFogArea(view, combined, visibleArea); - renderFogOutline(view, combined); + paintArea(combined); + renderFogArea(combined, visibleArea); + renderFogOutline(); } else { Area myCombined = new Area(); List myToks = zone.getTokens(); @@ -604,9 +646,9 @@ private void renderFog(PlayerView view) { exposedArea = meta.getExposedAreaHistory(); myCombined.add(new Area(exposedArea)); } - fillArea(myCombined); - renderFogArea(view, myCombined, visibleArea); - renderFogOutline(view, myCombined); + paintArea(myCombined); + renderFogArea(myCombined, visibleArea); + renderFogOutline(); } } timer.stop("renderFogArea"); @@ -617,24 +659,58 @@ private void renderFog(PlayerView view) { fogBuffer.end(); - if(fogBufferTexture == null) + if (fogBufferTexture == null) fogBufferTexture = fogBuffer.getTexture(); } batch.setProjectionMatrix(hudCam.combined); - var batchColor = batch.getColor(); - batch.setColor(batchColor.r, batchColor.g, batchColor.b, view.isGMView() ? .6f : 1f); batch.draw(fogBufferTexture, 0, 0, width, height, 0, 0, fogBufferTexture.getWidth(), fogBufferTexture.getHeight(), false, true); - batch.setColor(batchColor); + batch.setProjectionMatrix(cam.combined); timer.stop("renderFog"); } - private void renderFogArea(PlayerView view, Area tempArea, Area visibleArea) { + private void renderFogArea(Area softFog, Area visibleArea) { + if (zoneRenderer.getZoneView().isUsingVision()) { + if (visibleArea != null && !visibleArea.isEmpty()) { + //shape.setColor(Color.BLUE); + shape.setColor(0, 0, 0, AppPreferences.getFogOverlayOpacity() / 255.0f); + + // Fill in the exposed area + paintArea(softFog); + + shape.setColor(Color.CLEAR); + + paintArea(visibleArea); + } else { + //shape.setColor(Color.BLUE); + shape.setColor(0, 0, 0, 80 / 255.0f); + paintArea(softFog); + } + } else { + paintArea(softFog); + } } - private void renderFogOutline(PlayerView view, Area combined) { + private void renderFogOutline() { + if (visibleScreenArea == null) + return; + + var currentType = shape.getCurrentType(); + if (shape.getCurrentType() != ShapeRenderer.ShapeType.Line) { + shape.end(); + shape.begin(ShapeRenderer.ShapeType.Line); + } + + Gdx.gl.glLineWidth(1); + shape.setColor(Color.BLACK); + paintArea(visibleScreenArea); + + if (shape.getCurrentType() != currentType) { + shape.end(); + shape.begin(currentType); + } } private void renderLabels(PlayerView view) { @@ -709,7 +785,7 @@ private void renderGrid(HexGrid grid) { } shape.translate(transX, transY, 0); - shape.polyline(vertices); + shape.polyline(vertices.items, 0, vertices.size); shape.translate(-transX, -transY, 0); } } @@ -805,59 +881,71 @@ private void renderGrid(SquareGrid grid) { shape.end(); } - private float[] areaToVertices(Area area) { - if (area.isEmpty()) - return new float[0]; + private FloatArray pathToVertices(GeneralPath path) { + PathIterator iterator = path.getPathIterator(null); - PathIterator iterator = area.getPathIterator(null); - float[] floats = new float[60]; - float[] vertices = new float[1000]; - int count1 = 0; + tmpFloat.clear(); while (!iterator.isDone()) { - int type = iterator.currentSegment(floats); + int type = iterator.currentSegment(floatsFromArea); if (type != PathIterator.SEG_CLOSE) { - vertices[count1++] = floats[0]; - vertices[count1++] = floats[1]; + tmpFloat.add(floatsFromArea[0], floatsFromArea[1]); } iterator.next(); } - float[] finalVertices = new float[count1]; - System.arraycopy(vertices, 0, finalVertices, 0, count1); + return tmpFloat; + } - return finalVertices; + private void renderDrawableOverlay(PlayerView view, List drawables) { } - private float[] pathToVertices(GeneralPath path) { - PathIterator iterator = path.getPathIterator(null); - float[] floats = new float[60]; - float[] vertices = new float[1000]; - int count1 = 0; + public void drawBoxedString(SpriteBatch batch, String text, float centerX, float centerY) { + drawBoxedString(batch, text, centerX, centerY, SwingUtilities.CENTER); + } - while (!iterator.isDone()) { - int type = iterator.currentSegment(floats); + public void drawBoxedString(SpriteBatch batch, String text, float x, float y, int justification) { + drawBoxedString(batch, text, x, y, justification, greyLabel, Color.BLACK); + } - if (type != PathIterator.SEG_CLOSE) { - vertices[count1++] = floats[0]; - vertices[count1++] = floats[1]; - } - iterator.next(); - } + private void drawBoxedString(SpriteBatch batch, String text, float x, float y, int justification, NinePatch background, Color foreground) { + final int BOX_PADDINGX = 10; + final int BOX_PADDINGY = 2; - float[] finalVertices = new float[count1]; - System.arraycopy(vertices, 0, finalVertices, 0, count1); + if (text == null) text = ""; - return finalVertices; - } + glyphLayout.setText(font, text); + var strWidth = glyphLayout.width; + + var width = strWidth + BOX_PADDINGX * 2; + var height = glyphLayout.height + BOX_PADDINGY * 2; + + var boxY = y - glyphLayout.height / 2 - BOX_PADDINGY; + var textY = y + glyphLayout.height /2 + BOX_PADDINGY; + + y = y - glyphLayout.height / 2 - BOX_PADDINGY; + switch (justification) { + case SwingUtilities.CENTER: + x = x - strWidth / 2 - BOX_PADDINGX; + break; + case SwingUtilities.RIGHT: + x = x - strWidth - BOX_PADDINGX; + break; + case SwingUtilities.LEFT: + break; + } - private void renderDrawableOverlay(PlayerView view, List drawables) { - } + // Box + background.draw(batch, x, y, width, height); - private void drawBoxedString(String text, int centerX, int centerY) { - glyphLayout.setText(font, text); - font.draw(hudBatch, text, centerX - glyphLayout.width / 2, centerY + glyphLayout.height / 2); + // Renderer message + //var oldColor = batch.getColor(); + //batch.setColor(foreground); + float textX = x + BOX_PADDINGX; + + font.draw(batch, text, textX, textY); + //batch.setColor(oldColor); } private void renderBoard() { @@ -946,7 +1034,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure var awtRect = toAwtRect(image.getBoundingRectangle()); // Vision visibility - if (!isGMView && token.isToken() && zoneView.isUsingVision()) { + if (!isGMView && token.isToken() && zoneRenderer.getZoneView().isUsingVision()) { if (!GraphicsUtil.intersects(visibleScreenArea, new Area(awtRect))) { continue; } @@ -1040,7 +1128,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure // Finally render the token image timer.start("tokenlist-7"); - if (!isGMView && zoneView.isUsingVision() && (token.getShape() == Token.TokenShape.FIGURE)) { + if (!isGMView && zoneRenderer.getZoneView().isUsingVision() && (token.getShape() == Token.TokenShape.FIGURE)) { Area cb = zone.getGrid().getTokenCellArea(toAwtRect(image.getBoundingRectangle())); if (GraphicsUtil.intersects(visibleScreenArea, cb)) { // the cell intersects visible area so @@ -1049,7 +1137,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure image.draw(batch); image.setAlpha(oldAlpha); } - } else if (!isGMView && zoneView.isUsingVision() && token.isAlwaysVisible()) { + } else if (!isGMView && zoneRenderer.getZoneView().isUsingVision() && token.isAlwaysVisible()) { // Jamz: Always Visible tokens will get rendered again here to place on top of FoW Area cb = zone.getGrid().getTokenCellArea(toAwtRect(image.getBoundingRectangle())); if (GraphicsUtil.intersects(visibleScreenArea, cb)) { @@ -1471,7 +1559,6 @@ private void initializeZoneResources(Zone newZone) { if (newZone == null || !initialized) return; - zoneView = new ZoneView(newZone); zoneRenderer = MapTool.getFrame().getZoneRenderer(newZone); mapAssetId = newZone.getMapAssetId(); @@ -1531,13 +1618,15 @@ private Sprite paintToSprite(DrawablePaint paint) { return null; } - private void fillArea(Area area) { + private void paintArea(Area area) { if (area.isEmpty()) return; var pointsPerBezier = 10.0f; - for (var it = area.getPathIterator(null); !it.isDone(); it.next()) { + tmpFloat.clear(); + + for (var it = area.getPathIterator(null); !it.isDone(); it.next()) { int type = it.currentSegment(floatsFromArea); switch (type) { @@ -1547,20 +1636,23 @@ private void fillArea(Area area) { break; case PathIterator.SEG_CLOSE: -// tmpFloat.add(tmpFloat.get(0), tmpFloat.get(1)); - var indicies = triangulator.computeTriangles(tmpFloat.items, 0, tmpFloat.size); - for (int i = 0; i < indicies.size - 2; i = i + 3) - { - float x1 = tmpFloat.get(indicies.get(i) * 2); - float y1 = tmpFloat.get((indicies.get(i) * 2) + 1); + System.out.println("Close"); + if (shape.getCurrentType() == ShapeRenderer.ShapeType.Filled) { + var indicies = triangulator.computeTriangles(tmpFloat.items, 0, tmpFloat.size); + for (int i = 0; i < indicies.size - 2; i = i + 3) { + float x1 = tmpFloat.get(indicies.get(i) * 2); + float y1 = tmpFloat.get((indicies.get(i) * 2) + 1); - float x2 = tmpFloat.get((indicies.get(i + 1)) * 2); - float y2 = tmpFloat.get((indicies.get(i + 1) * 2) + 1); + float x2 = tmpFloat.get((indicies.get(i + 1)) * 2); + float y2 = tmpFloat.get((indicies.get(i + 1) * 2) + 1); - float x3 = tmpFloat.get(indicies.get(i + 2) * 2); - float y3 = tmpFloat.get((indicies.get(i + 2) * 2) + 1); + float x3 = tmpFloat.get(indicies.get(i + 2) * 2); + float y3 = tmpFloat.get((indicies.get(i + 2) * 2) + 1); - shape.triangle(x1, y1, x2, y2, x3, y3); + shape.triangle(x1, y1, x2, y2, x3, y3); + } + } else { + shape.polyline(tmpFloat.items, 0, tmpFloat.size); } tmpFloat.clear(); break; @@ -1572,10 +1664,10 @@ private void fillArea(Area area) { System.out.println("quadratic bezier with: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + "), (" + floatsFromArea[2] + ", " + floatsFromArea[3] + ")"); - tmpVector0.set(tmpFloat.get(tmpFloat.size-2), tmpFloat.get(tmpFloat.size-1)); + tmpVector0.set(tmpFloat.get(tmpFloat.size - 2), tmpFloat.get(tmpFloat.size - 1)); tmpVector1.set(floatsFromArea[0], -floatsFromArea[1]); tmpVector2.set(floatsFromArea[2], -floatsFromArea[3]); - for(var i = 1; i <= pointsPerBezier; i++) { + for (var i = 1; i <= pointsPerBezier; i++) { Bezier.quadratic(tmpVectorOut, i / pointsPerBezier, tmpVector0, tmpVector1, tmpVector2, tmpVector); tmpFloat.add(tmpVectorOut.x, tmpVectorOut.y); } @@ -1585,11 +1677,11 @@ private void fillArea(Area area) { "), (" + floatsFromArea[2] + ", " + floatsFromArea[3] + "), (" + floatsFromArea[4] + ", " + floatsFromArea[5] + ")"); - tmpVector0.set(tmpFloat.get(tmpFloat.size-2), tmpFloat.get(tmpFloat.size-1)); + tmpVector0.set(tmpFloat.get(tmpFloat.size - 2), tmpFloat.get(tmpFloat.size - 1)); tmpVector1.set(floatsFromArea[0], -floatsFromArea[1]); tmpVector2.set(floatsFromArea[2], -floatsFromArea[3]); tmpVector3.set(floatsFromArea[4], -floatsFromArea[5]); - for(var i = 1; i <= pointsPerBezier; i++) { + for (var i = 1; i <= pointsPerBezier; i++) { Bezier.cubic(tmpVectorOut, i / pointsPerBezier, tmpVector0, tmpVector1, tmpVector2, tmpVector3, tmpVector); tmpFloat.add(tmpVectorOut.x, tmpVectorOut.y); } @@ -1611,6 +1703,8 @@ public java.awt.Rectangle toAwtRect(com.badlogic.gdx.math.Rectangle rectangle) { @Override public void handleAppEvent(AppEvent event) { + System.out.println("AppEvent:" + event.getId()); + if (event.getId() != MapTool.ZoneEvent.Activated) return; @@ -1633,7 +1727,7 @@ public void handleAppEvent(AppEvent event) { @Override public void modelChanged(ModelChangeEvent event) { Object evt = event.getEvent(); - + System.out.println("ModelChangend: " + evt); if (evt == Zone.Event.TOPOLOGY_CHANGED) { flushFog(); //flushLight(); @@ -1672,6 +1766,9 @@ public void setScale(Scale scale) { updateCam(); } - public void flushFog() { flushFog = true; } + public void flushFog() { + flushFog = true; + visibleScreenArea = null; + } } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index fdff40f1ff..f824619151 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -737,6 +737,7 @@ public void flush(Token token) { renderedAuraMap = null; zoneView.flush(token); + GdxRenderer.getInstance().flushFog(); } /** @return the ZoneView */ @@ -924,13 +925,6 @@ public void paintComponent(Graphics g) { } } - @Override - public void repaint() { - super.repaint(); - if(Gdx.graphics != null) - Gdx.graphics.requestRendering(); - } - public PlayerView getPlayerView() { return getPlayerView(MapTool.getPlayer().getEffectiveRole()); } diff --git a/src/main/resources/net/rptools/maptool/client/image/javafx.png b/src/main/resources/net/rptools/maptool/client/image/javafx.png new file mode 100644 index 0000000000000000000000000000000000000000..104d5f4b06ec8e5186ac462cc2252b9b20b90e38 GIT binary patch literal 13861 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 literal 0 HcmV?d00001 From 07cb7e50aec48652cd25235a9449b77f80c6c685 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 10 Apr 2021 13:19:50 +0200 Subject: [PATCH 018/139] boxedLabels --- .../maptool/client/ui/zone/GdxRenderer.java | 63 +++++++++++-------- 1 file changed, 37 insertions(+), 26 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index ea23084069..bbe48b8e4b 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -98,7 +98,11 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private Integer fogY; private EarClippingTriangulator triangulator; private Texture greyLabelTexture; + private Texture blueLabelTexture; + private Texture darkGreyLabelTexture; private NinePatch greyLabel; + private NinePatch blueLabel; + private NinePatch darkGreyLabel; //temorary objects. Stored here to avoid garbage collection; private Vector3 tmpWorldCoord; @@ -147,8 +151,18 @@ public void create() { var pix = new Pixmap(Gdx.files.internal("net/rptools/maptool/client/image/grayLabelbox.png")); greyLabelTexture = new Texture(pix); pix.dispose(); - var topBottom = greyLabelTexture.getHeight()/2 - 1; - greyLabel = new NinePatch(greyLabelTexture, 10, 10, 0, 0); + + pix = new Pixmap(Gdx.files.internal("net/rptools/maptool/client/image/blueLabelbox.png")); + blueLabelTexture = new Texture(pix); + pix.dispose(); + + pix = new Pixmap(Gdx.files.internal("net/rptools/maptool/client/image/darkGreyLabelbox.png")); + darkGreyLabelTexture = new Texture(pix); + pix.dispose(); + + greyLabel = new NinePatch(greyLabelTexture, 10, 10, 10, 10); + blueLabel = new NinePatch(blueLabelTexture, 10, 10, 10, 10); + darkGreyLabel = new NinePatch(darkGreyLabelTexture, 10, 10, 10, 10); vfxManager = new VfxManager(Pixmap.Format.RGBA8888); vfxEffect = new BloomEffect(); @@ -182,6 +196,8 @@ public void dispose() { vfxEffect.dispose(); shape.dispose(); greyLabelTexture.dispose(); + blueLabelTexture.dispose(); + darkGreyLabelTexture.dispose(); disposeZoneResources(); } @@ -251,14 +267,8 @@ private void doRendering() { renderZone(playerView); batch.end(); - glyphLayout.setText(font, "test"); - - - hudBatch.begin(); - //hudBatch.draw(greyLabelTexture, 20,20); - greyLabel.draw(hudBatch, 20, 20 , 100, 100); - font.draw(hudBatch, "test", 20, 20); + hudBatch.setProjectionMatrix(hudCam.combined); if (zoneRenderer.isLoading()) drawBoxedString(hudBatch, zoneRenderer.getLoadingProgress(), width / 2, height / 2); @@ -275,16 +285,10 @@ else if (MapTool.getCampaign().isBeingSerialized()) drawBoxedString(hudBatch, "Player View", width / 2, height - noteVPos); } - drawBoxedString(hudBatch, String.valueOf(Gdx.graphics.getFramesPerSecond()), 10, 10); + drawString(hudBatch, String.valueOf(Gdx.graphics.getFramesPerSecond()), 10, 10); hudBatch.end(); - shape.begin(ShapeRenderer.ShapeType.Line); - shape.setProjectionMatrix(hudCam.combined); - shape.setColor(Color.BLUE); - shape.rect(20,20, glyphLayout.width, glyphLayout.height); - shape.end(); - collectTimerResults(); } @@ -901,6 +905,10 @@ private FloatArray pathToVertices(GeneralPath path) { private void renderDrawableOverlay(PlayerView view, List drawables) { } + public void drawString(SpriteBatch batch, String text, float centerX, float centerY) { + drawBoxedString(batch, text, centerX, centerY, SwingUtilities.CENTER, null, Color.WHITE); + } + public void drawBoxedString(SpriteBatch batch, String text, float centerX, float centerY) { drawBoxedString(batch, text, centerX, centerY, SwingUtilities.CENTER); } @@ -915,16 +923,17 @@ private void drawBoxedString(SpriteBatch batch, String text, float x, float y, i if (text == null) text = ""; + glyphLayout.setText(font, text); var strWidth = glyphLayout.width; + var fontHeight = font.getLineHeight(); + var width = strWidth + BOX_PADDINGX * 2; - var height = glyphLayout.height + BOX_PADDINGY * 2; + var height = fontHeight + BOX_PADDINGY * 2; - var boxY = y - glyphLayout.height / 2 - BOX_PADDINGY; - var textY = y + glyphLayout.height /2 + BOX_PADDINGY; + y = y - fontHeight/ 2 - BOX_PADDINGY; - y = y - glyphLayout.height / 2 - BOX_PADDINGY; switch (justification) { case SwingUtilities.CENTER: x = x - strWidth / 2 - BOX_PADDINGX; @@ -937,15 +946,17 @@ private void drawBoxedString(SpriteBatch batch, String text, float x, float y, i } // Box - background.draw(batch, x, y, width, height); + if(background != null) + background.draw(batch, x, y, width, height); // Renderer message - //var oldColor = batch.getColor(); - //batch.setColor(foreground); - float textX = x + BOX_PADDINGX; - font.draw(batch, text, textX, textY); - //batch.setColor(oldColor); + var textX = x + BOX_PADDINGX; + var textY = y + height - BOX_PADDINGY - font.getAscent(); + tmpColor.set(font.getColor()); + font.setColor(foreground); + font.draw(batch, glyphLayout, textX, textY); + font.setColor(tmpColor); } private void renderBoard() { From bd3ffe83d22944155082fd2ef8bc13be1b204430 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 10 Apr 2021 14:57:05 +0200 Subject: [PATCH 019/139] auras --- .../maptool/client/ui/zone/GdxRenderer.java | 42 +++++++++++++++---- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index bbe48b8e4b..093e56b3f3 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -19,7 +19,6 @@ import net.rptools.lib.AppEventListener; import net.rptools.lib.CodeTimer; import net.rptools.lib.MD5Key; -import net.rptools.lib.swing.ImageLabel; import net.rptools.maptool.box2d.NativeRenderer; import net.rptools.maptool.client.AppPreferences; import net.rptools.maptool.client.AppState; @@ -65,6 +64,7 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private boolean flushFog = true; //from renderToken: private Area visibleScreenArea; + private Area exposedFogArea; private PlayerView lastView; @@ -243,7 +243,6 @@ private void doRendering() { Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); - if (zone == null) return; @@ -263,7 +262,6 @@ private void doRendering() { batch.begin(); - renderZone(playerView); batch.end(); @@ -324,7 +322,7 @@ private void copyFramebufferToJfx() { public void invalidateCurrentViewCache() { flushFog = true; // renderedLightMap = null; - // renderedAuraMap = null; + visibleScreenArea = null; lastView = null; @@ -553,7 +551,7 @@ private void renderFog(PlayerView view) { || fogBufferTexture.getWidth() != width || fogBufferTexture.getHeight() != height); timer.start("renderFog"); - // if (flushFog || cacheNotValid) + // if (flushFog || cacheNotValid) { @@ -724,6 +722,34 @@ private void showBlockedMoves(PlayerView view, Set un } private void renderAuras(PlayerView view) { + var alpha = AppPreferences.getAuraOverlayOpacity() / 255.0f; + batch.end(); + + Gdx.gl.glEnable(GL20.GL_BLEND); + shape.begin(ShapeRenderer.ShapeType.Filled); + timer.start("auras-4"); + tmpColor.set(shape.getColor()); + + var auraColor = shape.getColor(); + for (DrawableLight light : zoneRenderer.getZoneView().getLights(LightSource.Type.AURA)) { + var paint = light.getPaint(); + if(paint != null && paint instanceof DrawableColorPaint) { + var colorPaint = (DrawableColorPaint)paint; + Color.argb8888ToColor(auraColor, colorPaint.getColor()); + auraColor.a = alpha; + } else { + auraColor.set(1, 1, 1, 0.59f); + } + shape.setColor(auraColor); + paintArea(light.getArea()); + } + + timer.stop("auras-4"); + shape.setColor(tmpColor); + shape.end(); + Gdx.gl.glDisable(GL20.GL_BLEND); + + batch.begin(); } private void renderLights(PlayerView view) { @@ -917,7 +943,7 @@ public void drawBoxedString(SpriteBatch batch, String text, float x, float y, in drawBoxedString(batch, text, x, y, justification, greyLabel, Color.BLACK); } - private void drawBoxedString(SpriteBatch batch, String text, float x, float y, int justification, NinePatch background, Color foreground) { + private void drawBoxedString(SpriteBatch batch, String text, float x, float y, int justification, NinePatch background, Color foreground) { final int BOX_PADDINGX = 10; final int BOX_PADDINGY = 2; @@ -932,7 +958,7 @@ private void drawBoxedString(SpriteBatch batch, String text, float x, float y, i var width = strWidth + BOX_PADDINGX * 2; var height = fontHeight + BOX_PADDINGY * 2; - y = y - fontHeight/ 2 - BOX_PADDINGY; + y = y - fontHeight / 2 - BOX_PADDINGY; switch (justification) { case SwingUtilities.CENTER: @@ -946,7 +972,7 @@ private void drawBoxedString(SpriteBatch batch, String text, float x, float y, i } // Box - if(background != null) + if (background != null) background.draw(batch, x, y, width, height); // Renderer message From f29e0f7d224035f51de37bde434f3288eb8aa035 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 10 Apr 2021 17:44:31 +0200 Subject: [PATCH 020/139] lights --- .../maptool/client/ui/zone/GdxRenderer.java | 214 +++++++++++++++--- .../maptool/client/ui/zone/ZoneRenderer.java | 2 + 2 files changed, 190 insertions(+), 26 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 093e56b3f3..11db5e164c 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -77,6 +77,7 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private int offsetX = 0; private int offsetY = 0; private float zoom = 1.0f; + private boolean renderZone = false; // general resources private OrthographicCamera cam; @@ -140,6 +141,7 @@ public void create() { hudCam.setToOrtho(false); shape = new ShapeRenderer(); + shape.setAutoShapeType(true); batch = new SpriteBatch(); hudBatch = new SpriteBatch(); font = new BitmapFont(); @@ -232,7 +234,11 @@ private void updateCam() { public void render() { vfxManager.cleanUpBuffers(); vfxManager.beginInputCapture(); - doRendering(); + try { + doRendering(); + } catch (Exception e) { + e.printStackTrace(); + } vfxManager.endInputCapture(); vfxManager.applyEffects(); vfxManager.renderToScreen(); @@ -243,7 +249,7 @@ private void doRendering() { Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); - if (zone == null) + if (zone == null || !renderZone) return; initializeTimer(); @@ -395,6 +401,10 @@ private void renderZone(PlayerView view) { } } if (Zone.Layer.TOKEN.isEnabled()) { + batch.end(); + Gdx.gl.glEnable(GL20.GL_BLEND); + shape.begin(); + timer.start("lights"); renderLights(view); timer.stop("lights"); @@ -402,6 +412,9 @@ private void renderZone(PlayerView view) { timer.start("auras"); renderAuras(view); timer.stop("auras"); + + shape.end(); + batch.begin(); } /* @@ -526,20 +539,102 @@ private void renderZone(PlayerView view) { } private void renderPlayerVisionOverlay(PlayerView view) { + /* // This doesn't seem to have any effect ?? + if (zone.hasFog()) { + Area clip = new Area(new Rectangle(getSize().width, getSize().height)); + + Area viewArea = new Area(exposedFogArea); + List tokens = view.getTokens(); + if (tokens != null && !tokens.isEmpty()) { + for (Token tok : tokens) { + ExposedAreaMetaData exposedMeta = zone.getExposedAreaMetaData(tok.getExposedAreaGUID()); + viewArea.add(exposedMeta.getExposedAreaHistory()); + } + } + if (!viewArea.isEmpty()) { + clip.intersect(new Area(viewArea.getBounds2D())); + } + // Note: the viewArea doesn't need to be transform()'d because exposedFogArea has been + // already. + g2.setClip(clip); + }*/ + renderVisionOverlay(view); } private void renderGMVisionOverlay(PlayerView view) { + renderVisionOverlay(view); } - private void renderRenderables() { + private void renderVisionOverlay(PlayerView view) { + var tokenUnderMouse = zoneRenderer.getTokenUnderMouse(); + Area currentTokenVisionArea = zoneRenderer.getVisibleArea(tokenUnderMouse); + if (currentTokenVisionArea == null) { + return; + } + Area combined = new Area(currentTokenVisionArea); + ExposedAreaMetaData meta = zone.getExposedAreaMetaData(tokenUnderMouse.getExposedAreaGUID()); + + Area tmpArea = new Area(meta.getExposedAreaHistory()); + tmpArea.add(zone.getExposedArea()); + if (zone.hasFog()) { + if (tmpArea.isEmpty()) { + return; + } + combined.intersect(tmpArea); + } + boolean isOwner = AppUtil.playerOwns(tokenUnderMouse); + boolean tokenIsPC = tokenUnderMouse.getType() == Token.Type.PC; + boolean strictOwnership = + MapTool.getServerPolicy() != null && MapTool.getServerPolicy().useStrictTokenManagement(); + boolean showVisionAndHalo = isOwner || view.isGMView() || (tokenIsPC && !strictOwnership); + // String player = MapTool.getPlayer().getName(); + // System.err.print("tokenUnderMouse.ownedBy(" + player + "): " + isOwner); + // System.err.print(", tokenIsPC: " + tokenIsPC); + // System.err.print(", isGMView(): " + view.isGMView()); + // System.err.println(", strictOwnership: " + strictOwnership); + + /* + * The vision arc and optional halo-filled visible area shouldn't be shown to everyone. If we are in GM view, or if we are the owner of the token in question, or if the token is a PC and + * strict token ownership is off... then the vision arc should be displayed. + */ + if (showVisionAndHalo) { + batch.end(); + Gdx.gl.glEnable(GL20.GL_BLEND); + shape.begin(); + shape.setColor(Color.WHITE); + shape.set(ShapeRenderer.ShapeType.Line); + paintArea(combined); + renderHaloArea(combined); + shape.end(); + Gdx.gl.glDisable(GL20.GL_BLEND); + batch.begin(); + } } - private void renderFog(PlayerView view) { + private void renderHaloArea(Area visible) { + var tokenUnderMouse = zoneRenderer.getTokenUnderMouse(); + if (tokenUnderMouse == null) + return; + + boolean useHaloColor = + tokenUnderMouse.getHaloColor() != null && AppPreferences.getUseHaloColorOnVisionOverlay(); + if (tokenUnderMouse.getVisionOverlayColor() != null || useHaloColor) { + java.awt.Color visionColor = + useHaloColor ? tokenUnderMouse.getHaloColor() : tokenUnderMouse.getVisionOverlayColor(); + shape.setColor(visionColor.getRed() / 255f, visionColor.getGreen() / 255f, + visionColor.getBlue() / 255f, AppPreferences.getHaloOverlayOpacity() / 255f); + shape.set(ShapeRenderer.ShapeType.Filled); + paintArea(visible); + } + } + private void renderRenderables() { + } + + private void renderFog(PlayerView view) { Area combined = null; - // Optimization for panning if (!flushFog && fogX != null && fogY != null @@ -723,18 +818,15 @@ private void showBlockedMoves(PlayerView view, Set un private void renderAuras(PlayerView view) { var alpha = AppPreferences.getAuraOverlayOpacity() / 255.0f; - batch.end(); - Gdx.gl.glEnable(GL20.GL_BLEND); - shape.begin(ShapeRenderer.ShapeType.Filled); + shape.set(ShapeRenderer.ShapeType.Filled); timer.start("auras-4"); - tmpColor.set(shape.getColor()); var auraColor = shape.getColor(); for (DrawableLight light : zoneRenderer.getZoneView().getLights(LightSource.Type.AURA)) { var paint = light.getPaint(); - if(paint != null && paint instanceof DrawableColorPaint) { - var colorPaint = (DrawableColorPaint)paint; + if (paint != null && paint instanceof DrawableColorPaint) { + var colorPaint = (DrawableColorPaint) paint; Color.argb8888ToColor(auraColor, colorPaint.getColor()); auraColor.a = alpha; } else { @@ -745,14 +837,83 @@ private void renderAuras(PlayerView view) { } timer.stop("auras-4"); - shape.setColor(tmpColor); - shape.end(); - Gdx.gl.glDisable(GL20.GL_BLEND); - - batch.begin(); } private void renderLights(PlayerView view) { + timer.start("lights-2"); + + var alpha = AppPreferences.getLightOverlayOpacity() / 255.0f; + timer.stop("lights-2"); + + + timer.start("lights-3"); + // Organize + Map> colorMap = new HashMap>(); + for (DrawableLight light : zoneRenderer.getZoneView().getDrawableLights(view)) { + // Jamz TODO: Fix, doesn't work in Day light, probably need to hack this up + if (light.getType() == LightSource.Type.NORMAL) { + if (zone.getVisionType() == Zone.VisionType.NIGHT && light.getPaint() != null) { + List areaList = + colorMap.computeIfAbsent(light.getPaint().getPaint(), k -> new ArrayList<>()); + areaList.add(new Area(light.getArea())); + } + } + } + timer.stop("lights-3"); + + timer.start("lights-4"); + // Combine same colors to avoid ugly overlap + // Avoid combining _all_ of the lights as the area adds are very expensive, just combine those + // that overlap + // Jamz TODO: Check this and make sure proper order is happening + for (var paint : colorMap.keySet()) { + var areaList = colorMap.get(paint); + List sourceList = new LinkedList(areaList); + areaList.clear(); + + outter: + while (sourceList.size() > 0) { + Area area = sourceList.remove(0); + + for (ListIterator iter = sourceList.listIterator(); iter.hasNext(); ) { + Area currArea = iter.next(); + + if (currArea.getBounds().intersects(area.getBounds())) { + iter.remove(); + area.add(currArea); + sourceList.add(area); + continue outter; + } + } + // If we are here, we didn't find any other area to merge with + areaList.add(area); + } + // Cut out the bright light + if (areaList.size() > 0) { + for (Area area : areaList) { + for (Area brightArea : zoneRenderer.getZoneView().getBrightLights(view)) { + area.subtract(brightArea); + } + } + } + + if (paint instanceof DrawableColorPaint) { + var colorPaint = (DrawableColorPaint) paint; + Color.argb8888ToColor(tmpColor, colorPaint.getColor()); + + } else if(paint instanceof java.awt.Color) { + Color.argb8888ToColor(tmpColor, ((java.awt.Color)paint).getRGB()); + } else { + System.out.println("unexpected color type"); + continue; + } + tmpColor.a = alpha; + shape.setColor(tmpColor); + shape.set(ShapeRenderer.ShapeType.Filled); + for(var area: areaList) + paintArea(area); + } + timer.stop("lights-4"); } private void renderGrid(PlayerView view) { @@ -1668,12 +1829,12 @@ private void paintArea(Area area) { switch (type) { case PathIterator.SEG_MOVETO: - System.out.println("Move to: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + ")"); +// System.out.println("Move to: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + ")"); tmpFloat.add(floatsFromArea[0], -floatsFromArea[1]); break; case PathIterator.SEG_CLOSE: - System.out.println("Close"); +// System.out.println("Close"); if (shape.getCurrentType() == ShapeRenderer.ShapeType.Filled) { var indicies = triangulator.computeTriangles(tmpFloat.items, 0, tmpFloat.size); for (int i = 0; i < indicies.size - 2; i = i + 3) { @@ -1694,12 +1855,12 @@ private void paintArea(Area area) { tmpFloat.clear(); break; case PathIterator.SEG_LINETO: - System.out.println("Line to: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + ")"); +// System.out.println("Line to: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + ")"); tmpFloat.add(floatsFromArea[0], -floatsFromArea[1]); break; case PathIterator.SEG_QUADTO: - System.out.println("quadratic bezier with: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + - "), (" + floatsFromArea[2] + ", " + floatsFromArea[3] + ")"); +// System.out.println("quadratic bezier with: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + +// "), (" + floatsFromArea[2] + ", " + floatsFromArea[3] + ")"); tmpVector0.set(tmpFloat.get(tmpFloat.size - 2), tmpFloat.get(tmpFloat.size - 1)); tmpVector1.set(floatsFromArea[0], -floatsFromArea[1]); @@ -1710,9 +1871,9 @@ private void paintArea(Area area) { } break; case PathIterator.SEG_CUBICTO: - System.out.println("cubic bezier with: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + - "), (" + floatsFromArea[2] + ", " + floatsFromArea[3] + - "), (" + floatsFromArea[4] + ", " + floatsFromArea[5] + ")"); +// System.out.println("cubic bezier with: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + +// "), (" + floatsFromArea[2] + ", " + floatsFromArea[3] + +// "), (" + floatsFromArea[4] + ", " + floatsFromArea[5] + ")"); tmpVector0.set(tmpFloat.get(tmpFloat.size - 2), tmpFloat.get(tmpFloat.size - 1)); tmpVector1.set(floatsFromArea[0], -floatsFromArea[1]); @@ -1724,7 +1885,7 @@ private void paintArea(Area area) { } break; default: - System.out.println("Type: " + type); +// System.out.println("Type: " + type); } } } @@ -1747,7 +1908,7 @@ public void handleAppEvent(AppEvent event) { var oldZone = zone; // first disable rendering during intitialisation; - zone = null; + renderZone = false; if (oldZone != null) { disposeZoneResources(); @@ -1759,6 +1920,7 @@ public void handleAppEvent(AppEvent event) { initializeZoneResources(newZone); // just in case we are running before create was called and hence initializeZoneResources does nothing zone = newZone; + renderZone = true; } @Override diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index f824619151..583524b14b 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -2903,6 +2903,8 @@ public List getTokensOnScreen() { return list; } + public Token getTokenUnderMouse() { return tokenUnderMouse; } + public Zone.Layer getActiveLayer() { return activeLayer != null ? activeLayer : Zone.Layer.TOKEN; } From 8cf99879b7a83da03af875d184f7caef9db28ffc Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 10 Apr 2021 20:11:33 +0200 Subject: [PATCH 021/139] labels --- .../maptool/client/ui/zone/GdxRenderer.java | 34 +++++++++++++++---- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 11db5e164c..4693dd5fd1 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -20,12 +20,10 @@ import net.rptools.lib.CodeTimer; import net.rptools.lib.MD5Key; import net.rptools.maptool.box2d.NativeRenderer; -import net.rptools.maptool.client.AppPreferences; -import net.rptools.maptool.client.AppState; -import net.rptools.maptool.client.AppUtil; -import net.rptools.maptool.client.MapTool; +import net.rptools.maptool.client.*; import net.rptools.maptool.client.ui.Scale; import net.rptools.maptool.model.*; +import net.rptools.maptool.model.Label; import net.rptools.maptool.model.drawing.DrawableColorPaint; import net.rptools.maptool.model.drawing.DrawablePaint; import net.rptools.maptool.model.drawing.DrawableTexturePaint; @@ -811,6 +809,25 @@ private void renderFogOutline() { } private void renderLabels(PlayerView view) { + timer.start("labels-1"); + + for (Label label : zone.getLabels()) { + timer.start("labels-1.1"); + Color.argb8888ToColor(tmpColor, label.getForegroundColor().getRGB()); + if (label.isShowBackground()) { + drawBoxedString(batch, + label.getLabel(), + label.getX(), + -label.getY(), + SwingUtilities.CENTER, + greyLabel, + tmpColor); + } else { + drawString(batch, label.getLabel(), label.getX(), -label.getY(), tmpColor); + } + timer.stop("labels-1.1"); + } + timer.stop("labels-1"); } private void showBlockedMoves(PlayerView view, Set unOwnedMovementSet) { @@ -1092,6 +1109,10 @@ private FloatArray pathToVertices(GeneralPath path) { private void renderDrawableOverlay(PlayerView view, List drawables) { } + public void drawString(SpriteBatch batch, String text, float centerX, float centerY, Color foreground) { + drawBoxedString(batch, text, centerX, centerY, SwingUtilities.CENTER, null, foreground); + } + public void drawString(SpriteBatch batch, String text, float centerX, float centerY) { drawBoxedString(batch, text, centerX, centerY, SwingUtilities.CENTER, null, Color.WHITE); } @@ -1140,10 +1161,9 @@ private void drawBoxedString(SpriteBatch batch, String text, float x, float y, i var textX = x + BOX_PADDINGX; var textY = y + height - BOX_PADDINGY - font.getAscent(); - tmpColor.set(font.getColor()); + font.setColor(foreground); - font.draw(batch, glyphLayout, textX, textY); - font.setColor(tmpColor); + font.draw(batch, text, textX, textY); } private void renderBoard() { From 7655419e2a12fc0123667cc035084611d5453a69 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sun, 11 Apr 2021 23:25:18 +0200 Subject: [PATCH 022/139] token clipping works --- .../maptool/client/ui/zone/GdxRenderer.java | 316 +++++++++++++----- .../maptool/client/ui/zone/ZoneRenderer.java | 3 +- 2 files changed, 233 insertions(+), 86 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 4693dd5fd1..5d4ec8d207 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -19,6 +19,8 @@ import net.rptools.lib.AppEventListener; import net.rptools.lib.CodeTimer; import net.rptools.lib.MD5Key; +import net.rptools.lib.image.ImageUtil; +import net.rptools.lib.swing.SwingUtil; import net.rptools.maptool.box2d.NativeRenderer; import net.rptools.maptool.client.*; import net.rptools.maptool.client.ui.Scale; @@ -29,17 +31,19 @@ import net.rptools.maptool.model.drawing.DrawableTexturePaint; import net.rptools.maptool.model.drawing.DrawnElement; import net.rptools.maptool.util.GraphicsUtil; +import net.rptools.maptool.util.ImageManager; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import javax.swing.*; import java.awt.*; -import java.awt.geom.Area; -import java.awt.geom.GeneralPath; -import java.awt.geom.PathIterator; +import java.awt.geom.*; +import java.awt.image.BufferedImage; import java.util.List; import java.util.*; +import static java.util.zip.Deflater.DEFAULT_COMPRESSION; + /** * Done: * - Board @@ -57,14 +61,16 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private static GdxRenderer _instance; private final Map sprites = new HashMap<>(); + private final Map isoSprites = new HashMap<>(); //renderFog - Texture fogBufferTexture; + private boolean flushFog = true; //from renderToken: private Area visibleScreenArea; private Area exposedFogArea; private PlayerView lastView; + private List itemRenderList; // zone specific resources private Zone zone; @@ -115,6 +121,7 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private Vector2 tmpVector1; private Vector2 tmpVector2; private Vector2 tmpVector3; + private Area tmpArea; public GdxRenderer() { @@ -179,10 +186,13 @@ public void create() { tmpVector2 = new Vector2(); tmpVector3 = new Vector2(); tmpVectorOut = new Vector2(); + tmpArea = new Area(); fogBuffer.addRenderer(new VfxFrameBuffer.BatchRendererAdapter(batch)); fogBuffer.addRenderer(new VfxFrameBuffer.ShapeRendererAdapter(shape)); + itemRenderList = new LinkedList<>(); + initialized = true; initializeZoneResources(zone); } @@ -208,7 +218,7 @@ public void resize(int width, int height) { vfxManager.resize(width, height); fogBuffer.initialize(width, height); // this texture is bound to the buffer - fogBufferTexture = null; + updateCam(); } @@ -232,11 +242,7 @@ private void updateCam() { public void render() { vfxManager.cleanUpBuffers(); vfxManager.beginInputCapture(); - try { - doRendering(); - } catch (Exception e) { - e.printStackTrace(); - } + doRendering(); vfxManager.endInputCapture(); vfxManager.applyEffects(); vfxManager.renderToScreen(); @@ -246,6 +252,7 @@ public void render() { private void doRendering() { Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + Gdx.gl.glEnable(GL20.GL_BLEND); if (zone == null || !renderZone) return; @@ -327,7 +334,7 @@ public void invalidateCurrentViewCache() { flushFog = true; // renderedLightMap = null; - visibleScreenArea = null; + updateVisibleArea(); lastView = null; var zoneView = zoneRenderer.getZoneView(); @@ -347,11 +354,7 @@ private void renderZone(PlayerView view) { // Calculations timer.start("calcs-1"); - if (visibleScreenArea == null && zoneRenderer.getZoneView().isUsingVision()) { - timer.start("ZoneRenderer-getVisibleArea"); - visibleScreenArea = zoneRenderer.getZoneView().getVisibleArea(view); - timer.stop("ZoneRenderer-getVisibleArea"); - } + updateVisibleArea(); timer.stop("calcs-1"); timer.start("calcs-2"); @@ -400,7 +403,7 @@ private void renderZone(PlayerView view) { } if (Zone.Layer.TOKEN.isEnabled()) { batch.end(); - Gdx.gl.glEnable(GL20.GL_BLEND); + shape.begin(); timer.start("lights"); @@ -536,6 +539,14 @@ private void renderZone(PlayerView view) { } } + private void updateVisibleArea() { + if (zoneRenderer.getZoneView().isUsingVision()) { + timer.start("ZoneRenderer-getVisibleArea"); + visibleScreenArea = zoneRenderer.getZoneView().getVisibleArea(zoneRenderer.getPlayerView()); + timer.stop("ZoneRenderer-getVisibleArea"); + } + } + private void renderPlayerVisionOverlay(PlayerView view) { /* // This doesn't seem to have any effect ?? if (zone.hasFog()) { @@ -597,14 +608,14 @@ private void renderVisionOverlay(PlayerView view) { */ if (showVisionAndHalo) { batch.end(); - Gdx.gl.glEnable(GL20.GL_BLEND); + shape.begin(); shape.setColor(Color.WHITE); shape.set(ShapeRenderer.ShapeType.Line); paintArea(combined); renderHaloArea(combined); shape.end(); - Gdx.gl.glDisable(GL20.GL_BLEND); + batch.begin(); } } @@ -628,6 +639,9 @@ private void renderHaloArea(Area visible) { } private void renderRenderables() { + for (ItemRenderer renderer : itemRenderList) { + renderer.render(); + } } private void renderFog(PlayerView view) { @@ -640,9 +654,8 @@ private void renderFog(PlayerView view) { flushFog = true; } boolean cacheNotValid = - (fogBufferTexture == null - || fogBufferTexture.getWidth() != width - || fogBufferTexture.getHeight() != height); + ( fogBuffer.getTexture().getWidth() != width + || fogBuffer.getTexture().getHeight() != height); timer.start("renderFog"); // if (flushFog || cacheNotValid) { @@ -754,13 +767,11 @@ private void renderFog(PlayerView view) { fogBuffer.end(); - if (fogBufferTexture == null) - fogBufferTexture = fogBuffer.getTexture(); } batch.setProjectionMatrix(hudCam.combined); - batch.draw(fogBufferTexture, 0, 0, width, height, 0, 0, - fogBufferTexture.getWidth(), fogBufferTexture.getHeight(), false, true); + batch.draw(fogBuffer.getTexture(), 0, 0, width, height, 0, 0, + width, height, false, true); batch.setProjectionMatrix(cam.combined); timer.stop("renderFog"); @@ -857,7 +868,7 @@ private void renderAuras(PlayerView view) { } private void renderLights(PlayerView view) { - timer.start("lights-2"); +/* timer.start("lights-2"); var alpha = AppPreferences.getLightOverlayOpacity() / 255.0f; timer.stop("lights-2"); @@ -930,7 +941,7 @@ private void renderLights(PlayerView view) { for(var area: areaList) paintArea(area); } - timer.stop("lights-4"); + timer.stop("lights-4");*/ } private void renderGrid(PlayerView view) { @@ -1202,6 +1213,9 @@ private void fillViewportWith(Sprite fill) { private void renderTokens(List tokenList, PlayerView view, boolean figuresOnly) { boolean isGMView = view.isGMView(); // speed things up + if(visibleScreenArea == null) + return; + Set tempVisTokens = new HashSet(); List tokenPostProcessing = new ArrayList(tokenList.size()); @@ -1238,22 +1252,42 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure continue; image.setSize(image.getTexture().getWidth(), image.getTexture().getHeight()); + image.setRotation(0); + timer.stop("tokenlist-1b"); timer.start("tokenlist-1a"); Rectangle footprintBounds = token.getBounds(zone); - image.setPosition(footprintBounds.x, -footprintBounds.y - footprintBounds.height); timer.stop("tokenlist-1a"); + timer.start("tokenlist-1d"); + // Tokens are centered on the image center point + float x = footprintBounds.x; + float y = footprintBounds.y; + Rectangle2D origBounds = new Rectangle2D.Double(x, y, footprintBounds.width, footprintBounds.height); + Area tokenBounds = new Area(origBounds); + if (token.hasFacing() && token.getShape() == Token.TokenShape.TOP_DOWN) { + double sx = footprintBounds.width / 2 + x - (token.getAnchor().x); + double sy = footprintBounds.height / 2 + y - (token.getAnchor().y); + tokenBounds.transform( + AffineTransform.getRotateInstance( + Math.toRadians(-token.getFacing() - 90), sx, sy)); // facing + // defaults + // to + // down, + // or + // -90 + // degrees + } + timer.stop("tokenlist-1d"); timer.start("tokenlist-1e"); try { - var awtRect = toAwtRect(image.getBoundingRectangle()); // Vision visibility if (!isGMView && token.isToken() && zoneRenderer.getZoneView().isUsingVision()) { - if (!GraphicsUtil.intersects(visibleScreenArea, new Area(awtRect))) { + if (!GraphicsUtil.intersects(visibleScreenArea, tokenBounds)) { continue; } } @@ -1282,8 +1316,19 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure timer.start("tokenlist-5a"); if (token.isFlippedIso()) { - image.setRotation(45); - image.setSize(image.getWidth(), image.getHeight() / 2); + var assetId = token.getImageAssetId(); + if (!isoSprites.containsKey(assetId)) { + var workImage = IsometricGrid.isoImage(ImageManager.getImage(assetId)); + try { + var bytes = ImageUtil.imageToBytes(workImage, "png"); + var pix = new Pixmap(bytes, 0, bytes.length); + image = new Sprite(new Texture(pix)); + pix.dispose(); + } catch (Exception e) {} + isoSprites.put(assetId, image); + } else { + image = isoSprites.get(assetId); + } token.setHeight((int) image.getHeight()); token.setWidth((int) image.getWidth()); footprintBounds = token.getBounds(zone); @@ -1294,7 +1339,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure // Position // For Isometric Grid we alter the height offset float iso_ho = 0; - + Dimension imgSize = new Dimension((int)image.getWidth(), (int)image.getHeight()); if (token.getShape() == Token.TokenShape.FIGURE) { float th = token.getHeight() * (float) footprintBounds.width / token.getWidth(); iso_ho = footprintBounds.height - th; @@ -1304,72 +1349,121 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure footprintBounds.y - (int) iso_ho, footprintBounds.width, (int) th); - iso_ho = iso_ho * (float) zoneRenderer.getScale(); } + SwingUtil.constrainTo(imgSize, footprintBounds.width, footprintBounds.height); - var factorX = footprintBounds.width / image.getWidth(); - var factorY = footprintBounds.height / image.getHeight(); + int offsetx = 0; + int offsety = 0; + if (token.isSnapToScale()) { + offsetx = + (int) + (imgSize.width < footprintBounds.width + ? (footprintBounds.width - imgSize.width) / 2 + : 0); + offsety = + (int) + (imgSize.height < footprintBounds.height + ? (footprintBounds.height - imgSize.height) / 2 + : 0); - var factor = Math.min(factorX, factorY); - image.setSize(image.getWidth() * factor, image.getHeight() * factor); + } + float tx = x + offsetx; + float ty = y + offsety + iso_ho; + + // Snap + var scaleX = 1f; + var scaleY = 1f; + if (token.isSnapToScale()) { + scaleX = imgSize.width/image.getWidth(); + scaleY = imgSize.height/image.getHeight(); + } else { + if (token.getShape() == Token.TokenShape.FIGURE) { + scaleX = footprintBounds.width/image.getHeight(); + scaleY = footprintBounds.width/image.getWidth(); + } else { + scaleX = footprintBounds.width/image.getWidth(); + scaleY = footprintBounds.height/image.getHeight(); + } + } + image.setSize(scaleX * image.getWidth(), scaleY * image.getHeight()); + + image.setPosition(tx, -image.getHeight() - ty); + image.setOriginCenter(); // Rotated if (token.hasFacing() && token.getShape() == Token.TokenShape.TOP_DOWN) { + var originX = image.getWidth() / 2 - token.getAnchorX(); + var originY = image.getHeight() / 2 + token.getAnchorY(); + image.setOrigin(originX, originY); image.setRotation(token.getFacing() + 90); } - if (token.isSnapToScale()) { - var offsetx = (image.getWidth() < footprintBounds.width - ? (footprintBounds.width - image.getWidth()) / 2 : 0); - var offsety = (image.getHeight() < footprintBounds.height - ? (footprintBounds.height - image.getHeight()) / 2 : 0); - - image.setPosition(image.getX() + offsetx, image.getY() + offsety + iso_ho); - } + timer.stop("tokenlist-6"); - timer.stop("tokenlist-6"); -/* // Render Halo if (token.hasHalo()) { - tokenG.setStroke(new BasicStroke(AppPreferences.getHaloLineWidth())); - tokenG.setColor(token.getHaloColor()); - tokenG.draw(zone.getGrid().getTokenCellArea(tokenBounds)); + batch.end(); + Gdx.gl.glLineWidth(AppPreferences.getHaloLineWidth()); + shape.begin(); + shape.setProjectionMatrix(cam.combined); + shape.set(ShapeRenderer.ShapeType.Line); + + Color.argb8888ToColor(tmpColor, token.getHaloColor().getRGB()); + shape.setColor(tmpColor); + paintArea(zone.getGrid().getTokenCellArea(tokenBounds)); + + shape.end(); + Gdx.gl.glLineWidth(1); + batch.begin(); } - */ // Calculate alpha Transparency from token and use opacity for indicating that token is moving float opacity = token.getTokenOpacity(); if (zoneRenderer.isTokenMoving(token)) opacity = opacity / 2.0f; + Area tokenCellArea = zone.getGrid().getTokenCellArea(tokenBounds); + Area cellArea = new Area(visibleScreenArea); + cellArea.intersect(tokenCellArea); + // Finally render the token image timer.start("tokenlist-7"); + image.setColor(1,1,1,opacity); if (!isGMView && zoneRenderer.getZoneView().isUsingVision() && (token.getShape() == Token.TokenShape.FIGURE)) { - Area cb = zone.getGrid().getTokenCellArea(toAwtRect(image.getBoundingRectangle())); - if (GraphicsUtil.intersects(visibleScreenArea, cb)) { - // the cell intersects visible area so - var oldAlpha = image.getColor().a; - image.setAlpha(opacity); + if (zone.getGrid().checkCenterRegion(tokenCellArea.getBounds(), visibleScreenArea)) { + // if we can see the centre, draw the whole token image.draw(batch); - image.setAlpha(oldAlpha); + } else { + // else draw the clipped token + paintClipped(image, tokenCellArea, cellArea); } } else if (!isGMView && zoneRenderer.getZoneView().isUsingVision() && token.isAlwaysVisible()) { // Jamz: Always Visible tokens will get rendered again here to place on top of FoW - Area cb = zone.getGrid().getTokenCellArea(toAwtRect(image.getBoundingRectangle())); - if (GraphicsUtil.intersects(visibleScreenArea, cb)) { + if (GraphicsUtil.intersects(visibleScreenArea, tokenCellArea)) { // if we can see a portion of the stamp/token, draw the whole thing, defaults to 2/9ths - // the cell intersects visible area so - var oldAlpha = image.getColor().a; - image.setAlpha(opacity); - image.draw(batch); - image.setAlpha(oldAlpha); + if (zone.getGrid() + .checkRegion(tokenCellArea.getBounds(), visibleScreenArea, token.getAlwaysVisibleTolerance())) { + + image.draw(batch); + + } else { + // else draw the clipped stamp/token + // This will only show the part of the token that does not have VBL on it + // as any VBL on the token will block LOS, affecting the clipping. + paintClipped(image, tokenCellArea, cellArea); + } } } else { // fallthrough normal token rendered against visible area - image.draw(batch); + + if(zoneRenderer.isTokenInNeedOfClipping(token, tokenCellArea, isGMView)) { + paintClipped(image, tokenCellArea, cellArea); + } else + image.draw(batch); } + image.setColor(Color.WHITE); timer.stop("tokenlist-7"); /* timer.start("tokenlist-8"); @@ -1733,6 +1827,56 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure visibleTokenSet = Collections.unmodifiableSet(tempVisTokens);*/ } + private void paintClipped(Sprite image, Area bounds, Area clip) { + + fogBuffer.begin(); + Gdx.gl.glClearColor(0, 0, 0, 0); + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + + batch.setProjectionMatrix(cam.combined); + + + image.draw(batch); + batch.end(); + + shape.begin(); + shape.setProjectionMatrix(cam.combined); + shape.set(ShapeRenderer.ShapeType.Filled); + shape.setColor(Color.CLEAR); + + tmpArea.reset(); + tmpArea.add(bounds); + tmpArea.subtract(clip); + paintArea(tmpArea); + shape.setColor(Color.WHITE); + shape.end(); + + var handle = Gdx.files.absolute("screenshot.png"); + if(!handle.exists()) { + var pix = Pixmap.createFromFrameBuffer(0, 0, width, height); + PixmapIO.writePNG(handle, pix, DEFAULT_COMPRESSION, true); + pix.dispose(); + } + fogBuffer.end(); + + tmpWorldCoord.x = image.getX(); + tmpWorldCoord.y = image.getY(); + tmpWorldCoord.z = 0; + tmpScreenCoord = cam.project(tmpWorldCoord); + + + batch.begin(); + + var x = image.getX(); + var y = image.getY(); + var w = image.getWidth(); + var h = image.getHeight(); + var wsrc = image.getWidth() / zoom; + var hsrc = image.getHeight() / zoom; + + batch.draw(fogBuffer.getTexture(), x, y, w, h, (int)tmpScreenCoord.x, (int)tmpScreenCoord.y, (int)wsrc, (int)hsrc, false, true); + } + private void renderPath(Path lastPath, TokenFootprint footprint) { } @@ -1769,7 +1913,10 @@ private void disposeZoneResources() { } sprites.clear(); - fogBufferTexture = null; + for (var sprite : isoSprites.values()) { + sprite.getTexture().dispose(); + } + sprites.clear(); }); } @@ -1778,6 +1925,7 @@ private void initializeZoneResources(Zone newZone) { return; zoneRenderer = MapTool.getFrame().getZoneRenderer(newZone); + updateVisibleArea(); mapAssetId = newZone.getMapAssetId(); // FIXME: zonechanges during wait for resources @@ -1837,7 +1985,7 @@ private Sprite paintToSprite(DrawablePaint paint) { } private void paintArea(Area area) { - if (area.isEmpty()) + if (area == null || area.isEmpty()) return; var pointsPerBezier = 10.0f; @@ -1849,12 +1997,13 @@ private void paintArea(Area area) { switch (type) { case PathIterator.SEG_MOVETO: -// System.out.println("Move to: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + ")"); + // System.out.println("Move to: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + ")"); tmpFloat.add(floatsFromArea[0], -floatsFromArea[1]); break; case PathIterator.SEG_CLOSE: -// System.out.println("Close"); + // System.out.println("Close"); + tmpFloat.add(tmpFloat.get(0), tmpFloat.get(1)); if (shape.getCurrentType() == ShapeRenderer.ShapeType.Filled) { var indicies = triangulator.computeTriangles(tmpFloat.items, 0, tmpFloat.size); for (int i = 0; i < indicies.size - 2; i = i + 3) { @@ -1875,12 +2024,12 @@ private void paintArea(Area area) { tmpFloat.clear(); break; case PathIterator.SEG_LINETO: -// System.out.println("Line to: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + ")"); + // System.out.println("Line to: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + ")"); tmpFloat.add(floatsFromArea[0], -floatsFromArea[1]); break; case PathIterator.SEG_QUADTO: -// System.out.println("quadratic bezier with: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + -// "), (" + floatsFromArea[2] + ", " + floatsFromArea[3] + ")"); + // System.out.println("quadratic bezier with: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + + // "), (" + floatsFromArea[2] + ", " + floatsFromArea[3] + ")"); tmpVector0.set(tmpFloat.get(tmpFloat.size - 2), tmpFloat.get(tmpFloat.size - 1)); tmpVector1.set(floatsFromArea[0], -floatsFromArea[1]); @@ -1905,20 +2054,11 @@ private void paintArea(Area area) { } break; default: -// System.out.println("Type: " + type); + System.out.println("Type: " + type); } } } - public java.awt.Rectangle toAwtRect(com.badlogic.gdx.math.Rectangle rectangle) { - var awtRect = new java.awt.Rectangle(); - awtRect.x = (int) rectangle.x; - awtRect.y = (int) rectangle.y; - awtRect.width = (int) rectangle.width; - awtRect.height = (int) rectangle.height; - return awtRect; - } - @Override public void handleAppEvent(AppEvent event) { System.out.println("AppEvent:" + event.getId()); @@ -1956,6 +2096,9 @@ public void modelChanged(ModelChangeEvent event) { flushFog = true; return; } + if (evt == Zone.Event.TOKEN_CHANGED) { + return; + } /* if (evt == Zone.Event.TOKEN_CHANGED || evt == Zone.Event.TOKEN_REMOVED @@ -1987,7 +2130,10 @@ public void setScale(Scale scale) { public void flushFog() { flushFog = true; - visibleScreenArea = null; + updateVisibleArea(); } + private interface ItemRenderer { + void render(); + } } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index 583524b14b..8f551e2739 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -3203,6 +3203,7 @@ protected void renderTokens( // create a per token Graphics object - normally clipped, unless always visible Area tokenCellArea = zone.getGrid().getTokenCellArea(tokenBounds); + Graphics2D tokenG = (Graphics2D) (isTokenInNeedOfClipping(token, tokenCellArea, isGMView) @@ -3782,7 +3783,7 @@ protected void renderTokens( * @param isGMView whether it is the view of a GM * @return true if the token is need of clipping, false otherwise */ - private boolean isTokenInNeedOfClipping(Token token, Area tokenCellArea, boolean isGMView) { + protected boolean isTokenInNeedOfClipping(Token token, Area tokenCellArea, boolean isGMView) { // can view everything or zone is not using vision = no clipping needed if (isGMView || !zoneView.isUsingVision()) return false; From fe5563d278361d2c5c9f847fbb4006728883e19c Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 12 Apr 2021 00:41:11 +0200 Subject: [PATCH 023/139] facing arrows --- .../rptools/maptool/box2d/NativeRenderer.java | 3 +- .../maptool/client/ui/zone/GdxRenderer.java | 137 +++++++++++++----- 2 files changed, 103 insertions(+), 37 deletions(-) diff --git a/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java b/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java index 5acd4d35de..f7dbd34dab 100644 --- a/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java +++ b/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java @@ -54,8 +54,7 @@ public void init() { var config = new LwjglApplicationConfiguration(); config.allowSoftwareMode = true; config.forceExit = false; - config.samples = 4; - LwjglApplicationConfiguration.disableAudio = true; + LwjglApplicationConfiguration.disableAudio = true; var appListender = GdxRenderer.getInstance(); appListender.setJfxRenderer(this); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 5d4ec8d207..a13696ead3 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -14,6 +14,8 @@ import com.crashinvaders.vfx.VfxManager; import com.crashinvaders.vfx.effects.BloomEffect; import com.crashinvaders.vfx.effects.ChainVfxEffect; +import com.crashinvaders.vfx.effects.FxaaEffect; +import com.crashinvaders.vfx.effects.NfaaEffect; import com.crashinvaders.vfx.framebuffer.VfxFrameBuffer; import net.rptools.lib.AppEvent; import net.rptools.lib.AppEventListener; @@ -34,6 +36,8 @@ import net.rptools.maptool.util.ImageManager; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; import javax.swing.*; import java.awt.*; @@ -172,7 +176,7 @@ public void create() { darkGreyLabel = new NinePatch(darkGreyLabelTexture, 10, 10, 10, 10); vfxManager = new VfxManager(Pixmap.Format.RGBA8888); - vfxEffect = new BloomEffect(); + vfxEffect = new FxaaEffect(); //vfxManager.addEffect(vfxEffect); tmpWorldCoord = new Vector3(); @@ -217,7 +221,6 @@ public void resize(int width, int height) { this.height = height; vfxManager.resize(width, height); fogBuffer.initialize(width, height); - // this texture is bound to the buffer updateCam(); @@ -1465,9 +1468,13 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure } image.setColor(Color.WHITE); timer.stop("tokenlist-7"); -/* + timer.start("tokenlist-8"); + batch.end(); + + shape.begin(); + shape.setProjectionMatrix(cam.combined); // Facing ? // TODO: Optimize this by doing it once per token per facing if (token.hasFacing()) { @@ -1485,19 +1492,25 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure arrow = getCircleFacingArrow(token.getFacing(), footprintBounds.width / 2); } - double fx = location.x + location.scaledWidth / 2; - double fy = location.y + location.scaledHeight / 2; + float fx = x + (float) origBounds.getWidth()/zoom / 2; + float fy = y + (float) origBounds.getHeight()/zoom / 2; - tokenG.translate(fx, fy); + + shape.translate(fx, -fy, 0); if (token.getFacing() < 0) { - tokenG.setColor(java.awt.Color.yellow); + shape.setColor(Color.YELLOW); } else { - tokenG.setColor(TRANSLUCENT_YELLOW); + shape.setColor(1, 1, 0, 0.5f); + } - tokenG.fill(arrow); - tokenG.setColor(java.awt.Color.darkGray); - tokenG.draw(arrow); - tokenG.translate(-fx, -fy); + shape.set(ShapeRenderer.ShapeType.Filled); + var arrowArea = new Area(arrow); + paintArea(arrowArea); + shape.setColor(Color.DARK_GRAY); + shape.set(ShapeRenderer.ShapeType.Line); + paintArea(arrowArea); + shape.translate(-fx, fy, 0); + break; case TOP_DOWN: if (AppPreferences.getForceFacingArrow() == false) { @@ -1508,22 +1521,25 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure if (zone.getGrid().isIsometric()) { arrow = getFigureFacingArrow(token.getFacing(), footprintBounds.width / 2); } - - double cx = location.x + location.scaledWidth / 2; - double cy = location.y + location.scaledHeight / 2; - - tokenG.translate(cx, cy); - tokenG.setColor(java.awt.Color.yellow); - tokenG.fill(arrow); - tokenG.setColor(java.awt.Color.darkGray); - tokenG.draw(arrow); - tokenG.translate(-cx, -cy); + arrowArea = new Area(arrow); + + float cx = x + (float)origBounds.getWidth() / 2; + float cy = y + (float)origBounds.getHeight() / 2; + + shape.translate(cx, -cy, 0); + shape.setColor(Color.YELLOW); + shape.set(ShapeRenderer.ShapeType.Filled); + paintArea(arrowArea); + shape.setColor(Color.DARK_GRAY); + shape.set(ShapeRenderer.ShapeType.Line); + paintArea(arrowArea); + shape.translate(-cx, cy, 0); break; case SQUARE: if (zone.getGrid().isIsometric()) { arrow = getFigureFacingArrow(token.getFacing(), footprintBounds.width / 2); - cx = location.x + location.scaledWidth / 2; - cy = location.y + location.scaledHeight / 2; + cx = x + (float)origBounds.getWidth() / 2; + cy = y + (float)origBounds.getHeight() / 2; } else { int facing = token.getFacing(); while (facing < 0) { @@ -1534,13 +1550,13 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure facing %= 360; arrow = getSquareFacingArrow(facing, footprintBounds.width / 2); - cx = location.x + location.scaledWidth / 2; - cy = location.y + location.scaledHeight / 2; + cx = x + (float)origBounds.getWidth() / 2; + cy = y + (float)origBounds.getHeight() / 2; // Find the edge of the image // TODO: Man, this is horrible, there's gotta be a better way to do this - double xp = location.scaledWidth / 2; - double yp = location.scaledHeight / 2; + double xp = origBounds.getWidth() / 2; + double yp = origBounds.getHeight() / 2; if (facing >= 45 && facing <= 135 || facing >= 225 && facing <= 315) { xp = (int) (yp / Math.tan(Math.toRadians(facing))); if (facing > 180) { @@ -1558,17 +1574,23 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure cy -= yp; } - tokenG.translate(cx, cy); - tokenG.setColor(java.awt.Color.yellow); - tokenG.fill(arrow); - tokenG.setColor(java.awt.Color.darkGray); - tokenG.draw(arrow); - tokenG.translate(-cx, -cy); + arrowArea = new Area(arrow); + shape.translate(cx, -cy, 0); + shape.setColor(Color.YELLOW); + shape.set(ShapeRenderer.ShapeType.Filled); + paintArea(arrowArea); + shape.setColor(Color.DARK_GRAY); + shape.set(ShapeRenderer.ShapeType.Line); + paintArea(arrowArea); + shape.translate(-cx, cy, 0); break; + } } timer.stop("tokenlist-8"); - + shape.end(); + batch.begin(); +/* timer.start("tokenlist-9"); // Set up the graphics so that the overlay can just be painted. Graphics2D locg = @@ -1827,6 +1849,51 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure visibleTokenSet = Collections.unmodifiableSet(tempVisTokens);*/ } + protected Shape getFigureFacingArrow(int angle, int size) { + int base = (int) (size * .75); + int width = (int) (size * .35); + + var facingArrow = new GeneralPath(); + facingArrow.moveTo(base, -width); + facingArrow.lineTo(size, 0); + facingArrow.lineTo(base, width); + facingArrow.lineTo(base, -width); + + return facingArrow.createTransformedShape( + AffineTransform.getRotateInstance(-Math.toRadians(angle))); + } + + // TODO: I don't like this hardwiring + protected Shape getCircleFacingArrow(int angle, int size) { + int base = (int) (size * .75); + int width = (int) (size * .35); + + var facingArrow = new GeneralPath(); + facingArrow.moveTo(base, -width); + facingArrow.lineTo(size, 0); + facingArrow.lineTo(base, width); + facingArrow.lineTo(base, -width); + + return facingArrow.createTransformedShape( + AffineTransform.getRotateInstance(-Math.toRadians(angle))); + } + + // TODO: I don't like this hardwiring + protected Shape getSquareFacingArrow(int angle, int size) { + int base = (int) (size * .75); + int width = (int) (size * .35); + + var facingArrow = new GeneralPath(); + facingArrow.moveTo(0, 0); + facingArrow.lineTo(-(size - base), -width); + facingArrow.lineTo(-(size - base), width); + facingArrow.lineTo(0, 0); + + return facingArrow.createTransformedShape( + AffineTransform.getRotateInstance(-Math.toRadians(angle))); + } + + private void paintClipped(Sprite image, Area bounds, Area clip) { fogBuffer.begin(); From 3c06380dcfbdee4a1590b3a3388b35c08b745212 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 12 Apr 2021 21:46:27 +0200 Subject: [PATCH 024/139] fix fog alpha --- .../rptools/maptool/box2d/NativeRenderer.java | 3 +- .../maptool/client/ui/zone/GdxRenderer.java | 96 +++++++++---------- 2 files changed, 47 insertions(+), 52 deletions(-) diff --git a/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java b/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java index f7dbd34dab..93e3a43146 100644 --- a/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java +++ b/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java @@ -53,8 +53,9 @@ public void init() { var config = new LwjglApplicationConfiguration(); config.allowSoftwareMode = true; + //config.samples = 8; config.forceExit = false; - LwjglApplicationConfiguration.disableAudio = true; + LwjglApplicationConfiguration.disableAudio = true; var appListender = GdxRenderer.getInstance(); appListender.setJfxRenderer(this); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index a13696ead3..b3a2b3daaa 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -256,6 +256,9 @@ private void doRendering() { Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); Gdx.gl.glEnable(GL20.GL_BLEND); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + // Gdx.gl.glEnable(GL11.GL_LINE_SMOOTH); + // Gdx.gl.glHint(GL11.GL_LINE_SMOOTH_HINT, GL20.GL_NICEST); if (zone == null || !renderZone) return; @@ -665,8 +668,9 @@ private void renderFog(PlayerView view) { fogBuffer.begin(); + Gdx.gl.glClearColor(0,0,0,0); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); - + batch.setBlendFunction(GL20.GL_ONE, GL20.GL_NONE); batch.setProjectionMatrix(cam.combined); timer.start("renderFog-allocateBufferedImage"); @@ -681,9 +685,12 @@ private void renderFog(PlayerView view) { if (fog == null) fog = paintToSprite(zone.getFogPaint()); + batch.setColor(Color.WHITE); var color = fog.getColor(); fog.setColor(color.r, color.g, color.b, view.isGMView() ? .6f : 1f); + batch.setBlendFunction(GL20.GL_ONE, GL20.GL_NONE); fillViewportWith(fog); + batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); batch.end(); shape.begin(ShapeRenderer.ShapeType.Filled); @@ -773,6 +780,7 @@ private void renderFog(PlayerView view) { } batch.setProjectionMatrix(hudCam.combined); + batch.setColor(Color.WHITE); batch.draw(fogBuffer.getTexture(), 0, 0, width, height, 0, 0, width, height, false, true); @@ -871,62 +879,30 @@ private void renderAuras(PlayerView view) { } private void renderLights(PlayerView view) { -/* timer.start("lights-2"); + if(zone.getVisionType() != Zone.VisionType.NIGHT) + return; + + fogBuffer.begin(); + Gdx.gl.glClearColor(0,0,0,0); + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + shape.setProjectionMatrix(cam.combined); + + timer.start("lights-2"); var alpha = AppPreferences.getLightOverlayOpacity() / 255.0f; timer.stop("lights-2"); - timer.start("lights-3"); - // Organize Map> colorMap = new HashMap>(); for (DrawableLight light : zoneRenderer.getZoneView().getDrawableLights(view)) { // Jamz TODO: Fix, doesn't work in Day light, probably need to hack this up - if (light.getType() == LightSource.Type.NORMAL) { - if (zone.getVisionType() == Zone.VisionType.NIGHT && light.getPaint() != null) { - List areaList = - colorMap.computeIfAbsent(light.getPaint().getPaint(), k -> new ArrayList<>()); - areaList.add(new Area(light.getArea())); - } - } - } - timer.stop("lights-3"); - timer.start("lights-4"); - // Combine same colors to avoid ugly overlap - // Avoid combining _all_ of the lights as the area adds are very expensive, just combine those - // that overlap - // Jamz TODO: Check this and make sure proper order is happening - for (var paint : colorMap.keySet()) { - var areaList = colorMap.get(paint); - List sourceList = new LinkedList(areaList); - areaList.clear(); - - outter: - while (sourceList.size() > 0) { - Area area = sourceList.remove(0); - - for (ListIterator iter = sourceList.listIterator(); iter.hasNext(); ) { - Area currArea = iter.next(); - - if (currArea.getBounds().intersects(area.getBounds())) { - iter.remove(); - area.add(currArea); - sourceList.add(area); - continue outter; - } - } - // If we are here, we didn't find any other area to merge with - areaList.add(area); - } - // Cut out the bright light - if (areaList.size() > 0) { - for (Area area : areaList) { - for (Area brightArea : zoneRenderer.getZoneView().getBrightLights(view)) { - area.subtract(brightArea); - } - } - } + var drawablePaint = light.getPaint(); + + if (light.getType() != LightSource.Type.NORMAL || drawablePaint == null) + continue; + + var paint = drawablePaint.getPaint(); if (paint instanceof DrawableColorPaint) { var colorPaint = (DrawableColorPaint) paint; @@ -941,10 +917,28 @@ private void renderLights(PlayerView view) { tmpColor.a = alpha; shape.setColor(tmpColor); shape.set(ShapeRenderer.ShapeType.Filled); - for(var area: areaList) - paintArea(area); + paintArea(light.getArea()); + } + timer.stop("lights-3"); + + //clear the bright areas + timer.start("lights-4"); + for (Area brightArea : zoneRenderer.getZoneView().getBrightLights(view)) { + shape.setColor(Color.CLEAR); + paintArea(brightArea); } - timer.stop("lights-4");*/ + timer.stop("lights-4"); + fogBuffer.end(); + shape.end(); + batch.begin(); + batch.setProjectionMatrix(hudCam.combined); + batch.draw(fogBuffer.getTexture(), 0, 0, width, height, 0, 0, + width, height, false, true); + + batch.setProjectionMatrix(cam.combined); + batch.end(); + shape.begin(); + } private void renderGrid(PlayerView view) { From 14ec779f4f31ddb8fc13d259b39967002fe1ba51 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Tue, 13 Apr 2021 00:40:50 +0200 Subject: [PATCH 025/139] more work on token displaying --- .../net/rptools/lib/swing/ImageBorder.java | 3 + .../maptool/client/ui/zone/GdxRenderer.java | 222 ++++++++++++------ 2 files changed, 147 insertions(+), 78 deletions(-) diff --git a/src/main/java/net/rptools/lib/swing/ImageBorder.java b/src/main/java/net/rptools/lib/swing/ImageBorder.java index 0401de8b0c..ebfd264ee7 100644 --- a/src/main/java/net/rptools/lib/swing/ImageBorder.java +++ b/src/main/java/net/rptools/lib/swing/ImageBorder.java @@ -40,6 +40,7 @@ public class ImageBorder implements Border { private int bottomMargin; private int leftMargin; private int rightMargin; + private String imagePath; public ImageBorder(String imagePath) { try { @@ -61,6 +62,8 @@ public ImageBorder(String imagePath) { } } + public String getImagePath() { return imagePath; } + public int getTopMargin() { return topMargin; } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index b3a2b3daaa..cdec526b14 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -6,10 +6,8 @@ import com.badlogic.gdx.graphics.*; import com.badlogic.gdx.graphics.g2d.*; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; -import com.badlogic.gdx.math.Bezier; -import com.badlogic.gdx.math.EarClippingTriangulator; -import com.badlogic.gdx.math.Vector2; -import com.badlogic.gdx.math.Vector3; +import com.badlogic.gdx.math.*; +import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.utils.FloatArray; import com.crashinvaders.vfx.VfxManager; import com.crashinvaders.vfx.effects.BloomEffect; @@ -22,12 +20,21 @@ import net.rptools.lib.CodeTimer; import net.rptools.lib.MD5Key; import net.rptools.lib.image.ImageUtil; +import net.rptools.lib.swing.ImageBorder; import net.rptools.lib.swing.SwingUtil; import net.rptools.maptool.box2d.NativeRenderer; import net.rptools.maptool.client.*; +import net.rptools.maptool.client.tool.drawing.FreehandExposeTool; +import net.rptools.maptool.client.tool.drawing.OvalExposeTool; +import net.rptools.maptool.client.tool.drawing.PolygonExposeTool; +import net.rptools.maptool.client.tool.drawing.RectangleExposeTool; import net.rptools.maptool.client.ui.Scale; +import net.rptools.maptool.client.ui.Tool; +import net.rptools.maptool.client.ui.token.AbstractTokenOverlay; +import net.rptools.maptool.client.ui.token.BarTokenOverlay; import net.rptools.maptool.model.*; import net.rptools.maptool.model.Label; +import net.rptools.maptool.model.Path; import net.rptools.maptool.model.drawing.DrawableColorPaint; import net.rptools.maptool.model.drawing.DrawablePaint; import net.rptools.maptool.model.drawing.DrawableTexturePaint; @@ -893,7 +900,6 @@ private void renderLights(PlayerView view) { timer.stop("lights-2"); timer.start("lights-3"); - Map> colorMap = new HashMap>(); for (DrawableLight light : zoneRenderer.getZoneView().getDrawableLights(view)) { // Jamz TODO: Fix, doesn't work in Day light, probably need to hack this up @@ -1255,7 +1261,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure timer.stop("tokenlist-1b"); timer.start("tokenlist-1a"); - Rectangle footprintBounds = token.getBounds(zone); + java.awt.Rectangle footprintBounds = token.getBounds(zone); timer.stop("tokenlist-1a"); timer.start("tokenlist-1d"); @@ -1336,12 +1342,12 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure // Position // For Isometric Grid we alter the height offset float iso_ho = 0; - Dimension imgSize = new Dimension((int)image.getWidth(), (int)image.getHeight()); + java.awt.Dimension imgSize = new java.awt.Dimension((int)image.getWidth(), (int)image.getHeight()); if (token.getShape() == Token.TokenShape.FIGURE) { float th = token.getHeight() * (float) footprintBounds.width / token.getWidth(); iso_ho = footprintBounds.height - th; footprintBounds = - new Rectangle( + new java.awt.Rectangle( footprintBounds.x, footprintBounds.y - (int) iso_ho, footprintBounds.width, @@ -1480,7 +1486,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure && AppPreferences.getForceFacingArrow() == false) { break; } - Shape arrow = getFigureFacingArrow(token.getFacing(), footprintBounds.width / 2); + java.awt.Shape arrow = getFigureFacingArrow(token.getFacing(), footprintBounds.width / 2); if (!zone.getGrid().isIsometric()) { arrow = getCircleFacingArrow(token.getFacing(), footprintBounds.width / 2); @@ -1584,22 +1590,8 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure timer.stop("tokenlist-8"); shape.end(); batch.begin(); -/* + timer.start("tokenlist-9"); - // Set up the graphics so that the overlay can just be painted. - Graphics2D locg = - (Graphics2D) - tokenG.create( - (int) tokenBounds.getBounds().getX(), - (int) tokenBounds.getBounds().getY(), - (int) tokenBounds.getBounds().getWidth(), - (int) tokenBounds.getBounds().getHeight()); - Rectangle bounds = - new Rectangle( - 0, - 0, - (int) tokenBounds.getBounds().getWidth(), - (int) tokenBounds.getBounds().getHeight()); // Check each of the set values for (String state : MapTool.getCampaign().getTokenStatesMap().keySet()) { @@ -1609,11 +1601,11 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure overlay = (AbstractTokenOverlay) stateValue; } if (overlay == null - || overlay.isMouseover() && token != tokenUnderMouse + || overlay.isMouseover() && token != zoneRenderer.getTokenUnderMouse() || !overlay.showPlayer(token, MapTool.getPlayer())) { continue; } - overlay.paintOverlay(locg, token, bounds, stateValue); + renderTokenOverlay(overlay, token, image.getBoundingRectangle(), stateValue); } timer.stop("tokenlist-9"); @@ -1623,58 +1615,40 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure Object barValue = token.getState(bar); BarTokenOverlay overlay = MapTool.getCampaign().getTokenBarsMap().get(bar); if (overlay == null - || overlay.isMouseover() && token != tokenUnderMouse + || overlay.isMouseover() && token != zoneRenderer.getTokenUnderMouse() || !overlay.showPlayer(token, MapTool.getPlayer())) { continue; } - - overlay.paintOverlay(locg, token, bounds, barValue); + renderTokenOverlay(overlay, token, image.getBoundingRectangle(), barValue); } // endfor - locg.dispose(); timer.stop("tokenlist-10"); timer.start("tokenlist-11"); // Keep track of which tokens have been drawn so we can perform post-processing on them later // (such as selection borders and names/labels) - if (zoneRenderer.getActiveLayer().equals(token.getLayer())) { - tokenPostProcessing.add(token); - } - timer.stop("tokenlist-11"); -*/ - } - /* - timer.start("tokenlist-12"); - boolean useIF = MapTool.getServerPolicy().isUseIndividualFOW(); - // Selection and labels - for (Token token : tokenPostProcessing) { - ZoneRenderer.TokenLocation location = tokenLocationCache.get(token); - if (location == null) { + if (!zoneRenderer.getActiveLayer().equals(token.getLayer())) continue; - } - Area bounds = location.bounds; - // TODO: This isn't entirely accurate as it doesn't account for the actual text - // to be in the clipping bounds, but I'll fix that later - if (!bounds.getBounds().intersects(clipBounds)) { - continue; - } - Rectangle footprintBounds = token.getBounds(zone); + timer.stop("tokenlist-11"); + timer.start("tokenlist-12"); - boolean isSelected = selectedTokenSet.contains(token.getId()); + boolean useIF = MapTool.getServerPolicy().isUseIndividualFOW(); + + // Selection and labels + + + boolean isSelected = zoneRenderer.getSelectedTokenSet().contains(token.getId()); if (isSelected) { - ScreenPoint sp = ScreenPoint.fromZonePoint(this, footprintBounds.x, footprintBounds.y); - double width = footprintBounds.width * getScale(); - double height = footprintBounds.height * getScale(); ImageBorder selectedBorder = token.isStamp() ? AppStyle.selectedStampBorder : AppStyle.selectedBorder; - if (highlightCommonMacros.contains(token)) { + if (zoneRenderer.getHighlightCommonMacros().contains(token)) { selectedBorder = AppStyle.commonMacroBorder; } if (!AppUtil.playerOwns(token)) { selectedBorder = AppStyle.selectedUnownedBorder; } - if (useIF && !token.isStamp() && zoneView.isUsingVision()) { + if (useIF && !token.isStamp() && zoneRenderer.getZoneView().isUsingVision()) { Tool tool = MapTool.getFrame().getToolbox().getSelectedTool(); if (tool instanceof @@ -1687,26 +1661,20 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure } if (token.hasFacing() && (token.getShape() == Token.TokenShape.TOP_DOWN || token.isStamp())) { - AffineTransform oldTransform = clippedG.getTransform(); - - // Rotated - clippedG.translate(sp.x, sp.y); - clippedG.rotate( - Math.toRadians(-token.getFacing() - 90), - width / 2 - (token.getAnchor().x * scale), - height / 2 - (token.getAnchor().y * scale)); // facing defaults to down, or -90 - // degrees - selectedBorder.paintAround(clippedG, 0, 0, (int) width, (int) height); - - clippedG.setTransform(oldTransform); + + + //shape.rotate(image.getOriginX(), image.getOriginY(), 0, token.getFacing() + 90); + + renderImageBorderAround(selectedBorder, image.getBoundingRectangle()); + + + //shape.rotate(image.getOriginX(), image.getOriginY(), 0, - token.getFacing() - 90); } else { - selectedBorder.paintAround(clippedG, (int) sp.x, (int) sp.y, (int) width, (int) height); + renderImageBorderAround(selectedBorder, image.getBoundingRectangle()); } // Remove labels from the cache if the corresponding tokens are deselected - } else if (!AppState.isShowTokenNames()) { - labelRenderingCache.remove(token.getId()); } - +/* // Token names and labels boolean showCurrentTokenLabel = AppState.isShowTokenNames() || token == tokenUnderMouse; @@ -1803,10 +1771,14 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure background, foreground, tokId)); - } + }*/ + timer.stop("tokenlist-12"); + } - timer.stop("tokenlist-12"); + + +/* timer.start("tokenlist-13"); // Stacks if (!tokenList.isEmpty() @@ -1843,7 +1815,101 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure visibleTokenSet = Collections.unmodifiableSet(tempVisTokens);*/ } - protected Shape getFigureFacingArrow(int angle, int size) { + private void renderImageBorderAround(ImageBorder border, Rectangle bounds) { + var leftMargin = border.getLeftMargin(); + var rightMargin = border.getRightMargin(); + var topMargin = border.getTopMargin(); + var bottomMargin = border.getBottomMargin(); + + var x = bounds.x - leftMargin; + var y = bounds.y - bottomMargin; + var width = bounds.width + leftMargin + rightMargin; + var height = bounds.height + topMargin + bottomMargin; + + /* // Draw Corners + g.drawImage( + topLeft, x + leftMargin - topLeft.getWidth(), y + topMargin - topLeft.getHeight(), null); + g.drawImage(topRight, x + width - rightMargin, y + topMargin - topRight.getHeight(), null); + g.drawImage( + bottomLeft, x + leftMargin - bottomLeft.getWidth(), y + height - bottomMargin, null); + g.drawImage(bottomRight, x + width - rightMargin, y + height - bottomMargin, null); + + // Draw top + + int i; + int max = width - rightMargin; + + // Hopefully the compiler is doing subexpression optimization! ;-) + java.awt.Rectangle topEdge, botEdge, lftEdge, rgtEdge; + topEdge = + new java.awt.Rectangle( + x + leftMargin, + y + topMargin - top.getHeight(), + width - leftMargin - rightMargin, + top.getHeight()); + botEdge = + new java.awt.Rectangle( + x + leftMargin, + y + height - bottomMargin, + width - leftMargin - rightMargin, + top.getHeight()); + lftEdge = + new java.awt.Rectangle( + x + leftMargin - left.getWidth(), + y + topMargin, + left.getWidth(), + height - topMargin - bottomMargin); + rgtEdge = + new java.awt.Rectangle( + x + width - rightMargin, + y + topMargin, + right.getWidth(), + height - topMargin - bottomMargin); + + java.awt.Rectangle.intersect(topEdge, r, topEdge); + java.awt.Rectangle.intersect(botEdge, r, botEdge); + java.awt.Rectangle.intersect(lftEdge, r, lftEdge); + java.awt.Rectangle.intersect(rgtEdge, r, rgtEdge); + + // Top + if (!topEdge.isEmpty()) { + g.setClip(topEdge); + for (i = leftMargin; i < max; i += top.getWidth()) { + g.drawImage(top, x + i, y + topMargin - top.getHeight(), null); + } + } + + // Bottom + if (!botEdge.isEmpty()) { + g.setClip(botEdge); + for (i = leftMargin; i < max; i += bottom.getWidth()) { + g.drawImage(bottom, x + i, y + height - bottomMargin, null); + } + } + + // Left + if (!lftEdge.isEmpty()) { + g.setClip(lftEdge); + max = height - bottomMargin; + for (i = topMargin; i < max; i += left.getHeight()) { + g.drawImage(left, x + leftMargin - left.getWidth(), y + i, null); + } + } + + // Right + if (!rgtEdge.isEmpty()) { + g.setClip(rgtEdge); + for (i = topMargin; i < max; i += right.getHeight()) { + g.drawImage(right, x + width - rightMargin, y + i, null); + } + } + g.setClip(oldClip);*/ + } + + private void renderTokenOverlay(AbstractTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) { + } + + protected java.awt.Shape getFigureFacingArrow(int angle, int size) { int base = (int) (size * .75); int width = (int) (size * .35); @@ -1858,7 +1924,7 @@ protected Shape getFigureFacingArrow(int angle, int size) { } // TODO: I don't like this hardwiring - protected Shape getCircleFacingArrow(int angle, int size) { + protected java.awt.Shape getCircleFacingArrow(int angle, int size) { int base = (int) (size * .75); int width = (int) (size * .35); @@ -1873,7 +1939,7 @@ protected Shape getCircleFacingArrow(int angle, int size) { } // TODO: I don't like this hardwiring - protected Shape getSquareFacingArrow(int angle, int size) { + protected java.awt.Shape getSquareFacingArrow(int angle, int size) { int base = (int) (size * .75); int width = (int) (size * .35); From d6ea1eea83627fce4c9d06d635f2de12bf5976a4 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Tue, 13 Apr 2021 20:56:52 +0200 Subject: [PATCH 026/139] move all borders to one place; create atlas --- border.png | Bin 0 -> 220 bytes .../net/rptools/lib/swing/ImageBorder.java | 6 +- src/main/resources/data/bg.png | Bin 394660 -> 0 bytes src/main/resources/data/marble.png | Bin 9522 -> 0 bytes .../client}/image/border/blue/bl.png | Bin .../client}/image/border/blue/bottom.png | Bin .../client}/image/border/blue/br.png | Bin .../client}/image/border/blue/left.png | Bin .../client}/image/border/blue/right.png | Bin .../client}/image/border/blue/tl.png | Bin .../client}/image/border/blue/top.png | Bin .../client}/image/border/blue/tr.png | Bin .../client/image/border/gray2}/bl.png | Bin .../client/image/border/gray2}/bottom.png | Bin .../client/image/border/gray2}/br.png | Bin .../client/image/border/gray2}/left.png | Bin .../client/image/border/gray2}/right.png | Bin .../client/image/border/gray2}/tl.png | Bin .../client/image/border/gray2}/top.png | Bin .../client/image/border/gray2}/tr.png | Bin .../client}/image/border/red/bl.png | Bin .../client}/image/border/red/bottom.png | Bin .../client}/image/border/red/br.png | Bin .../client}/image/border/red/left.png | Bin .../client}/image/border/red/right.png | Bin .../client}/image/border/red/tl.png | Bin .../client}/image/border/red/top.png | Bin .../client}/image/border/red/tr.png | Bin .../net/rptools/maptool/client/maptool.atlas | 175 ++++++++++++++++++ .../net/rptools/maptool/client/maptool.png | Bin 0 -> 22070 bytes 30 files changed, 178 insertions(+), 3 deletions(-) create mode 100644 border.png delete mode 100644 src/main/resources/data/bg.png delete mode 100644 src/main/resources/data/marble.png rename src/main/resources/net/rptools/{lib/swing => maptool/client}/image/border/blue/bl.png (100%) rename src/main/resources/net/rptools/{lib/swing => maptool/client}/image/border/blue/bottom.png (100%) rename src/main/resources/net/rptools/{lib/swing => maptool/client}/image/border/blue/br.png (100%) rename src/main/resources/net/rptools/{lib/swing => maptool/client}/image/border/blue/left.png (100%) rename src/main/resources/net/rptools/{lib/swing => maptool/client}/image/border/blue/right.png (100%) rename src/main/resources/net/rptools/{lib/swing => maptool/client}/image/border/blue/tl.png (100%) rename src/main/resources/net/rptools/{lib/swing => maptool/client}/image/border/blue/top.png (100%) rename src/main/resources/net/rptools/{lib/swing => maptool/client}/image/border/blue/tr.png (100%) rename src/main/resources/net/rptools/{lib/swing/image/border/gray => maptool/client/image/border/gray2}/bl.png (100%) rename src/main/resources/net/rptools/{lib/swing/image/border/gray => maptool/client/image/border/gray2}/bottom.png (100%) rename src/main/resources/net/rptools/{lib/swing/image/border/gray => maptool/client/image/border/gray2}/br.png (100%) rename src/main/resources/net/rptools/{lib/swing/image/border/gray => maptool/client/image/border/gray2}/left.png (100%) rename src/main/resources/net/rptools/{lib/swing/image/border/gray => maptool/client/image/border/gray2}/right.png (100%) rename src/main/resources/net/rptools/{lib/swing/image/border/gray => maptool/client/image/border/gray2}/tl.png (100%) rename src/main/resources/net/rptools/{lib/swing/image/border/gray => maptool/client/image/border/gray2}/top.png (100%) rename src/main/resources/net/rptools/{lib/swing/image/border/gray => maptool/client/image/border/gray2}/tr.png (100%) rename src/main/resources/net/rptools/{lib/swing => maptool/client}/image/border/red/bl.png (100%) rename src/main/resources/net/rptools/{lib/swing => maptool/client}/image/border/red/bottom.png (100%) rename src/main/resources/net/rptools/{lib/swing => maptool/client}/image/border/red/br.png (100%) rename src/main/resources/net/rptools/{lib/swing => maptool/client}/image/border/red/left.png (100%) rename src/main/resources/net/rptools/{lib/swing => maptool/client}/image/border/red/right.png (100%) rename src/main/resources/net/rptools/{lib/swing => maptool/client}/image/border/red/tl.png (100%) rename src/main/resources/net/rptools/{lib/swing => maptool/client}/image/border/red/top.png (100%) rename src/main/resources/net/rptools/{lib/swing => maptool/client}/image/border/red/tr.png (100%) create mode 100644 src/main/resources/net/rptools/maptool/client/maptool.atlas create mode 100644 src/main/resources/net/rptools/maptool/client/maptool.png diff --git a/border.png b/border.png new file mode 100644 index 0000000000000000000000000000000000000000..ea8637a6b3fda889115973b6607e3e332876ef17 GIT binary patch literal 220 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

!_*{qA?DgEr1m_-RlO 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 i9LiJ{XzjM$s-iE>Q|WRPf=n|BIb*2g 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Ƹ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℞fWnWspdSj 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

MRlVrYdd6>R2t1$15Q=e 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%0D;h+N?vF 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 diff --git a/src/main/resources/net/rptools/lib/swing/image/border/blue/bl.png b/src/main/resources/net/rptools/maptool/client/image/border/blue/bl.png similarity index 100% rename from src/main/resources/net/rptools/lib/swing/image/border/blue/bl.png rename to src/main/resources/net/rptools/maptool/client/image/border/blue/bl.png diff --git a/src/main/resources/net/rptools/lib/swing/image/border/blue/bottom.png b/src/main/resources/net/rptools/maptool/client/image/border/blue/bottom.png similarity index 100% rename from src/main/resources/net/rptools/lib/swing/image/border/blue/bottom.png rename to src/main/resources/net/rptools/maptool/client/image/border/blue/bottom.png diff --git a/src/main/resources/net/rptools/lib/swing/image/border/blue/br.png b/src/main/resources/net/rptools/maptool/client/image/border/blue/br.png similarity index 100% rename from src/main/resources/net/rptools/lib/swing/image/border/blue/br.png rename to src/main/resources/net/rptools/maptool/client/image/border/blue/br.png diff --git a/src/main/resources/net/rptools/lib/swing/image/border/blue/left.png b/src/main/resources/net/rptools/maptool/client/image/border/blue/left.png similarity index 100% rename from src/main/resources/net/rptools/lib/swing/image/border/blue/left.png rename to src/main/resources/net/rptools/maptool/client/image/border/blue/left.png diff --git a/src/main/resources/net/rptools/lib/swing/image/border/blue/right.png b/src/main/resources/net/rptools/maptool/client/image/border/blue/right.png similarity index 100% rename from src/main/resources/net/rptools/lib/swing/image/border/blue/right.png rename to src/main/resources/net/rptools/maptool/client/image/border/blue/right.png diff --git a/src/main/resources/net/rptools/lib/swing/image/border/blue/tl.png b/src/main/resources/net/rptools/maptool/client/image/border/blue/tl.png similarity index 100% rename from src/main/resources/net/rptools/lib/swing/image/border/blue/tl.png rename to src/main/resources/net/rptools/maptool/client/image/border/blue/tl.png diff --git a/src/main/resources/net/rptools/lib/swing/image/border/blue/top.png b/src/main/resources/net/rptools/maptool/client/image/border/blue/top.png similarity index 100% rename from src/main/resources/net/rptools/lib/swing/image/border/blue/top.png rename to src/main/resources/net/rptools/maptool/client/image/border/blue/top.png diff --git a/src/main/resources/net/rptools/lib/swing/image/border/blue/tr.png b/src/main/resources/net/rptools/maptool/client/image/border/blue/tr.png similarity index 100% rename from src/main/resources/net/rptools/lib/swing/image/border/blue/tr.png rename to src/main/resources/net/rptools/maptool/client/image/border/blue/tr.png diff --git a/src/main/resources/net/rptools/lib/swing/image/border/gray/bl.png b/src/main/resources/net/rptools/maptool/client/image/border/gray2/bl.png similarity index 100% rename from src/main/resources/net/rptools/lib/swing/image/border/gray/bl.png rename to src/main/resources/net/rptools/maptool/client/image/border/gray2/bl.png diff --git a/src/main/resources/net/rptools/lib/swing/image/border/gray/bottom.png b/src/main/resources/net/rptools/maptool/client/image/border/gray2/bottom.png similarity index 100% rename from src/main/resources/net/rptools/lib/swing/image/border/gray/bottom.png rename to src/main/resources/net/rptools/maptool/client/image/border/gray2/bottom.png diff --git a/src/main/resources/net/rptools/lib/swing/image/border/gray/br.png b/src/main/resources/net/rptools/maptool/client/image/border/gray2/br.png similarity index 100% rename from src/main/resources/net/rptools/lib/swing/image/border/gray/br.png rename to src/main/resources/net/rptools/maptool/client/image/border/gray2/br.png diff --git a/src/main/resources/net/rptools/lib/swing/image/border/gray/left.png b/src/main/resources/net/rptools/maptool/client/image/border/gray2/left.png similarity index 100% rename from src/main/resources/net/rptools/lib/swing/image/border/gray/left.png rename to src/main/resources/net/rptools/maptool/client/image/border/gray2/left.png diff --git a/src/main/resources/net/rptools/lib/swing/image/border/gray/right.png b/src/main/resources/net/rptools/maptool/client/image/border/gray2/right.png similarity index 100% rename from src/main/resources/net/rptools/lib/swing/image/border/gray/right.png rename to src/main/resources/net/rptools/maptool/client/image/border/gray2/right.png diff --git a/src/main/resources/net/rptools/lib/swing/image/border/gray/tl.png b/src/main/resources/net/rptools/maptool/client/image/border/gray2/tl.png similarity index 100% rename from src/main/resources/net/rptools/lib/swing/image/border/gray/tl.png rename to src/main/resources/net/rptools/maptool/client/image/border/gray2/tl.png diff --git a/src/main/resources/net/rptools/lib/swing/image/border/gray/top.png b/src/main/resources/net/rptools/maptool/client/image/border/gray2/top.png similarity index 100% rename from src/main/resources/net/rptools/lib/swing/image/border/gray/top.png rename to src/main/resources/net/rptools/maptool/client/image/border/gray2/top.png diff --git a/src/main/resources/net/rptools/lib/swing/image/border/gray/tr.png b/src/main/resources/net/rptools/maptool/client/image/border/gray2/tr.png similarity index 100% rename from src/main/resources/net/rptools/lib/swing/image/border/gray/tr.png rename to src/main/resources/net/rptools/maptool/client/image/border/gray2/tr.png diff --git a/src/main/resources/net/rptools/lib/swing/image/border/red/bl.png b/src/main/resources/net/rptools/maptool/client/image/border/red/bl.png similarity index 100% rename from src/main/resources/net/rptools/lib/swing/image/border/red/bl.png rename to src/main/resources/net/rptools/maptool/client/image/border/red/bl.png diff --git a/src/main/resources/net/rptools/lib/swing/image/border/red/bottom.png b/src/main/resources/net/rptools/maptool/client/image/border/red/bottom.png similarity index 100% rename from src/main/resources/net/rptools/lib/swing/image/border/red/bottom.png rename to src/main/resources/net/rptools/maptool/client/image/border/red/bottom.png diff --git a/src/main/resources/net/rptools/lib/swing/image/border/red/br.png b/src/main/resources/net/rptools/maptool/client/image/border/red/br.png similarity index 100% rename from src/main/resources/net/rptools/lib/swing/image/border/red/br.png rename to src/main/resources/net/rptools/maptool/client/image/border/red/br.png diff --git a/src/main/resources/net/rptools/lib/swing/image/border/red/left.png b/src/main/resources/net/rptools/maptool/client/image/border/red/left.png similarity index 100% rename from src/main/resources/net/rptools/lib/swing/image/border/red/left.png rename to src/main/resources/net/rptools/maptool/client/image/border/red/left.png diff --git a/src/main/resources/net/rptools/lib/swing/image/border/red/right.png b/src/main/resources/net/rptools/maptool/client/image/border/red/right.png similarity index 100% rename from src/main/resources/net/rptools/lib/swing/image/border/red/right.png rename to src/main/resources/net/rptools/maptool/client/image/border/red/right.png diff --git a/src/main/resources/net/rptools/lib/swing/image/border/red/tl.png b/src/main/resources/net/rptools/maptool/client/image/border/red/tl.png similarity index 100% rename from src/main/resources/net/rptools/lib/swing/image/border/red/tl.png rename to src/main/resources/net/rptools/maptool/client/image/border/red/tl.png diff --git a/src/main/resources/net/rptools/lib/swing/image/border/red/top.png b/src/main/resources/net/rptools/maptool/client/image/border/red/top.png similarity index 100% rename from src/main/resources/net/rptools/lib/swing/image/border/red/top.png rename to src/main/resources/net/rptools/maptool/client/image/border/red/top.png diff --git a/src/main/resources/net/rptools/lib/swing/image/border/red/tr.png b/src/main/resources/net/rptools/maptool/client/image/border/red/tr.png similarity index 100% rename from src/main/resources/net/rptools/lib/swing/image/border/red/tr.png rename to src/main/resources/net/rptools/maptool/client/image/border/red/tr.png diff --git a/src/main/resources/net/rptools/maptool/client/maptool.atlas b/src/main/resources/net/rptools/maptool/client/maptool.atlas new file mode 100644 index 0000000000..0aa42f94fc --- /dev/null +++ b/src/main/resources/net/rptools/maptool/client/maptool.atlas @@ -0,0 +1,175 @@ +maptool.png +size:256,256 +repeat:none +blueLabelbox +bounds:17,156,129,21 +split:10,10,10,10 +pad:10,10,10,10 +border/blue/bl +bounds:69,41,3,3 +border/blue/bottom +bounds:162,184,52,3 +border/blue/br +bounds:177,174,3,3 +border/blue/right +bounds:79,46,3,47 +border/blue/left +bounds:79,46,3,47 +border/blue/tl +bounds:85,115,3,3 +border/blue/top +bounds:162,199,52,3 +border/blue/tr +bounds:85,120,3,3 +border/fowtools/bl +bounds:17,26,6,6 +border/fowtools/bottom +bounds:31,125,52,6 +border/fowtools/br +bounds:33,33,6,6 +border/fowtools/left +bounds:33,41,6,52 +border/fowtools/right +bounds:41,41,6,52 +border/fowtools/tl +bounds:85,125,6,6 +border/fowtools/top +bounds:31,133,52,6 +border/fowtools/tr +bounds:25,26,6,6 +border/gray/bl +bounds:162,163,5,6 +border/gray/bottom +bounds:17,148,111,6 +border/gray/br +bounds:162,171,6,6 +border/gray/left +bounds:10,24,5,199 +border/gray/right +bounds:2,24,6,199 +border/gray/tl +bounds:170,172,5,5 +border/gray/top +bounds:17,141,111,5 +border/gray/tr +bounds:93,134,6,5 +border/gray2/bl +bounds:229,234,3,3 +border/gray2/bottom +bounds:162,189,52,3 +border/gray2/br +bounds:106,136,3,3 +border/gray2/left +bounds:54,41,3,52 +border/gray2/right +bounds:49,41,3,52 +border/gray2/tl +bounds:216,220,3,3 +border/gray2/top +bounds:31,105,52,3 +border/gray2/tr +bounds:216,215,3,3 +border/green/bl +bounds:243,248,3,3 +border/green/bottom +bounds:162,179,52,3 +border/green/br +bounds:221,226,3,3 +border/green/left +bounds:64,46,3,47 +border/green/right +bounds:64,46,3,47 +border/green/tl +bounds:235,240,3,3 +border/green/top +bounds:31,110,52,3 +border/green/tr +bounds:216,210,3,3 +border/highlight/bl +bounds:2,2,6,6 +border/highlight/bottom +bounds:162,209,52,6 +border/highlight/br +bounds:221,231,6,6 +border/highlight/left +bounds:17,34,6,52 +border/highlight/right +bounds:25,34,6,52 +border/highlight/tl +bounds:235,245,6,6 +border/highlight/top +bounds:162,217,52,6 +border/highlight/tr +bounds:85,133,6,6 +border/purple/bl +bounds:46,36,3,3 +border/purple/bottom +bounds:31,115,52,3 +border/purple/br +bounds:93,129,3,3 +border/purple/left +bounds:59,46,3,47 +border/purple/right +bounds:59,46,3,47 +border/purple/tl +bounds:64,41,3,3 +border/purple/top +bounds:162,204,52,3 +border/purple/tr +bounds:33,28,3,3 +border/red/bl +bounds:59,41,3,3 +border/red/bottom +bounds:31,95,52,3 +border/red/br +bounds:221,221,3,3 +border/red/left +bounds:69,46,3,47 +border/red/right +bounds:69,46,3,47 +border/red/tl +bounds:182,174,3,3 +border/red/top +bounds:31,120,52,3 +border/red/tr +bounds:101,136,3,3 +border/shadow/bl +bounds:2,10,12,12 +border/shadow/bottom +bounds:2,239,217,12 +border/shadow/br +bounds:148,158,12,12 +border/shadow/left +bounds:148,172,12,51 +border/shadow/right +bounds:17,88,12,51 +border/shadow/tl +bounds:221,239,12,12 +border/shadow/top +bounds:2,225,217,12 +border/shadow/tr +bounds:130,142,12,12 +border/yellow/bl +bounds:248,248,3,3 +border/yellow/bottom +bounds:31,100,52,3 +border/yellow/br +bounds:41,36,3,3 +border/yellow/left +bounds:74,46,3,47 +border/yellow/right +bounds:74,46,3,47 +border/yellow/tl +bounds:162,158,3,3 +border/yellow/top +bounds:162,194,52,3 +border/yellow/tr +bounds:10,5,3,3 +darkGreyLabelbox +bounds:17,202,129,21 +split:10,10,10,10 +pad:10,10,10,10 +grayLabelbox +bounds:17,179,129,21 +split:10,10,10,10 +pad:10,10,10,10 diff --git a/src/main/resources/net/rptools/maptool/client/maptool.png b/src/main/resources/net/rptools/maptool/client/maptool.png new file mode 100644 index 0000000000000000000000000000000000000000..5d4835f8be401aae3e37ddb20552b33f207f81d1 GIT binary patch literal 22070 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 BajgIV literal 0 HcmV?d00001 From b9594ddcc1d0f68762b1dc1a13d74bb3a2c911ca Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Tue, 13 Apr 2021 23:40:27 +0200 Subject: [PATCH 027/139] add texture atlas and implement drawing of image borders --- maptool.tpproj | 43 ++ .../net/rptools/lib/swing/ImageBorder.java | 3 +- .../maptool/client/ui/zone/GdxRenderer.java | 182 +++--- .../net/rptools/maptool/client/maptool.atlas | 600 +++++++++++++++--- 4 files changed, 632 insertions(+), 196 deletions(-) create mode 100644 maptool.tpproj diff --git a/maptool.tpproj b/maptool.tpproj new file mode 100644 index 0000000000..468a808f2e --- /dev/null +++ b/maptool.tpproj @@ -0,0 +1,43 @@ +name=maptool +filename= +output=src/main/resources/net/rptools/maptool/client + +alias=true +alphaThreshold=0 +debug=false +duplicatePadding=false +edgePadding=true +fast=false +filterMag=Nearest +filterMin=Nearest +ignoreBlankImages=true +maxHeight=2048 +maxWidth=2048 +minHeight=16 +minWidth=16 +paddingX=2 +paddingY=2 +pot=true +mof=false +rotation=false +stripWhitespaceX=false +stripWhitespaceY=false +wrapX=ClampToEdge +wrapY=ClampToEdge +premultiplyAlpha=false +grid=false +square=false +bleed=true +limitMemory=true +useIndexes=true + +scaleFactors=[{suffix:"",factor:1,resampling:bicubic}] +inputFiles=[{path:src/main/resources/net/rptools/maptool/client/image/blueLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/darkGreyLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/grayLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/border,type:Input,dirFilePrefix:border/,recursive:true,flattenPaths:false}] + + +-PROJ- + +version=4.10.0 +fileTypeType=png +fileTypeData={encoding:RGBA8888} +previewBackgroundColor=ffffffff diff --git a/src/main/java/net/rptools/lib/swing/ImageBorder.java b/src/main/java/net/rptools/lib/swing/ImageBorder.java index 228765ef9a..a9f41861ad 100644 --- a/src/main/java/net/rptools/lib/swing/ImageBorder.java +++ b/src/main/java/net/rptools/lib/swing/ImageBorder.java @@ -23,7 +23,7 @@ /** @author trevor */ public class ImageBorder implements Border { - public static final ImageBorder GRAY = new ImageBorder("net/rptools/maptool/client/image/border/gray"); + public static final ImageBorder GRAY = new ImageBorder("net/rptools/maptool/client/image/border/gray2"); public static final ImageBorder RED = new ImageBorder("net/rptools/maptool/client/image/border/red"); public static final ImageBorder BLUE = new ImageBorder("net/rptools/maptool/client/image/border/blue"); @@ -44,6 +44,7 @@ public class ImageBorder implements Border { public ImageBorder(String imagePath) { try { + this.imagePath = imagePath; topRight = ImageUtil.getCompatibleImage(imagePath + "/tr.png"); top = ImageUtil.getCompatibleImage(imagePath + "/top.png"); topLeft = ImageUtil.getCompatibleImage(imagePath + "/tl.png"); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index cdec526b14..a48582d6cc 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -8,6 +8,7 @@ import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.math.*; import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.scenes.scene2d.utils.TiledDrawable; import com.badlogic.gdx.utils.FloatArray; import com.crashinvaders.vfx.VfxManager; import com.crashinvaders.vfx.effects.BloomEffect; @@ -113,12 +114,12 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private Integer fogX; private Integer fogY; private EarClippingTriangulator triangulator; - private Texture greyLabelTexture; - private Texture blueLabelTexture; - private Texture darkGreyLabelTexture; - private NinePatch greyLabel; + private com.badlogic.gdx.assets.AssetManager manager; + private TextureAtlas atlas; + + private NinePatch grayLabel; private NinePatch blueLabel; - private NinePatch darkGreyLabel; + private NinePatch darkGrayLabel; //temorary objects. Stored here to avoid garbage collection; private Vector3 tmpWorldCoord; @@ -133,6 +134,7 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private Vector2 tmpVector2; private Vector2 tmpVector3; private Area tmpArea; + private TiledDrawable tmpTile = new TiledDrawable(); public GdxRenderer() { @@ -147,6 +149,8 @@ public static GdxRenderer getInstance() { @Override public void create() { + manager = new com.badlogic.gdx.assets.AssetManager(); + width = Gdx.graphics.getWidth(); height = Gdx.graphics.getHeight(); @@ -166,21 +170,6 @@ public void create() { fogBuffer.initialize(width, height); triangulator = new EarClippingTriangulator(); - var pix = new Pixmap(Gdx.files.internal("net/rptools/maptool/client/image/grayLabelbox.png")); - greyLabelTexture = new Texture(pix); - pix.dispose(); - - pix = new Pixmap(Gdx.files.internal("net/rptools/maptool/client/image/blueLabelbox.png")); - blueLabelTexture = new Texture(pix); - pix.dispose(); - - pix = new Pixmap(Gdx.files.internal("net/rptools/maptool/client/image/darkGreyLabelbox.png")); - darkGreyLabelTexture = new Texture(pix); - pix.dispose(); - - greyLabel = new NinePatch(greyLabelTexture, 10, 10, 10, 10); - blueLabel = new NinePatch(blueLabelTexture, 10, 10, 10, 10); - darkGreyLabel = new NinePatch(darkGreyLabelTexture, 10, 10, 10, 10); vfxManager = new VfxManager(Pixmap.Format.RGBA8888); vfxEffect = new FxaaEffect(); @@ -205,20 +194,20 @@ public void create() { itemRenderList = new LinkedList<>(); initialized = true; + + loadAssets(); initializeZoneResources(zone); } @Override public void dispose() { + manager.dispose(); batch.dispose(); hudBatch.dispose(); font.dispose(); vfxManager.dispose(); vfxEffect.dispose(); shape.dispose(); - greyLabelTexture.dispose(); - blueLabelTexture.dispose(); - darkGreyLabelTexture.dispose(); disposeZoneResources(); } @@ -250,6 +239,20 @@ private void updateCam() { @Override public void render() { + manager.finishLoading(); + if(atlas == null) + atlas = manager.get(ATLAS, TextureAtlas.class); + + if(blueLabel == null) + blueLabel = atlas.createPatch("blueLabelbox"); + + if(grayLabel == null) + grayLabel = atlas.createPatch("grayLabelbox"); + + if(darkGrayLabel == null) + darkGrayLabel = atlas.createPatch("darkGreyLabelbox"); + + vfxManager.cleanUpBuffers(); vfxManager.beginInputCapture(); doRendering(); @@ -259,13 +262,18 @@ public void render() { copyFramebufferToJfx(); } + private final String ATLAS = "net/rptools/maptool/client/maptool.atlas"; + + private void loadAssets() { + manager.load(ATLAS, TextureAtlas.class); + } + private void doRendering() { Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); Gdx.gl.glEnable(GL20.GL_BLEND); Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); - // Gdx.gl.glEnable(GL11.GL_LINE_SMOOTH); - // Gdx.gl.glHint(GL11.GL_LINE_SMOOTH_HINT, GL20.GL_NICEST); + if (zone == null || !renderZone) return; @@ -286,6 +294,9 @@ private void doRendering() { batch.begin(); + + + renderZone(playerView); batch.end(); @@ -310,7 +321,6 @@ else if (MapTool.getCampaign().isBeingSerialized()) drawString(hudBatch, String.valueOf(Gdx.graphics.getFramesPerSecond()), 10, 10); hudBatch.end(); - collectTimerResults(); } @@ -849,7 +859,7 @@ private void renderLabels(PlayerView view) { label.getX(), -label.getY(), SwingUtilities.CENTER, - greyLabel, + grayLabel, tmpColor); } else { drawString(batch, label.getLabel(), label.getX(), -label.getY(), tmpColor); @@ -1136,7 +1146,7 @@ public void drawBoxedString(SpriteBatch batch, String text, float centerX, float } public void drawBoxedString(SpriteBatch batch, String text, float x, float y, int justification) { - drawBoxedString(batch, text, x, y, justification, greyLabel, Color.BLACK); + drawBoxedString(batch, text, x, y, justification, grayLabel, Color.BLACK); } private void drawBoxedString(SpriteBatch batch, String text, float x, float y, int justification, NinePatch background, Color foreground) { @@ -1168,8 +1178,9 @@ private void drawBoxedString(SpriteBatch batch, String text, float x, float y, i } // Box - if (background != null) + if (background != null) { background.draw(batch, x, y, width, height); + } // Renderer message @@ -1815,7 +1826,30 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure visibleTokenSet = Collections.unmodifiableSet(tempVisTokens);*/ } + private void intersect(Rectangle src, Rectangle dst) { + float x1 = Math.max(src.x, dst.x); + float y1 = Math.max(src.y, dst.y); + float x2 = Math.min(src.x, dst.x); + float y2 = Math.min(src.y, dst.y); + dst.set(x1, y1, x2-x1, y2-y1); + } + private void renderImageBorderAround(ImageBorder border, Rectangle bounds) { + var imagePath = border.getImagePath(); + var index = imagePath.indexOf("border/"); + var bordername = imagePath.substring(index); + + var topRight = atlas.findRegion(bordername + "/tr"); + var top = atlas.findRegion(bordername + "/top"); + var topLeft = atlas.findRegion(bordername + "/tl"); + var left = atlas.findRegion(bordername + "/left"); + var bottomLeft = atlas.findRegion(bordername + "/bl"); + var bottom = atlas.findRegion(bordername + "/bottom"); + var bottomRight = atlas.findRegion(bordername + "/br"); + var right = atlas.findRegion(bordername + "/right"); + + + //x,y is bottom left of the rectangle var leftMargin = border.getLeftMargin(); var rightMargin = border.getRightMargin(); var topMargin = border.getTopMargin(); @@ -1826,84 +1860,24 @@ private void renderImageBorderAround(ImageBorder border, Rectangle bounds) { var width = bounds.width + leftMargin + rightMargin; var height = bounds.height + topMargin + bottomMargin; - /* // Draw Corners - g.drawImage( - topLeft, x + leftMargin - topLeft.getWidth(), y + topMargin - topLeft.getHeight(), null); - g.drawImage(topRight, x + width - rightMargin, y + topMargin - topRight.getHeight(), null); - g.drawImage( - bottomLeft, x + leftMargin - bottomLeft.getWidth(), y + height - bottomMargin, null); - g.drawImage(bottomRight, x + width - rightMargin, y + height - bottomMargin, null); - - // Draw top - - int i; - int max = width - rightMargin; - - // Hopefully the compiler is doing subexpression optimization! ;-) - java.awt.Rectangle topEdge, botEdge, lftEdge, rgtEdge; - topEdge = - new java.awt.Rectangle( - x + leftMargin, - y + topMargin - top.getHeight(), - width - leftMargin - rightMargin, - top.getHeight()); - botEdge = - new java.awt.Rectangle( - x + leftMargin, - y + height - bottomMargin, - width - leftMargin - rightMargin, - top.getHeight()); - lftEdge = - new java.awt.Rectangle( - x + leftMargin - left.getWidth(), - y + topMargin, - left.getWidth(), - height - topMargin - bottomMargin); - rgtEdge = - new java.awt.Rectangle( - x + width - rightMargin, - y + topMargin, - right.getWidth(), - height - topMargin - bottomMargin); - - java.awt.Rectangle.intersect(topEdge, r, topEdge); - java.awt.Rectangle.intersect(botEdge, r, botEdge); - java.awt.Rectangle.intersect(lftEdge, r, lftEdge); - java.awt.Rectangle.intersect(rgtEdge, r, rgtEdge); - - // Top - if (!topEdge.isEmpty()) { - g.setClip(topEdge); - for (i = leftMargin; i < max; i += top.getWidth()) { - g.drawImage(top, x + i, y + topMargin - top.getHeight(), null); - } - } - // Bottom - if (!botEdge.isEmpty()) { - g.setClip(botEdge); - for (i = leftMargin; i < max; i += bottom.getWidth()) { - g.drawImage(bottom, x + i, y + height - bottomMargin, null); - } - } + // Draw Corners + batch.draw(bottomLeft , x + leftMargin - bottomLeft.originalWidth, y + topMargin - bottomLeft.originalHeight); + batch.draw(bottomRight, x + width - rightMargin, y + topMargin - bottomRight.originalHeight); + batch.draw(topLeft, x + leftMargin - topLeft.originalWidth, y + height - bottomMargin); + batch.draw(topRight , x + width - rightMargin, y + height - bottomMargin); - // Left - if (!lftEdge.isEmpty()) { - g.setClip(lftEdge); - max = height - bottomMargin; - for (i = topMargin; i < max; i += left.getHeight()) { - g.drawImage(left, x + leftMargin - left.getWidth(), y + i, null); - } - } + tmpTile.setRegion(top); + tmpTile.draw(batch, x + leftMargin, y + height - bottomMargin, width - leftMargin - rightMargin, top.originalHeight); - // Right - if (!rgtEdge.isEmpty()) { - g.setClip(rgtEdge); - for (i = topMargin; i < max; i += right.getHeight()) { - g.drawImage(right, x + width - rightMargin, y + i, null); - } - } - g.setClip(oldClip);*/ + tmpTile.setRegion(bottom); + tmpTile.draw(batch, x + leftMargin, y + topMargin - bottom.originalHeight, width - leftMargin - rightMargin, bottom.originalHeight); + + tmpTile.setRegion(left); + tmpTile.draw(batch, x + leftMargin - left.originalWidth, y + topMargin, left.originalWidth, height - topMargin - bottomMargin); + + tmpTile.setRegion(right); + tmpTile.draw(batch, x + width - rightMargin, y + topMargin, right.originalWidth, height - topMargin - bottomMargin); } private void renderTokenOverlay(AbstractTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) { diff --git a/src/main/resources/net/rptools/maptool/client/maptool.atlas b/src/main/resources/net/rptools/maptool/client/maptool.atlas index 0aa42f94fc..9db7b1bdf7 100644 --- a/src/main/resources/net/rptools/maptool/client/maptool.atlas +++ b/src/main/resources/net/rptools/maptool/client/maptool.atlas @@ -1,175 +1,593 @@ + maptool.png -size:256,256 -repeat:none +size: 256, 256 +format: RGBA8888 +filter: Nearest, Nearest +repeat: none blueLabelbox -bounds:17,156,129,21 -split:10,10,10,10 -pad:10,10,10,10 + rotate: false + xy: 17, 156 + size: 129, 21 + split: 10, 10, 10, 10 + pad: 10, 10, 10, 10 + orig: 129, 21 + offset: 0, 0 + index: -1 border/blue/bl -bounds:69,41,3,3 + rotate: false + xy: 69, 41 + size: 3, 3 + orig: 3, 3 + offset: 0, 0 + index: -1 border/blue/bottom -bounds:162,184,52,3 + rotate: false + xy: 162, 184 + size: 52, 3 + orig: 52, 3 + offset: 0, 0 + index: -1 border/blue/br -bounds:177,174,3,3 + rotate: false + xy: 177, 174 + size: 3, 3 + orig: 3, 3 + offset: 0, 0 + index: -1 border/blue/right -bounds:79,46,3,47 + rotate: false + xy: 79, 46 + size: 3, 47 + orig: 3, 47 + offset: 0, 0 + index: -1 border/blue/left -bounds:79,46,3,47 + rotate: false + xy: 79, 46 + size: 3, 47 + orig: 3, 47 + offset: 0, 0 + index: -1 border/blue/tl -bounds:85,115,3,3 + rotate: false + xy: 85, 115 + size: 3, 3 + orig: 3, 3 + offset: 0, 0 + index: -1 border/blue/top -bounds:162,199,52,3 + rotate: false + xy: 162, 199 + size: 52, 3 + orig: 52, 3 + offset: 0, 0 + index: -1 border/blue/tr -bounds:85,120,3,3 + rotate: false + xy: 85, 120 + size: 3, 3 + orig: 3, 3 + offset: 0, 0 + index: -1 border/fowtools/bl -bounds:17,26,6,6 + rotate: false + xy: 17, 26 + size: 6, 6 + orig: 6, 6 + offset: 0, 0 + index: -1 border/fowtools/bottom -bounds:31,125,52,6 + rotate: false + xy: 31, 125 + size: 52, 6 + orig: 52, 6 + offset: 0, 0 + index: -1 border/fowtools/br -bounds:33,33,6,6 + rotate: false + xy: 33, 33 + size: 6, 6 + orig: 6, 6 + offset: 0, 0 + index: -1 border/fowtools/left -bounds:33,41,6,52 + rotate: false + xy: 33, 41 + size: 6, 52 + orig: 6, 52 + offset: 0, 0 + index: -1 border/fowtools/right -bounds:41,41,6,52 + rotate: false + xy: 41, 41 + size: 6, 52 + orig: 6, 52 + offset: 0, 0 + index: -1 border/fowtools/tl -bounds:85,125,6,6 + rotate: false + xy: 85, 125 + size: 6, 6 + orig: 6, 6 + offset: 0, 0 + index: -1 border/fowtools/top -bounds:31,133,52,6 + rotate: false + xy: 31, 133 + size: 52, 6 + orig: 52, 6 + offset: 0, 0 + index: -1 border/fowtools/tr -bounds:25,26,6,6 + rotate: false + xy: 25, 26 + size: 6, 6 + orig: 6, 6 + offset: 0, 0 + index: -1 border/gray/bl -bounds:162,163,5,6 + rotate: false + xy: 162, 163 + size: 5, 6 + orig: 5, 6 + offset: 0, 0 + index: -1 border/gray/bottom -bounds:17,148,111,6 + rotate: false + xy: 17, 148 + size: 111, 6 + orig: 111, 6 + offset: 0, 0 + index: -1 border/gray/br -bounds:162,171,6,6 + rotate: false + xy: 162, 171 + size: 6, 6 + orig: 6, 6 + offset: 0, 0 + index: -1 border/gray/left -bounds:10,24,5,199 + rotate: false + xy: 10, 24 + size: 5, 199 + orig: 5, 199 + offset: 0, 0 + index: -1 border/gray/right -bounds:2,24,6,199 + rotate: false + xy: 2, 24 + size: 6, 199 + orig: 6, 199 + offset: 0, 0 + index: -1 border/gray/tl -bounds:170,172,5,5 + rotate: false + xy: 170, 172 + size: 5, 5 + orig: 5, 5 + offset: 0, 0 + index: -1 border/gray/top -bounds:17,141,111,5 + rotate: false + xy: 17, 141 + size: 111, 5 + orig: 111, 5 + offset: 0, 0 + index: -1 border/gray/tr -bounds:93,134,6,5 + rotate: false + xy: 93, 134 + size: 6, 5 + orig: 6, 5 + offset: 0, 0 + index: -1 border/gray2/bl -bounds:229,234,3,3 + rotate: false + xy: 229, 234 + size: 3, 3 + orig: 3, 3 + offset: 0, 0 + index: -1 border/gray2/bottom -bounds:162,189,52,3 + rotate: false + xy: 162, 189 + size: 52, 3 + orig: 52, 3 + offset: 0, 0 + index: -1 border/gray2/br -bounds:106,136,3,3 + rotate: false + xy: 106, 136 + size: 3, 3 + orig: 3, 3 + offset: 0, 0 + index: -1 border/gray2/left -bounds:54,41,3,52 + rotate: false + xy: 54, 41 + size: 3, 52 + orig: 3, 52 + offset: 0, 0 + index: -1 border/gray2/right -bounds:49,41,3,52 + rotate: false + xy: 49, 41 + size: 3, 52 + orig: 3, 52 + offset: 0, 0 + index: -1 border/gray2/tl -bounds:216,220,3,3 + rotate: false + xy: 216, 220 + size: 3, 3 + orig: 3, 3 + offset: 0, 0 + index: -1 border/gray2/top -bounds:31,105,52,3 + rotate: false + xy: 31, 105 + size: 52, 3 + orig: 52, 3 + offset: 0, 0 + index: -1 border/gray2/tr -bounds:216,215,3,3 + rotate: false + xy: 216, 215 + size: 3, 3 + orig: 3, 3 + offset: 0, 0 + index: -1 border/green/bl -bounds:243,248,3,3 + rotate: false + xy: 243, 248 + size: 3, 3 + orig: 3, 3 + offset: 0, 0 + index: -1 border/green/bottom -bounds:162,179,52,3 + rotate: false + xy: 162, 179 + size: 52, 3 + orig: 52, 3 + offset: 0, 0 + index: -1 border/green/br -bounds:221,226,3,3 + rotate: false + xy: 221, 226 + size: 3, 3 + orig: 3, 3 + offset: 0, 0 + index: -1 border/green/left -bounds:64,46,3,47 + rotate: false + xy: 64, 46 + size: 3, 47 + orig: 3, 47 + offset: 0, 0 + index: -1 border/green/right -bounds:64,46,3,47 + rotate: false + xy: 64, 46 + size: 3, 47 + orig: 3, 47 + offset: 0, 0 + index: -1 border/green/tl -bounds:235,240,3,3 + rotate: false + xy: 235, 240 + size: 3, 3 + orig: 3, 3 + offset: 0, 0 + index: -1 border/green/top -bounds:31,110,52,3 + rotate: false + xy: 31, 110 + size: 52, 3 + orig: 52, 3 + offset: 0, 0 + index: -1 border/green/tr -bounds:216,210,3,3 + rotate: false + xy: 216, 210 + size: 3, 3 + orig: 3, 3 + offset: 0, 0 + index: -1 border/highlight/bl -bounds:2,2,6,6 + rotate: false + xy: 2, 2 + size: 6, 6 + orig: 6, 6 + offset: 0, 0 + index: -1 border/highlight/bottom -bounds:162,209,52,6 + rotate: false + xy: 162, 209 + size: 52, 6 + orig: 52, 6 + offset: 0, 0 + index: -1 border/highlight/br -bounds:221,231,6,6 + rotate: false + xy: 221, 231 + size: 6, 6 + orig: 6, 6 + offset: 0, 0 + index: -1 border/highlight/left -bounds:17,34,6,52 + rotate: false + xy: 17, 34 + size: 6, 52 + orig: 6, 52 + offset: 0, 0 + index: -1 border/highlight/right -bounds:25,34,6,52 + rotate: false + xy: 25, 34 + size: 6, 52 + orig: 6, 52 + offset: 0, 0 + index: -1 border/highlight/tl -bounds:235,245,6,6 + rotate: false + xy: 235, 245 + size: 6, 6 + orig: 6, 6 + offset: 0, 0 + index: -1 border/highlight/top -bounds:162,217,52,6 + rotate: false + xy: 162, 217 + size: 52, 6 + orig: 52, 6 + offset: 0, 0 + index: -1 border/highlight/tr -bounds:85,133,6,6 + rotate: false + xy: 85, 133 + size: 6, 6 + orig: 6, 6 + offset: 0, 0 + index: -1 border/purple/bl -bounds:46,36,3,3 + rotate: false + xy: 46, 36 + size: 3, 3 + orig: 3, 3 + offset: 0, 0 + index: -1 border/purple/bottom -bounds:31,115,52,3 + rotate: false + xy: 31, 115 + size: 52, 3 + orig: 52, 3 + offset: 0, 0 + index: -1 border/purple/br -bounds:93,129,3,3 + rotate: false + xy: 93, 129 + size: 3, 3 + orig: 3, 3 + offset: 0, 0 + index: -1 border/purple/left -bounds:59,46,3,47 + rotate: false + xy: 59, 46 + size: 3, 47 + orig: 3, 47 + offset: 0, 0 + index: -1 border/purple/right -bounds:59,46,3,47 + rotate: false + xy: 59, 46 + size: 3, 47 + orig: 3, 47 + offset: 0, 0 + index: -1 border/purple/tl -bounds:64,41,3,3 + rotate: false + xy: 64, 41 + size: 3, 3 + orig: 3, 3 + offset: 0, 0 + index: -1 border/purple/top -bounds:162,204,52,3 + rotate: false + xy: 162, 204 + size: 52, 3 + orig: 52, 3 + offset: 0, 0 + index: -1 border/purple/tr -bounds:33,28,3,3 + rotate: false + xy: 33, 28 + size: 3, 3 + orig: 3, 3 + offset: 0, 0 + index: -1 border/red/bl -bounds:59,41,3,3 + rotate: false + xy: 59, 41 + size: 3, 3 + orig: 3, 3 + offset: 0, 0 + index: -1 border/red/bottom -bounds:31,95,52,3 + rotate: false + xy: 31, 95 + size: 52, 3 + orig: 52, 3 + offset: 0, 0 + index: -1 border/red/br -bounds:221,221,3,3 + rotate: false + xy: 221, 221 + size: 3, 3 + orig: 3, 3 + offset: 0, 0 + index: -1 border/red/left -bounds:69,46,3,47 + rotate: false + xy: 69, 46 + size: 3, 47 + orig: 3, 47 + offset: 0, 0 + index: -1 border/red/right -bounds:69,46,3,47 + rotate: false + xy: 69, 46 + size: 3, 47 + orig: 3, 47 + offset: 0, 0 + index: -1 border/red/tl -bounds:182,174,3,3 + rotate: false + xy: 182, 174 + size: 3, 3 + orig: 3, 3 + offset: 0, 0 + index: -1 border/red/top -bounds:31,120,52,3 + rotate: false + xy: 31, 120 + size: 52, 3 + orig: 52, 3 + offset: 0, 0 + index: -1 border/red/tr -bounds:101,136,3,3 + rotate: false + xy: 101, 136 + size: 3, 3 + orig: 3, 3 + offset: 0, 0 + index: -1 border/shadow/bl -bounds:2,10,12,12 + rotate: false + xy: 2, 10 + size: 12, 12 + orig: 12, 12 + offset: 0, 0 + index: -1 border/shadow/bottom -bounds:2,239,217,12 + rotate: false + xy: 2, 239 + size: 217, 12 + orig: 217, 12 + offset: 0, 0 + index: -1 border/shadow/br -bounds:148,158,12,12 + rotate: false + xy: 148, 158 + size: 12, 12 + orig: 12, 12 + offset: 0, 0 + index: -1 border/shadow/left -bounds:148,172,12,51 + rotate: false + xy: 148, 172 + size: 12, 51 + orig: 12, 51 + offset: 0, 0 + index: -1 border/shadow/right -bounds:17,88,12,51 + rotate: false + xy: 17, 88 + size: 12, 51 + orig: 12, 51 + offset: 0, 0 + index: -1 border/shadow/tl -bounds:221,239,12,12 + rotate: false + xy: 221, 239 + size: 12, 12 + orig: 12, 12 + offset: 0, 0 + index: -1 border/shadow/top -bounds:2,225,217,12 + rotate: false + xy: 2, 225 + size: 217, 12 + orig: 217, 12 + offset: 0, 0 + index: -1 border/shadow/tr -bounds:130,142,12,12 + rotate: false + xy: 130, 142 + size: 12, 12 + orig: 12, 12 + offset: 0, 0 + index: -1 border/yellow/bl -bounds:248,248,3,3 + rotate: false + xy: 248, 248 + size: 3, 3 + orig: 3, 3 + offset: 0, 0 + index: -1 border/yellow/bottom -bounds:31,100,52,3 + rotate: false + xy: 31, 100 + size: 52, 3 + orig: 52, 3 + offset: 0, 0 + index: -1 border/yellow/br -bounds:41,36,3,3 + rotate: false + xy: 41, 36 + size: 3, 3 + orig: 3, 3 + offset: 0, 0 + index: -1 border/yellow/left -bounds:74,46,3,47 + rotate: false + xy: 74, 46 + size: 3, 47 + orig: 3, 47 + offset: 0, 0 + index: -1 border/yellow/right -bounds:74,46,3,47 + rotate: false + xy: 74, 46 + size: 3, 47 + orig: 3, 47 + offset: 0, 0 + index: -1 border/yellow/tl -bounds:162,158,3,3 + rotate: false + xy: 162, 158 + size: 3, 3 + orig: 3, 3 + offset: 0, 0 + index: -1 border/yellow/top -bounds:162,194,52,3 + rotate: false + xy: 162, 194 + size: 52, 3 + orig: 52, 3 + offset: 0, 0 + index: -1 border/yellow/tr -bounds:10,5,3,3 + rotate: false + xy: 10, 5 + size: 3, 3 + orig: 3, 3 + offset: 0, 0 + index: -1 darkGreyLabelbox -bounds:17,202,129,21 -split:10,10,10,10 -pad:10,10,10,10 + rotate: false + xy: 17, 202 + size: 129, 21 + split: 10, 10, 10, 10 + pad: 10, 10, 10, 10 + orig: 129, 21 + offset: 0, 0 + index: -1 grayLabelbox -bounds:17,179,129,21 -split:10,10,10,10 -pad:10,10,10,10 + rotate: false + xy: 17, 179 + size: 129, 21 + split: 10, 10, 10, 10 + pad: 10, 10, 10, 10 + orig: 129, 21 + offset: 0, 0 + index: -1 From 4262ee932cef937654af75c645af1db5edc17755 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Wed, 14 Apr 2021 22:15:25 +0200 Subject: [PATCH 028/139] token labels work --- .../maptool/client/ui/zone/GdxRenderer.java | 353 ++++++++---------- 1 file changed, 157 insertions(+), 196 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index a48582d6cc..8a9ab43d96 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -2,19 +2,15 @@ import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.*; import com.badlogic.gdx.graphics.g2d.*; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.math.*; -import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.scenes.scene2d.utils.TiledDrawable; import com.badlogic.gdx.utils.FloatArray; import com.crashinvaders.vfx.VfxManager; -import com.crashinvaders.vfx.effects.BloomEffect; import com.crashinvaders.vfx.effects.ChainVfxEffect; import com.crashinvaders.vfx.effects.FxaaEffect; -import com.crashinvaders.vfx.effects.NfaaEffect; import com.crashinvaders.vfx.framebuffer.VfxFrameBuffer; import net.rptools.lib.AppEvent; import net.rptools.lib.AppEventListener; @@ -33,25 +29,20 @@ import net.rptools.maptool.client.ui.Tool; import net.rptools.maptool.client.ui.token.AbstractTokenOverlay; import net.rptools.maptool.client.ui.token.BarTokenOverlay; -import net.rptools.maptool.model.*; -import net.rptools.maptool.model.Label; import net.rptools.maptool.model.Path; +import net.rptools.maptool.model.*; import net.rptools.maptool.model.drawing.DrawableColorPaint; import net.rptools.maptool.model.drawing.DrawablePaint; import net.rptools.maptool.model.drawing.DrawableTexturePaint; import net.rptools.maptool.model.drawing.DrawnElement; import net.rptools.maptool.util.GraphicsUtil; import net.rptools.maptool.util.ImageManager; +import net.rptools.maptool.util.StringUtil; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.lwjgl.opengl.GL11; -import org.lwjgl.opengl.GL12; import javax.swing.*; -import java.awt.*; import java.awt.geom.*; -import java.awt.image.BufferedImage; -import java.util.List; import java.util.*; import static java.util.zip.Deflater.DEFAULT_COMPRESSION; @@ -75,15 +66,13 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private final Map sprites = new HashMap<>(); private final Map isoSprites = new HashMap<>(); //renderFog - + private final String ATLAS = "net/rptools/maptool/client/maptool.atlas"; private boolean flushFog = true; //from renderToken: private Area visibleScreenArea; - private Area exposedFogArea; private PlayerView lastView; private List itemRenderList; - // zone specific resources private Zone zone; private ZoneRenderer zoneRenderer; @@ -94,7 +83,6 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private int offsetY = 0; private float zoom = 1.0f; private boolean renderZone = false; - // general resources private OrthographicCamera cam; private OrthographicCamera hudCam; @@ -116,11 +104,9 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private EarClippingTriangulator triangulator; private com.badlogic.gdx.assets.AssetManager manager; private TextureAtlas atlas; - private NinePatch grayLabel; private NinePatch blueLabel; private NinePatch darkGrayLabel; - //temorary objects. Stored here to avoid garbage collection; private Vector3 tmpWorldCoord; private Vector3 tmpScreenCoord; @@ -133,10 +119,10 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private Vector2 tmpVector1; private Vector2 tmpVector2; private Vector2 tmpVector3; + private Matrix4 tmpMatrix = new Matrix4(); private Area tmpArea; private TiledDrawable tmpTile = new TiledDrawable(); - public GdxRenderer() { MapTool.getEventDispatcher().addListener(this, MapTool.ZoneEvent.Activated); } @@ -240,16 +226,16 @@ private void updateCam() { @Override public void render() { manager.finishLoading(); - if(atlas == null) + if (atlas == null) atlas = manager.get(ATLAS, TextureAtlas.class); - if(blueLabel == null) + if (blueLabel == null) blueLabel = atlas.createPatch("blueLabelbox"); - if(grayLabel == null) + if (grayLabel == null) grayLabel = atlas.createPatch("grayLabelbox"); - if(darkGrayLabel == null) + if (darkGrayLabel == null) darkGrayLabel = atlas.createPatch("darkGreyLabelbox"); @@ -262,8 +248,6 @@ public void render() { copyFramebufferToJfx(); } - private final String ATLAS = "net/rptools/maptool/client/maptool.atlas"; - private void loadAssets() { manager.load(ATLAS, TextureAtlas.class); } @@ -292,13 +276,8 @@ private void doRendering() { hudBatch.setProjectionMatrix(hudCam.combined); shape.setProjectionMatrix(cam.combined); - batch.begin(); - - - - renderZone(playerView); - batch.end(); + hudBatch.begin(); hudBatch.setProjectionMatrix(hudCam.combined); @@ -374,6 +353,7 @@ private void renderZone(PlayerView view) { invalidateCurrentViewCache(); } lastView = view; + itemRenderList.clear(); // Calculations timer.start("calcs-1"); @@ -384,6 +364,7 @@ private void renderZone(PlayerView view) { exposedFogArea = new Area(zone.getExposedArea()); timer.stop("calcs-2"); + batch.begin(); renderBoard(); if (Zone.Layer.BACKGROUND.isEnabled()) { @@ -411,7 +392,9 @@ private void renderZone(PlayerView view) { } batch.end(); timer.start("grid"); + shape.begin(); renderGrid(view); + shape.end(); timer.stop("grid"); batch.begin(); @@ -545,11 +528,16 @@ private void renderZone(PlayerView view) { // So if one moving token is on top of another moving token, at least the textual identifiers // will be // visible. + batch.end(); + hudBatch.begin(); + hudBatch.setProjectionMatrix(hudCam.combined); timer.start("token name/labels"); renderRenderables(); timer.stop("token name/labels"); + hudBatch.end(); } + shape.begin(); // if (zone.visionType ...) if (view.isGMView()) { timer.start("visionOverlayGM"); @@ -560,6 +548,7 @@ private void renderZone(PlayerView view) { renderPlayerVisionOverlay(view); timer.stop("visionOverlayPlayer"); } + shape.end(); } private void updateVisibleArea() { @@ -630,16 +619,10 @@ private void renderVisionOverlay(PlayerView view) { * strict token ownership is off... then the vision arc should be displayed. */ if (showVisionAndHalo) { - batch.end(); - - shape.begin(); shape.setColor(Color.WHITE); shape.set(ShapeRenderer.ShapeType.Line); paintArea(combined); renderHaloArea(combined); - shape.end(); - - batch.begin(); } } @@ -677,7 +660,7 @@ private void renderFog(PlayerView view) { flushFog = true; } boolean cacheNotValid = - ( fogBuffer.getTexture().getWidth() != width + (fogBuffer.getTexture().getWidth() != width || fogBuffer.getTexture().getHeight() != height); timer.start("renderFog"); // if (flushFog || cacheNotValid) @@ -685,7 +668,7 @@ private void renderFog(PlayerView view) { fogBuffer.begin(); - Gdx.gl.glClearColor(0,0,0,0); + Gdx.gl.glClearColor(0, 0, 0, 0); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); batch.setBlendFunction(GL20.GL_ONE, GL20.GL_NONE); batch.setProjectionMatrix(cam.combined); @@ -855,12 +838,12 @@ private void renderLabels(PlayerView view) { Color.argb8888ToColor(tmpColor, label.getForegroundColor().getRGB()); if (label.isShowBackground()) { drawBoxedString(batch, - label.getLabel(), - label.getX(), - -label.getY(), - SwingUtilities.CENTER, - grayLabel, - tmpColor); + label.getLabel(), + label.getX(), + -label.getY(), + SwingUtilities.CENTER, + grayLabel, + tmpColor); } else { drawString(batch, label.getLabel(), label.getX(), -label.getY(), tmpColor); } @@ -896,11 +879,11 @@ private void renderAuras(PlayerView view) { } private void renderLights(PlayerView view) { - if(zone.getVisionType() != Zone.VisionType.NIGHT) + if (zone.getVisionType() != Zone.VisionType.NIGHT) return; fogBuffer.begin(); - Gdx.gl.glClearColor(0,0,0,0); + Gdx.gl.glClearColor(0, 0, 0, 0); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); shape.setProjectionMatrix(cam.combined); @@ -924,8 +907,8 @@ private void renderLights(PlayerView view) { var colorPaint = (DrawableColorPaint) paint; Color.argb8888ToColor(tmpColor, colorPaint.getColor()); - } else if(paint instanceof java.awt.Color) { - Color.argb8888ToColor(tmpColor, ((java.awt.Color)paint).getRGB()); + } else if (paint instanceof java.awt.Color) { + Color.argb8888ToColor(tmpColor, ((java.awt.Color) paint).getRGB()); } else { System.out.println("unexpected color type"); continue; @@ -978,8 +961,7 @@ private void renderGrid(PlayerView view) { } private void renderGrid(HexGrid grid) { - shape.begin(ShapeRenderer.ShapeType.Line); - shape.setProjectionMatrix(hudCam.combined); + shape.set(ShapeRenderer.ShapeType.Line); shape.identity(); Color.argb8888ToColor(tmpColor, zone.getGridColor()); @@ -1021,16 +1003,12 @@ private void renderGrid(HexGrid grid) { shape.translate(-transX, -transY, 0); } } - - shape.end(); } private void renderGrid(IsometricGrid grid) { var scale = (float) zoneRenderer.getScale(); int gridSize = (int) (grid.getSize() * scale); - shape.begin(ShapeRenderer.ShapeType.Filled); - shape.setProjectionMatrix(hudCam.combined); shape.identity(); Color.argb8888ToColor(tmpColor, zone.getGridColor()); @@ -1066,7 +1044,6 @@ private void renderGrid(IsometricGrid grid) { drawHatch(grid, (int) (col + offX), h - (int) (row + offY)); } } - shape.end(); } private void drawHatch(IsometricGrid grid, float x, float y) { @@ -1083,8 +1060,7 @@ private void renderGrid(SquareGrid grid) { var scale = (float) zoneRenderer.getScale(); int gridSize = (int) (grid.getSize() * scale); - shape.begin(ShapeRenderer.ShapeType.Filled); - shape.setProjectionMatrix(hudCam.combined); + shape.set(ShapeRenderer.ShapeType.Filled); shape.identity(); Color.argb8888ToColor(tmpColor, zone.getGridColor()); @@ -1109,8 +1085,6 @@ private void renderGrid(SquareGrid grid) { for (float col = startCol; col < x + w + gridSize; col += gridSize) shape.rectLine((int) (col + offX), y, (int) (col + offX), y + h, lineWidth); - - shape.end(); } private FloatArray pathToVertices(GeneralPath path) { @@ -1227,7 +1201,7 @@ private void fillViewportWith(Sprite fill) { private void renderTokens(List tokenList, PlayerView view, boolean figuresOnly) { boolean isGMView = view.isGMView(); // speed things up - if(visibleScreenArea == null) + if (visibleScreenArea == null) return; Set tempVisTokens = new HashSet(); @@ -1338,7 +1312,8 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure var pix = new Pixmap(bytes, 0, bytes.length); image = new Sprite(new Texture(pix)); pix.dispose(); - } catch (Exception e) {} + } catch (Exception e) { + } isoSprites.put(assetId, image); } else { image = isoSprites.get(assetId); @@ -1353,7 +1328,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure // Position // For Isometric Grid we alter the height offset float iso_ho = 0; - java.awt.Dimension imgSize = new java.awt.Dimension((int)image.getWidth(), (int)image.getHeight()); + java.awt.Dimension imgSize = new java.awt.Dimension((int) image.getWidth(), (int) image.getHeight()); if (token.getShape() == Token.TokenShape.FIGURE) { float th = token.getHeight() * (float) footprintBounds.width / token.getWidth(); iso_ho = footprintBounds.height - th; @@ -1383,21 +1358,21 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure } float tx = x + offsetx; - float ty = y + offsety + iso_ho; + float ty = y + offsety + iso_ho; // Snap var scaleX = 1f; var scaleY = 1f; if (token.isSnapToScale()) { - scaleX = imgSize.width/image.getWidth(); - scaleY = imgSize.height/image.getHeight(); + scaleX = imgSize.width / image.getWidth(); + scaleY = imgSize.height / image.getHeight(); } else { if (token.getShape() == Token.TokenShape.FIGURE) { - scaleX = footprintBounds.width/image.getHeight(); - scaleY = footprintBounds.width/image.getWidth(); + scaleX = footprintBounds.width / image.getHeight(); + scaleY = footprintBounds.width / image.getWidth(); } else { - scaleX = footprintBounds.width/image.getWidth(); - scaleY = footprintBounds.height/image.getHeight(); + scaleX = footprintBounds.width / image.getWidth(); + scaleY = footprintBounds.height / image.getHeight(); } } image.setSize(scaleX * image.getWidth(), scaleY * image.getHeight()); @@ -1408,7 +1383,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure // Rotated if (token.hasFacing() && token.getShape() == Token.TokenShape.TOP_DOWN) { - var originX = image.getWidth() / 2 - token.getAnchorX(); + var originX = image.getWidth() / 2 - token.getAnchorX(); var originY = image.getHeight() / 2 + token.getAnchorY(); image.setOrigin(originX, originY); image.setRotation(token.getFacing() + 90); @@ -1444,7 +1419,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure // Finally render the token image timer.start("tokenlist-7"); - image.setColor(1,1,1,opacity); + image.setColor(1, 1, 1, opacity); if (!isGMView && zoneRenderer.getZoneView().isUsingVision() && (token.getShape() == Token.TokenShape.FIGURE)) { if (zone.getGrid().checkCenterRegion(tokenCellArea.getBounds(), visibleScreenArea)) { // if we can see the centre, draw the whole token @@ -1472,7 +1447,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure } else { // fallthrough normal token rendered against visible area - if(zoneRenderer.isTokenInNeedOfClipping(token, tokenCellArea, isGMView)) { + if (zoneRenderer.isTokenInNeedOfClipping(token, tokenCellArea, isGMView)) { paintClipped(image, tokenCellArea, cellArea); } else image.draw(batch); @@ -1503,8 +1478,8 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure arrow = getCircleFacingArrow(token.getFacing(), footprintBounds.width / 2); } - float fx = x + (float) origBounds.getWidth()/zoom / 2; - float fy = y + (float) origBounds.getHeight()/zoom / 2; + float fx = x + (float) origBounds.getWidth() / zoom / 2; + float fy = y + (float) origBounds.getHeight() / zoom / 2; shape.translate(fx, -fy, 0); @@ -1534,8 +1509,8 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure } arrowArea = new Area(arrow); - float cx = x + (float)origBounds.getWidth() / 2; - float cy = y + (float)origBounds.getHeight() / 2; + float cx = x + (float) origBounds.getWidth() / 2; + float cy = y + (float) origBounds.getHeight() / 2; shape.translate(cx, -cy, 0); shape.setColor(Color.YELLOW); @@ -1549,8 +1524,8 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure case SQUARE: if (zone.getGrid().isIsometric()) { arrow = getFigureFacingArrow(token.getFacing(), footprintBounds.width / 2); - cx = x + (float)origBounds.getWidth() / 2; - cy = y + (float)origBounds.getHeight() / 2; + cx = x + (float) origBounds.getWidth() / 2; + cy = y + (float) origBounds.getHeight() / 2; } else { int facing = token.getFacing(); while (facing < 0) { @@ -1561,8 +1536,8 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure facing %= 360; arrow = getSquareFacingArrow(facing, footprintBounds.width / 2); - cx = x + (float)origBounds.getWidth() / 2; - cy = y + (float)origBounds.getHeight() / 2; + cx = x + (float) origBounds.getWidth() / 2; + cy = y + (float) origBounds.getHeight() / 2; // Find the edge of the image // TODO: Man, this is horrible, there's gotta be a better way to do this @@ -1647,7 +1622,11 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure // Selection and labels - + var tokenRectangle = token.getBounds(zone); + var gdxTokenRectangle = new Rectangle(tokenRectangle.x, + -tokenRectangle.y - tokenRectangle.height, + tokenRectangle.width, + tokenRectangle.height); boolean isSelected = zoneRenderer.getSelectedTokenSet().contains(token.getId()); if (isSelected) { @@ -1672,119 +1651,37 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure } if (token.hasFacing() && (token.getShape() == Token.TokenShape.TOP_DOWN || token.isStamp())) { - - //shape.rotate(image.getOriginX(), image.getOriginY(), 0, token.getFacing() + 90); - - renderImageBorderAround(selectedBorder, image.getBoundingRectangle()); + /* TODO: figure out how to rotate the selected border + tmpMatrix.idt(); + tmpMatrix.rotate(image.getX() + image.getOriginX(), + image.getY() + image.getOriginY(), 0, token.getFacing() + 90); + batch.setTransformMatrix(tmpMatrix);*/ + renderImageBorderAround(selectedBorder, gdxTokenRectangle); + // tmpMatrix.idt(); + // batch.setTransformMatrix(tmpMatrix); - //shape.rotate(image.getOriginX(), image.getOriginY(), 0, - token.getFacing() - 90); } else { - renderImageBorderAround(selectedBorder, image.getBoundingRectangle()); + renderImageBorderAround(selectedBorder, gdxTokenRectangle); } // Remove labels from the cache if the corresponding tokens are deselected } -/* + // Token names and labels - boolean showCurrentTokenLabel = AppState.isShowTokenNames() || token == tokenUnderMouse; + boolean showCurrentTokenLabel = AppState.isShowTokenNames() || token == zoneRenderer.getTokenUnderMouse(); // if policy does not auto-reveal FoW, check if fog covers the token (slow) if (showCurrentTokenLabel && !isGMView - && (!zoneView.isUsingVision() || !MapTool.getServerPolicy().isAutoRevealOnMovement()) + && (!zoneRenderer.getZoneView().isUsingVision() || !MapTool.getServerPolicy().isAutoRevealOnMovement()) && !zone.isTokenVisible(token)) { showCurrentTokenLabel = false; } if (showCurrentTokenLabel) { - GUID tokId = token.getId(); - int offset = 3; // Keep it from tramping on the token border. - ImageLabel background; - java.awt.Color foreground; - - if (token.isVisible()) { - if (token.getType() == Token.Type.NPC) { - background = GraphicsUtil.BLUE_LABEL; - foreground = java.awt.Color.WHITE; - } else { - background = GraphicsUtil.GREY_LABEL; - foreground = java.awt.Color.BLACK; - } - } else { - background = GraphicsUtil.DARK_GREY_LABEL; - foreground = java.awt.Color.WHITE; - } - String name = token.getName(); - if (isGMView && token.getGMName() != null && !StringUtil.isEmpty(token.getGMName())) { - name += " (" + token.getGMName() + ")"; - } - if (!view.equals(lastView) || !labelRenderingCache.containsKey(tokId)) { - // if ((lastView != null && !lastView.equals(view)) || - // !labelRenderingCache.containsKey(tokId)) { - boolean hasLabel = false; - - // Calculate image dimensions - FontMetrics fm = g.getFontMetrics(); - Font f = g.getFont(); - int strWidth = SwingUtilities.computeStringWidth(fm, name); - - int width = strWidth + GraphicsUtil.BOX_PADDINGX * 2; - int height = fm.getHeight() + GraphicsUtil.BOX_PADDINGY * 2; - int labelHeight = height; - - // If token has a label (in addition to name). - if (token.getLabel() != null && token.getLabel().trim().length() > 0) { - hasLabel = true; - height = height * 2; // Double the image height for two boxed strings. - int labelWidth = - SwingUtilities.computeStringWidth(fm, token.getLabel()) - + GraphicsUtil.BOX_PADDINGX * 2; - width = Math.max(width, labelWidth); - } - - // Set up the image - BufferedImage labelRender = new BufferedImage(width, height, Transparency.TRANSLUCENT); - Graphics2D gLabelRender = labelRender.createGraphics(); - gLabelRender.setFont(f); // Match font used in the main graphics context. - gLabelRender.setRenderingHints(g.getRenderingHints()); // Match rendering style. - - // Draw name and label to image - if (hasLabel) { - GraphicsUtil.drawBoxedString( - gLabelRender, - token.getLabel(), - width / 2, - height - (labelHeight / 2), - SwingUtilities.CENTER, - background, - foreground); - } - GraphicsUtil.drawBoxedString( - gLabelRender, - name, - width / 2, - labelHeight / 2, - SwingUtilities.CENTER, - background, - foreground); - - // Add image to cache - labelRenderingCache.put(tokId, labelRender); - } - // Create LabelRenderer using cached label. - Rectangle r = bounds.getBounds(); - delayRendering( - new ZoneRenderer.LabelRenderer( - name, - r.x + r.width / 2, - r.y + r.height + offset, - SwingUtilities.CENTER, - background, - foreground, - tokId)); - }*/ - timer.stop("tokenlist-12"); - + itemRenderList.add(new LabelRenderer(token, isGMView)); + } + timer.stop("tokenlist-12"); } @@ -1826,14 +1723,76 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure visibleTokenSet = Collections.unmodifiableSet(tempVisTokens);*/ } - private void intersect(Rectangle src, Rectangle dst) { - float x1 = Math.max(src.x, dst.x); - float y1 = Math.max(src.y, dst.y); - float x2 = Math.min(src.x, dst.x); - float y2 = Math.min(src.y, dst.y); - dst.set(x1, y1, x2-x1, y2-y1); + private class LabelRenderer implements ItemRenderer + { + private final boolean isGMView; + private Token token; + + public LabelRenderer(Token token, boolean isGMView) { + this.token = token; + this.isGMView = isGMView; + } + + @Override + public void render() { + int offset = 3; // Keep it from tramping on the token border. + NinePatch background; + Color foreground; + + if (token.isVisible()) { + if (token.getType() == Token.Type.NPC) { + background = blueLabel; + foreground = Color.WHITE; + } else { + background = grayLabel; + foreground = Color.BLACK; + } + } else { + background = darkGrayLabel; + foreground = Color.WHITE; + } + String name = token.getName(); + if (isGMView && token.getGMName() != null && !StringUtil.isEmpty(token.getGMName())) { + name += " (" + token.getGMName() + ")"; + } + + + // Calculate image dimensions + + float labelHeight = font.getLineHeight() + GraphicsUtil.BOX_PADDINGY * 2; + + + java.awt.Rectangle r = token.getBounds(zone); + tmpWorldCoord.x = r.x + r.width / 2; + tmpWorldCoord.y = (r.y + r.height + offset + labelHeight*zoom / 2) * -1; + tmpWorldCoord.z = 0; + tmpScreenCoord = cam.project(tmpWorldCoord); + + drawBoxedString( + hudBatch, + name, + tmpScreenCoord.x, + tmpScreenCoord.y, + SwingUtilities.CENTER, + background, + foreground); + + var label = token.getLabel(); + + // Draw name and label to image + if (label != null && label.trim().length() > 0) { + drawBoxedString(hudBatch, + label, + tmpScreenCoord.x, + tmpScreenCoord.y - labelHeight, + SwingUtilities.CENTER, + background, + foreground); + } + } } + private void renderImageBorderAround(ImageBorder border, Rectangle bounds) { var imagePath = border.getImagePath(); var index = imagePath.indexOf("border/"); @@ -1862,10 +1821,12 @@ private void renderImageBorderAround(ImageBorder border, Rectangle bounds) { // Draw Corners - batch.draw(bottomLeft , x + leftMargin - bottomLeft.originalWidth, y + topMargin - bottomLeft.originalHeight); + + + batch.draw(bottomLeft, x + leftMargin - bottomLeft.originalWidth, y + topMargin - bottomLeft.originalHeight); batch.draw(bottomRight, x + width - rightMargin, y + topMargin - bottomRight.originalHeight); batch.draw(topLeft, x + leftMargin - topLeft.originalWidth, y + height - bottomMargin); - batch.draw(topRight , x + width - rightMargin, y + height - bottomMargin); + batch.draw(topRight, x + width - rightMargin, y + height - bottomMargin); tmpTile.setRegion(top); tmpTile.draw(batch, x + leftMargin, y + height - bottomMargin, width - leftMargin - rightMargin, top.originalHeight); @@ -1894,7 +1855,7 @@ protected java.awt.Shape getFigureFacingArrow(int angle, int size) { facingArrow.lineTo(base, -width); return facingArrow.createTransformedShape( - AffineTransform.getRotateInstance(-Math.toRadians(angle))); + AffineTransform.getRotateInstance(-Math.toRadians(angle))); } // TODO: I don't like this hardwiring @@ -1909,7 +1870,7 @@ protected java.awt.Shape getCircleFacingArrow(int angle, int size) { facingArrow.lineTo(base, -width); return facingArrow.createTransformedShape( - AffineTransform.getRotateInstance(-Math.toRadians(angle))); + AffineTransform.getRotateInstance(-Math.toRadians(angle))); } // TODO: I don't like this hardwiring @@ -1924,7 +1885,7 @@ protected java.awt.Shape getSquareFacingArrow(int angle, int size) { facingArrow.lineTo(0, 0); return facingArrow.createTransformedShape( - AffineTransform.getRotateInstance(-Math.toRadians(angle))); + AffineTransform.getRotateInstance(-Math.toRadians(angle))); } @@ -1953,7 +1914,7 @@ private void paintClipped(Sprite image, Area bounds, Area clip) { shape.end(); var handle = Gdx.files.absolute("screenshot.png"); - if(!handle.exists()) { + if (!handle.exists()) { var pix = Pixmap.createFromFrameBuffer(0, 0, width, height); PixmapIO.writePNG(handle, pix, DEFAULT_COMPRESSION, true); pix.dispose(); @@ -1975,7 +1936,7 @@ private void paintClipped(Sprite image, Area bounds, Area clip) { var wsrc = image.getWidth() / zoom; var hsrc = image.getHeight() / zoom; - batch.draw(fogBuffer.getTexture(), x, y, w, h, (int)tmpScreenCoord.x, (int)tmpScreenCoord.y, (int)wsrc, (int)hsrc, false, true); + batch.draw(fogBuffer.getTexture(), x, y, w, h, (int) tmpScreenCoord.x, (int) tmpScreenCoord.y, (int) wsrc, (int) hsrc, false, true); } private void renderPath(Path lastPath, TokenFootprint footprint) { @@ -2098,12 +2059,12 @@ private void paintArea(Area area) { switch (type) { case PathIterator.SEG_MOVETO: - // System.out.println("Move to: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + ")"); + // System.out.println("Move to: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + ")"); tmpFloat.add(floatsFromArea[0], -floatsFromArea[1]); break; case PathIterator.SEG_CLOSE: - // System.out.println("Close"); + // System.out.println("Close"); tmpFloat.add(tmpFloat.get(0), tmpFloat.get(1)); if (shape.getCurrentType() == ShapeRenderer.ShapeType.Filled) { var indicies = triangulator.computeTriangles(tmpFloat.items, 0, tmpFloat.size); @@ -2125,12 +2086,12 @@ private void paintArea(Area area) { tmpFloat.clear(); break; case PathIterator.SEG_LINETO: - // System.out.println("Line to: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + ")"); + // System.out.println("Line to: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + ")"); tmpFloat.add(floatsFromArea[0], -floatsFromArea[1]); break; case PathIterator.SEG_QUADTO: - // System.out.println("quadratic bezier with: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + - // "), (" + floatsFromArea[2] + ", " + floatsFromArea[3] + ")"); + // System.out.println("quadratic bezier with: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + + // "), (" + floatsFromArea[2] + ", " + floatsFromArea[3] + ")"); tmpVector0.set(tmpFloat.get(tmpFloat.size - 2), tmpFloat.get(tmpFloat.size - 1)); tmpVector1.set(floatsFromArea[0], -floatsFromArea[1]); From c458703f860671ff5fadcb5f72364d86b0927e21 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 15 Apr 2021 22:46:10 +0200 Subject: [PATCH 029/139] clean up the used batches with the use of shaper --- build.gradle | 2 + .../maptool/client/ui/zone/GdxRenderer.java | 411 ++++++++---------- .../maptool/client/ui/zone/ZoneRenderer.java | 4 + 3 files changed, 181 insertions(+), 236 deletions(-) diff --git a/build.gradle b/build.gradle index cb57958f89..b7bd674f95 100644 --- a/build.gradle +++ b/build.gradle @@ -39,6 +39,7 @@ ext { ashleyVersion = '1.7.3' aiVersion = '1.8.2' gdxControllersVersion = '2.1.0' + shapedrawerVersion = '2.4.0' // Get tag and commit info from Git to use for version numbering def grgit = org.ajoberstar.grgit.Grgit.open(currentDir: file('.')) @@ -376,6 +377,7 @@ dependencies { implementation "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-desktop" implementation 'com.crashinvaders.vfx:gdx-vfx-core:0.5.0' implementation 'com.crashinvaders.vfx:gdx-vfx-effects:0.5.0' + implementation "space.earlygrey:shapedrawer:$shapedrawerVersion" } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 8a9ab43d96..c9fbe9698e 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -4,7 +4,6 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.*; import com.badlogic.gdx.graphics.g2d.*; -import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.math.*; import com.badlogic.gdx.scenes.scene2d.utils.TiledDrawable; import com.badlogic.gdx.utils.FloatArray; @@ -40,6 +39,8 @@ import net.rptools.maptool.util.StringUtil; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import space.earlygrey.shapedrawer.JoinType; +import space.earlygrey.shapedrawer.ShapeDrawer; import javax.swing.*; import java.awt.geom.*; @@ -86,8 +87,7 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, // general resources private OrthographicCamera cam; private OrthographicCamera hudCam; - private SpriteBatch batch; - private SpriteBatch hudBatch; + private PolygonSpriteBatch batch; private NativeRenderer jfxRenderer; private boolean initialized = false; private int width; @@ -97,16 +97,17 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private CodeTimer timer; private VfxManager vfxManager; private ChainVfxEffect vfxEffect; - private ShapeRenderer shape; - private VfxFrameBuffer fogBuffer; + private VfxFrameBuffer backBuffer; private Integer fogX; private Integer fogY; - private EarClippingTriangulator triangulator; private com.badlogic.gdx.assets.AssetManager manager; private TextureAtlas atlas; private NinePatch grayLabel; private NinePatch blueLabel; private NinePatch darkGrayLabel; + private Texture onePixel; + private ShapeDrawer drawer; + //temorary objects. Stored here to avoid garbage collection; private Vector3 tmpWorldCoord; private Vector3 tmpScreenCoord; @@ -123,6 +124,7 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private Area tmpArea; private TiledDrawable tmpTile = new TiledDrawable(); + public GdxRenderer() { MapTool.getEventDispatcher().addListener(this, MapTool.ZoneEvent.Activated); } @@ -146,15 +148,19 @@ public void create() { hudCam = new OrthographicCamera(); hudCam.setToOrtho(false); - shape = new ShapeRenderer(); - shape.setAutoShapeType(true); - batch = new SpriteBatch(); - hudBatch = new SpriteBatch(); + batch = new PolygonSpriteBatch(); font = new BitmapFont(); glyphLayout = new GlyphLayout(); - fogBuffer = new VfxFrameBuffer(Pixmap.Format.RGBA8888); - fogBuffer.initialize(width, height); - triangulator = new EarClippingTriangulator(); + backBuffer = new VfxFrameBuffer(Pixmap.Format.RGBA8888); + backBuffer.initialize(width, height); + + Pixmap pixmap = new Pixmap(1, 1, Pixmap.Format.RGBA8888); + pixmap.setColor(Color.WHITE); + pixmap.drawPixel(0, 0); + onePixel = new Texture(pixmap); //remember to dispose of later + pixmap.dispose(); + TextureRegion region = new TextureRegion(onePixel, 0, 0, 1, 1); + drawer = new ShapeDrawer(batch, region); vfxManager = new VfxManager(Pixmap.Format.RGBA8888); @@ -174,8 +180,7 @@ public void create() { tmpVectorOut = new Vector2(); tmpArea = new Area(); - fogBuffer.addRenderer(new VfxFrameBuffer.BatchRendererAdapter(batch)); - fogBuffer.addRenderer(new VfxFrameBuffer.ShapeRendererAdapter(shape)); + backBuffer.addRenderer(new VfxFrameBuffer.BatchRendererAdapter(batch)); itemRenderList = new LinkedList<>(); @@ -189,12 +194,11 @@ public void create() { public void dispose() { manager.dispose(); batch.dispose(); - hudBatch.dispose(); font.dispose(); vfxManager.dispose(); vfxEffect.dispose(); - shape.dispose(); disposeZoneResources(); + onePixel.dispose(); } @Override @@ -202,7 +206,7 @@ public void resize(int width, int height) { this.width = width; this.height = height; vfxManager.resize(width, height); - fogBuffer.initialize(width, height); + backBuffer.initialize(width, height); updateCam(); @@ -258,6 +262,7 @@ private void doRendering() { Gdx.gl.glEnable(GL20.GL_BLEND); Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + batch.begin(); if (zone == null || !renderZone) return; @@ -273,33 +278,29 @@ private void doRendering() { timer.stop("paintComponent:createView"); batch.setProjectionMatrix(cam.combined); - hudBatch.setProjectionMatrix(hudCam.combined); - shape.setProjectionMatrix(cam.combined); renderZone(playerView); - hudBatch.begin(); - hudBatch.setProjectionMatrix(hudCam.combined); + batch.setProjectionMatrix(hudCam.combined); if (zoneRenderer.isLoading()) - drawBoxedString(hudBatch, zoneRenderer.getLoadingProgress(), width / 2, height / 2); + drawBoxedString(zoneRenderer.getLoadingProgress(), width / 2, height / 2); else if (MapTool.getCampaign().isBeingSerialized()) - drawBoxedString(hudBatch, " Please Wait ", width / 2, height / 2); + drawBoxedString(" Please Wait ", width / 2, height / 2); int noteVPos = 20; if (!zone.isVisible() && playerView.isGMView()) { - drawBoxedString(hudBatch, - "Map not visible to players", width / 2, height - noteVPos); + drawBoxedString("Map not visible to players", width / 2, height - noteVPos); noteVPos += 20; } if (AppState.isShowAsPlayer()) { - drawBoxedString(hudBatch, "Player View", width / 2, height - noteVPos); + drawBoxedString("Player View", width / 2, height - noteVPos); } - drawString(hudBatch, String.valueOf(Gdx.graphics.getFramesPerSecond()), 10, 10); - - hudBatch.end(); + drawString(String.valueOf(Gdx.graphics.getFramesPerSecond()), 10, 10); + drawString(String.valueOf(batch.renderCalls), width - 10, 10); + batch.end(); collectTimerResults(); } @@ -364,7 +365,6 @@ private void renderZone(PlayerView view) { exposedFogArea = new Area(zone.getExposedArea()); timer.stop("calcs-2"); - batch.begin(); renderBoard(); if (Zone.Layer.BACKGROUND.isEnabled()) { @@ -390,13 +390,11 @@ private void renderZone(PlayerView view) { timer.stop("drawableObjects"); // } } - batch.end(); timer.start("grid"); - shape.begin(); + renderGrid(view); - shape.end(); + timer.stop("grid"); - batch.begin(); if (Zone.Layer.OBJECT.isEnabled()) { // ... Images on the object layer are always ABOVE the grid. @@ -408,10 +406,6 @@ private void renderZone(PlayerView view) { } } if (Zone.Layer.TOKEN.isEnabled()) { - batch.end(); - - shape.begin(); - timer.start("lights"); renderLights(view); timer.stop("lights"); @@ -419,9 +413,6 @@ private void renderZone(PlayerView view) { timer.start("auras"); renderAuras(view); timer.stop("auras"); - - shape.end(); - batch.begin(); } /* @@ -528,16 +519,13 @@ private void renderZone(PlayerView view) { // So if one moving token is on top of another moving token, at least the textual identifiers // will be // visible. - batch.end(); - hudBatch.begin(); - hudBatch.setProjectionMatrix(hudCam.combined); + + batch.setProjectionMatrix(hudCam.combined); timer.start("token name/labels"); renderRenderables(); timer.stop("token name/labels"); - hudBatch.end(); } - shape.begin(); // if (zone.visionType ...) if (view.isGMView()) { timer.start("visionOverlayGM"); @@ -548,7 +536,6 @@ private void renderZone(PlayerView view) { renderPlayerVisionOverlay(view); timer.stop("visionOverlayPlayer"); } - shape.end(); } private void updateVisibleArea() { @@ -619,9 +606,8 @@ private void renderVisionOverlay(PlayerView view) { * strict token ownership is off... then the vision arc should be displayed. */ if (showVisionAndHalo) { - shape.setColor(Color.WHITE); - shape.set(ShapeRenderer.ShapeType.Line); - paintArea(combined); + drawer.setColor(Color.WHITE); + draw(combined); renderHaloArea(combined); } } @@ -637,10 +623,9 @@ private void renderHaloArea(Area visible) { java.awt.Color visionColor = useHaloColor ? tokenUnderMouse.getHaloColor() : tokenUnderMouse.getVisionOverlayColor(); - shape.setColor(visionColor.getRed() / 255f, visionColor.getGreen() / 255f, + drawer.setColor(visionColor.getRed() / 255f, visionColor.getGreen() / 255f, visionColor.getBlue() / 255f, AppPreferences.getHaloOverlayOpacity() / 255f); - shape.set(ShapeRenderer.ShapeType.Filled); - paintArea(visible); + fill(visible); } } @@ -660,14 +645,12 @@ private void renderFog(PlayerView view) { flushFog = true; } boolean cacheNotValid = - (fogBuffer.getTexture().getWidth() != width - || fogBuffer.getTexture().getHeight() != height); + (backBuffer.getTexture().getWidth() != width + || backBuffer.getTexture().getHeight() != height); timer.start("renderFog"); // if (flushFog || cacheNotValid) { - - - fogBuffer.begin(); + backBuffer.begin(); Gdx.gl.glClearColor(0, 0, 0, 0); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); batch.setBlendFunction(GL20.GL_ONE, GL20.GL_NONE); @@ -692,10 +675,6 @@ private void renderFog(PlayerView view) { fillViewportWith(fog); batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); - batch.end(); - shape.begin(ShapeRenderer.ShapeType.Filled); - shape.setProjectionMatrix(cam.combined); - timer.start("renderFog-visibleArea"); Area visibleArea = zoneRenderer.getZoneView().getVisibleArea(view); timer.stop("renderFog-visibleArea"); @@ -718,7 +697,7 @@ private void renderFog(PlayerView view) { || !MapTool.getServerPolicy().isUseIndividualFOW() || view.isGMView(); - shape.setColor(Color.CLEAR); + drawer.setColor(Color.CLEAR); if (view.getTokens() != null) { // if there are tokens selected combine the areas, then, if individual FOW is enabled @@ -729,7 +708,7 @@ private void renderFog(PlayerView view) { tempArea.add(new Area(exposedArea)); } if (combinedView) { - paintArea(combined); + fill(combined); renderFogArea(combined, visibleArea); renderFogOutline(); } else { @@ -737,7 +716,7 @@ private void renderFog(PlayerView view) { // use 'combined' instead in this block of code? tempArea.add(combined); - paintArea(tempArea); + fill(tempArea); renderFogArea(tempArea, visibleArea); renderFogOutline(); } @@ -748,7 +727,7 @@ private void renderFog(PlayerView view) { if (combined.isEmpty()) { combined = zone.getExposedArea(); } - paintArea(combined); + fill(combined); renderFogArea(combined, visibleArea); renderFogOutline(); } else { @@ -764,24 +743,22 @@ private void renderFog(PlayerView view) { exposedArea = meta.getExposedAreaHistory(); myCombined.add(new Area(exposedArea)); } - paintArea(myCombined); + fill(myCombined); renderFogArea(myCombined, visibleArea); renderFogOutline(); } } timer.stop("renderFogArea"); - shape.end(); - batch.begin(); flushFog = false; - fogBuffer.end(); + backBuffer.end(); } batch.setProjectionMatrix(hudCam.combined); batch.setColor(Color.WHITE); - batch.draw(fogBuffer.getTexture(), 0, 0, width, height, 0, 0, + batch.draw(backBuffer.getTexture(), 0, 0, width, height, 0, 0, width, height, false, true); batch.setProjectionMatrix(cam.combined); @@ -792,21 +769,20 @@ private void renderFogArea(Area softFog, Area visibleArea) { if (zoneRenderer.getZoneView().isUsingVision()) { if (visibleArea != null && !visibleArea.isEmpty()) { //shape.setColor(Color.BLUE); - shape.setColor(0, 0, 0, AppPreferences.getFogOverlayOpacity() / 255.0f); + drawer.setColor(0, 0, 0, AppPreferences.getFogOverlayOpacity() / 255.0f); // Fill in the exposed area - paintArea(softFog); + fill(softFog); - shape.setColor(Color.CLEAR); + drawer.setColor(Color.CLEAR); - paintArea(visibleArea); + fill(visibleArea); } else { - //shape.setColor(Color.BLUE); - shape.setColor(0, 0, 0, 80 / 255.0f); - paintArea(softFog); + drawer.setColor(0, 0, 0, 80 / 255.0f); + fill(softFog); } } else { - paintArea(softFog); + fill(softFog); } } @@ -814,20 +790,8 @@ private void renderFogOutline() { if (visibleScreenArea == null) return; - var currentType = shape.getCurrentType(); - if (shape.getCurrentType() != ShapeRenderer.ShapeType.Line) { - shape.end(); - shape.begin(ShapeRenderer.ShapeType.Line); - } - - Gdx.gl.glLineWidth(1); - shape.setColor(Color.BLACK); - paintArea(visibleScreenArea); - - if (shape.getCurrentType() != currentType) { - shape.end(); - shape.begin(currentType); - } + drawer.setColor(Color.BLACK); + draw(visibleScreenArea); } private void renderLabels(PlayerView view) { @@ -837,7 +801,7 @@ private void renderLabels(PlayerView view) { timer.start("labels-1.1"); Color.argb8888ToColor(tmpColor, label.getForegroundColor().getRGB()); if (label.isShowBackground()) { - drawBoxedString(batch, + drawBoxedString( label.getLabel(), label.getX(), -label.getY(), @@ -845,7 +809,7 @@ private void renderLabels(PlayerView view) { grayLabel, tmpColor); } else { - drawString(batch, label.getLabel(), label.getX(), -label.getY(), tmpColor); + drawString(label.getLabel(), label.getX(), -label.getY(), tmpColor); } timer.stop("labels-1.1"); } @@ -858,21 +822,19 @@ private void showBlockedMoves(PlayerView view, Set un private void renderAuras(PlayerView view) { var alpha = AppPreferences.getAuraOverlayOpacity() / 255.0f; - shape.set(ShapeRenderer.ShapeType.Filled); timer.start("auras-4"); - var auraColor = shape.getColor(); for (DrawableLight light : zoneRenderer.getZoneView().getLights(LightSource.Type.AURA)) { var paint = light.getPaint(); if (paint != null && paint instanceof DrawableColorPaint) { var colorPaint = (DrawableColorPaint) paint; - Color.argb8888ToColor(auraColor, colorPaint.getColor()); - auraColor.a = alpha; + Color.argb8888ToColor(tmpColor, colorPaint.getColor()); + tmpColor.a = alpha; } else { - auraColor.set(1, 1, 1, 0.59f); + tmpColor.set(1, 1, 1, 0.59f); } - shape.setColor(auraColor); - paintArea(light.getArea()); + drawer.setColor(tmpColor); + fill(light.getArea()); } timer.stop("auras-4"); @@ -882,12 +844,10 @@ private void renderLights(PlayerView view) { if (zone.getVisionType() != Zone.VisionType.NIGHT) return; - fogBuffer.begin(); + backBuffer.begin(); Gdx.gl.glClearColor(0, 0, 0, 0); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); - shape.setProjectionMatrix(cam.combined); - timer.start("lights-2"); var alpha = AppPreferences.getLightOverlayOpacity() / 255.0f; timer.stop("lights-2"); @@ -914,30 +874,25 @@ private void renderLights(PlayerView view) { continue; } tmpColor.a = alpha; - shape.setColor(tmpColor); - shape.set(ShapeRenderer.ShapeType.Filled); - paintArea(light.getArea()); + drawer.setColor(tmpColor); + fill(light.getArea()); } timer.stop("lights-3"); //clear the bright areas timer.start("lights-4"); for (Area brightArea : zoneRenderer.getZoneView().getBrightLights(view)) { - shape.setColor(Color.CLEAR); - paintArea(brightArea); + drawer.setColor(Color.CLEAR); + fill(brightArea); } timer.stop("lights-4"); - fogBuffer.end(); - shape.end(); - batch.begin(); + backBuffer.end(); + batch.setProjectionMatrix(hudCam.combined); - batch.draw(fogBuffer.getTexture(), 0, 0, width, height, 0, 0, + batch.draw(backBuffer.getTexture(), 0, 0, width, height, 0, 0, width, height, false, true); batch.setProjectionMatrix(cam.combined); - batch.end(); - shape.begin(); - } private void renderGrid(PlayerView view) { @@ -961,12 +916,10 @@ private void renderGrid(PlayerView view) { } private void renderGrid(HexGrid grid) { - shape.set(ShapeRenderer.ShapeType.Line); - shape.identity(); Color.argb8888ToColor(tmpColor, zone.getGridColor()); - shape.setColor(tmpColor); + drawer.setColor(tmpColor); var path = grid.createShape(zoneRenderer.getScale()); var vertices = pathToVertices(path); @@ -998,9 +951,13 @@ private void renderGrid(HexGrid grid) { transY = height - (float) (u + offsetU); } - shape.translate(transX, transY, 0); - shape.polyline(vertices.items, 0, vertices.size); - shape.translate(-transX, -transY, 0); + tmpMatrix.translate(transX, transY, 0); + batch.setTransformMatrix(tmpMatrix); + drawer.update(); + drawer.path(vertices.toArray(), 1, JoinType.SMOOTH, true); + tmpMatrix.idt(); + batch.setTransformMatrix(tmpMatrix); + drawer.update(); } } } @@ -1009,11 +966,9 @@ private void renderGrid(IsometricGrid grid) { var scale = (float) zoneRenderer.getScale(); int gridSize = (int) (grid.getSize() * scale); - shape.identity(); - Color.argb8888ToColor(tmpColor, zone.getGridColor()); - shape.setColor(tmpColor); + drawer.setColor(tmpColor); var x = hudCam.position.x - hudCam.viewportWidth / 2; var y = hudCam.position.y - hudCam.viewportHeight / 2; @@ -1052,20 +1007,18 @@ private void drawHatch(IsometricGrid grid, float x, float y) { var lineWidth = AppState.getGridSize(); - shape.rectLine(x - (hatchSize * 2), y - hatchSize, x + (hatchSize * 2), y + hatchSize, lineWidth); - shape.rectLine(x - (hatchSize * 2), y + hatchSize, x + (hatchSize * 2), y - hatchSize, lineWidth); + drawer.line(x - (hatchSize * 2), y - hatchSize, x + (hatchSize * 2), y + hatchSize, lineWidth); + drawer.line(x - (hatchSize * 2), y + hatchSize, x + (hatchSize * 2), y - hatchSize, lineWidth); } private void renderGrid(SquareGrid grid) { var scale = (float) zoneRenderer.getScale(); int gridSize = (int) (grid.getSize() * scale); - shape.set(ShapeRenderer.ShapeType.Filled); - shape.identity(); Color.argb8888ToColor(tmpColor, zone.getGridColor()); - shape.setColor(tmpColor); + drawer.setColor(tmpColor); var x = hudCam.position.x - hudCam.viewportWidth / 2; var y = hudCam.position.y - hudCam.viewportHeight / 2; @@ -1081,10 +1034,10 @@ private void renderGrid(SquareGrid grid) { var lineWidth = AppState.getGridSize(); for (float row = startRow; row < y + h + gridSize; row += gridSize) - shape.rectLine(x, (int) (h - (row + offY)), x + w, (int) (h - (row + offY)), lineWidth); + drawer.line(x, (int) (h - (row + offY)), x + w, (int) (h - (row + offY)), lineWidth); for (float col = startCol; col < x + w + gridSize; col += gridSize) - shape.rectLine((int) (col + offX), y, (int) (col + offX), y + h, lineWidth); + drawer.line((int) (col + offX), y, (int) (col + offX), y + h, lineWidth); } private FloatArray pathToVertices(GeneralPath path) { @@ -1107,23 +1060,23 @@ private FloatArray pathToVertices(GeneralPath path) { private void renderDrawableOverlay(PlayerView view, List drawables) { } - public void drawString(SpriteBatch batch, String text, float centerX, float centerY, Color foreground) { - drawBoxedString(batch, text, centerX, centerY, SwingUtilities.CENTER, null, foreground); + public void drawString(String text, float centerX, float centerY, Color foreground) { + drawBoxedString(text, centerX, centerY, SwingUtilities.CENTER, null, foreground); } - public void drawString(SpriteBatch batch, String text, float centerX, float centerY) { - drawBoxedString(batch, text, centerX, centerY, SwingUtilities.CENTER, null, Color.WHITE); + public void drawString(String text, float centerX, float centerY) { + drawBoxedString(text, centerX, centerY, SwingUtilities.CENTER, null, Color.WHITE); } - public void drawBoxedString(SpriteBatch batch, String text, float centerX, float centerY) { - drawBoxedString(batch, text, centerX, centerY, SwingUtilities.CENTER); + public void drawBoxedString(String text, float centerX, float centerY) { + drawBoxedString(text, centerX, centerY, SwingUtilities.CENTER); } - public void drawBoxedString(SpriteBatch batch, String text, float x, float y, int justification) { - drawBoxedString(batch, text, x, y, justification, grayLabel, Color.BLACK); + public void drawBoxedString(String text, float x, float y, int justification) { + drawBoxedString(text, x, y, justification, grayLabel, Color.BLACK); } - private void drawBoxedString(SpriteBatch batch, String text, float x, float y, int justification, NinePatch background, Color foreground) { + private void drawBoxedString(String text, float x, float y, int justification, NinePatch background, Color foreground) { final int BOX_PADDINGX = 10; final int BOX_PADDINGY = 2; @@ -1394,19 +1347,10 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure // Render Halo if (token.hasHalo()) { - batch.end(); - Gdx.gl.glLineWidth(AppPreferences.getHaloLineWidth()); - shape.begin(); - shape.setProjectionMatrix(cam.combined); - shape.set(ShapeRenderer.ShapeType.Line); - + drawer.setDefaultLineWidth(AppPreferences.getHaloLineWidth()); Color.argb8888ToColor(tmpColor, token.getHaloColor().getRGB()); - shape.setColor(tmpColor); - paintArea(zone.getGrid().getTokenCellArea(tokenBounds)); - - shape.end(); - Gdx.gl.glLineWidth(1); - batch.begin(); + drawer.setColor(tmpColor); + draw(zone.getGrid().getTokenCellArea(tokenBounds)); } // Calculate alpha Transparency from token and use opacity for indicating that token is moving @@ -1457,10 +1401,6 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure timer.start("tokenlist-8"); - batch.end(); - - shape.begin(); - shape.setProjectionMatrix(cam.combined); // Facing ? // TODO: Optimize this by doing it once per token per facing if (token.hasFacing()) { @@ -1482,20 +1422,31 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure float fy = y + (float) origBounds.getHeight() / zoom / 2; - shape.translate(fx, -fy, 0); + //drawer.setDefaultLineWidth() + + tmpMatrix.idt(); + tmpMatrix.translate(fx, -fy, 0); + batch.setTransformMatrix(tmpMatrix); + drawer.update(); + + if (token.getFacing() < 0) { - shape.setColor(Color.YELLOW); + // shape.setColor(Color.YELLOW); } else { - shape.setColor(1, 1, 0, 0.5f); + // shape.setColor(1, 1, 0, 0.5f); } - shape.set(ShapeRenderer.ShapeType.Filled); + //shape.set(ShapeRenderer.ShapeType.Filled); var arrowArea = new Area(arrow); - paintArea(arrowArea); - shape.setColor(Color.DARK_GRAY); - shape.set(ShapeRenderer.ShapeType.Line); - paintArea(arrowArea); - shape.translate(-fx, fy, 0); + fill(arrowArea); + //shape.setColor(Color.DARK_GRAY); + + drawer.setColor(Color.DARK_GRAY); + + //shape.set(ShapeRenderer.ShapeType.Line); + draw(arrowArea); + + break; case TOP_DOWN: @@ -1512,14 +1463,25 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure float cx = x + (float) origBounds.getWidth() / 2; float cy = y + (float) origBounds.getHeight() / 2; - shape.translate(cx, -cy, 0); - shape.setColor(Color.YELLOW); - shape.set(ShapeRenderer.ShapeType.Filled); - paintArea(arrowArea); - shape.setColor(Color.DARK_GRAY); - shape.set(ShapeRenderer.ShapeType.Line); - paintArea(arrowArea); - shape.translate(-cx, cy, 0); + //shape.translate(cx, -cy, 0); + //shape.setColor(Color.YELLOW); + //shape.set(ShapeRenderer.ShapeType.Filled); + tmpMatrix.idt(); + tmpMatrix.translate(cx, -cy, 0); + batch.setTransformMatrix(tmpMatrix); + drawer.update(); + drawer.setColor(Color.YELLOW); + + fill(arrowArea); + drawer.setColor(Color.DARK_GRAY); + drawer.setDefaultLineWidth(1); + //shape.setColor(Color.DARK_GRAY); + //shape.set(ShapeRenderer.ShapeType.Line); + draw(arrowArea); + //shape.translate(-cx, cy, 0); + tmpMatrix.idt(); + batch.setTransformMatrix(tmpMatrix); + drawer.update(); break; case SQUARE: if (zone.getGrid().isIsometric()) { @@ -1561,21 +1523,22 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure } arrowArea = new Area(arrow); - shape.translate(cx, -cy, 0); - shape.setColor(Color.YELLOW); - shape.set(ShapeRenderer.ShapeType.Filled); - paintArea(arrowArea); - shape.setColor(Color.DARK_GRAY); - shape.set(ShapeRenderer.ShapeType.Line); - paintArea(arrowArea); - shape.translate(-cx, cy, 0); + + tmpMatrix.translate(cx, -cy, 0); + batch.setTransformMatrix(tmpMatrix); + drawer.update(); + drawer.setColor(Color.YELLOW); + + fill(arrowArea); + drawer.setColor(Color.DARK_GRAY); + draw(arrowArea); + batch.setTransformMatrix(tmpMatrix.idt()); + drawer.update(); break; } } timer.stop("tokenlist-8"); - shape.end(); - batch.begin(); timer.start("tokenlist-9"); @@ -1684,16 +1647,17 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure timer.stop("tokenlist-12"); } - - /* timer.start("tokenlist-13"); + + var tokenStackMap = zoneRenderer.getTokenStackMap(); + // Stacks if (!tokenList.isEmpty() && !tokenList.get(0).isStamp()) { // TODO: find a cleaner way to indicate token layer if (tokenStackMap != null) { // FIXME Needed to prevent NPE but how can it be null? for (Token token : tokenStackMap.keySet()) { - Area bounds = getTokenBounds(token); + Area bounds = zoneRenderer.getTokenBounds(token); if (bounds == null) { // token is offscreen continue; @@ -1707,20 +1671,8 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure } } } - - // Markers - // for (TokenLocation location : getMarkerLocations()) { - // BufferedImage stackImage = AppStyle.markerImage; - // g.drawImage(stackImage, location.bounds.getBounds().x, location.bounds.getBounds().y, null); - // } - timer.stop("tokenlist-13"); - - if (figuresOnly) { - tempVisTokens.addAll(visibleTokenSet); - } - - visibleTokenSet = Collections.unmodifiableSet(tempVisTokens);*/ + */ } private class LabelRenderer implements ItemRenderer @@ -1769,7 +1721,6 @@ public void render() { tmpScreenCoord = cam.project(tmpWorldCoord); drawBoxedString( - hudBatch, name, tmpScreenCoord.x, tmpScreenCoord.y, @@ -1781,7 +1732,7 @@ public void render() { // Draw name and label to image if (label != null && label.trim().length() > 0) { - drawBoxedString(hudBatch, + drawBoxedString( label, tmpScreenCoord.x, tmpScreenCoord.y - labelHeight, @@ -1891,35 +1842,29 @@ protected java.awt.Shape getSquareFacingArrow(int angle, int size) { private void paintClipped(Sprite image, Area bounds, Area clip) { - fogBuffer.begin(); + backBuffer.begin(); Gdx.gl.glClearColor(0, 0, 0, 0); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); batch.setProjectionMatrix(cam.combined); - image.draw(batch); - batch.end(); - shape.begin(); - shape.setProjectionMatrix(cam.combined); - shape.set(ShapeRenderer.ShapeType.Filled); - shape.setColor(Color.CLEAR); + drawer.setColor(Color.CLEAR); tmpArea.reset(); tmpArea.add(bounds); tmpArea.subtract(clip); - paintArea(tmpArea); - shape.setColor(Color.WHITE); - shape.end(); + fill(tmpArea); - var handle = Gdx.files.absolute("screenshot.png"); + /* var handle = Gdx.files.absolute("screenshot.png"); if (!handle.exists()) { + batch.flush(); var pix = Pixmap.createFromFrameBuffer(0, 0, width, height); PixmapIO.writePNG(handle, pix, DEFAULT_COMPRESSION, true); pix.dispose(); - } - fogBuffer.end(); + }*/ + backBuffer.end(); tmpWorldCoord.x = image.getX(); tmpWorldCoord.y = image.getY(); @@ -1927,8 +1872,6 @@ private void paintClipped(Sprite image, Area bounds, Area clip) { tmpScreenCoord = cam.project(tmpWorldCoord); - batch.begin(); - var x = image.getX(); var y = image.getY(); var w = image.getWidth(); @@ -1936,7 +1879,7 @@ private void paintClipped(Sprite image, Area bounds, Area clip) { var wsrc = image.getWidth() / zoom; var hsrc = image.getHeight() / zoom; - batch.draw(fogBuffer.getTexture(), x, y, w, h, (int) tmpScreenCoord.x, (int) tmpScreenCoord.y, (int) wsrc, (int) hsrc, false, true); + batch.draw(backBuffer.getTexture(), x, y, w, h, (int) tmpScreenCoord.x, (int) tmpScreenCoord.y, (int) wsrc, (int) hsrc, false, true); } private void renderPath(Path lastPath, TokenFootprint footprint) { @@ -2046,7 +1989,15 @@ private Sprite paintToSprite(DrawablePaint paint) { return null; } - private void paintArea(Area area) { + private void fill(Area area) { + paintArea(area, true); + } + + private void draw(Area area) { + paintArea(area, false); + } + + private void paintArea(Area area, boolean fill) { if (area == null || area.isEmpty()) return; @@ -2066,22 +2017,10 @@ private void paintArea(Area area) { case PathIterator.SEG_CLOSE: // System.out.println("Close"); tmpFloat.add(tmpFloat.get(0), tmpFloat.get(1)); - if (shape.getCurrentType() == ShapeRenderer.ShapeType.Filled) { - var indicies = triangulator.computeTriangles(tmpFloat.items, 0, tmpFloat.size); - for (int i = 0; i < indicies.size - 2; i = i + 3) { - float x1 = tmpFloat.get(indicies.get(i) * 2); - float y1 = tmpFloat.get((indicies.get(i) * 2) + 1); - - float x2 = tmpFloat.get((indicies.get(i + 1)) * 2); - float y2 = tmpFloat.get((indicies.get(i + 1) * 2) + 1); - - float x3 = tmpFloat.get(indicies.get(i + 2) * 2); - float y3 = tmpFloat.get((indicies.get(i + 2) * 2) + 1); - - shape.triangle(x1, y1, x2, y2, x3, y3); - } + if (fill) { + drawer.filledPolygon(tmpFloat.toArray()); } else { - shape.polyline(tmpFloat.items, 0, tmpFloat.size); + drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.SMOOTH, true); } tmpFloat.clear(); break; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index 8f551e2739..54d1835d6c 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -3774,6 +3774,10 @@ protected void renderTokens( visibleTokenSet = Collections.unmodifiableSet(tempVisTokens); } + protected Map> getTokenStackMap() { + return tokenStackMap; + } + /** * Returns whether the token should be clipped, depending on its bounds, the view, and the visible * screen area. From e449171f2b3dd2b1a440f73fed9346ed3d3c15d2 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 17 Apr 2021 10:50:59 +0200 Subject: [PATCH 030/139] use tiledrawer for background --- .../rptools/maptool/client/ui/zone/GdxRenderer.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index c9fbe9698e..9d177023bb 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -208,6 +208,7 @@ public void resize(int width, int height) { vfxManager.resize(width, height); backBuffer.initialize(width, height); + updateCam(); } @@ -262,6 +263,9 @@ private void doRendering() { Gdx.gl.glEnable(GL20.GL_BLEND); Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + //this happens sometimes when starting with ide (non-debug) + if(batch.isDrawing()) + batch.end(); batch.begin(); if (zone == null || !renderZone) @@ -1137,6 +1141,8 @@ private void renderBoard() { } private void fillViewportWith(Sprite fill) { + + var startX = (cam.position.x - cam.viewportWidth * zoom / 2); startX = (int) (startX / fill.getWidth()) * fill.getWidth() - fill.getWidth(); var endX = cam.position.x + cam.viewportWidth / 2 * zoom; @@ -1144,11 +1150,15 @@ private void fillViewportWith(Sprite fill) { startY = (int) (startY / fill.getHeight()) * fill.getHeight() - fill.getHeight(); var endY = (cam.position.y + cam.viewportHeight / 2 * zoom); + tmpTile.setRegion(new TextureRegion(fill.getTexture())); + tmpTile.draw(batch, startX, startY, endX - startX, endY - startY); + + /* for (var i = startX; i < endX; i += fill.getWidth()) for (var j = startY; j < endY; j += fill.getHeight()) { fill.setPosition(i, j); fill.draw(batch); - } + } */ } private void renderTokens(List tokenList, PlayerView view, boolean figuresOnly) { From 6a16116f4a6ff769d8c8cbbc071763ac46d8c491 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 17 Apr 2021 13:55:56 +0200 Subject: [PATCH 031/139] bugfixes --- maptool.tpproj | 2 +- .../maptool/client/ui/zone/GdxRenderer.java | 198 +++++++++--------- .../net/rptools/maptool/client/maptool.atlas | 73 ++++--- .../net/rptools/maptool/client/maptool.png | Bin 22070 -> 22466 bytes 4 files changed, 141 insertions(+), 132 deletions(-) diff --git a/maptool.tpproj b/maptool.tpproj index 468a808f2e..0c5c03b209 100644 --- a/maptool.tpproj +++ b/maptool.tpproj @@ -32,7 +32,7 @@ limitMemory=true useIndexes=true scaleFactors=[{suffix:"",factor:1,resampling:bicubic}] -inputFiles=[{path:src/main/resources/net/rptools/maptool/client/image/blueLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/darkGreyLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/grayLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/border,type:Input,dirFilePrefix:border/,recursive:true,flattenPaths:false}] +inputFiles=[{path:src/main/resources/net/rptools/maptool/client/image/blueLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/darkGreyLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/grayLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/border,type:Input,dirFilePrefix:border/,recursive:true,flattenPaths:false},{path:src/main/resources/net/rptools/maptool/client/image/stack.png,type:Input,regionName:null}] -PROJ- diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 9d177023bb..a37efe2662 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -7,6 +7,7 @@ import com.badlogic.gdx.math.*; import com.badlogic.gdx.scenes.scene2d.utils.TiledDrawable; import com.badlogic.gdx.utils.FloatArray; +import com.badlogic.gdx.utils.ScreenUtils; import com.crashinvaders.vfx.VfxManager; import com.crashinvaders.vfx.effects.ChainVfxEffect; import com.crashinvaders.vfx.effects.FxaaEffect; @@ -49,13 +50,13 @@ import static java.util.zip.Deflater.DEFAULT_COMPRESSION; /** - * Done: - * - Board - * - Grids - *

+ * The coordinates in the model are y-down, x-left. + * The world coordinates are y-up, x-left. I moved the world to the 4th quadrant of the + * coordinate system. So if you would draw a token t awt at (x,y) you have to draw it at (x, -y - t.width) + * * Bugs: * - y offset of VerticalHexgrid is wrong - * - ismetric mode for token does't work + * - Imageborders are not rotated */ @@ -66,6 +67,8 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private static GdxRenderer _instance; private final Map sprites = new HashMap<>(); private final Map isoSprites = new HashMap<>(); + private final Map fetchedRegions = new HashMap<>(); + //renderFog private final String ATLAS = "net/rptools/maptool/client/maptool.atlas"; private boolean flushFog = true; @@ -73,7 +76,7 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private Area visibleScreenArea; private Area exposedFogArea; private PlayerView lastView; - private List itemRenderList; + private List itemRenderList = new LinkedList<>(); // zone specific resources private Zone zone; private ZoneRenderer zoneRenderer; @@ -93,14 +96,14 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private int width; private int height; private BitmapFont font; - private GlyphLayout glyphLayout; + private GlyphLayout glyphLayout = new GlyphLayout(); private CodeTimer timer; private VfxManager vfxManager; private ChainVfxEffect vfxEffect; private VfxFrameBuffer backBuffer; private Integer fogX; private Integer fogY; - private com.badlogic.gdx.assets.AssetManager manager; + private com.badlogic.gdx.assets.AssetManager manager = new com.badlogic.gdx.assets.AssetManager(); private TextureAtlas atlas; private NinePatch grayLabel; private NinePatch blueLabel; @@ -109,19 +112,19 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private ShapeDrawer drawer; //temorary objects. Stored here to avoid garbage collection; - private Vector3 tmpWorldCoord; - private Vector3 tmpScreenCoord; - private Color tmpColor; - private float[] floatsFromArea; - private FloatArray tmpFloat; - private Vector2 tmpVectorOut; - private Vector2 tmpVector; - private Vector2 tmpVector0; - private Vector2 tmpVector1; - private Vector2 tmpVector2; - private Vector2 tmpVector3; + private Vector3 tmpWorldCoord = new Vector3(); + private Vector3 tmpScreenCoord = new Vector3(); + private Color tmpColor = new Color(); + private float[] floatsFromArea = new float[6]; + private FloatArray tmpFloat = new FloatArray(); + private Vector2 tmpVector = new Vector2(); + private Vector2 tmpVectorOut = new Vector2(); + private Vector2 tmpVector0 = new Vector2(); + private Vector2 tmpVector1 = new Vector2(); + private Vector2 tmpVector2 = new Vector2(); + private Vector2 tmpVector3 = new Vector2(); private Matrix4 tmpMatrix = new Matrix4(); - private Area tmpArea; + private Area tmpArea = new Area(); private TiledDrawable tmpTile = new TiledDrawable(); @@ -137,8 +140,6 @@ public static GdxRenderer getInstance() { @Override public void create() { - manager = new com.badlogic.gdx.assets.AssetManager(); - width = Gdx.graphics.getWidth(); height = Gdx.graphics.getHeight(); @@ -150,10 +151,11 @@ public void create() { batch = new PolygonSpriteBatch(); font = new BitmapFont(); - glyphLayout = new GlyphLayout(); + backBuffer = new VfxFrameBuffer(Pixmap.Format.RGBA8888); backBuffer.initialize(width, height); + //TODO: Add it to the texture atlas Pixmap pixmap = new Pixmap(1, 1, Pixmap.Format.RGBA8888); pixmap.setColor(Color.WHITE); pixmap.drawPixel(0, 0); @@ -162,28 +164,11 @@ public void create() { TextureRegion region = new TextureRegion(onePixel, 0, 0, 1, 1); drawer = new ShapeDrawer(batch, region); - vfxManager = new VfxManager(Pixmap.Format.RGBA8888); vfxEffect = new FxaaEffect(); //vfxManager.addEffect(vfxEffect); - tmpWorldCoord = new Vector3(); - tmpScreenCoord = new Vector3(); - tmpColor = new Color(); - tmpFloat = new FloatArray(); - floatsFromArea = new float[6]; - tmpVector = new Vector2(); - tmpVector0 = new Vector2(); - tmpVector1 = new Vector2(); - tmpVector2 = new Vector2(); - tmpVector3 = new Vector2(); - tmpVectorOut = new Vector2(); - tmpArea = new Area(); - backBuffer.addRenderer(new VfxFrameBuffer.BatchRendererAdapter(batch)); - - itemRenderList = new LinkedList<>(); - initialized = true; loadAssets(); @@ -258,10 +243,9 @@ private void loadAssets() { } private void doRendering() { - Gdx.gl.glClearColor(0, 0, 0, 1); - Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); - Gdx.gl.glEnable(GL20.GL_BLEND); - Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + ScreenUtils.clear(Color.CLEAR); + batch.enableBlending(); + batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); //this happens sometimes when starting with ide (non-debug) if(batch.isDrawing()) @@ -281,12 +265,12 @@ private void doRendering() { PlayerView playerView = zoneRenderer.getPlayerView(); timer.stop("paintComponent:createView"); - batch.setProjectionMatrix(cam.combined); + setProjectionMatrix(cam.combined); renderZone(playerView); - batch.setProjectionMatrix(hudCam.combined); + setProjectionMatrix(hudCam.combined); if (zoneRenderer.isLoading()) drawBoxedString(zoneRenderer.getLoadingProgress(), width / 2, height / 2); @@ -524,10 +508,11 @@ private void renderZone(PlayerView view) { // will be // visible. - batch.setProjectionMatrix(hudCam.combined); + setProjectionMatrix(hudCam.combined); timer.start("token name/labels"); renderRenderables(); timer.stop("token name/labels"); + setProjectionMatrix(cam.combined); } // if (zone.visionType ...) @@ -655,10 +640,9 @@ private void renderFog(PlayerView view) { // if (flushFog || cacheNotValid) { backBuffer.begin(); - Gdx.gl.glClearColor(0, 0, 0, 0); - Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + ScreenUtils.clear(Color.CLEAR); batch.setBlendFunction(GL20.GL_ONE, GL20.GL_NONE); - batch.setProjectionMatrix(cam.combined); + setProjectionMatrix(cam.combined); timer.start("renderFog-allocateBufferedImage"); timer.stop("renderFog-allocateBufferedImage"); @@ -675,9 +659,7 @@ private void renderFog(PlayerView view) { batch.setColor(Color.WHITE); var color = fog.getColor(); fog.setColor(color.r, color.g, color.b, view.isGMView() ? .6f : 1f); - batch.setBlendFunction(GL20.GL_ONE, GL20.GL_NONE); fillViewportWith(fog); - batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); timer.start("renderFog-visibleArea"); Area visibleArea = zoneRenderer.getZoneView().getVisibleArea(view); @@ -755,35 +737,42 @@ private void renderFog(PlayerView view) { timer.stop("renderFogArea"); flushFog = false; - + createScreenShot("fog"); + batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); backBuffer.end(); } - batch.setProjectionMatrix(hudCam.combined); + setProjectionMatrix(hudCam.combined); batch.setColor(Color.WHITE); batch.draw(backBuffer.getTexture(), 0, 0, width, height, 0, 0, width, height, false, true); - batch.setProjectionMatrix(cam.combined); + setProjectionMatrix(cam.combined); timer.stop("renderFog"); } + private void setProjectionMatrix(Matrix4 matrix) { + batch.setProjectionMatrix(matrix); + drawer.update(); + } + private void renderFogArea(Area softFog, Area visibleArea) { if (zoneRenderer.getZoneView().isUsingVision()) { if (visibleArea != null && !visibleArea.isEmpty()) { - //shape.setColor(Color.BLUE); drawer.setColor(0, 0, 0, AppPreferences.getFogOverlayOpacity() / 255.0f); // Fill in the exposed area fill(softFog); + //batch.setColor(Color.CLEAR); drawer.setColor(Color.CLEAR); fill(visibleArea); } else { drawer.setColor(0, 0, 0, 80 / 255.0f); fill(softFog); + drawer.setColor(Color.WHITE); } } else { fill(softFog); @@ -849,8 +838,10 @@ private void renderLights(PlayerView view) { return; backBuffer.begin(); - Gdx.gl.glClearColor(0, 0, 0, 0); - Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + ScreenUtils.clear(Color.CLEAR); + setProjectionMatrix(cam.combined); + batch.setBlendFunction(GL20.GL_ONE, GL20.GL_NONE); + drawer.update(); timer.start("lights-2"); var alpha = AppPreferences.getLightOverlayOpacity() / 255.0f; @@ -890,13 +881,15 @@ private void renderLights(PlayerView view) { fill(brightArea); } timer.stop("lights-4"); + createScreenShot("light"); + batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); backBuffer.end(); - batch.setProjectionMatrix(hudCam.combined); + setProjectionMatrix(hudCam.combined); batch.draw(backBuffer.getTexture(), 0, 0, width, height, 0, 0, width, height, false, true); - batch.setProjectionMatrix(cam.combined); + setProjectionMatrix(cam.combined); } private void renderGrid(PlayerView view) { @@ -1150,9 +1143,10 @@ private void fillViewportWith(Sprite fill) { startY = (int) (startY / fill.getHeight()) * fill.getHeight() - fill.getHeight(); var endY = (cam.position.y + cam.viewportHeight / 2 * zoom); + batch.setColor(fill.getColor()); tmpTile.setRegion(new TextureRegion(fill.getTexture())); tmpTile.draw(batch, startX, startY, endX - startX, endY - startY); - + batch.setColor(Color.WHITE); /* for (var i = startX; i < endX; i += fill.getWidth()) for (var j = startY; j < endY; j += fill.getHeight()) { @@ -1657,7 +1651,6 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure timer.stop("tokenlist-12"); } -/* timer.start("tokenlist-13"); var tokenStackMap = zoneRenderer.getTokenStackMap(); @@ -1667,22 +1660,16 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure && !tokenList.get(0).isStamp()) { // TODO: find a cleaner way to indicate token layer if (tokenStackMap != null) { // FIXME Needed to prevent NPE but how can it be null? for (Token token : tokenStackMap.keySet()) { - Area bounds = zoneRenderer.getTokenBounds(token); - if (bounds == null) { - // token is offscreen - continue; - } - BufferedImage stackImage = AppStyle.stackImage; - clippedG.drawImage( + var tokenRectangle = token.getBounds(zone); + var stackImage = fetch("stack"); + batch.draw( stackImage, - bounds.getBounds().x + bounds.getBounds().width - stackImage.getWidth() + 2, - bounds.getBounds().y - 2, - null); + tokenRectangle.x + tokenRectangle.width - stackImage.getRegionWidth() + 2, + -tokenRectangle.y - stackImage.getRegionHeight() + 2); } } } timer.stop("tokenlist-13"); - */ } private class LabelRenderer implements ItemRenderer @@ -1753,20 +1740,32 @@ public void render() { } } + private TextureRegion fetch(String regionName) { + var region = fetchedRegions.get(regionName); + if(region != null) + return region; + + region = atlas.findRegion(regionName); + fetchedRegions.put(regionName, region); + + return region; + } private void renderImageBorderAround(ImageBorder border, Rectangle bounds) { var imagePath = border.getImagePath(); var index = imagePath.indexOf("border/"); var bordername = imagePath.substring(index); - var topRight = atlas.findRegion(bordername + "/tr"); - var top = atlas.findRegion(bordername + "/top"); - var topLeft = atlas.findRegion(bordername + "/tl"); - var left = atlas.findRegion(bordername + "/left"); - var bottomLeft = atlas.findRegion(bordername + "/bl"); - var bottom = atlas.findRegion(bordername + "/bottom"); - var bottomRight = atlas.findRegion(bordername + "/br"); - var right = atlas.findRegion(bordername + "/right"); + + + var topRight = fetch(bordername + "/tr"); + var top = fetch(bordername + "/top"); + var topLeft = fetch(bordername + "/tl"); + var left = fetch(bordername + "/left"); + var bottomLeft = fetch(bordername + "/bl"); + var bottom = fetch(bordername + "/bottom"); + var bottomRight = fetch(bordername + "/br"); + var right = fetch(bordername + "/right"); //x,y is bottom left of the rectangle @@ -1784,22 +1783,22 @@ private void renderImageBorderAround(ImageBorder border, Rectangle bounds) { // Draw Corners - batch.draw(bottomLeft, x + leftMargin - bottomLeft.originalWidth, y + topMargin - bottomLeft.originalHeight); - batch.draw(bottomRight, x + width - rightMargin, y + topMargin - bottomRight.originalHeight); - batch.draw(topLeft, x + leftMargin - topLeft.originalWidth, y + height - bottomMargin); + batch.draw(bottomLeft, x + leftMargin - bottomLeft.getRegionWidth(), y + topMargin - bottomLeft.getRegionHeight()); + batch.draw(bottomRight, x + width - rightMargin, y + topMargin - bottomRight.getRegionHeight()); + batch.draw(topLeft, x + leftMargin - topLeft.getRegionWidth(), y + height - bottomMargin); batch.draw(topRight, x + width - rightMargin, y + height - bottomMargin); tmpTile.setRegion(top); - tmpTile.draw(batch, x + leftMargin, y + height - bottomMargin, width - leftMargin - rightMargin, top.originalHeight); + tmpTile.draw(batch, x + leftMargin, y + height - bottomMargin, width - leftMargin - rightMargin, top.getRegionHeight()); tmpTile.setRegion(bottom); - tmpTile.draw(batch, x + leftMargin, y + topMargin - bottom.originalHeight, width - leftMargin - rightMargin, bottom.originalHeight); + tmpTile.draw(batch, x + leftMargin, y + topMargin - bottom.getRegionHeight(), width - leftMargin - rightMargin, bottom.getRegionHeight()); tmpTile.setRegion(left); - tmpTile.draw(batch, x + leftMargin - left.originalWidth, y + topMargin, left.originalWidth, height - topMargin - bottomMargin); + tmpTile.draw(batch, x + leftMargin - left.getRegionWidth(), y + topMargin, left.getRegionWidth(), height - topMargin - bottomMargin); tmpTile.setRegion(right); - tmpTile.draw(batch, x + width - rightMargin, y + topMargin, right.originalWidth, height - topMargin - bottomMargin); + tmpTile.draw(batch, x + width - rightMargin, y + topMargin, right.getRegionWidth(), height - topMargin - bottomMargin); } private void renderTokenOverlay(AbstractTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) { @@ -1853,10 +1852,9 @@ protected java.awt.Shape getSquareFacingArrow(int angle, int size) { private void paintClipped(Sprite image, Area bounds, Area clip) { backBuffer.begin(); - Gdx.gl.glClearColor(0, 0, 0, 0); - Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + ScreenUtils.clear(Color.CLEAR); - batch.setProjectionMatrix(cam.combined); + setProjectionMatrix(cam.combined); image.draw(batch); @@ -1867,13 +1865,6 @@ private void paintClipped(Sprite image, Area bounds, Area clip) { tmpArea.subtract(clip); fill(tmpArea); - /* var handle = Gdx.files.absolute("screenshot.png"); - if (!handle.exists()) { - batch.flush(); - var pix = Pixmap.createFromFrameBuffer(0, 0, width, height); - PixmapIO.writePNG(handle, pix, DEFAULT_COMPRESSION, true); - pix.dispose(); - }*/ backBuffer.end(); tmpWorldCoord.x = image.getX(); @@ -1899,6 +1890,16 @@ public void setJfxRenderer(NativeRenderer renderer) { jfxRenderer = renderer; } + private void createScreenShot(String fileName) { + var handle = Gdx.files.absolute(fileName + ".png"); + if (!handle.exists()) { + batch.flush(); + var pix = Pixmap.createFromFrameBuffer(0, 0, width, height); + PixmapIO.writePNG(handle, pix, DEFAULT_COMPRESSION, true); + pix.dispose(); + } + } + private void disposeZoneResources() { if (!initialized) return; @@ -2108,6 +2109,7 @@ public void modelChanged(ModelChangeEvent event) { return; } if (evt == Zone.Event.TOKEN_CHANGED) { + updateVisibleArea(); return; } /* diff --git a/src/main/resources/net/rptools/maptool/client/maptool.atlas b/src/main/resources/net/rptools/maptool/client/maptool.atlas index 9db7b1bdf7..60873e3ea6 100644 --- a/src/main/resources/net/rptools/maptool/client/maptool.atlas +++ b/src/main/resources/net/rptools/maptool/client/maptool.atlas @@ -15,7 +15,7 @@ blueLabelbox index: -1 border/blue/bl rotate: false - xy: 69, 41 + xy: 216, 210 size: 3, 3 orig: 3, 3 offset: 0, 0 @@ -29,7 +29,7 @@ border/blue/bottom index: -1 border/blue/br rotate: false - xy: 177, 174 + xy: 170, 166 size: 3, 3 orig: 3, 3 offset: 0, 0 @@ -50,7 +50,7 @@ border/blue/left index: -1 border/blue/tl rotate: false - xy: 85, 115 + xy: 85, 109 size: 3, 3 orig: 3, 3 offset: 0, 0 @@ -64,7 +64,7 @@ border/blue/top index: -1 border/blue/tr rotate: false - xy: 85, 120 + xy: 107, 136 size: 3, 3 orig: 3, 3 offset: 0, 0 @@ -85,7 +85,7 @@ border/fowtools/bottom index: -1 border/fowtools/br rotate: false - xy: 33, 33 + xy: 25, 26 size: 6, 6 orig: 6, 6 offset: 0, 0 @@ -106,7 +106,7 @@ border/fowtools/right index: -1 border/fowtools/tl rotate: false - xy: 85, 125 + xy: 33, 33 size: 6, 6 orig: 6, 6 offset: 0, 0 @@ -120,14 +120,14 @@ border/fowtools/top index: -1 border/fowtools/tr rotate: false - xy: 25, 26 + xy: 99, 133 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/gray/bl rotate: false - xy: 162, 163 + xy: 170, 171 size: 5, 6 orig: 5, 6 offset: 0, 0 @@ -141,7 +141,7 @@ border/gray/bottom index: -1 border/gray/br rotate: false - xy: 162, 171 + xy: 221, 231 size: 6, 6 orig: 6, 6 offset: 0, 0 @@ -162,7 +162,7 @@ border/gray/right index: -1 border/gray/tl rotate: false - xy: 170, 172 + xy: 243, 246 size: 5, 5 orig: 5, 5 offset: 0, 0 @@ -176,7 +176,7 @@ border/gray/top index: -1 border/gray/tr rotate: false - xy: 93, 134 + xy: 162, 164 size: 6, 5 orig: 6, 5 offset: 0, 0 @@ -197,7 +197,7 @@ border/gray2/bottom index: -1 border/gray2/br rotate: false - xy: 106, 136 + xy: 112, 136 size: 3, 3 orig: 3, 3 offset: 0, 0 @@ -232,14 +232,14 @@ border/gray2/top index: -1 border/gray2/tr rotate: false - xy: 216, 215 + xy: 177, 174 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/green/bl rotate: false - xy: 243, 248 + xy: 10, 5 size: 3, 3 orig: 3, 3 offset: 0, 0 @@ -288,14 +288,14 @@ border/green/top index: -1 border/green/tr rotate: false - xy: 216, 210 + xy: 182, 174 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/highlight/bl rotate: false - xy: 2, 2 + xy: 85, 119 size: 6, 6 orig: 6, 6 offset: 0, 0 @@ -309,7 +309,7 @@ border/highlight/bottom index: -1 border/highlight/br rotate: false - xy: 221, 231 + xy: 235, 245 size: 6, 6 orig: 6, 6 offset: 0, 0 @@ -330,7 +330,7 @@ border/highlight/right index: -1 border/highlight/tl rotate: false - xy: 235, 245 + xy: 2, 2 size: 6, 6 orig: 6, 6 offset: 0, 0 @@ -344,14 +344,14 @@ border/highlight/top index: -1 border/highlight/tr rotate: false - xy: 85, 133 + xy: 162, 171 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/purple/bl rotate: false - xy: 46, 36 + xy: 221, 221 size: 3, 3 orig: 3, 3 offset: 0, 0 @@ -365,7 +365,7 @@ border/purple/bottom index: -1 border/purple/br rotate: false - xy: 93, 129 + xy: 33, 28 size: 3, 3 orig: 3, 3 offset: 0, 0 @@ -386,7 +386,7 @@ border/purple/right index: -1 border/purple/tl rotate: false - xy: 64, 41 + xy: 250, 248 size: 3, 3 orig: 3, 3 offset: 0, 0 @@ -400,7 +400,7 @@ border/purple/top index: -1 border/purple/tr rotate: false - xy: 33, 28 + xy: 93, 122 size: 3, 3 orig: 3, 3 offset: 0, 0 @@ -421,7 +421,7 @@ border/red/bottom index: -1 border/red/br rotate: false - xy: 221, 221 + xy: 216, 215 size: 3, 3 orig: 3, 3 offset: 0, 0 @@ -442,7 +442,7 @@ border/red/right index: -1 border/red/tl rotate: false - xy: 182, 174 + xy: 46, 36 size: 3, 3 orig: 3, 3 offset: 0, 0 @@ -456,14 +456,14 @@ border/red/top index: -1 border/red/tr rotate: false - xy: 101, 136 + xy: 41, 36 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/shadow/bl rotate: false - xy: 2, 10 + xy: 130, 142 size: 12, 12 orig: 12, 12 offset: 0, 0 @@ -477,7 +477,7 @@ border/shadow/bottom index: -1 border/shadow/br rotate: false - xy: 148, 158 + xy: 85, 127 size: 12, 12 orig: 12, 12 offset: 0, 0 @@ -512,14 +512,14 @@ border/shadow/top index: -1 border/shadow/tr rotate: false - xy: 130, 142 + xy: 148, 158 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 border/yellow/bl rotate: false - xy: 248, 248 + xy: 64, 41 size: 3, 3 orig: 3, 3 offset: 0, 0 @@ -533,7 +533,7 @@ border/yellow/bottom index: -1 border/yellow/br rotate: false - xy: 41, 36 + xy: 99, 128 size: 3, 3 orig: 3, 3 offset: 0, 0 @@ -554,7 +554,7 @@ border/yellow/right index: -1 border/yellow/tl rotate: false - xy: 162, 158 + xy: 162, 159 size: 3, 3 orig: 3, 3 offset: 0, 0 @@ -568,7 +568,7 @@ border/yellow/top index: -1 border/yellow/tr rotate: false - xy: 10, 5 + xy: 85, 114 size: 3, 3 orig: 3, 3 offset: 0, 0 @@ -591,3 +591,10 @@ grayLabelbox orig: 129, 21 offset: 0, 0 index: -1 +stack + rotate: false + xy: 2, 10 + size: 12, 12 + orig: 12, 12 + offset: 0, 0 + index: -1 diff --git a/src/main/resources/net/rptools/maptool/client/maptool.png b/src/main/resources/net/rptools/maptool/client/maptool.png index 5d4835f8be401aae3e37ddb20552b33f207f81d1..e9a943c7b007457d5b5a35cd7a131b6d4292050f 100644 GIT binary patch literal 22466 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 TL08Tz5cr)lxTs&Ii;4I@zu9L5 literal 22070 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 BajgIV From 0fee7d85870b0cbae141e9520c093b931bff407c Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sun, 18 Apr 2021 12:01:29 +0200 Subject: [PATCH 032/139] add default font and path rendering --- build.gradle | 2 + maptool.tpproj | 2 +- .../maptool/client/ui/zone/GdxRenderer.java | 344 ++++++++++++++++-- .../maptool/client/fonts/OpenSans-Bold.ttf | Bin 0 -> 224592 bytes .../client/fonts/OpenSans-BoldItalic.ttf | Bin 0 -> 213292 bytes .../client/fonts/OpenSans-ExtraBold.ttf | Bin 0 -> 222584 bytes .../client/fonts/OpenSans-ExtraBoldItalic.ttf | Bin 0 -> 213420 bytes .../maptool/client/fonts/OpenSans-Italic.ttf | Bin 0 -> 212896 bytes .../maptool/client/fonts/OpenSans-Light.ttf | Bin 0 -> 222412 bytes .../client/fonts/OpenSans-LightItalic.ttf | Bin 0 -> 213128 bytes .../maptool/client/fonts/OpenSans-Regular.ttf | Bin 0 -> 217360 bytes .../client/fonts/OpenSans-Semibold.ttf | Bin 0 -> 221328 bytes .../client/fonts/OpenSans-SemiboldItalic.ttf | Bin 0 -> 212820 bytes .../client/fonts/OpenSans_Apache License.txt | 201 ++++++++++ .../net/rptools/maptool/client/maptool.atlas | 182 +++++---- .../net/rptools/maptool/client/maptool.png | Bin 22466 -> 40428 bytes 16 files changed, 629 insertions(+), 102 deletions(-) create mode 100644 src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Bold.ttf create mode 100644 src/main/resources/net/rptools/maptool/client/fonts/OpenSans-BoldItalic.ttf create mode 100644 src/main/resources/net/rptools/maptool/client/fonts/OpenSans-ExtraBold.ttf create mode 100644 src/main/resources/net/rptools/maptool/client/fonts/OpenSans-ExtraBoldItalic.ttf create mode 100644 src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Italic.ttf create mode 100644 src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Light.ttf create mode 100644 src/main/resources/net/rptools/maptool/client/fonts/OpenSans-LightItalic.ttf create mode 100644 src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Regular.ttf create mode 100644 src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Semibold.ttf create mode 100644 src/main/resources/net/rptools/maptool/client/fonts/OpenSans-SemiboldItalic.ttf create mode 100644 src/main/resources/net/rptools/maptool/client/fonts/OpenSans_Apache License.txt diff --git a/build.gradle b/build.gradle index b7bd674f95..ff8c1ebeca 100644 --- a/build.gradle +++ b/build.gradle @@ -378,6 +378,8 @@ dependencies { implementation 'com.crashinvaders.vfx:gdx-vfx-core:0.5.0' implementation 'com.crashinvaders.vfx:gdx-vfx-effects:0.5.0' implementation "space.earlygrey:shapedrawer:$shapedrawerVersion" + implementation "com.badlogicgames.gdx:gdx-freetype:$gdxVersion" + implementation "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop" } diff --git a/maptool.tpproj b/maptool.tpproj index 0c5c03b209..17acc5ef11 100644 --- a/maptool.tpproj +++ b/maptool.tpproj @@ -32,7 +32,7 @@ limitMemory=true useIndexes=true scaleFactors=[{suffix:"",factor:1,resampling:bicubic}] -inputFiles=[{path:src/main/resources/net/rptools/maptool/client/image/blueLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/darkGreyLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/grayLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/border,type:Input,dirFilePrefix:border/,recursive:true,flattenPaths:false},{path:src/main/resources/net/rptools/maptool/client/image/stack.png,type:Input,regionName:null}] +inputFiles=[{path:src/main/resources/net/rptools/maptool/client/image/blueLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/darkGreyLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/grayLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/border,type:Input,dirFilePrefix:border/,recursive:true,flattenPaths:false},{path:src/main/resources/net/rptools/maptool/client/image/stack.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/whiteBorder.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/hexBorder.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/isoBorder.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/redDot.png,type:Input,regionName:null}] -PROJ- diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index a37efe2662..3637bf3a3f 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -2,9 +2,15 @@ import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver; import com.badlogic.gdx.graphics.*; +import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.*; +import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator; +import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGeneratorLoader; +import com.badlogic.gdx.graphics.g2d.freetype.FreetypeFontLoader; import com.badlogic.gdx.math.*; +import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.scenes.scene2d.utils.TiledDrawable; import com.badlogic.gdx.utils.FloatArray; import com.badlogic.gdx.utils.ScreenUtils; @@ -29,6 +35,7 @@ import net.rptools.maptool.client.ui.Tool; import net.rptools.maptool.client.ui.token.AbstractTokenOverlay; import net.rptools.maptool.client.ui.token.BarTokenOverlay; +import net.rptools.maptool.model.Label; import net.rptools.maptool.model.Path; import net.rptools.maptool.model.*; import net.rptools.maptool.model.drawing.DrawableColorPaint; @@ -44,8 +51,11 @@ import space.earlygrey.shapedrawer.ShapeDrawer; import javax.swing.*; +import java.awt.*; import java.awt.geom.*; +import java.text.NumberFormat; import java.util.*; +import java.util.List; import static java.util.zip.Deflater.DEFAULT_COMPRESSION; @@ -71,6 +81,9 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, //renderFog private final String ATLAS = "net/rptools/maptool/client/maptool.atlas"; + private final String FONT_NORMAL = "normalFont.ttf"; + private final String FONT_DISTANCE = "distanceFont.ttf"; + private boolean flushFog = true; //from renderToken: private Area visibleScreenArea; @@ -95,7 +108,10 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private boolean initialized = false; private int width; private int height; - private BitmapFont font; + private BitmapFont normalFont; + private BitmapFont distanceFont; + private float distanceFontScale = 0; + private GlyphLayout glyphLayout = new GlyphLayout(); private CodeTimer timer; private VfxManager vfxManager; @@ -126,6 +142,8 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private Matrix4 tmpMatrix = new Matrix4(); private Area tmpArea = new Area(); private TiledDrawable tmpTile = new TiledDrawable(); + private float pointsPerBezier = 10f; + private boolean showAstarDebugging; public GdxRenderer() { @@ -140,6 +158,10 @@ public static GdxRenderer getInstance() { @Override public void create() { + var resolver = new InternalFileHandleResolver(); + manager.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver)); + manager.setLoader(BitmapFont.class, ".ttf", new FreetypeFontLoader(resolver)); + width = Gdx.graphics.getWidth(); height = Gdx.graphics.getHeight(); @@ -150,7 +172,6 @@ public void create() { hudCam.setToOrtho(false); batch = new PolygonSpriteBatch(); - font = new BitmapFont(); backBuffer = new VfxFrameBuffer(Pixmap.Format.RGBA8888); backBuffer.initialize(width, height); @@ -159,13 +180,13 @@ public void create() { Pixmap pixmap = new Pixmap(1, 1, Pixmap.Format.RGBA8888); pixmap.setColor(Color.WHITE); pixmap.drawPixel(0, 0); - onePixel = new Texture(pixmap); //remember to dispose of later + onePixel = new Texture(pixmap); pixmap.dispose(); TextureRegion region = new TextureRegion(onePixel, 0, 0, 1, 1); drawer = new ShapeDrawer(batch, region); vfxManager = new VfxManager(Pixmap.Format.RGBA8888); - vfxEffect = new FxaaEffect(); + //vfxEffect = new FxaaEffect(); //vfxManager.addEffect(vfxEffect); backBuffer.addRenderer(new VfxFrameBuffer.BatchRendererAdapter(batch)); @@ -179,7 +200,6 @@ public void create() { public void dispose() { manager.dispose(); batch.dispose(); - font.dispose(); vfxManager.dispose(); vfxEffect.dispose(); disposeZoneResources(); @@ -228,6 +248,10 @@ public void render() { if (darkGrayLabel == null) darkGrayLabel = atlas.createPatch("darkGreyLabelbox"); + if (normalFont == null) + normalFont = manager.get(FONT_NORMAL, BitmapFont.class); + + ensureCorrectDistanceFont(); vfxManager.cleanUpBuffers(); vfxManager.beginInputCapture(); @@ -238,8 +262,35 @@ public void render() { copyFramebufferToJfx(); } + private void ensureCorrectDistanceFont() { + if(zone == null) + return; + + var fontScale = (float) zone.getGrid().getSize() / 50; // Font size of 12 at grid size 50 is default + + if(fontScale == this.distanceFontScale && distanceFont != null) + return; + + if(distanceFont != null) + manager.unload(FONT_DISTANCE); + + var fontParams = new FreetypeFontLoader.FreeTypeFontLoaderParameter(); + fontParams.fontFileName = "net/rptools/maptool/client/fonts/OpenSans-Bold.ttf"; + fontParams.fontParameters.size = (int) (12 * fontScale); + manager.load(FONT_DISTANCE, BitmapFont.class, fontParams); + manager.finishLoading(); + distanceFont = manager.get(FONT_DISTANCE, BitmapFont.class); + distanceFontScale = fontScale; + } + + private void loadAssets() { manager.load(ATLAS, TextureAtlas.class); + + var mySmallFont = new FreetypeFontLoader.FreeTypeFontLoaderParameter(); + mySmallFont.fontFileName = "net/rptools/maptool/client/fonts/OpenSans-Regular.ttf"; + mySmallFont.fontParameters.size = 12; + manager.load(FONT_NORMAL, BitmapFont.class, mySmallFont); } private void doRendering() { @@ -323,7 +374,6 @@ private void copyFramebufferToJfx() { public void invalidateCurrentViewCache() { flushFog = true; - // renderedLightMap = null; updateVisibleArea(); lastView = null; @@ -737,7 +787,7 @@ private void renderFog(PlayerView view) { timer.stop("renderFogArea"); flushFog = false; - createScreenShot("fog"); + //createScreenShot("fog"); batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); backBuffer.end(); @@ -810,6 +860,7 @@ private void renderLabels(PlayerView view) { } private void showBlockedMoves(PlayerView view, Set unOwnedMovementSet) { + //TODO: implement } private void renderAuras(PlayerView view) { @@ -849,8 +900,6 @@ private void renderLights(PlayerView view) { timer.start("lights-3"); for (DrawableLight light : zoneRenderer.getZoneView().getDrawableLights(view)) { - // Jamz TODO: Fix, doesn't work in Day light, probably need to hack this up - var drawablePaint = light.getPaint(); if (light.getType() != LightSource.Type.NORMAL || drawablePaint == null) @@ -881,7 +930,7 @@ private void renderLights(PlayerView view) { fill(brightArea); } timer.stop("lights-4"); - createScreenShot("light"); + //createScreenShot("light"); batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); backBuffer.end(); @@ -1055,6 +1104,7 @@ private FloatArray pathToVertices(GeneralPath path) { } private void renderDrawableOverlay(PlayerView view, List drawables) { + // TODO: implement } public void drawString(String text, float centerX, float centerY, Color foreground) { @@ -1080,10 +1130,10 @@ private void drawBoxedString(String text, float x, float y, int justification, N if (text == null) text = ""; - glyphLayout.setText(font, text); + glyphLayout.setText(normalFont, text); var strWidth = glyphLayout.width; - var fontHeight = font.getLineHeight(); + var fontHeight = normalFont.getLineHeight(); var width = strWidth + BOX_PADDINGX * 2; var height = fontHeight + BOX_PADDINGY * 2; @@ -1109,10 +1159,10 @@ private void drawBoxedString(String text, float x, float y, int justification, N // Renderer message var textX = x + BOX_PADDINGX; - var textY = y + height - BOX_PADDINGY - font.getAscent(); + var textY = y + height - BOX_PADDINGY - normalFont.getAscent(); - font.setColor(foreground); - font.draw(batch, text, textX, textY); + normalFont.setColor(foreground); + normalFont.draw(batch, text, textX, textY); } private void renderBoard() { @@ -1405,8 +1455,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure timer.start("tokenlist-8"); - // Facing ? - // TODO: Optimize this by doing it once per token per facing + // Facing if (token.hasFacing()) { Token.TokenShape tokenType = token.getShape(); switch (tokenType) { @@ -1496,7 +1545,8 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure int facing = token.getFacing(); while (facing < 0) { facing += 360; - } // TODO: this should really be done in Token.setFacing() but I didn't want to take + } + // TODO: this should really be done in Token.setFacing() but I didn't want to take // the chance // of breaking something, so change this when it's safe to break stuff facing %= 360; @@ -1708,7 +1758,7 @@ public void render() { // Calculate image dimensions - float labelHeight = font.getLineHeight() + GraphicsUtil.BOX_PADDINGY * 2; + float labelHeight = normalFont.getLineHeight() + GraphicsUtil.BOX_PADDINGY * 2; java.awt.Rectangle r = token.getBounds(zone); @@ -1802,8 +1852,10 @@ private void renderImageBorderAround(ImageBorder border, Rectangle bounds) { } private void renderTokenOverlay(AbstractTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) { + //TODO: Implement } + // FIXME: I don't like this hardwiring protected java.awt.Shape getFigureFacingArrow(int angle, int size) { int base = (int) (size * .75); int width = (int) (size * .35); @@ -1818,7 +1870,7 @@ protected java.awt.Shape getFigureFacingArrow(int angle, int size) { AffineTransform.getRotateInstance(-Math.toRadians(angle))); } - // TODO: I don't like this hardwiring + // FIXME: I don't like this hardwiring protected java.awt.Shape getCircleFacingArrow(int angle, int size) { int base = (int) (size * .75); int width = (int) (size * .35); @@ -1833,7 +1885,7 @@ protected java.awt.Shape getCircleFacingArrow(int angle, int size) { AffineTransform.getRotateInstance(-Math.toRadians(angle))); } - // TODO: I don't like this hardwiring + // FIXME: I don't like this hardwiring protected java.awt.Shape getSquareFacingArrow(int angle, int size) { int base = (int) (size * .75); int width = (int) (size * .35); @@ -1883,7 +1935,253 @@ private void paintClipped(Sprite image, Area bounds, Area clip) { batch.draw(backBuffer.getTexture(), x, y, w, h, (int) tmpScreenCoord.x, (int) tmpScreenCoord.y, (int) wsrc, (int) hsrc, false, true); } - private void renderPath(Path lastPath, TokenFootprint footprint) { + private void renderPath(Path path, TokenFootprint footprint) { + if (path == null) { + return; + } + + + if (path.getCellPath().isEmpty()) { + return; + } + Grid grid = zone.getGrid(); + + // log.info("Rendering path..." + System.currentTimeMillis()); + + java.awt.Rectangle footprintBounds = footprint.getBounds(grid); + if (path.getCellPath().get(0) instanceof CellPoint) { + timer.start("renderPath-1"); + CellPoint previousPoint = null; + Point previousHalfPoint = null; + + Path pathCP = (Path) path; + List cellPath = pathCP.getCellPath(); + + Set pathSet = new HashSet(); + List waypointList = new LinkedList(); + for (CellPoint p : cellPath) { + pathSet.addAll(footprint.getOccupiedCells(p)); + + if (pathCP.isWaypoint(p) && previousPoint != null) { + ZonePoint zp = grid.convert(p); + zp.x += footprintBounds.width / 2; + zp.y += footprintBounds.height / 2; + waypointList.add(zp); + } + previousPoint = p; + } + + // Don't show the final path point as a waypoint, it's redundant, and ugly + if (waypointList.size() > 0) { + waypointList.remove(waypointList.size() - 1); + } + timer.stop("renderPath-1"); + // log.info("pathSet size: " + pathSet.size()); + + timer.start("renderPath-2"); + Dimension cellOffset = zone.getGrid().getCellOffset(); + for (CellPoint p : pathSet) { + ZonePoint zp = grid.convert(p); + zp.x += grid.getCellWidth() / 2 + cellOffset.width; + zp.y += grid.getCellHeight() / 2 + cellOffset.height; + highlightCell(zp, getCellHighlight(), 1.0f); + } + if (AppState.getShowMovementMeasurements()) { + double cellAdj = grid.isHex() ? 2.5 : 2; + for (CellPoint p : cellPath) { + ZonePoint zp = grid.convert(p); + zp.x += grid.getCellWidth() / cellAdj + cellOffset.width; + zp.y += grid.getCellHeight() / cellAdj + cellOffset.height; + addDistanceText( + zp, 1.0f, (float)p.getDistanceTraveled(zone), (float)p.getDistanceTraveledWithoutTerrain()); + } + } + int w = 0; + for (ZonePoint p : waypointList) { + ZonePoint zp = new ZonePoint(p.x + cellOffset.width, p.y + cellOffset.height); + highlightCell(zp, fetch("redDot"), .333f); + } + + // Line path + if (grid.getCapabilities().isPathLineSupported()) { + ZonePoint lineOffset; + if (grid.isHex()) { + lineOffset = new ZonePoint(0, 0); + } else { + lineOffset = + new ZonePoint( + footprintBounds.x + footprintBounds.width / 2 - grid.getOffsetX(), + footprintBounds.y + footprintBounds.height / 2 - grid.getOffsetY()); + } + + int xOffset = (int) (lineOffset.x); + int yOffset = (int) (lineOffset.y); + + drawer.setColor(Color.BLUE); + + previousPoint = null; + tmpFloat.clear(); + for (CellPoint p : cellPath) { + if (previousPoint != null) { + ZonePoint ozp = grid.convert(previousPoint); + int ox = ozp.x; + int oy = ozp.y; + + ZonePoint dzp = grid.convert(p); + int dx = dzp.x; + int dy = dzp.y; + + + int halfx = ((ox + dx) / 2); + int halfy = ((oy + dy) / 2); + Point halfPoint = new Point(halfx, halfy); + + if (previousHalfPoint != null) { + int x1 = previousHalfPoint.x + xOffset; + int y1 = previousHalfPoint.y + yOffset; + + int x2 = ox + xOffset; + int y2 = oy + yOffset; + + int xh = halfPoint.x + xOffset; + int yh = halfPoint.y + yOffset; + + tmpVector0.set(x1, -y1); + tmpVector1.set(x2, -y2); + tmpVector2.set(xh, -yh); + + + for (var i = 1; i <= pointsPerBezier; i++) { + Bezier.quadratic(tmpVectorOut, i / pointsPerBezier, tmpVector0, tmpVector1, tmpVector2, tmpVector); + tmpFloat.add(tmpVectorOut.x, tmpVectorOut.y); + } + } + previousHalfPoint = halfPoint; + } + previousPoint = p; + } + drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.SMOOTH, true); + } + drawer.setColor(Color.WHITE); + timer.stop("renderPath-2"); + } else { + timer.start("renderPath-3"); + // Zone point/gridless path + + // Line + var highlight = tmpColor; + highlight.set(1,1,1,80/255f); + var highlightStroke = 9f; + + ScreenPoint lastPoint = null; + + Path pathZP = (Path) path; + List pathList = pathZP.getCellPath(); + for (ZonePoint zp : pathList) { + if (lastPoint == null) { + lastPoint = + ScreenPoint.fromZonePointRnd( + zoneRenderer, + zp.x + (footprintBounds.width / 2) * footprint.getScale(), + zp.y + (footprintBounds.height / 2) * footprint.getScale()); + continue; + } + ScreenPoint nextPoint = + ScreenPoint.fromZonePoint( + zoneRenderer, + zp.x + (footprintBounds.width / 2) * footprint.getScale(), + zp.y + (footprintBounds.height / 2) * footprint.getScale()); + + + drawer.line((float)lastPoint.x, -(float)lastPoint.y, + (float)nextPoint.x, -(float)nextPoint.y, highlight, highlightStroke); + + drawer.line((float)lastPoint.x, -(float)lastPoint.y, + (float)nextPoint.x, -(float)nextPoint.y, Color.BLUE, drawer.getDefaultLineWidth()); + lastPoint = nextPoint; + } + + // Waypoints + boolean originPoint = true; + for (ZonePoint p : pathList) { + // Skip the first point (it's the path origin) + if (originPoint) { + originPoint = false; + continue; + } + + // Skip the final point + if (p == pathList.get(pathList.size() - 1)) { + continue; + } + p = + new ZonePoint( + (p.x + (footprintBounds.width / 2)), + (p.y + (footprintBounds.height / 2))); + highlightCell(p, fetch("redDot"), .333f); + } + timer.stop("renderPath-3"); + } + } + + private TextureRegion getCellHighlight() { + if(zone.getGrid() instanceof SquareGrid) + return fetch("whiteBorder"); + if(zone.getGrid() instanceof HexGrid) + return fetch("hexBorder"); + if(zone.getGrid() instanceof IsometricGrid) + return fetch("isoBorder"); + + return null; + } + + private void addDistanceText(ZonePoint point, float size, float distance, float distanceWithoutTerrain) { + if(distance == 0) + return; + + Grid grid = zone.getGrid(); + float cwidth = (float)grid.getCellWidth(); + float cheight = (float)grid.getCellHeight(); + + float iwidth = cwidth * size; + float iheight = cheight * size; + + var cellX = (point.x - iwidth / 2); + var cellY = (-point.y + iheight / 2) + distanceFont.getLineHeight(); + + // Draw distance for each cell + var textOffset = 7 * distanceFontScale; // 7 pixels at 100% zoom & grid size of 50 + + String distanceText = NumberFormat.getInstance().format(distance); + if (log.isDebugEnabled() || showAstarDebugging) { + distanceText += " (" + NumberFormat.getInstance().format(distanceWithoutTerrain) + ")"; + //fontSize = (int) (fontSize * 0.75); + } + + glyphLayout.setText(distanceFont, distanceText); + + var textWidth = glyphLayout.width; + + distanceFont.setColor(Color.BLACK); + + // log.info("Text: [" + distanceText + "], width: " + textWidth + ", font size: " + fontSize + + // ", offset: " + textOffset + ", fontScale: " + fontScale+ ", getScale(): " + getScale()); + + distanceFont.draw(batch, distanceText, cellX + cwidth - textWidth - textOffset, cellY - cheight /*- textOffset*/); + } + + private void highlightCell(ZonePoint zp, TextureRegion image, float size) { + Grid grid = zone.getGrid(); + float cwidth = (float)grid.getCellWidth() * size; + float cheight = (float)grid.getCellHeight() * size; + + float rotation = 0; + if(zone.getGrid() instanceof HexGridHorizontal) + rotation = 90; + + batch.draw(image, zp.x - cwidth / 2, -zp.y - cheight / 2, + 0, 0, cwidth, cheight, + 1f, 1f, rotation); } public void setJfxRenderer(NativeRenderer renderer) { @@ -2012,8 +2310,6 @@ private void paintArea(Area area, boolean fill) { if (area == null || area.isEmpty()) return; - var pointsPerBezier = 10.0f; - tmpFloat.clear(); for (var it = area.getPathIterator(null); !it.isDone(); it.next()) { diff --git a/src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Bold.ttf b/src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..fd79d43bea0293ac1b20e8aca1142627983d2c07 GIT binary patch literal 224592 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/net/rptools/maptool/client/fonts/OpenSans-BoldItalic.ttf b/src/main/resources/net/rptools/maptool/client/fonts/OpenSans-BoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9bc800958a421d937fc392e00beaef4eea76dc71 GIT binary patch literal 213292 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

JU{jq<7f203t|Ihq? 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

93Tg2c}Lc^2oc3nPS$ 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

r{ZX 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/net/rptools/maptool/client/fonts/OpenSans-ExtraBold.ttf b/src/main/resources/net/rptools/maptool/client/fonts/OpenSans-ExtraBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..21f6f84a0799946fc4ae02c52b27e61c3762c745 GIT binary patch literal 222584 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�LN9 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%0DpzNyo5m`c zPC}=++G%1VoX7}AqY+XzJDY}(^fW&pCn;QV1eyrDXuxa6Ix(QdjD^I&&=Fez$y9^r z_Gm^IJu1n$gUncR%$Y{JVjWIp%PWdKG=X7DWv(5Fo7h|GDO6pEJk_L1Jw+vjnW-10 zX}IlW%4vx{nxg2;q!9$>GwVMibW^c(_PDhxg{;!DGZjN%jbT%m_a&Z;jy` zIqQ?8H%HF*3~vwt$&GB9|4I6}U?a5!T9R8ia>63HAxm0l7=}twa@sCb+eIoZR%wY! zOI2E?(sGqnsI*e0RWhxst*b*?S68jl8kriNI^Y_GRoHJ7)c~JT;8O}5Pi;}HJfBkJ z&{eu@QZKxuKBUk+Q-OxPgofV3z{k&~lQe)FH`ts3cpO@mnr-*g7?a)n#2aLW~Lxxy`1xaA7B zT;Y~0+zN$Lp>XICShla?3WZala4J+iD->RZ!mCht6$-CH;Z-QS3WZmp@G4b3D^)!! z6@I0{uT=Pz3cpg}S1SBUg17cRfcL+hH6!YYE_16RfcL+ zhH6!YYE_16RfcL+hH6!YYQ;gdDnoUx!mb;}u2DQF-6&SNQCy?SP@~FFqsrjuiBVjm z%21=qP@~FFqsmaD%21=qP@~FFqj;!Mai~@JwTgpU#X+sYuT}W93cpryP^<836@IP4 zuT}W93cpt2*DCy4gq;uT%JS3cpU_*D3ruglA*S!guuCC{cP?qExfQxo^;Z2fxH{@JkE_zr=9xOAH6U#BlIS3R+Ptw#0DoOAM#}B_4nDO4|zG>8G@<@ST22+X~<5r?jo` zoqkH&3g79cw5{-+eoEU4zZ(2_YMnkxsj9!zM`>Ht-|3^Yt?FN0Ci@y~mnZug`4wtk z<%oT%98O=Qb5uF16%W;_98N#=)H?l?QdJJ8pVGD}htp4KTb0A8G@<;^6dC+E#IJ`YCOzI5_>3wpARQeoEV_{!Txo zZB>7#pVGFfztc}WwN5{!RMpq%m$a?w>-0<7R`qrIWuc+&3q?lV*x~6b3_|E(v3!AX!3gJVCvGml-rVj2R|`bm`?tlN>&(0k2V# z9LO3aXcqE*H@REp8Gnt8moueP5$l18hcv$R|)Z62+Eo}f*lGE9j^x{C&*BdR?Q`?4vIz5)9l?8ma9Xk}YJ1!5$4;N4AJH!Y+ngo{+hi!z&8UvUHXZ&*n}I#j(lRdM>ZfTk zR!+pEm8$_|?EceqIL^Z{m-`rUaV)3x>n`LuGR-3Pr)me&%EnS!4_-&>5|?VN>Z(O5 zU8m9;RQiZYKT_%EPRjCB>a0U&tk7wLYys6HPfHtKqeI(iS_A!Q+UxYkw7vAlwYTU` zXz$RUPFn@kmgZ<@YeU*r?HuiW?L+M&?PKjz?Q>dL*iCB$uVPozDy)}iMbdmao6)+T zov7VpE$io23dwV*tx;Pi&pGGEYl%*wBZAHuOXrNIGa0Qp8l>oQ>M`Wg^^D4dtLdC^ zbj}27?fX*eolGrze>%bl`79vN6?6t&LD#7($oqF!jM8+ul8L$5G`fPb8SEemAg!~M z`O3aarI4Qx7)MCcwL|FJF$Aq8_0xA{$h46@ZN;^EUP9K-i^(=hbUGscNzZ8y+W1!5 z9*4c!_@&0+_{FZwS(_GY`YM;D^KFCUt7+F!oH0+fk?BgCJxcJ&X_^soWzBZc^3%aG z&h%{oqsf>vV$c3pPhG#iHV=P(T83<60d|-c8>Z6AHKJFPTRJ@F)NHgvCbIe?c0Q0@0eG9(2L)E9lG_3&$qsN@ST5be!<916_uq? zp#mtQ2cm{5%qaEHv#$KtJTaGUF{Pg3!lIIjl8R=d1HVPfk z+5a1;EGa&LFu%~)aOKEKvNTO>*rFL5PUjmoXb;`_>EiMCoVKa$&t?jkMTRj-?jJ4p>w>#}XH1pbV{~d0JH{GgJfn$LGy&I= zK&2Tb8c&%7`pSN zwC_)Q<&$&Hxqa#6qp$to-22KaZW|~~9Cnfa?Xq1LpT6gUswubK{phwW%ij3rg-*Sy zWFdRD=<11&`EHo`=%;%(HS%)b#x;-pBk;xtZ@4zUy5qttT5~RX^P2m151#s9+uql2 zKIElGukm)i{OEqi-g{F;#tY@suPQoo?irVSa8LTQqiQNM)9(!LKjWSS&(*B|;Hsw| z=XZ>IddZ^`wy$sb``RN{#7{hJ;uUkMuig`Q>ck_yoORf5{O4=e^kr>a@%Pri=lkBi zY;^yF-+poP1=~hVeC?qL>)Re5Jv+8Z|Kx+u*UWr2?ctA#k8QoXzVOo`>U|H<|9sW^ z=I@?#!RuQV*HwS@O5cK9&yF8aW^6cfL{Dh0^o%#gN{Tba<}9Om+;BYRt`7BwJ>!gh z){ zYd&3l?Mddm-RIq!yQ}B(==po@U7Ua8f+N1T>xC7^?Z>bDX70+VJHFa}$+eRo<9knT zT>RFkwhxcq|D?NfUpwm2J6_*>?{VvTJq6<84P&pL?|#Z-=Pt{Ca!qm31^ZmQ&)u)} z%)Q|+Z#{6vS+gEIbK2&vdp9m$W)AG0cf-M(SM13fKkv#@-d}QmR_vkgA8vT{?({Lg zn0~@5N6vh9>Y5L)^gRB_U#3rb<)Pc>S6?#uxNTFnzTNu8M<;x8;*ITW=nG%=YtKwy zdi@1Y-g4TiTRz&A``O#RKW+QAXWK2~4!?c#{l8U;@rtqGrTlMv=2O@o9`%iJ-^n3!ze zVr&jc2sO0wd{2H!(a88qAt9Y^So!z&mp@RmzvuL|7tg+M_ux(JkNY=1dD|JwW3Oi% zy1n(WJ?D*mS6`g_xA`;YYUQ`R{rGtcFL{1?`}nVpDx2o-_pJZq%<|2*zxUoRwC|q| zUbt|^A9l`MxbBu;hbljt_0+qM|EcxW-_Abu$U85;^G|!1{qw#%9zN-dr*p3O_!r;L ze(vza`|Vdg^Q)s8j6wY$^gpcnad`2;dw*51@7`lZAA0Id)8B3RQHhP?Ms(wUcNZ-) zN{A5Zp#{~nG}U$&xfczz)2j~mqBy;@iLd=(k9AiL$Yo>nf(3Wf3ZtZuUhpNmrrf0W z;?5m)!(IPj36uzAkDV}lON|fM3HQP<4JYF(J%<|=P7w>2(26}cev*Z%K3G{UP@u9fukfRJsCru^2lum3y+H)n+F>Ezn&|J}l7Nl8XF7`Ka)}b^rUi zr`*wY1Fe`?I`M?A$6Gh$zVOLS*I66SKJ)aiX#w+i*RK3ird{y%vzIMu{Pqvi?|u2x zUzHp_b?Cv&Z~rm2pn3P{CmeD3K~ul{Z29q*ea`NDBzdJZ#*_YC2RvN<*pjV#<6lnd8tA>dzUS%kwYfJK z*S|8SZNU{U-Y|~s-1uVoIY!0U3&mk49KGbOo8Oqb-^M>*KW6cf{Pq`Te>d%}>sq#t z&fa-#-l9>(1-|Q^dc5_Z=g+$5v)BoT-osY>!?U^hg|klWUVhr7ZM#c8et-7%Y42|R za^pMK|FvyR>+x+Hzgw2QqB6H*N!uT*r~S?8{)6llV(LZQ27cU?`(+n%>k*^d2)nY| zHZ5SAzOH5I6NRzVI3#&@=WN3M|1y3Z{kAbHbtX5aPX5>DQmlXYoIsttFL^D?(L=^@ zSFPA~tZ|I7%m_}%q*mP>p4%PiqNmpbjCA!dtdARd=efz7ZrXD8$_Jlb-~0T6edioM zslYgB!h!1Ph1LR_KYV;yWn-VrN#4ascqSO*lDPD=q8_D$_%B7$BQrffr^hIR9;3ER z--PB)t^Fs0*xwN@+kUP!MI;M zv-0|b`yadNsPhlV$bYEh(j8Y#{q#p_BK7Y~@w->gf2s27P~^7p*ROfhcx3Cmld8U& zao5`$?TNIOKku@u-u!06+z)=Yr{>-G8;kA==D9b(s9o-uF#+F#K`vee3pgmQT*hTT{Er^Vz0#VszUBx39ST%QL%H4eoc$-i`0v zTYpXY(sy2~Ts>;}Xk##KEIr43tMsqyt&h9c?ioL!Z&AQJZPMh8KPs{D|E>JcNQFeJ ztgvEOS81(*QJ&J(XMU)wve8kHGsfonNWbahzNC$bgq?gAOCRf6X13Gk9z4_{|x^d-~LX|AFdj_nf(N>EB`tT-T?KubA3#_>6tF z-hI*2dooH+jK4L1*>`K7IHTd+qxe2!(HlNV=>P8!O$dqy-_0% z9iSg!(Cunl*|w5RMaglG-BCnC6M1{d|4G-a4pb)(q6Z@vx0A~crIU0ZDJlO}I;9-` z%!80H29lT4;7&^Oe>S)~DtVQ`f3`-UNa%;M_=6gS?dLA{T;dzPubUY(!^qBagK91qt!oN)4{Caog_=#`+;iHpAJ@vrFf9$yT<2%oL zr#Ifd_lrNwEC1;FBQlQLHGjk4amRY=KcC|MX7qWP&rF%Lv}WSfr+xPAmdkJXD!1gd zc{w-LoZnVE>(cKpH5(8AWpQ_Z-ll&xSF|+06&<{>z zZ{F!<(HYNedhLIf7Y!Wo!FiE4Ys`gO^ywE)eR=7%mt1?)6OGe)wtm{SYwvrm6&2IQ z7XH;UD7r}&J2+#;h9~~Nl|7#K6G0!Ir`pzUu=J%>Nuc&>d)e42Oqn7qW?1AqVZs=+%Nk8iW?4^7^E`S>s9_yGg&txDl6#mB00%OG00ABq%#UZ>PVVrG~Lo@Ri9DfDJ`Lw#LYhm!6WaF zx$^UO@&~d`e&YGBw*Siey>`sxpN3$`Z^GZ5dFQ3yPCat-^(EFV*KYaqnn}@P&%OJG zuNOU+{qmJ3_fPxP;r$y5zqn@O}LdWd;}+7J(UtMH~=efDus{**5_ZkwHapMHDyO$rKe)+%j9t z%*@Qp%tkY{(l)a+GxPEBu`(YuD_ga!d`#ia`#pCCMBk_X^M5~|7dV``_ndpq@BH@j zJHI=G5<-0OPau7=hUVvP4{;nId~9Dr{AT55W#^D6{#C;F3_!2Y+|rVv?iRHL*Jvkw zbB7Mg@G=cJi0kQu@E?{8jZfTm^|{-G&_igi8QV}hJ?7>3Izlx2F+tGSIkWU(=R+?L z67nnB4@{UovEi-8?XwBdenyDm^2FN4>BN^9F`g3bnu$~9PdJ_xUr0z4h79XfH@3wVAbp4U&UZ5aQ)&*KvacXu2i^4Zg;HO}HJH>MDt zegzmz(`SyKe)v||yM*+x;~6VqxTAradMEe&X0*EhpTv!UO~{Gy>$gkw_k}OqJ>1c% z+NTr=N8C`HKX^{LrUNjjR-*kQv=jQ8t4*r-=h@i&F49K)$p|9DlNu6FMq;{tWG&&* z$_ox&j~1nDlgy0!Va}RALnd&%lH=UntkZdi$a1P1QO22U6?G!xJ39Uby8 zQA?I7*Kn13LZ4-ALWAr8Dm_L&MUF~$w7@1S(})MZjU14fh?lUP3{X^%QrShKq}Rv+ zP9#~J=x7ou$VQ}YAs4JiV-CNrJnW2 zv#T&hB^w8&fxkw!DdI?(tj^IY^C1SAiqy&G6N9h_Weu*M!1V!Q;OiU*xOVZ7tP1xn z#GuF_26-9Uza@1-yR!zK48j;<66(oj*=Dj(_?0}NXd)YB#g3)IIkH_Sb!_LZI8O41 z$wkynLZ0IezsZp&Orzfl7f3mZPEevghq8^7^LdVVVLtlZ!CE)5BHqTB(q}~-`r^Lx zImaGW^NVmTkT8BH@NtLK2vwv~{sdd6W2I2#Sj1m(oaZh%eid5jo2Xl`{u(Fl9UFk3 zO~BiAh9{IF^f@eekVwE*D&I(E@M&Zf);R#rlrh{(_coD(d=1&baLJbv9ZClJACoB^ zdt{M}PNb18au{*HkxyXHJ8mjIA|)twC`b8gj@=U88SWn_iuI1Aj203d7%g0d(V=?* ztyG*wY@ZVMB?fA@S0XlRqPC76eIR0Xvg{5fk zq60p68$+634xBJrbT6QVZ~-(!&DPDH`G3`H?U-M}!GEj4qp~uzWBn4pF#IrB|3}UE zneo)$*5Gxv9>(*mmiQj){O`5nSm%BDIL86-zmCZW<5Njaz^ja3nY>82l4{3G?3xdB z-WRe^7dg&w=N+dR9od`@*0Sx6qn-C8d1Lrua@Va^%mz=Xa33Mm0qg!Mb?gcY>o0Xz{}RmWDB@ua7z3Oo>lC3Y**};*1uU6gFb|0 zv9(IHxrEwsToKOakR2@eGRe%x;VUyC6N+4Oh~9%qC#WPF%@D&~H82 zpi~iqaxOmaAe$AdfLAt`ii9b*pf)>ZOKUg{oSerRJxHL;rIVCpj%&hBNnV_~MFg)_ zI4;Pq;W+^^1$;5QOL_*+NcIB!C_jq(um`d@;O8P)h5I#%&7jLdQmhC=+a44piBm-4 z*;|e~l1^dcU~Z<57(d?Af#PjNo#O(YbJ`-nAn`oYb!mW2MRc9=@L(;;1>oV&1DAW8 z1-8&k{~!%0)m(#PBkH&LZ(*aM!-X-9jj;a*P~v$bsZc11hiWA$W&Q#48@SVC0C(DP z6FlWXZg-sG&7d*7BxchT?SN}LNtPR6*X+ci1fJzFWCG(=;SVywWshc~Zb4Zu93wGI zE@WrP7SJM&>2W+?0iD^vPjg(wbumgFN*T%wVGDefD~@Vx?}R)xk%jU|QbS1lmxOez zLp=)hdejM$ynwG=^siCYlREhq@SB{nkf7KB9Kzl_WT-HvkQZSZk4=xuP!m+f&> zy4i7^3OKZmUBXU>UD6GZ&n~@P2Y>Alsg${DRXVA2iv~>5fUTO8v-uPr&YI0D$q?f| zJ24B<(1)coSSaGsP>A9R(JHo(Km}w8vRA`k6!tho*%(|GK!;d}ia+bPDI16T?*Ya$ zj)ju^Kz^AF$(Wy41z0ztZa~d^JlHMSuaMapBtw$bJy>fi+D{XmG7mV0e8?vNR@nb8 z*dXHy*bFCc16SurG~{8IoWPffcB}*rHp8dQkhPNyn4^WsKlI8<)CS0+PJRG9wi`Od zRWseh^bCVlwhwd1qt6(}cDc@RLDDghbHHGbVNGl-jIm8|6R>S}`m3Eh&{=od7e-q~ zS6P@;$92}7b1}Up=@#r-1iQn|^c!?ZO=sOj!v}0I(_2h;Fg+*vHV@WL7*{bJ44toI z`cBe0F8au`fTtShCgv|QpY;y(Hhf`4AZTzKym1EpY&t2BWsxfQq6Lc6(6^1yKTL-} z2gz=N9vZCcP2jl<&t50V%)ZDAVB4+&XMg8w{r_~o6R-cHF8RB5$rf$u^tBwP{ua*< z;{Ac^F8S`1^S`Md^l3Wv!T+i|b@zX%eW5!xqiiGO?qSp$P}ZPa>t5(ihk^UT;enzO zCXhM8NyxPZ`?R+mqHx&pxiA+#Nt5GC;Q$#d9K~L78;KRZAY*wni>9^}&)bBRP488_`gWeEsh%)pxREKln@^E#yPk2yxXt*gnFT5sveB{S>1<~Q? za5whE(8SP2UbPOQgN?!%Ucenrv;tv7w=YW`WLA(qQujQZTU*^vMVj_46 zr9zFcLU>eoSNJTHgboZ{9J)31c<9N{n}C?;ef2uMUV=DLpX!2m79f5e5WoBY#3Nh~ zdv}9)93UouxZUAk_;*}&ypR8##ZKNK`$(-LpHar~gxDf36X!VU9Ah109HYoYM;2_> zY1YsNlc^5c~&S1w<`sj_aA7 zSASR2n!jtg|GpH_!Y%#@{z-l#{}jK8f13QnZzjL+&yXAZ7V;baEcu<^%CF-ep;6%O zo-~H`q9z(k<7jUhPy5gWaJ-o&(PWxJEwnF9rTu6c?N0~Lfi#_3=^&a<3upw5q~&xN zt)RncCAIO-(UEi%t)`=C4di7E9ZSd2@pJ;ejn>ggw4P3;Q)mO7N~h83bOxPC8|f@M zo6g~%=j!NY`V8GdpQT&*?feV$dAgmxKzGm=xk+3-{gM7ef2P0C>+}YA`8Rr#{!ag( ze{z%QE&3mB1NRvBIQIniB)5@!irYkQ)4%u~+{fHW?i215_bGRp`;0ro{ewHp{gXS# z{fj%#zsT?8bNH7y!cl%2Kb@b!&*U5VS^R9S2fv0(;*z;hTs0xq+!0l_%364q$vGVQdi(!hR#b3m20wj85A zr>&-~_K;)o7^7ZeY}@PM(KbCB=q9C=c8dFNt_rs2thU)THFdNfK$VuBQ&wpA9WtWQ z&PC?v>uP}v{G}TWeS;0&U41aXe{Uv03y=d08w?B$s}5Po7+lyF52&ckleZ(4X zve~&B*79y=i{CKTvbeLQ>+u>RXj?e6vdu0;=8rRG1LLb|?Tg2NyXqNXj2gSwtzd(( z&Bt4x8V?xJR}Y}`$4%1PWl?rHd#d{b;7RsK8~%YLUbmdpFTt1~%G*buYQ!*XoNQxu zjq7htT>xg(1JQXVCnJd-p#gaGwnDba6M&@&&IQ0{p>czY5%vRTnth+ueR0o!@R~Jm2VKURyp6Fauo-h1py3B7 z0AH0?77jHQ4ymdH2N-Np3u|D*36a?k3}dVeb`Aq(wJRf)`bsXCx1pm3H}pC9V9e-` z|8_;B5=8^zNOu{NXY|)s(qPir8(`RD^x5OHT>aSfeS_kHkIc;L98JzHF-~S)umS2o z`iYC>(5!b&jK`IX0C}v9H9@7JSqWawWcQqS4`2eKuQZM~+KhF2yS22Ep@^YJqKFF_ z5`CN$EG)0=e$@?GKoc>bS;CwPnf4r07Y-S6?YYu*C$7O?_c!NvHtXAz#=@a(j1orI zfCP}|+X-WLYhQ0H8(M;Kj1hWTuYveW!r!*nYGs1Ym_y%Y%pccg99r35>J8nqFn9r* z+lLg=!t#u`Sg65_y+*oX$X+X5F|?}k4H$p@it@^R9OW`=GHiPz&{p||9tK9b%dxxc zChMYS7i^?5Tqvdf!EaazSuC{*(hcc)>>)~|d(KX{N6FYjob#SW>bEyan#hVE!`MTD zv&Gsuf`EHU=e@4)hlKP)Vd9~R0x!XB&KUb(-L zA71VeR)I3CTo;yAUS7^cnj?k<`Z~fCf+I|henW~q!b(v}iqWCCym)&t?`!rMCc{vI z8N=~Z&8PFP^1OW9V477#3v)cf3Q+P`}uj}bZ47;X;hVGbVVZ}uDJP1VCR zX7#Wzb-H@Anh#UIsy?meHEIe!Vi+}(Vd-QVSwvnXHwgB>bg@5`(L?l+z2!qqrouxC z2aJzf=?FVrVUHZj{#%Ds+2t$jWLVXR%Dt4XwY98SLoz}N?TJGx?fMW~p?w@aXhQb- zlMGv9qsi1bYqp8~G~yTk8><^>2PA?E1|m_7yU&((h^bp1huL=K<#mbswyJertewPQ!Q{*cYN=2%oMe&Z}52aCAs9dK!q&%+_ z-QwJG-5z#(+3iP_K{Z9STXokx$bGQ;T=%!#Z+Q55SUtvj%=dW4<1LR<9^ZS$dp3FQ z_3ZG<_FAv@RTrses$WuHP+!+%Xdcq+)7%Y+dpub~K87d8v3=0fxhNlfL z8x9(d8vbec#_(sjEZjdlI=nA-wzlx`;SJ%RgkKE*C0sOm8N-ZyjQx#yFesCZ3yf{X zr;RTg4;xPzzcBt_yc6LSQ5NxB#J-555&w+%HsV&KBGNZ9EV55zW@Jg^h{!3C3nN!X zJ|6i|@k5WekN5w~FMa_=d67_1-J5eX2&PRP8bvs%Xog2L_dTX>j`n~8g z(O0AY=sCFO+dWVBywvljp8tta#stRnis=_q7&9`aE@oCtOU&ajTVr01IUMs@FIlgO zUK4xG?X{xU#$GS=dZX9LUSIXPZXzZRQ-CSP)X!9C8ewWMJ#1QQde-!+>0Q%jvGUmB z*tg>P#|@6Fj++*@D6TE;@wm6*F2~*Mt?eD#yR!E~z4!IL*!!<|OMGGc(D=Ieh4Jg- zcf`LH|5^Oi_@Cl`@8i)&+owmLh(57>9_q8K&+0yV`@GTTy*|J9xtkD}U`QxSs7e@< za4_MWM7PAs#QMaC5?3c~PTZY%B=NL4-n`O$ILRleA!&cojpTmGW0LEWUrT-~`Ep8n zN^Z)slus-^mSRhboe9L23ZH?4cea}%kazy$;ixj zIO9;pm5d)Ue#`hPlV-YQdS{N#oS6A)=66~Bv$kdZkZsPMk$osfkz>oL&-pm#%iQqX zUb%_6S-C~I2lL$Wyz|2I%z5+jHs!sQ_etKxyz6<6eD8c?eo}sRer5jT{KowC`MdIu z=6{v{XF*6oZo!O#tp(Q$y$cP6dkPN}zFqib;eU$wqJW~3qSZye3?4RkZ?U$xs`!Hv zw-WCXTgmj2){-qHub0Y8&7~!!50^etY9FE;k}_o7koSiCP^K<3m!+2#mQ5?$P`0P+ zWZ8E^{f6cZZ65mZ(C^AE<;{QpJM4*JH!JuG_lk!q_6>I*-eY*&@YLbi!-ouCIDB7a zY2`&*Z`*v^yH%c5{#9XBJ*$eVCREL>T2ZyJYUc=_5rrcjA8~DD&d3)>emP1rs%q2= zqi$ChR=+yhXY}rxteT>l@|tIBeyG*g4y_$uJGXXe?Yi3E#*~c}#_k-KIIeBn@o^pF zqsNzwUow8@_)`r3n3t3Or$#bmF^8IzYx zJ~a8(lzvm{raUp_lLp$5)G)qbUxQ=n%&C{B{yg>ew1{bsOxrl^=(M}jlcrCa{>=2V zGookI&3I+TA2a*UoH=u6qoQ$Q^!9!_|8)x+N|>bL08MK>1rUA%Dd(Pmk5c5_Sfzni~X z(s#+)C7YJ)SaNX5@g-j_`FV-BRI@aEY0}c1rIkw?mNqZlu=Itc2bZ2$dSU4=OC8I+ zmqjh>w=8E_*|M?AW-V)3_V}_Fm%Xv<=W+v?KQm8<8iUcCCunxZv_)_kz$v$Zj6 zQ`hFNty(*I?V`1htbK0nzO^5$J-7C|wf|Yit@B+Mwk~O1|8>RdD%RDlo4#(|x|Qo5 zhgIcRo{yk{ZRd%CcV)s`l!xOQ zcT{>xO@gc*lzMWWiYl9@KZmE&P2N5vH6T8r4@EeXCZ(7Y{r$9ZV|WxjCLY>McXi}1 znK^vaqN$Z*If37I=fvcPhZIbmHyGm{;CBdKUC_um1&{H}rxGy~kFij=@+}UM$7`Mu z#eCU;j$b(qD{Li*1k0Fj6O4#)vNcdCczE=no?%3z3H0;!#IH){%ga?h7%<)JlZySW zx7ln)aaEW@VOFp?jI3A;78J~BW?j!VVZbz#?Bey&FL5Xs4Dd*Ee)AQ zy{7HNzo{4fI=G$vcJk@RuZwf(N>;8Pze!ufCRT19KMtRN0CGw;!V`-osn!r}IPnVi z3iIGSDr|CI7dG4$q~q}`3m`Z|PfvHjY4Rp!39G5z02h#I1%<+BiHi32_ctddCq+d^ zMI|RiSS)6RzmAVGhRgl5{yKku!6e@LCTeHQ#fKmMWc;2%lUF@K-7kmi414aW)mv6( z6c*22y@X!bciHo;cQi%Rl9n>5=OFXI51Q?l)h#R4h2qWJzCDxk`(?cf)RI!i&x&B# zN$`gk=>h1INr=@e#2g+Q=;kW~DR?>Z?$XoK&7UN)0vM@*$`~N##1ud%({hXjl9PNG zKhVExkXPURNIWkLYJWX(aB@;%08N{5viaF9Q%r7sQ{Re(~v7sP_}QI;KiDV|$iv$ITtin}A;F_*r%azHcarAqk|nHK<3gQdb1w5VHFhWrfwI8O`lgK~$GC zYami1DU%qkT#^{KeH@dPQ%+fN%864#m~>=`hxu07CE^L{dFljv~@u3F7 zd24-ihA56^{Y4ctQ*6IIC`r7KSH;$%<$-Wg|4;9bGh$kv&{2y<8TTcC7pa=_7GJ#wdl7%;kJMlT-?nbFx;7Ghv z`Y|+=T<0(SNPHHNa4%XTZWV8G1ymz_`c>RcsAD5e^be8i(3Hx(NC}7s_9Ath!jR%? zp?2l0)#Byk>X_>~@y-|XsS4?gl<4S6ZV~q$(&FkV8RE-r)EESXteGjB<8&7y{fN(<*qF90+?n*bHVI2@CKWC9aUjZXx` z(?2p?&VhL$x<24#p=Fo&&kz6c`7Rp!Ve32N#2CxetkAfAlM5sH^Wwk6gq!U@;85b? z?S+>O{}y*WR$hFBR=h9_=?auQ0sE2){!|g4gGxc5ZgL!{Fulgqn8DziVv#Ep(bT}p z#il(y`V=Rhe3F|&EqvIrhq88;!ocK+c@!0zYW#B6hfBs`k6fGJzYIsUYAT^E}(z|c@?ID?O zGC8~j{H$`~m_%BAsoahCk@?6fY-)v%53i8(PK?L^@&4iFJH*@+?8Z3T`O*!G8ZeRWWni-ARax2+dKk^Vfg*agSAR!M3&qx zg~W)kP05-_X1G#(nN^Y)(bwrFNal(=cl`UO7mlnEzq@q>in(a>{HyM}^84oull94s zkM5V9Dm(SY0Rq@d!)5^xp zSz0o>Qz!FdrYM@J@r~pu2aK&0QlXNc^WvQ8}%K#nOFPx}8~& zOM`~SG<6OvnUW2^HgYd?4opcULHJ%43{G-Kcv?mRVa6~Z;$+@bCPcQI`BNS5a#lM% zx|_C(=frQ@88s%*b+CUL@R9-=B0#1WXdl6f#DT4XU63Jdu!b(Ch*!psGMnQ^&A^Dh zu!t080)M(afj`a5sY<*huB2-5H}G=Um9x?o17bvVg_TGBS(H6F!m)`@D2SGs(|$LUeSUo)mw$%-eD<1 zbZ^-4t{nuEHMrzHOx`39H@Z95>X-`%Sp)PqY8IGDh3G|C{NymU5gfC&20ek-=$$*q@u8etn!S+FF+;{`uEi;<*>59$Pq(%4b%If6h509^L&T zeVw}F)P7xuJb#+Cc);L@cpaa%OT4_Td64zRw$0RUeU3P$+7wf}f7ZDR2gTRUt^aaP zLfjRT@r{}Q*0e~x~(tZw4Uw^iWVR%og#&{PV-c6OdhT4GZwc~5K%`OckF zJd;ysY-x9A;G>gZ!ucxEx=^g=zNi0b5|@g{XrwnM1VmCF@jCO+;YjVQDC}EN3Jx@2 zhFh4yi}+)w7H8GTb!xS4h)u2bB3=QdHZLFIUur|g?)tjZvNEf#k-3bkfl6x3Xykd9 zVMSuYwJ$D<=PT>P)8h9X7rE@b%Bn@_b2G{+8Z(B<4!p2Qylhj3te^Dl9loWgd_u<; z;;GvFY$T~rQipv(8N4LqzFR%Cq}ZkvJQc+@PdHYcK2n!cWbu|8^~9SwOL`cQD1OG2 zJ!7X&8oI0T;h%J#Wop`-8m~%q5;STpE$iStXG!$q1Y;lVhrSdE7j8Y_B&Hw zshLunyPIDlelL#yQg%SR)c)#f%I{d%+bHb z?VQi4i$P&FC9EM})2S&%p zoe_bqVcDQ`r#K&jR%ePa{pkK|5!*Nn_k;MJix$nGMG%9Q1c4oh;O?#|wz&&}f3Z#I zq)8XF%z*@kx+ntM&G~7}i582IyTFZk@s9W#oQKO_(M2Lv9oX>HQ_D`yKa-wg{+6$7 z|8@xSXLOLGJy#}+C#%+r-#jPY_WItnF4=n$)|f2t#gGM=O3qV89!Uo2&0Dx`He3*o}?Y*IX!kS-fGze<6*idJO|H# zY+~Q-#WmJX9$PqhY6vb`#dD_BS449NO%Ir}LN@5m+T&O1I#+j78ZFT3;l(LEl$4i& z{}@oxrdM*&A^B`^a1$|>@P$~gr*?{Sd96{Ey};5ZJHFsD`gTC3J03|}mqcfFNP8}D z9Df3%%K$4y{#uERU|`1734P%0NGt#x{YEb$m;dfciSBqtQHp1@B+%;V!?|;A#7hS4 zBJTnT$nrKKE(DOgF$#203TRBZB4wuU3~VBkIk}SloAVMs5}%u$*iWq#;lqogM|WJq zBsT>w=%UDPKC|Av=Hy!WNX(`tTC2*7S5ZNs5?7bUr%r_g@RvFGh*zHvByV0KT38=JP%8JOU(TV zDPV5+J^Vw*iJ8qi#VyYP2vBQ*2X&tKv)IzbeK_RGv+F>en$XeZ=&<^fZCAi&w;8*@3HK+3c#cJZY`sc4@5| zL{!49-f|UD1wc@&s{0lk^l7IGmzIry3GZ4tywGl2O}>?KG~}BPu8aBGJfPvOo}v>! zp7?Uj=;0Gy8dHtMpA&CG!=+3Wt7slF;FLhXn?H$%c8Fi^Xl&d@!*Sw(m?VK#>6cwMQD=RG;l+1#a=m?8l(7$On{1S=K3IzyLLF>--3BwQ?Qrygrp zU+yVZ995Y|PtVRs=CmC@%MKhrvHAM}9qo8ukH$2N88`^MWrF`Z7k&iWk7$XfR`01- z;V7=e79jA@w|sXEb}y*cxigX?X3n4<+bDJq>G5a8FU7y6evn)KMP)%zKy1zI`lUA> zyYWuz%k!++nbmV<()a%TpM-c?ot!r?H8?)LwEBbDOV2b;hEeRBk}xcH_`84(S-`@# zz>b3WSyc*NfMye%%E-A-V=9d)HLg*d|BHAuTM%-^_k~6ThK}Irh2ZX8c-oI>t!{qq zya2}TRLN|U#{>Q0EJ_BUaXCO1U)ipY(!~AZ)#azAd3;1$k9y6op4{Ud2+c?lTt4-~ z1=c~>VNT16U)0>fFT^Z}9LQQRizjq}m*A##i*V!JkZ;U0M}!4NM`0?^3u@O-i!EG= zh5vzW=`e{!b@bt2jnZpCpffnwe#!jEbn9D57!x`3${36p0RJ;s0b$f)d&0YGf;A=$ z&#N@VQ>OLfwJsGfYLwIegyQqoDpIgr#s|sU!K6G#ul1~^CA2h1)r7<9r5!Dz+0!tr zLo809GgWdrrtW)QX#alm)*f^qcL#cB%F{2keBSX2)TB}T6Z+S&6f1;Uf=!OF1_(;6 zGD69_BU9PL@oq|vLS}iP3lyf0ctC*V;=gcKEPYhmBW7{tOLS`!)X}>g-_e_*7vBEe zBbw;B4inSx+cCpJ%%GHT=v*zKGKEXWJ8|e76vSSSywUv~o9B!3=lw!A@Ef_%_U4Wg zoQ1~`Jau3!fyMmY0IiQghHXQMO$IC|sj|fBKSdV+3WAjo0Uo)ypq8AQyPNh9uWuGN(p&ty?N%jTCV?r}{DvU&1wV`Tth)-akBG(qE@gcc3AAe6j=8v&0E+bbe zv&Qf%onbTVLI6hh4UE6e46u?DN2K)ZRn$api6>RczDvrsY=87pYx&|tB}+Fp&i%@yq#e*)Ld5z9`yKvZQ28|BTwBoG8A8rafIl&#LF}hrvMx!8dKYXWv4J{Hd zE*B9xScZ_9Q33QT5SJOqN&7uc&P!V)7PbJS-1?ypr7IJ}Q^;vvnh=$w?2}fI@br!~ zmuDqbB}es4sP3n=4p}JIUVHW7w79@aXZDGY9ObKLzCUhI@tpTZKLTE1STX=hlCQ7u z$h9dn#P=RFu!{f#M-_;Lx?)7mmtNrcb z37UJbRJ_u^=ADrvhV||#o{H`5q=+m`!a+F0fd{tX5)S;`{gn7J1k9>=5C@3d0PoD_ zxQ`sZ((2(RfKFUN;e`H5PT?~U{@npamehxbZP~u=@=VaG6etjy2aJepE1_|J{oGVy z1rq4Y_u99CRFBMguXde_Q)UAPI@n6U73@`H3l1gT}Y8)n?}i5 zVJLwKS2%ZIoc5nTzetVmy!|B{u+P)Bmu#$^{(jhidiRiqhk9y%IeV54eRcP`6X!LL z#hb<|g!#tfuF!4PN+k7ktA z;hfGHDn`V~dAMW&@3Anvj=B!dqS4d!nUP;O8?#jx`Nycy3X%Pi)x2{#n(zM~t1-@Q%>%*Tnk#tZ@w(1`eZ^yNIzoFlvz1OXHshhEl4#vlJWB z#Ys%+z|!}|PMuoYx9?iRf9O)Nz2}ebvl*r~zT@PZ4Z_;H$?u&~l(E^Woo7C^zK9p1Jxg)xV4X;^pwN+2up#_11p(CsU+6YaLdAJvLy&9p)F{;oOGhBoB8heN0{aZJj_S%Cz3^S7t}-z ztE~1{2Fuj{CyNBB#&+B3A29Qna=%5g%^1iW0&%A}FDr16(lV#e)>gFcQe&4z%BWub z*NZfA*82sir+2Sq^;9L3zl&54* zY|__Dr1wz{+9)(D#b*CC>qRf2;mGt_LP;3>!V4HRT-u3w_=I|dx*<`rz~-mn-STa` z%L8$`LtW_=P|i|r1><-rxk8c!MHF`Fa0PV!e3RJz$G?}4+%hC9E2*x&_U5JOhlbD3 zSYs|q&%Hude)O+&YDw%FX)v18`aLma_nS#6?Iv?pNUU)>^Hp&o%O94Ng7@@Rjfd7- zn`2XZd8=jc&}1%n%r2Rvi7eR2yb%ktaL$Mva{w$EvsZlb*i!-Jn_|9PNx1~7PZuwh zYp5|^yqLLYebIFK=-ZXQUKKBj&4YWSvsr84^;|`kZvY9ldU`0-eojI2mlOdrs?K90 z>2!!~-R`-9>`G3r#f7EShRmW%Z-^gzDpMYBU}8p>Hv7`KvAv#I!A0NQuw~S+m!GI_ z;zo2lS%w)aVK>fTMrd9ui0LPbl<_hZRb%Uzo-XY^%+M;>y$$4`34d5mn}d}~8Xk2E z8@bIwL&ppGab9D}IQ3n;s!DN+PoU2lNC?}#>AYlKeqNCX+sJ}sy=1&ku*{3d+*E2e zms)e~-oUUv?0l1jo3M$KR4!A!(u91Tmh<&c_8)LWoRmQul*-<{cGKNjw*aNWyYvKY z#+K^6e5x7x!!u%_&>)fngZIv%Ux^XTJN(Vx(sL42j+M~&DnKRe;$(6^d8C|IA@0+Q z;OLdO3!I?lxCY5#ZpFFOq?<@=xe&QV@!>BXym}&>BFa)binne1BWlm_?o&s~%SR^9o$hDpQTzOY=7B?sy_2;|7gv?4jPkfj@!HDO>DD~~zJ&v6 z*x=E(9$Je z@SsGV0dLPca$iJcM|DBRriztBS}yeB}5=>?{5gXU3Zp(ZHnMl0IXn zQ7KOS0wqUFlNP2=etN*ziJ8?&=H}GNPY;|}TR5C+=|6ymH0WY_1Y1+Zs||tCVFB=q zH;8+<0-+grQagPe0=GgFE#(2ab~MMlS?UhcBuI&nD9L7}>uKI*v4T6uPUaRj*v5zk zuBN?MmWE@v!iISzciOOyP0&>=3nK(t+b={{ZsS4}nhKjrfsA$qRVwI%*>Nz}MoWaZ zhIA&uv3RP4V`+s7uIgK}c#{TR(|>1J(6FFnOhS5{bzoZFih}jqw4W8=^@BvZ(fHUC zzNzBZk^W=fpIVZg*i$@F%yL2;*C7QT0h(}1;6Mw3^--PCriW^ySvGOt~h zUSvz~_B)(r#E3V4nCOkTJ}8o8iMHrK3!O#Bwjv6hf~BuTBe^On z(v=**0Dimok~bFBRMb>1Jko43H62`7Q#qx$>A<4iR92BbXoM}(I*dCza^%7{7Ml7j zd9Asuu6ktC!KRq#xd)r7s;!l_^Z`|spk)y>WE^D0pA59>!0?7ZjlR1j-EN-?i6+uT0GfBhoYxAwYU2axyJ2AlxFn*1S^G z9g4dYe93evMr?_>YPuTub=+%j(PsWMz1Cqo)qLvhxABj=h*yXYBW!jOacXuN?sHH; zNKxUGb0#8AS!elR^e~fmN#<4U2gQ%u-vEvyafTg_@2BZQ(#RldIG-R-#ocKX=ebp6gVQGX+KYN=KogWw>y3z@Cl5fEn7TyJmK(k#T zh=O2`B&AM21UnPvelT^oWn@KEukSA%vX2|Fa!`MBk3p$_6phqJir1#@={w9`n>}P; z{*ncBYGhnNWkEi#EPo_9YNC1T&IyygNJ{tQ-Qq-i>U9X#C|4PbAjgK1C zGj|)6`R0V1$`Z^)DP_P_sqlla6Zv>b9Nu{Ccjq{b9E{{lLQOI!`e^}Sr1XKoN=r}d zI#F3hubtRAc3dUCx9_cmM+OdhYhmrkfxz|*$ItRoNRc0+;>kGq4V1eRZ?$`vJBO1H zZ_eG@-8-mPxNl+*qJNzy?97V0bQaT>i8wm%R3yNdObXEmKFmL72kI8BkAU-a_~@K; z-p;Qt9a%Y|ZQjEh&Rx5DddH5DGuvmKq$7_Xr_~?7FK+wnQ*ryT=bxe8Tb`ksXP*&o zY}q3I@-%;P!JNf2v#we1T>9$wvQzzk{g~E#cwF4}@iB47XQ$}M54VWFZh4w|Z{0$@ zpLtgN6iqfcy$?UZs@bmuQiq({lt%NKQ{=))~YPh(}rjJ8Fo&~+7O)?9VI*3Gp(W{zG6)J zJlnj>OFBLo+?1I-V94@8eUjPkW&kOYc?jvq67eLO*F9u1FRBFDoWV(7#1fH78R@JB z(2Z0n-kK)vJIEQ4hA4=2Z%X z+RIC(lDYZg_(-GT+*EF=U=#FXaCcr{tN;mO{O3%#z&Q=hk=VS6{xX;{<|P>E|6mH? zqHXk9@##->*dhyQx;0|Em zpxj4zRH38_l0l~_))2)$ppm3Yl-j{vM_%qp*wA2Py!v_sB1y=ZKMmc$tR>R|5{Fp2 zDdrtxc8?vid(7C~wPSaW`K2T|sbp}9Ww20H`||j4uhfj$RWoMi7;{mPIk~h1+yK8> zNXBid)y>o6ffQI4v1SfV=P$*F`x9ZsXZh3I0jidgVSf|1i94y6coUWp-zk{K z7Xf}9%kNZ&asK{Pj|KRoN`WqeCDNI>BX?yyvc)J2-1!cxiE5|hr5nek%qicyc==1| zYhI`6T;3;Vhn9t#BVykf)NjG)oViW-iVaFKxKut_b^_cIZS~QI>Ov#Dym_ceohl;C zTV-I%f-wcWMyH0wYC1D88Rnb{6rLB1g_A|XUC{8!)8>sV`0VBSbpz8^_I+~3JX1~X z@K}9G{kWlWV44H0ym+T#wL<14$+Z7d<9?Aw1C;p~t(z z5V22KgdQp3Nbtet{aDkp^kAHLVXXL#@au$=>Xc7Gb1KCHZo;Py!tT#o=f?$TaSp&j z0qSm{0G4phLJ*yC04bRq@Uxhav@_!j6GD`#sAMSuu(a7HE-Yz4@4(q~>967?xiU*T zc==0+0CYTAoF3aNX~A5!J8N18Y)-)UYHmY(NR3=*Y_@nWcCvtX%z#3`ZuDlq3~fkG zGUJ=5-g)Mol-$ohIsY>^Uu>6~|H7BI`P{in2}RtAG;%(8*?j{z%Y8rZR%PP}ONi(e zJBw;uGNWwl(is)i-0u2?LkeckC}kKhidq^5ZQxDZU-NR~5id1kav8ICoz#kE?=sM^ z7oKb!99kQYwZ8CFz`md7w}zZ@^GV3>(HaxUIHM8V7YNV7jc5+I$>qErXVBPKN(O`N zEK@8rUrQiaAMv?ntK`BJ2UFkyji?Agw{?X~>YZ{h++W6$d z=cs%OVm~+8Hzy&_+Np`DQt9R4QkYEW;J2`>c4sBLElxs)xoR3MKG5-Ru~HPNc0MgS z$|ZE%IYo^O*8#~~Y-%1P5#c=h`= zWbMMCN={~d>l_Y680(Ag(mad4QKaclLKU2j_W~uDPGVhI&!gz+4|!vw9%7@C*`yhx zvc6l;x7)bb2kaKN@bN;k6mD#88 z;@}QD?YghTbI^In^|M&++b?iuJk)({)wcY&xQC9+z4{}P`^GI`$$fNH=N6))og0^4 zHfz)Xr1wP{rikCM{Jxe+1^vrULMxXMzzIPyZ0zpEb5#Ety`Qug1Yx8R?P0~0q=bWdZ_mE zoL=hUf<(BY@No5!)6$9oz&_7K;;0c+1%KfTS#b(fRm1m4vWB=}w^w5G#d*HU6Sc}$ zMUiFXg#<5W&QiQ9%o87v*TS7KU+JJ9L1&~=3SN<0b;KC5bWgI4ISq2@Tjba={7I5G!+&94fyeVO;rxW9je@VEY zo-SOl9x~r?>)MSQjKw z_d~++vxLRnddzYBct0dkkJx)XXrW{I{g6mKvL(toXQ_8Qb3Y`|Jji^NGXFea1&{+7 z2v4!Z=8ppvP89^=`EY(LHSgZ$0gj_fCHdloG?qg{kfdRhb)^Ktl~k0jYNC5!rK7|O zagpddcP$q)ZBI4Q0{iaEwkPn7Tqd%2Zi&TWBxk;{j=H@x>tSRozI($-Bl$>)Uy;6z zSAfb$yK_~Y{OZhUlGdH*lAA?R56+2RMt_#|)UC%HasUC42|jh#yf zv<70f{^6m4?xDy>^d*7avbs7?DqI_DXEHn6RkKWAo1+(GoZ58+u)SzGqSV}~ih%ub~ z=AU=KxI8H#NE`jMa@OMxvYNari#1UHQ) zfu)fU5E1@}n<*DB%?T{Z&Wu`sWaXShWEV^-o%bY%8ZXW|kFZ?tq9WD8>?iHD*fIRQ ztOlgTu>GVIMMR3eE5kw9`P$I1tM{^CM$SVP%;|oQ=RI>o{80R|KTCNS`(lT_Xm;;j z36&{)Txasb^pRcJF-7I8NB2#8Wo>63M88;Sx%J$jlE$NB)^U~2j0lD;#QhCIGq9E8 zw5Jr`*6G6HY>AFYz+`kjF44h>L|6M)-P-5i@dxR2x=kJ%X= z6T9fhPUqK4BmC~vHRAgcFHl)0FQ5nipKd+oIBK0eJX}2-f1$^7_j=Gm5$pmusH*!I zuSsw?XQ_7};{cFwRO^HUnuPKEB79GB4_JMp)yEGEArJQR@@-!JJmPPzBZ_!L z5us0_qAmVX*we@PCYqB8ba}Yand}REPv9jpEg#81GrtYY!6yJVc+$gqQ|7;iadaP1dTeoOud#3I2{Gy7F zn;v6S14e}7awa`P7}aQ*kF?tRsMads19HWvinp#om7q>+u$6w-t$hx5QfR+Vx}Uw* zP78rxw1;(nev34}G(Ii+UTVK@{>LS3JLj+e#Yy!T7p{3SftC~XELu@$O$vP0 z_l7UG%9qafrSZP$z9qhVurKwcimje@&&!_tGEX|kllJkndX{?fT2Jcf3ELcRPK+PL ze$1K=q#Aaay=^4BmvIs0-R(2pKWJEIDsg*A9y01*=l`|e~7z(K3>2g;0bcyd9PC;FazyO_HxF<*aitgI0_hA^q7u$V8I=z*D$p(}qg@u*)vh3O2t0h& zql?ZDj6e&qkw$wLot^DWdYv=WBeu9a_H=FMB+ZJPCU!t3sYwKAS-i)Wop7<&{X2sfQZ7&mx1%#X zA@9lEtFNu>%3#>%Oyi54#1}|edMr0n?8lF}&&Y=Ib7Wqqzek@-JH_Xu7f%uz6D%j#q_Z`r zRE;UV)0)MeL70PYW@m{#i}#*x8lk>@1ZZxg6@xESW72agtY{yB4G`y_#dREEh<*vy zCf0z==4aIre7ZT&&7mv66SM|B8>HEC3vbdY8au3_S~E)>BeCOqZ0WFy>es}3Bzjjt zmS7(-0+9lE^Qn zB3Ot7O~ju>sW52?A;I#zShm>lWcMdTnryc|BYQo$_1;qt44hL$iJH>S*|h_2%j{Ay zUb}G3n(H@b%rDD{Jb&^TmhnQLVaU`pUB9{I?+^5@d3D}O>=tRrdj%J#3OWqb)Txv- zcckPj!Nua1W&^E)2a`HbQaLQRSRJ88_#D3}K7SLaGUC0p!D9c_ zIjc44>Z-k-6>;O=6dXiz>R7e<-d(-#O+45lM(85eG(dA+9l^`TYDT9Rp-PM}Ae!D= z?$>dIg@SVG2sN6;>IhyQ^o&5~Umc<5GciJW=Mm^EsUr+x9t+5Oo;@SbS)vh$a`4;H zD*F4z;Kf?hz^P+s^imJzPn5fL^->YYfZyxu{XIHC2gUnS34k7wV2`?bpQnU05w3q8 zBMa(r(_K{o)ti3b_lo3XOr*+k%rEN6~jlYt$m=MH3zoUhRsBK=Mz7Jqjy= z@=sxa_9IMMKbAsimT=hKlE3I%m|j{P+s!cUg=J5LP2tT=@S>Lwj~>IDf7#akIR{%5 z!;HDg$_2BLm^ytnH%bb5)7P!wCCbX{IK;FcUgoyMpZr(GRmU|XO%hQ7lXN~+*mb&Q&}X@4-r zR&n0dF>3fXw~pcdnW_`P85o03B_XHd9gnzwrfgh%UhVlDT8aAZ@>y|bsB;d|Oi<@k zC4{^NJ~;PcJU(`hv(|1g40qo8S+HTpriRA4eY{tFTm#m(btAP z$NX(=R0j#jA@bp7s2tpOk2-INM>#LmeiX+kEE)=L^-37$cM3N$Npe zT*REkl)sD5VIGUm$>%M&P}_jzS`b6?Hw9?5ftCFgTsG8!dGJ-aj#FQ)2CJcp4qI;lq~(fO~unDU0z-==qK>m%NoZktx^E1swI zQX#8odzxs0&ykr8jR3RZ`9g*#J?ot29i5~XTkf7qs|ZXAG)P+CD(Lsecz<6!x4>Pf z33`bIyxO*BcYsbKtBJ=+P!QPKbFUTpfcp#@L`p5tG8%&ea#uE&yA}8{DaOIJRW#&Ncu#lEhNkm z7KoJfAgkFD($PidvFOR@5GBt@uoI3NlpXle)=A!@_#*|m`#qLBmLNm?-jdD<;%idB z@#OGJOT9%1?Rnz;4<5%pkS_78kjpuA+F(l@7xeC=jVg(SC76(|QpQDwc1DrMQqLOP%UP?;G0@p#Zk zaue_YRA5mWSkg<4x670J@c1nD24Dk<*twh6 z#?)=eyJO4?cLcMfw!`Qxp)9uZg9QBZgE>vQk-dX|^2}KrRpALd2VNlky*uh|5;H@q zU7490vpKyAg}i}MfD#Z_K~{Y@ta?RBs&FY}+jmmmbK2d1!qkUN>NWLMt)P>`uRX&b z_*Y(kU-Pk1_kMKp;*%`o<<}clUE234x%rBphMRBZLHBkw`Cl5?bCM}~+P!JPcir{H zM<-eR-sa}*E03L4%bbe3cBlu4erV*7z9@K7<%c$0>@1}P2wPv}E}zXtr+KE>*I~q6 zn%P3nWZ_=!g8cBiD?LmSpUBjg9g$iS~&y;Ml7 z+kG>_{%V_x5gn7!^EEL>zGu}V#275odq*MTUKt_As8?4F=O9K%?>NF6?IS=# zwW}kj3=PWA2xi|1&|%vqsjKkW73q)^sISHwVigo?ga%7AMORzO_Q&U#TYL^15uekl zzwR(+bz7S{XSa^4R=uiX)vS7%SapVX)%SqbsF}vd1sEAOs_^F&g3`$3$EU;9Pd}pB zHeuiXEoQ^BkQ>z+lRBGE2S){f@*8TB#P1=pUdYNIWO0L{n^2t9>e0cOW+g_VN^LWF zV$1=?0Gv_4SVJTOio)ov<5gpWYCspIvM^R{$emJaxaE`+702)5^X@uce!PdbmRoM* z2i+H>SoDSo@lAIWM_Kn6-2@&#Z08!*a_JW9(`s_^wiv`2`F4x%%m(vg$oJ4<=&7? z5zJu^<`;V3_h8;**Eby)aqR;CbklWHd1z!PsH(=EC^jf!PoU_nJ`VDIT^5?Q@O`l% zxR^WKex4ERz7Ym$4ypSR?&SjEJrnX=9bq7{;4y+vo~vshd9JRZMzi#fMiBB`9ic|} zVQ(41;P8!5D|{s6p;H$@@?7=dQJh2_qxO5%%cU-Zp1?YEF@nR?bqqzvAG#Hgf$qB% zFp74iI7Kvyo(&Z@K0V{P7ib*!&s58=u1475*Ts1m1G^oyBI*k0bLoQkd_BmKCgv>? zV-7$zx9~H?dMP*o$Ic*TZBU=k{D6}I8v1-Zx5Ni={>#-dyw=XG9!fUguoxlQdluCZ zC<@t==0NU5iRbNoG!*sfC&fwuJ|(1Uu{w+Q42s%@31X$A@dTvnhhi41XBM^MU063_ z1lZ^o)e(G|B4=hO9Y^@GeGQPNH`Nimc@1I>+uGN_s`rZ#)Bp#x zRwLxuuZUj?oHC>3chO2;*&-a(6vOfqzamdK$y4~sg1UUT{h8TQdKD)Z1n?iy|K+WC zRjwR(p@@GO)4khG14>;PYVm`WEn3RCM@E8QggpYctKE(Z7sYDk&K0<-Lg39v@Ty^+ z3S6-UZ~g6tX}1@YEDwM7v6P*`=_g-*WbUN$l743E$+8oBQZCU_a;?pB@UeywukS44 zUpbsL{7mcfuYw9%;fHO~KM#uw7I$?~O0|VU07ba?HaSlg*?M}1&6DXB3Kw>YGT#xo zg)g%5{sPo0aLu1)1Nk)4et<eA=cvghymj(>AJFCnpe*DlH3^Ry?s4voC=uE>j- zmE3*ivgO>=KabC2*$-Dr`|7FB<{;fhn}#<-iZFEDt{SJN#OWwC z_sS~Dm7IR&{%{wD8Dol^MXCKOq?_%3~o*2)+VWS?MGjA=u@$S5Y1e6n|Wb-Tk699nj=g}@><^%^n zGGqCYyYcQb)Hlt!`S^c927rbF|AGFvI2jMAr&HQ0PDXn+323AP{sGSTHuVXH-@)mU zE4@-cWMzmk;2WS5?#VZiGrY10u^_EhjImce;n0gQLc1n{JH1_tz?~kc>JY^pbO>?N z!#3f__IwuEo+jiP%H{wTfW{SBxyMHfjEdwG5I+x@YYyb4D$nv?Gp8*Z&#w*I(~a$q zn3$uSO>3FvwD*6xd-2P?kvUq1v94e&WM}Wuni*rL81s#V^nOYp)jI(6z{;3^`d!P$ zGwb3Pd0Fg?M4cn~A&fM0f4|qW@Ji@8eO4*e9)Z3Lgju9ts%{7edsccp+kJ=j$W=VE z63^__RYQj`?()+Z=_vuJE%J(SRp*M#;sRxF?B_?Hd(-c%t7_P7A-d{)uROOl+1lIL z+letsm9x?X=qrAhM*@x^&4aXm_|>3Mv(hhbyY1rmk=h9-E6Y#99WP1fd#)ttPQco> z)2wDW1i$kE(W*lwP)80`5<0M5VqO;5PJ8MWhJuVLbN|fj-~%f%NA<=ipzuGf53Yh)&5=Uf2Rz>5a84r!0Roka`d~j^|zhdUzHvExlyiW$!w?~(OT1eDM*)%$o zqGV(LGKOdNAi5tHiCboqB-)EIeB2Uo|db{-wY&&ogR8bM*85eI0p z2>6*8FvNs%7N}BnQEXInVb8v)Un|%1&NhZ+jBt(0)yT|%ijGUV-H<&NL~$KXi#aql zG%FMd)sc}pB;Y{F69pcWqnSnN%$>_Tu-(Y%CI$srm|@4-9o6WmykpId$|`;$s=&`|h*!|FI&N!w3|g;b%dy$C?S3OqUNK@h z^Muv`a%snCf6=6{I`_@C$8gqDHP3wRM)WUE^y#+*&If}n&&eKIL0DXD#xnn-Bnzv*^M$?VVKxnXTK%x!#G zmONghJZOU+y6yqJKv%2;UOK{9#P>*(hU}v637=1^F~8yg{Ucx@T#OF5Z*VELWAVXt zb`T@Jir?5rBS@*f5h;$NqgW7r4h@XZfbczZBXveX%ER~YU_lU(-{T_u4KlbaR)eZ{ zSt8gi*zDwMuqp5|0Cw~i?*fC}!jRiY)jaqMA$cDx8ePj)B?yQJeSwV@$8tX6>%Rc@ z^s$f8r1J0gOq#NL;`Ff zGaJ^wN9;bW7rXCSKY4?7!W+!mmg4;gISH7QF9%4nmXP{TlcW+1nnVhjIFuuh#>XOS zaQ76xFjBJknG2%@-sRESk|)NMJ>N$inK11zayRcx!sn+WuOafMNr!w9Gf_2~KxY(C zd1#*N4_nXQszAw6Iwyi++eB=IHVzcKDqH)vUTv0FmbcE3b-h~)obnoeNFKuvwZ6;W zWMx=`@IoP$q$4ks$`7<#n9=HlBeVvnlO9Y%!4fn&6Ih1V__IGijmcA{D0kmnuHB=) z524FptXvwa?GV<#6Jt^RvsG5~>Vg?g15hRfQ4=Rg zEW&C~(b#fHkM(HT2%01(g6lv$GNnUvVc!$(sVE2mCX61i$E)hD^IwCS*!(F$v3-Xa zpJX#Og$;A{wBnQb>Cf@cPqF37se{!6*bOcXNXpC$ldib!>ElO8lKc3f3u;QqQs z$kqGs(mGZ*iZny1#H(AT!IQ9B{QLp+=WwvWvdi`UTzIO*&mUBO4zstTjav`79V33O z%I&(gF4%EA;j>}M#=jyY`y*n6VTwnttNE5l?^kme{NV#lfUM}^w1))sL$R?oS`(ev z&lMf2H*1jih_X7>H?M|Ba>&|2*%)wJ(3yg&%c*+BQ{&y9!C>>Hx(UBbZQ;=JTtnCH zC;`7cGS5^RkvjOk$u04wtV&nu#=oule0r8EFQ#ku=pLEM!nl&k#_ofE{nNF=)Dj~< zA6HS?Ge7$C4_{@|_P1`CzHe%ufpgxvtzUm=K5aV@zms6S+ED4=%^B_=9UBW+r`Xsa zMTNjpkcxrVM*UBxn?McS(h(3ErdkV2cuBI2R4}#7&j+Tj)7LO(Aq%8=hbi~Q@~MUQE@JaS6p3vsTrO!^^A7XlkFlVu%4ptDJ_15O()7Un7zxV6z`G5( znS@(CTpJ!+;R+Ac8Y^8miR~0ogNry<0uxHDC5HqMxKSR=daIhOnj)%c*wqJ^|5r=i zpSoe#lZClOrMJ(#a~1#bwTst2W2Wk9-Qz}0&y_bcKmFXBxjp&Sg6y=El-jznAKkl? z|Ge_UgZr7)ec+kdWn&{UUYK594c63%vj8pxwt+J~I?k5t&-BS`fGaRLIvH>S$;pA? z;c=BfmNy`hA~Fo>{%USA9dn?JL>wZkbs*j$D3b;Eu=cT^V6;Ze90W*KYi~ zwDiRElq9UWjJGJ1{}YFJmdO$o<*@tFX{dDRiMFZ(Lyh{`x@(ej=*|GhD!|ft2n+iQ ze3mHz7oiM2x9#2Lo+*__XZ^@OUR*o=zK30R^6^JQGW+G;JBOV<&YnJKWD%!#@+%h? z6*uJeetO#I7w+7BTXb4dYIOOVL_=?63pbS092yy5Hv9p|kpSZpR=W@5rag6mP>%Xl zCwC5FUF6M|1j^COT^&%4Zthj;5xka#AMv0rU7(-}EiBSp36wXqMhdHR8JQAXsm4q? z#dv_huTjG!YO5Y13GJ8+Lx^ai9NfYGdFJ%FX}fOz?a&!_a#(ss$?Pt=9+L}MlufAx z?)E|c(~sv5v&$^wv46V?J_Sn1zxoZ%?&}<~anh*mcf2?$ZJ^V+ZT7N5 z-3)0H%SSDW#5v*Do5nj!NRy+CLLg&-E<*%e(8ohJ0(61D&uOvx1)2i^jARZ7kpNHS zyw=At6 z!8W(gTcq86%Yl+)^G6RV9Z| zdenwiNO9HS3J^$@=urV^Kb#dhC94-)-B>>}+@Oo@&zsL@ti1fUqgQx_b3kl*M8Ev{ z?$Vq8;4kkg&#&FdcPK^w{QBC2Bf#QtRL3%l`o&-&pGe8LnN(@KtVmKi8 zyjzLwgQSX~h$~JdU5V=6QDD{!IHF^pW*01)mp^hmzhm^BF$4O}nz)_?@0|X(Ve@mR zmi4@|ANwt{S7e{@3tWvaj2*JRM?!i*5;p5YR{e5nSANN!G~(}cSCO}J26n}SeF6So zpxNJC;qo^tA)bh=&oX{v1fMW> zRdF}e1y{Vtzg%_c1gm57__^uR&%aS!cVWMaPDvTKqYU$g(yYN|3ud*L^%BrJeRqsH zt5?4v&b0wcU9f`GTsmOfgGZlSX*7)DpQpYqM?3ksI&^j_NkfF`!DaE264+*y37q0g zVzzx^HdF#zbY=~54=}a3hQV$E`?6guSuMa|g}orz|9Rfr!WJ$L$jZ2HE?cPMuLU1H zkTgM>?p~1Htw$DH#vV0K%1f=y2T&_@ z5-L&#Ru@P9e|xZA30APQ02JDU5-=PA)p>PI*d&A=tKOf4WnqUt)Gj%bQ&OPb3rz*B znDSZ0%C#|;^K6g%-AY4xYIdL53s)?SjN%7i@;#Pk%*u$)D#?6YS-5n|2sWejCti`A z7R1jbJ+l3%`=-2^MfNT-GkZvc*di8i z+%-CnFX7|fH}h2X&)|KVDhEsRv9&oF`Lgn(hf8%^z&9zHcxRB!77M6HIRX}Eg)51$ z<-~#n@F&&RC#gQyARC&-d9GEDJ(rsU)Dp2;0?(Gy%XU5Z(*9rAirLH3GrE<;l(2cF zc1OyXyJOjM8~h$$E_r0<Qz}y77fX2vY13{Rq{pk$e!6J zEFRUKsT1`n%$K2#)2!Pfe!dRB4}Tl0z#JWIDhJ()!nT8tiBVK9yt8cwnXn16h$;t( zN5euQ5dg9UD(KP?sPi)#{0ucNKebtaCoZj)eUV9o<3bk&zEJ6`9wSmUJUtT%@|E1~ z-OeuR0C%3!y8Fb)T{}zuoKjZPt1!UdUy9A?;%-q<&|luRd?$bIktjP$a`fnx*A-O8 z>eU)%cDq=;uZCI8-NV|+3sVQnI$HR{klQB9L5Q!_xa>+0OzWVInDAIQ7EKzL?C>y3 zd(RP7z{@knKabD*sto;NIT6b6;Hq%QkDfj;m)(dcpn0 zc|P~Hp=e(q(XNRVTVaHDb%vQEYhC7m03Cdk0ZO2sY_KY}_Vo&QZ{jT48?jpK4*5_2 z%Nm>cZeJ&m0e7>O-!HGdH%R-Uh|9rCD?vxQCf;ea+k(*%Mq|bwxJG3IB(I8i;;GLBdGLQ4-ktiq1;S^Bo%6$pXFztUwoR?6DfFs9C$?(tFH(=ES0ZW80>#O@Me$G|NTpRy z9DDKJhoCYX-|$Q6fY0vPv|#Q7^U4=3UtBq4<4enzG25n(+LWdZ2Tg{kt@AHm>ypGO zx^y2tvVR{|SYDawyq5*nS0SrF#6olvKpo)U!1o=f_$g*J#aJ{(gbe}we;jIH$0XqI zdNzJhgwr6cXID@Kx@kdNPlJ0hx1))}riB;fchJ_MaqFk83FUy!vxC%^UM*j~U?S^gJPj=x|Ta_?KVciBRR`=K4Xns!w0q6K`aTng|r*D^OK+Z)2C=Jlvs7aTMyl8QvRa|$19P-=; z%CTR!@4ucX)EiXu*5hgqq2l3jy}ay{;UbVm)*%E5{f;L!!} zg4l7&G4dz^ARngm&Cloz&+}d>Y;mWHU)lklz+ETw6C7!;Hsanup+nE@HqWyLbiDPf z0HVS>z3^Q9x4C`u=KYbv(P2LD2Ibiv6B=o*Gs39#2il%!>!J+{3WHu6W)phpEpb}1 z{8YCY7!vdqx%Wa!i_k5#HYDwhEq?f&TprnneKv9S;~OS6F#l#)4ff^_`KK@avbOqd zmbG>j_3MH_DKxXTs|GZDLWYz>ljDrE7%5|2R3zB^ zGe8B>6{RB&MCJi0fm!ueZ)2O;wM|I7hAnZOssyX1b zNu{W0sG|5Ye@CUu-`}FKz^7#i)iBuf9Uw}*zCj^eZF)tNGkKj33Gos_dzym$_GB_W z#T%4s$rJdQvvVU2xoaC9fATN<>dt?B{dYF#xAnX-YgAEedi>aK`XHTyzv>^;yLoEA zp(pn50WJoJP`x+uJWA!T{hMEK;Zy2?aTVS#^5p+}q#GY8f$(|A+r@ zu}$+FOYX1C&n=tZV@XO}4_AV+@NcWewImpRGYhQ9VB*s3Q*JJ*T#`xr_ zQ6L&L9{D_0DLQ=V91($zz=R-sP^Amt@K~PQsYc!tXz)02Kvoaz8O1?VDW4A{U|$eU5bjsn+2EYDlT|#=-|g?RWT!`tx^&)vY%Tw`>~lt5iv;6%<00v z%*xpH%&OOVS>xj!1vS`pqTW#;)JDN00os`Y;sfH5$QhtSM8KaJ!4$Nd@p?0Fp`E}h z0yhf3KMI_^Cp$kkPJ>M^NLKk%Ir}m!DRvj}OtCt=SULUjiji*yHY@Gw=2M(4_`P zI&rOCgvd#KRMTSHBcUV`YzabC*;JJily4bu&$}n(ZH;VJv@dR2~{qck}ztznr(IaWrhHFPEP!Kl0wiNp~*GmyUMnk`~_;ajg0^ zD<(XcY6zb_c+cT($t=0ywt|dbNqUH!a}h;Bwz&E|`WDs0--GWF>&*W~cx%+!6TA^c zUC382v{{Wmx(Mq5Vkye$R85)*i-P{QnZ3%(FY*y6Lume%Et-lj#@p`W1RIBc{Ttfs zr;t?HpiUHNv*8HRga?US=TOnwL|pQuN{AXGo!37=`cN-iyGXdK$L=)*W z*%-B(L<<3(-i+Q<9xDl)1b|tpa)TzJDoFq+q=u9Iv;5*C`}1|*qkWejn<_022ne2{|zP!1HRX_0O#%R?}0@ajjm{VBC%uoqnK7TpDtWz85cvT9S z7#9qRKho0rb0gS;Kk(*J=NozRkLW`%fo;H`uk!v%ljj8aVkr2YW}wws z_%bQS#l77={+K4p#YLw6eHt8dXhFw<48@PmnRUNt__J({y_qdqXhy@IQL)p&^GoWI z8dt6-yxF}?w@)5FdHl9#Zks0E>0Z*aGA-?~^^%Z>*eS8rTzK8=S@9ZuQl!3{;vZyA zPj}e;5$==yz0Pw$czN0sdHv^qyhKm^qgH|`B(gl)89r^^CKnF{@DK6p}h+V`xQz1LTXo! zKJm}38|!AVMi%LAw2Y2VNG{CJ>7i;*qDu+_BN|ahD+SSd45pZnSd-acufkbSmy=rx zHC~tz>eb>~OsAzlFLg+feMUTg4Ar~ee(+`F5}@_;Ob;!{?pB&DZ{_#?z*?}P9V<@! zbITL1yQF!(<#a3Nc_52NC#l9iX-%+byesOon*WQXNRj<++kHkQ3N1rWq_CiWp=bWB z8*iDPPDKXvwB5==;B3Oi2@A0XSOTqj zWkG5X5Tqr;2mjj0KY6G8p&ZwWfqzQk=W0~j;1k~a^7oCZV8h(N-EbcJ6ot5R zrZdb6vqV$vayY^wL&Bm5xWde$SE84jJ!UA`T~NG16OZGbE@q@9k|;}bkYKaLL-Wcl zkaiT+^vM}M+tq(SY(#2~BeA}$YB-BR=k4#m=glLspPg2e#nx0VXdK=pf~A|%vhsTd zB+TxAgI0(PE$Y9xShxoPn2l!XR!EeWx zAy6awi`|MDg1kn&jV}ww17M_q_ie^&qV2CneO-jZD7O2~@ShfJni7b!nL*_Ym*rxxukZug{Ii1_7;v%iNVNvhu)#4_lVY(Z-2glg}#Ucfu@|M zvei9VQZBzxR;)I-y!y`%*uXtV4B+;}SAVS;+dY+k(KQq6g%?58%jl@)R@Ep3T8Ia& zgESKPf5h=aHom7vA8zu2!jle-P_M%|NkQ#*k<%fiqUKwQl_aAKQI?p9=xSn+9dTcK zs3EIeqID3mlz4`H>@3+*2-d9wm#XSxCvm5o7Bc2C|Kj6sBWu$CNT*!=?ZBY^+4kOr zh5fve=jlzg^VkICRz0&@oO^?1cq+-}ZpEI{ujUveXtJE)Hf)y-0eq6r&{8aBGzyGq ze;d&WiLfk#4*%{|NHv5AxaHbVmU~$2d3}3~ zXNl_W(dofXT=DLv)+M;{AK*r+Qa^+pLfqDiq~fX8BufDrBgKTgHRE=bVzWMBSM^zh$Akgo{SN*k^V|9fjW8?{iG zb90Gy59{e}p&NxX?1kEu>KHmjffGfc0w>{j7h{mn!WkbmvhJBImUt>5awH z2|-0l$0}M)A4c`7ps5eXV*>n;9ja(GeKg3+rYC$jf47b?8_pClh8O2bbL$wh$-7Ns z_z+#yF(^~INbK!ow%ikOPxDm~tD_L&9xgBumA{NpDC1fcNR&OW6?%BHsKo0jp6S!} zZ*?vHo=Q9qk3goWJfi8-Hd9?om{+Pf*k<`4@bE+>8Y}PZKl#n46VUa z`t^VGl)jhuDXhoy6slKb%p$er@@zS`?G(n=qg%61t3`Wlxb8^>$28P>nZBgct&J)2 zmLTzep1rjJuf;S?SQW)$^%_4c4na&5TG>)Wa_&y`FdqV%ge;ND&*}v<7`~Rxu8s0nDBeb|cX-}PnqX*J!yMVUBU*QNc)?$< z+`aNA?`ul*mdbRo0<=xv9jFA+D$rue`>sgCvQvgM(EL3wot^8F2kKK+RPys_MK1OI zXD$CJbR@q%d+g?)uuq_a{Gy-(K*n}qOwb~SY8AcI@D15c7I}yvcTG=zp`^Zxk3#l) z`1R3izX!WB%^sZAGH3(HUULQ@oKAXdDF)IuVWHl{M|D_i{W{?_<5;O7(k^5d_v&=>o8@YRH1QxdMRldw<;$K97bK(Dm zVtxbKoDn{0^UMBm3GWNFm>Z2Z~bet z)SqOPvF)<1icN&)$^x4h49|ZAys{@8_To7Ptj2a3oH8T(rqrHLcR)goIZ4$3OV5zoBcq zd6b_~dbhruGcd3FfG}1(wWKM?9<{OZQ%Hom|t>z;Q{6CZX>t=)Mw3me6JubkDC?g z{ooyRX_C${{;Gp1reYK!aW%Q+!K?f z&Sfwm!@=J_u+HVL(-Kz+^%ipj?HlPi!UgO>A%p@?*9aw2N$IWWt+{+&L34WZDZ(X+ zN@oWvcrSM9IKRPk$K{Ls;BkHcGy6LJB?9L-B_uX3c7)3sXGus*7=gL{O^I>%QX=iZ zBOm692vhurxu|iIPyfW3$67?XH7&+lX~smFu=aB_p~K>C5mH!>8>i*Jpjo`9uUy~B^sf4_DJbp(tX zRQ~>a+D@`G^+&L$6v@oc16DlJ|g6d0-x?<5o7r@Ir<&|4x;jfRArgNKkjr%3|4iq@tl)6Ew`Lh<-f7VRguBn`bD+wd0^waTPquTmdBN+$LA+>O-?E=M(Pk#Cl{K3)dTDz3(DMLqV*v2g;GK zUNtNS9|Zuah2D?K3#3?hAPR{7427Yxa0ZBbNNM0p-V8{zOhpH@JT_~eHp4oVjgSs~ z^Y)6rTzPl-=GLPb(i0i?gvFsbRIe&|>7eh1as`AQSBlarNpUBg_-*Y%w1#@3_3^W3 zrB6k}s7Hvt6QoPJaJ-Wq6z=K_4nvIAY%qkF7>hJRhm@^U155{#hzzZT3OQ64F8X!l zIYQtsPY4Y`>n=*?!e6LPmf7he&r9LYOXaH!x&tic;YV4>A)R5pbV+jT*x^3UxHFUA zC7t9BcHW)ER#hc(2|jh$8C3s?T$tGqzgSt@Ic2HRA65@lMp$CPO>$I}AtX515*rw3 zu#kq9g%#1(wj`ut@Ws__5{TpC4WS)8f`6+0PDH z^vdA=W6!S1d3wYPe@a-xv`_r4ZP^O$eui(#tC+MfZR5StQWla|Hj7`OJ8WXxS9&Wb zl_ELiz3yGO%R2V43V>arG2-;+sa>yT;pvH@mz7fq5>L;{B^%W)BTEil%Q`>Zf~N`b zmd5^>o|Z~d)ThV%!PBepw7=)+op>7Ew`6i|>m=&!*J*6fk*esZ(_c6w7;+W^P%#$} zU{~xx6)wA8fy)m!db`Y0a~3-WWbLX;%0hHiqp=4I|lX8HwIApJI=upU7rrg@UrBHxR+JLnZH5<<1IUV+pQo;FX{LHP)u!0%Re z^IBcPf6nPA{I&tVmx13S3aho{dW0AO8-Sh;s4Yk02Ld{(drSQbno}NQd1zw@A!^Bx z?C$?4>)Z?2c3vQz=Cvnff9cRW{0;X$_jpdpt2lF2N}k++yAs$b9*YyJLBj#Hy#PH^ z-*#PFp*x2xB{hhjif#zwsg)^*VcxnN8ARBq4Kc0^Pz* ztVvs|G|-p zO}C2^g?oke9kMhj9z9~!n?YMLY{RH+^Lwu&We*YmWnA$w)shax+woJ^quW<5HeeWH<(;{U|{;l{;R$R}gOQxoOmmcN^>)E4h!leldn0YTVUY)dv z|Gby~NK`@SPD#?X;G7|n{)!HFn?Vm@Pj@N+ScFP|93a>PU`-{dH5=_P4oJ?{3^X>5 zW(T&jR(_ga`j30B+L2Sz%)of1zVS3V9mazj#4{dt(w2nbLI6_cu*{H3-3R3lT65$N zq>BGwyfh9S&WR3K)ZSB~h_EtN`z9m;kd9yW(@Uu4)|7%(!Jjsk%NVX5*;dQmTEX7p zy;iWmqeqTN=cV&*hua~YW3?!)*$tW9mW3E{v_Lzo1ViaH)iTP%J)fte3OZS%em;mk z*D%&!Ijhan)x)AR?lLMcv;mewl!&w7I#x9{hYm!73lqph!}|`s-O8#H`4`GrR+pCB zzqDb@o0RJ-yvnPE1x%Hu9Wi8mxM_6X>vTQfqAy$lq>x3t)rSkKthkwXkX-QWoN`>= zgHvJ91ilO~JiUZdaopGHlYnr}_3gqY=iJlxnsRwZbMTN=gGs&sZMg)P4|+|A6TmtK zjV?$Rr;~xNGa82-6oeBAI8O-^2F9_;u2t7~{ozT$>z>4XZvxwAy+8~y?lxmS2um>? zyw^aPLeJ~=)kA0>2#?F%R`#sGTG7XkE}j zr<5D6zrX(Zsc+xE`9;3Dpe81^XsFWI#{aSRZ=0F4dSACw3yO31F2PkPX@byevk|h` zA9>}l{Se<|CcPGtJVuUFeJR!+bSyAg0s+3`hLCf~<%LDdSu-N|`A9x9mVLwe&Y8id z_X<@4yB?Gd&7Z$h>g_)DeTAR3LX?l zSzZuBd8z;;Lo)^S+YWs`yS8S-Cx_n{JN4n}5le$A!$!@KhUW6-&={rV{@I)NH->!0;Q1)3W)%8FiDb8>jna2dOCEVtR9_}Px4XO z(&uSBTk0<@xwO|^jk~4-Z!!XJ5~fLnU&{JQczUeSk>q^=x>7`;h^QG=FBK7^19r35 zlz@?86L*W~FfK(t`P7!;%&4<_w;Y&0HMP+7lz&Rktn_YKnJKaHNnsU<+GBs3_Gf2m z_ugF=Z(2H|zS$A(Dy*5=%Y9Z`)HSwCW^`NuyFV^GB-@mf9UeopZt~EYRtQ?#^?Gfr zXaF7%5N?UpLbJbx)}9?k9k%Bd1adKw=cqpq$gEy|%s8>2WWwDoDF!0-2Y+QF0+b|v zLCz?OkI3xhka8{GMGU?}5Swqb+-ZOB6Y2Getb_z-9;h9vY2XX>N43`=-t126zTBJ;p2PX-at}mmK>cLf_ zCnSV~h<_yjgqu!b9)=IrHL$D$+7m3R=|7t32ejt5n%tGla`OURC(NY0(uDtRzQru9 zS<|OW2bg6xv)tG=9slV#e(==d1q&80UU1(-{O-m0k6qZ_G$X5PNoG^yiTP!jiCr># zR^=o%u*U9D>EZRwlax1Ex9JBDPUjyU{Ex)4-fC)ki=U(!bbR{s8|Y9CBpvgO;-)4v zvN0)DG)-$33!2Bw?ujg@a`mQ7s~_38Va<^vhi~sQG`kF~dCT(#yV%(HxcKOc8`6`i z_znLFhI;l0pLyFj(&g&;LH+Z%1!Pp8c7X;H8l?-c>+HcXF{!EX*5F`MJic%>WWfU_ zoIhgs=(eO?^pmwzpDc2qNM70VJ(R`a3z5CdjGxF{-ric*IzqnEwfCKsuRk+lTkVh) zQ%ieg_pd9C>{n4%*}qT!zPjMn`qts{UvFmR^v)h~--yKoP$S=REs+fOQ z+P|`wvywcxq8Gx~6v6ZKLa63#xMdLsQsZ;5sXP%2#7p$}iKHu^{LA$4g0+y1K$_1=K`-kRbtDhz(K& zC=GBo1caIV0{oDbi(28}Xc=TgLv!Ik)j-S>vJ#5KaMZ)vONL?4Q;Z-%qVnLR93Vt^ zBp{RsK~Z@FN``mtZ#t23SoclQS(%^VmmgloEVs>&-InR;8HqW`$!uPDXuPN!KJm3E zeILk&jXKHlTEBd2P|w_^SDU6~W)h+XJS_TJQHk3P>JK4n?qzkvG0|RRO~gPw@k!{2 z;)x$ro>H3xLbqG&UMy<%1lAug$VZ}21=;U)_?)uTMfWZ7IiO1LIqFgMk09SaMU%s> zVl16Bsv5l5*5Y2wo`e>qB1s~5j&xa}4SL)(#8n-UB-xXX&HdA=N9N9b?Dgz~r0n$c zglxWe=87e=?s<6S^yJLUWceQA3|LL-FG0DqJ^j_s^n z*L|$|{YSk|;(7TxMY~)0^K+(*9CuICelOIpys)+RfmbNWrDtz>;hSTs4!jT-!GDWQ zO6b@3wcXx-@^kbQyQ(z(=g!HM<>Q;MOGLX@VIdIhDxJwrO=qfgBpUl4h~_;|V|^rm@NkS>~#Sa5mp~4?k@@%C}tRKk-jLVB^>W zV@8g9cHBF+QANzrx$7eMU+yWdRLf$zFh6|lyP_7ve6j%rF%h&vr*KFFn;Ka3 z&sUVE_~-FzCx&3;wXvc5R)#Ka2|Mw5e$_|(g?$~mFF^7GIbHuE=tc+S101kI?BXi(C70rWX`fH(H^>ND4d-V*n_kR!^NW8zKHYef zEk0zL*El6=zjn`#@cDm=`1g6e`xg#MPJ8=L&ffCI*6HP03l_G(1IZ|7SNE$H)xw%2 zr`75g;uj9$#G1pAtQH;`?8zx9&23+jYW>325lb^sYC5!IRXrAqW0$?DF`?ys?d;yb z;>}+@zKy>ZXvlxmm&eTJs0lK6giKr>@z+C5O6#R3M-THQGD9A>exjV^hhcZ=HGOXU zLK4~y9AV8E@yYC)@6ji%qm|QbU+FSn5)ZkFn*x!<)ylE9dAgmr>-={b$x}j-T87T9 zPXNBHPz3aOByJYh-x+Z#rdx6U?3z*YmOQMzI&5}Y#(ceBx8%I2_Z^clR%^`_UxOLQQ;)hYl85po>YJFXu(ouWR7>Oib&X~Subb;D6L zu{~cj@eBPQ=U=~YW7Ztz&%5@Fo$(Y4d+tUb7SY7dLZiCIhg^Dl6zv1OsqQ-Tmk^EJ zX$;W9>JPSQnHk@gma2K=l(A*ELr=1XhU5dWLDFbZ_Hku3YfjNgR}^)kEFehH1QASj$==<={)~Z;|#WuF}}fl;cM2wpM~Ur{-Mmn86{K(;0Bst@(pnX z=n0)cZ`PXupWG3a0jIT7+!qoN$@I2dC`J^R>{yuTEsp$tX|E+Q?9b@^Si)~~rTYKQ zs1Z#pV)=6Z)oCwK1lE)d|NRd50`0I}fjuGvl>xnmQI4k58AF|#V6!o{%4PJXR?~sa z@&Yu_D%301n_?|i*D3E1?y|@t{)NMvz=!O^>T5l}Ph*Svd2{!WxO-`xNVFE|hRFQh z+q$(qy%0NvDkD8%cP3KxR6N-!HLe&X5W0Lw1Q2&+gsa13yR{?Qh{y-=GNIRz{zt$g zlyyul9V7*d=xDOe*tEGDJ6pjs?q~%5$a~kYwO^m}mQj8%92h#%RV7{o-Bnp?(J5uk`zLSpq)V>v%aY%k zv3)Q)l$2FYvNK0_{spDL4%iwz<^7d9HEZ(tg)Utv54NT+zocfuB9TIBYr;vGAuglQ#AJg)A(R~I6(>>@5JF)@PRipF(3?N3LLx(=2tcUFP6C1|R~O;It?PqhSD&nvF((6cS0Il89O%!tkVh zh0OHMgAIg^n4l!FA$-ZGUIX~H0i_rDM2QD8O{JgGggon6d@20_tLYeJjo~C3s2R)0cf`Z?^m?8@-UZM~SSy>%4|>>S zKHJIefSn#m?>&!i#e2WSK4FrC;(%EcnL}B9DG7o4|Vg zjzZ{PH~~~jXQx$4wE?MI_a-O>LSQA*4ICP+v zU{W{-1PCD>cgV>pUE&aw;Gwr$(^?JR>MH&JSXEZ5Eg?ZS|& zg;hpH8iN7@O_8R^Y8R3lEk+|Mra~l2jQ=mIRF{YUL;n!#QJG$I8~L_Tnf;2_ z^X5;7zOvx4XeB<1U))mF$REoK%zbJ*|Fxd#*4RPgpz)lu#s?pxD#njXl+Y+Qg{_4X7Oh{jQfYF4kcuo^S*^s$GI>k(~;lHDKGBBMm-=RegMx+>UR8 zw`eE4C>HaszXSPo1|ok}Wg*CaJT{&G=HXu{bY--X5X~=c?cd1P=XctOz`90kL{)aI zhnxHSZZ}xl^T0bX0YYY=W+-gef+4QHeRE19O~x)-MMVp!%CUjlLmlQQ<|jv4omS&u zSE7{?7DNx0m* zQBx(}`(6ZHAN@SF96tI%GZcO^gjqm3K{-k@^HR>|yj47eE1*a&QB`%RdtH(Vtm$!Y z5%H?o@wIQwP98aJW_eY5a%$Ix9;Zc3@xSu~AZ;TJuIkQIW8u`Zgsh3~4?+#QL zw-*>^hE~kA&(0ZL)5W&kKPj)*VNbd7&Q~njq^?O0{|tWF65+pn?L(UzZKf_M1sUZ1 z*$kPE6OXJD;3(jGR16T#AHIJSc7@tc;8|!kfzUdmVDAP;S!-QUQK;cEK_^6fwze}6 zgqlA=7A~BSs-bIxQ^cVU3G&wVEJT8uql1Z?Fn)WE`=TV(P8mPu=|b&sIM9CWY~bFk z`RlsqD1Jkl*0O5(Ls%76;-I$Hv#M@Dsfeg{87)y3Xeky8)#Fr&dK{n?c#Ecp`Bhlt z4z{kSF_Yn>AutVe6h~Yz*lXvi1zbHQM6!&MzZOi0;%7WIuBU=)@$`nQfdk!(rwmVn zcEB|2AmLBIvl&j>dQd2EdJ}Xm@ zj!9~x-wv~>lL-funns|Pn)tn|*}_PJfhAg-M(tWVu1{KCMp+yzgJ&u;Om`+yiR?D%ezM!-*~&uLZB&DxHkPLv1hEp~hBVPpP&@*bgReEM35BA>) zE)v~1VcCw-UJ~4f8fQP$OyhGzLF*OG%bk_Z0Cjf`AlJ z0DHc5;!7;|aMau`{R2Py`mg--LF3Tk^a}rr*X5tb#^00VG*4eXGj>XHAIsD~OJ(QT z@}J`FD(W83|8e7AeD=TNd;TBNz63m~D%<*=d#ftR%~+Weh7d9oAtWIKDN?CGn8Ost z0zv=*6%j>5L=+lnQc22)NQ*eO?T9$E(u%h2b5@)YZQJ(oP*HK7UpH;r-9j$^+Ur(T z0%HIDfB$=5FAq1j&alru>+ZA9Is4T6hxJoK_1Zs-JafpP@z(y^UaeVPQZ!DLq7Adr z1`{*)EbIbB8%hTh^~-f*yHQ43qdR3#k=&bU#z;VjSHdpFTsy%wVBJ_^Rj}S*Si3>+ zgyLod`zbx6LexUnPIJ3;r+Z{WZB5)0FKkunuKWdOra%3fwZj+R>>oT@HMKOvjjQ)G z>Qk2LSKV#B`$%^E@H&6qU!T5Dl|7ricxm20A6r{JZtT>uy7w+zJ)~jusH$NH?Xe$Q z8f$4)ScjVnJ{>l9{P@OcYTC?3ZB*l^>7y2pdSH|@&KOlYs&;bHndm z9oc=1p?!unw`BCeq?_%Nk5C@?0AoCk>{@Od89> zbJBsCpkLWAI1D80kt2^H3l&o^upBGySlk!c^w+B$-T}eoC(X!r+&8H9Bb@BFWCDNM zO;aBz8#Qq8wXRuyR<^q2!0#8rQG?#b|xr zZ?5?1gni-Jb5|)$uQhE~1xU5+CReW`i#ylIA@zlm*$avc1+S-Cqqb5(D**LAhEGZ~~M_NlRNXhAI4DCA< z+t&K_Ub6^KY_e1SJ9j@e_RB&gO)xRQL`e2W$_`^ezQgi8bx7387AXW4Uex#xBx%dfSL-1+|0$+sA*EAe&^UNgDM zJ*)Xdfxe&ga61L6UTU4S|=eNx9G0( z&zyUjV_}aVD@M#w72gf;K#;e+E`p?2HnucoEWQY1pqvAWi<2^{`)1(Io5VzCT#OOl zI6T8KDya-Bh0QG^;i>IW%Ie(rtEyh9s^atzl9RO`TvAuyDG2}1t0MlPUg`(I!s~}2 z`m-J)*Vg{47WbJydU0;+s6{1xt+#E5k?7li(dGYlmr=~v&il^7|J~R5&%2}EBhjtC zL;fTGk#75soIm2rU4R{M=>-LS^7`fEyVB#G>98wRavJ_3>;BdDLTOkG2ug;}RMtdUa0lypZTHXbIX zCCEudy42A%10$nfZh*ky7<%s5GsfzbyO*wS^S?CuQR|ZBN33J})WXA&pscr8pWWGZ zaen5p-Rhlqg*8+J8-C&=J1Q&6#+S&Ek1rA9`o&`16-zB?<6961rFYqkW!&Q_WaoPg z8*p<_Yg*<(6Zo&N~t_Fv?Gx${jm?GMwf!~Vt3F2B9{*i$H}`uLBy z;Ydyg#O;Y!unuIc5qsG@-YotvD<&((ga7FXTR!jl%ck$Q{&n;Jc6}E5ICyCLN1H$W zy5s9B-`(<$D-Uf!D)`>!e{{Z!JT1ot$5`iIkZ01viE)T#hmBkIA)oL_uazA^80@mx zr1wdiIJ#l<{OM{_>bMCbMlEP|9IP7BFnrvCp%o*%6IwOweRjOz80)IXw=1VH5ucsp zk7ZSv4t)7*wkEq z`33&TrDc_+BSxiMcbBtk*)RP?LrdZl`VP$T7-ydk-O+K+ma)^dhIyqpWs~b`sG@A; z#654lz7WRFbDzI(c?&jJECVAs54N;7oo$vE7YRQPZJ2{;Bd$P-xzBkOc5~$-epfAG zdd<`pYvu<)vv)Y|&jOqy&8|z$KmW2P|AEEFs{lVpJF8NzsqrT3u<>;T62OSp}wPWi? zs&$Ub9Dfi0RbGz%wR!^od71OFb2dBVxBdqFwd=>-D}o09$()^6oxf;c-l&DE|7A%c zf55`kD(n2y^79Mw=C8eA;lKff{aY?F-Z=j>`5T|$zbzM8{V!M`Pg>TlUTFVHCipql zrkIt^x3FK!o}CoJTCBmoAy`|6D?X;Kc5rcSraL1ev$z(@R9IP)kNsKLxO38GABZ03 z0<&B(P7k~(nOSK#l;DAhUX&#VK0Hd&)$k0($n-cfOUc?;0j_<;s~L!LqUoK_Y`lB( zv4JTw#&2ppr_{0S_rECp{dnWO)WE2XXD_mn%(RJldj|LIK0SH-^W)yyq8~Kf;|uXX z|8??R_q^Ng$V#0y{ugI2Ds^1`*e`C_ihO2|-IROruoC^62a&JCmo(w!QM(`L_Qa=7 z9I&Sk0!hd7z87h>*)&SJN7V@BVCjHLeVIP4j1%yJw3 zbKs0l5nqi^sC@2VC&0>-_1FPMI0}Jm>$E+ijKeC98dZ>1YkXOB$=1pFbpr#a9 z-xe|qE6!jaXFy@UMqSIqsoB&CEzV3W8`ciKOQd_LZ)zQDEHN!lTyV2(Kv{c3 zWz!5;ial-7_obgIe9!}Gg!P2A;e*Yeei5t2Po2wF4Ya;~>Ziekj=kDlqHc8@eB#-~ z^B2#5Y_CXJR!86+lhqMK5s+1p=n4szM;vj+PgX~4dsnV4k6V}pPr+)9tc-XY`^%b$y*h$L5tm9ZTtnQwAi9gF`+<&u1axd3NX7-8#v+=w7zhI5z5{Zo?kzkzjtxv6uTqI#Mn8{cq zIr@iid>qDLfb^V`AiZSpD*Om3S(yo$*#47+KmZAGaq(DQuxHBRJ`XPZ>l=ME4>U0BHo(+9 zt5*mQ1VF-m4u!R?@YhtA`WfL3RQLcwC$l{ITc__B9-A-(+h5f@H7p_4d)>K@?!R|S zl7%FZ+W&*AWmD7SFZVxhZ98q*f=l$uE`;G)(0NVe6#rD$ ztzs473@c-9CqimzJ$KOK5GG*!+TLYxc@eW@xKZ+*DVx@6szQ7F#YK|26OIe09&cqfe9YJvt5)fh`!458Wav9hLjMQVf=vqo6| zPezS0;*xM>5o|x> zayYK|@z1Tr;dqdv8w;`-53-+rVnE2g15X(el4~rsS0=I$_A@~tGjV?mDqQTQBK;>p zAz=gLbMuvn>DyREa&)*C`-;Mu@274JrJW1C65(;8*C^pH3J8&mW?FRL(CPoL-` zPmC&Vcf}dk^o}lWcK|hWF(W*(Bt0oEDOO8Jj>XQD*!T>WMANg?fJLFCe3cdHcPM}z z^zjVkxW?MH>e}9sACJigEgJk$T7;Fe3g}##*bMQp39bYOE=ty1ajrDOa2P2Ps{u=9 z+#1bA9h8Xj?7>%!^T)W_U7?k@_ITqNt4YJ5(4_qHc2vEk_I1CdGOUT0R9~Ze3%U_A zy*o5ikNrdybvJgKYSoV%f%qawl)hBV_fiy!PB!CQu}(7~F_|&*P%?`1hRaBk6*{aP z;n;J<+iGw3m#Wd4dR0-Vxe-^hA-d(7)uV&P=5HjzrApYN&N;7pKc=3C)+w9`wA(5t z+Spb-B^hVhac2Qy#JkN{6lwD)4D(buph_o|%yIJ3I2lsh(;$QgVPkvFqzBHzSLfZW zB^faR?3fr~U#7?!4Ywm;;ixq1O*`Pa$QpWO?y9*nPX+t`wfacmpvt(}cI4`-kL-TBebYo-oT_zStwO`B-H-tyd%LcJ3=*`yjmbD*=yb#) zjsUKSz;zok!3OD4;x?0rv?1@*-d7P^%mChdaiR~=@a;FF@y z5S2VWLur^nV?~7=Dp~jN6mlQkpkJ~Q_apt6HRcnOJ9<04^7jY*M_ z_blq2tQ9tEFusxBiC{|$$PKdx=Gc13ncs0HUo z0>k%Q1;W09eJasaS(d_$kP;^p>)Orvh0YVEKpc195wWJDhI=FnYFif z>`>dHwBv``8i{jV61N&BGVGgAViOZ_NE6qeIHW_cuHWlB2vYB9Q;gnZ?M0lV6I+BY z+mlDPp41-nc>>xKE=A71N+}2(8kg+ga`R71k%mZ&D_25;b$CxC04f689fD-AS@aRR z4H6Gk+F@xi2hooHViVh6_P+i4VOw86BOyDf?@6Eb|LEIp_notBxes6WJFGvwc~e`* z<}2}apDbVZp1YC5ANV8IJ@?25{?AYH18?7$jGEyK?|KSt?=Mj-vK%?F={e(D()%Pr zD{+E4E)F|exSu5)#R5xL_|{Y8!aHJQFcNIUK9*he;q#X@#g27(skmQm&j$}L>`|jXpf0>$%Z@V$`*lq|+kNx6c&sTr`S(r&IKYpJp73(2!+~?m<%f=bZ znJu_&uCx?R^HN9u>=`Zn3k$u|S_ zQ98}ta{j#C)ywWa^vx~G^YoI5Gl!3CICJFcQhnaIru2yea+cJV53%-4U;N~OySJYI zWVtIb*0TCk4H@|D;r(j-!&q%jJ@56EPs@r{_xHR>qZn&fv>qh9DxS}V^^h;tgEl^F zJv>b7;U>$=h$``N?jasupXQcWo58}DS+IM#YbZ=#G6?iNaz(?L$F*;9ae~7!0h@Gq znT35BR+z71rbEWVu&X4ud|=;F$WIJ0XZpY$rXbqw!~JXa$AXLkPPcicD^BkuhviN^HaR zYu0XJY}&2cGmGrNuD?2OYidoBer(X->#yrRtgoA&x9FPf-3J{jAHQJXIcKam^PW4; zIQ#B!Sl8Q!Jno&P9K%J9a!#b@u5qk)!djP@(Mb|NE+#=YaNIis@&C~x7@RU*;R47{ z!+Pfk9af3%vNkRYFLMqo{s9*R-voy&cDQqqbLmVy`RLVP2#;L~j2`R)j)_l*$BBD{ zs!B+RQ^^K{NXf=3@!pBpPzXMa+}nuLfVl7w9dwl%j+=UJic|UHtixs2C1uv(F)A+> zXH<;q_5Q~;53rs&a6mNU{U9#i|QiZfO9wbrlBds#JEkLsiKQtL(K>we}3F<;SV7)h=@Y!Pm9G+oKKGb}kZ zvB0Txg)yab_Y2pALFMc-iV)@DlP0JRVk{Z^nyh2@sg5Hm^aF?3(ZAVa>e!o(3*;gc z^@@zH(P-1vXj2g^x2yt0BSPHTj8r3gKyspy4TC&8(|tm8>u`yYz2d#XA;WWE(-h8! zpe8s1qA#m1YFgj-LKS3C>#OaU*JFRT=7xK6M*h9QsBhRiDoyr_-yG6Cc4%t}eQXE5 zUUd=lt^iZ)$FOjYJ8jU*w?Zbl+Cb_xr$))0mFiON}IK@oH|#)v|CDJS#O83L;Zf9GZ?8yhXVGgUp7) zu`>V@j9PdVK`3BG_4(+s$fZA1##}#o#&F*HgKI&&^P0A*+Mc_A0)5qR>$R)`x&KGc z!r7V!q-XFUbR2_R`b%w6Q!Tv3TjaC4+X=+z#Y4CR36K|cd_&2{?v)($W za%RHTz@00un_*Gq!>^3JsfqbT`7>JFSy@Fzak;rz^UZ~K7A_{+nu_?B;6mv&VrezO zUK&=2C_W69pOq?mt~0>aIBknbm~8kmR-C!$vAxruyiImpTk9sN%9MWRO;?@DweM4F zy>;zaHEH&3d5b%*(@WL`$6HSn=F7%_iW-%)Cc4o)?7cFS}Uf_zrhL zV5tI1j9noTOiKct7ud%c5M~%h%6OZ8+a_azo%@38u$5A?^rKd@A!94 zyMD>}&*jxGPwuz!7lYFO^5^7j>uOu7a~g`uYm+`#+I`#hy`8e7qT2eduFTlhe%h?D z1BOWbaY-JfUxbsZzQ+EUefyTAY9+Xar=%n5~$>PfAMCiUt<+!{)Mr%(P+A;dt%eMVo$F#3+wzjEz!=0lKK6Ka5_RiRJYnii8xPNda6vNTL91ROX=q~)5 zHx=^EJRvDW4n|}H#;{F|#Es>BFmelt`eXQwTVcoIBx+4GZmfkFKY4agBaBY$1I)?E z%*`^)gv?YqdK1&*&ZQA0UmklyRY3_o-7sSu9l7Cq`1F5PT0iXT zndq&*EY(67R=JjsOoN>R!Zf+?o@S*vGExxQJ*AHs6N9N9K83MPT$&A{SwR5 zSs$G8?!d3rSXo*-)dhk_uS7lGg$_&9d%2Gwy>HC;mcA*;xQr+{(}7#f9T|G$yWCR` zSOzjBI90T6=bKzRv%dQID_?F_Ua`_ndGiY{m%}#!-U7Ly5Z?q@1B%BkN!YR7LqUUAscatF7OIZ|aEeZThdx_JvuKRs*S2aE7=lB;4i{q57-OjY4ov_kE)n%H)) zD<5sAZ>i_5TL*3{g~NwtTEw$UJB?ZqZM1=#ytvM49X`?Rqb@sQt3i+F2c6HBE_QA} zOOs{gC~=@m;oOufIo1Jp7IZ)YXZI9`)>o*x#9<75YT^-Z{$4~7>{t*?6gKeiEu zvcv)vt4r4Q(sBxH%OWl-3l?Zrs@$)Ld0P0ZC6Yy1Cz?5&&Wq6n<~NEePj%Cx_2KDO zaHp#L>=YL+BGlNAsKxELhekZgeWVt-1G%E?jL*)-73$d;894R-(^^DqPaN_OZ-Psc zeg3G1er;)d`IfnBw`J$6;815--nvm)VrcE1ZEf45y!!?Xzw6Q~F53BnH?6c(6|Fvc zwY6A3VC%RSJ4haZzc;@z&4H`(ViPm5CnVnKPBq+iKigjQ@X*IPyH_qfb%Oy!#Ss() zj^6vw+l?yohqYC{}Umtw{zdp!Oa;RXW1m=J{%R}6mZ0G}`5!5A*7vyerxtCA5 zv=yJpzGOom%1p2?8PN^2nEm`NUS@l5U`4(G?~O~l+g=MoDMMJ#L3TYO@zoO|@fc8s za|r9%WY_Z_tfzhZIxHi(f9wO;rCH!$FkWWg87-Na2z&vpNJ*nfdeSYA7#X%x1`*c6 z+vsI-qUBf1hAU8WM!GTkg0rUHx%Qd=RoJPu&${*FS3koiYWY~}k-+W!mxQh{wr$wd zw?vH@kDc`Yiz7=DzI*lIf2o-67jC<7@hsY#xSPe%?AVN2$r<+a#J*GD5yhT<>>$9s zEbgD)%Ys_byC@7Ow~JKU?ji(5lwI?zRi?i6?Qia~4n6(Ed&;MZ{W~XLb?%Cn`ir@8 z&ZUDKo4@#k7r6Fyixp%?augw<4) zM+WG*@f;`gad+_x7`-@Qpj>Kd3GL6mVFn22Abrgo(2udg+n-rFPaik{UnQ znTNLGPFwb#6YB9QqXO9Vn5BIh&c)L^7r9F{l8c&!!2i;NgQB_6-$SW98wz0j4#`rz^`^Z^J0agch1u4}X|!RNL6s$jHoquRAj{4aU*5 z7M!YgOm9iUS{)|nnr-_=?BA326&d2kv@LQRmkRIyiR>~OuCAC}{>`7d=J-c7OsYw@ zHlMiX2vNnCe*QsUMDi;;{oLsGBk_5s)&cH$) ztTz}i*nUjA{1kPQ{YY@lpQ?7@-AP!hpHlJd8(nioj2tnkI>T!3y;o_4b@5m4g=-ew zwRAk#y`SE5v7yqF;XTjF%t^sU#dISz)oD&^L7WY#Pmd41ckw5B(`V0S+5S-@CRe4M z%ByZIwJT6@=JJ!A>+r3k9^zZK>mf6^91}NA!M%>l7Ef@mhaJ44U9hHQ($cHD3QqR4 zuTqO`ku)}lNM1kDglzI3zNHTF3yH{APd6DSoyb$F8lS~_tZ=^SnBse z_Mm~44er@0w5aT#-NDk+FZ7m`*T$ruciv~uA5;Bx*Re&*hUJxxn1Q%_b${BYcbs>c zZ)8P*)D!IE+JpTq1=>)p2KOCkd3lF|zJ9rH0%J#vysW@(PKzx-`=&F|(~>$?8CbH+v9SUo0ngbICT4$1ZT za|kJIBEk~*ZIxn)RNDwH6#x7m(XL{3*j z=fqS?3)^gP>>0K2A;S|JzCbwAsPNE)HC?MOZQrqG?1mez4@@2RP;=-@HU65nR=xaS z$0oCJN*#C^;o1c^dpgvHcyf#&irjS7br! zWTP1}wilFad-;S;kfUyqUT~zFnSZ;3D_u>Qo39Ry`PEI=v<6!LRNJv!4ZG{gkJrEa z;MJ?u4}C{1mxVwz_N>8?gXxWfls;+p!rM<1!RKErb)E#D!!F3VNaUQHkS+Q$rN!wi zNG<3;p`{=re_$%M5v7JNx{T6==)W7zC8|qQwxTZd+lOUqw$*KKk8Zh;>Pe>jzmVwcc(>R4Z|vw1~C55O+;)-zJB@bLUK`DHMO4QWH_r<2zv` zYzCJN!fIw_zkaUNRNTUrY7E5r0C@bM)SQgKKN=mNJPUU!w`6Zpp@P(=8J^pRHEnrl z%Zy27#c9JvG!9($pz+KzIVY-c;+9kSDvvE%QQ2F6OIr0iP+z%=undwdm-@!U^erh# zAKy}vl3+BoB=qf@j~mKm+sIGq8(mzKPaoIye$J!ma@^aCF#hz;-^@8bdzYLu1K1WU%LK`ouB_;?!j*E3ujF|PRO1Vz#98Sd;JHt?!{hJ*Hq`}4})tP3H= z_P7VTm-ph?Cx4qY72`$bLeIh@B0jow4QD9uT~A1GLn;m@ydusMm*}J>m}F}C;f+iK zdT(UH)p76YpLrUsO$fpAh4tt6)Fw-rk6eAj4ek3bS$W=M`!J- zgr!rE=Gb56w_fZ1^v8Qu{r)F@yJ7wMO}i$H9lJQ~?gss_SFIm@Jo4UaYW(lzG~kE# zv@DuDL8A3xKLg~k61tM34QzC0A-a{U-Y29Ry%mK-$IT2s(Ub5b!ll3Bv32CK)1V_C zev`c^vSnyfc5mf)YWK_)`e|wmE@ZfEnUoJJ!znuiaX&_5YI1VAo*v(X3nFDd1*~w{ zz1g#3LO!r(Es^h7Z>?Btebit)gH40ePg02_+1Lq-YRd`gP%Umb-Y+x~oL?gR**7O` zK+d$5;efahlofkMf&we~=s`cH_ z;Ug=jjI>^!J#WIKAvM;sm7dpsf6p6Lu_c$nPLmr&u9DfkYJ;5yUWIl39eS`(8;o5d z?rAMp8xUJ9O=b+qy(bD(rttXcZJOgtd#dFh#|x@tcKQEe%Hkh2rzI=S`uLQqK&sMO z`o;S)c{yWc>8bctxD<8V3QZp@b@Zf;Z}Ft$;@C@WW-?eHIm3w+f$(IecO9#HO&{Q* z{<);3J?fSYPHW!3-JR;*79AgX8=K*B-nfDi@jplPnG@pjv`8ZQ!mqznhAI--ODJ;=B zgau!SNr~pOKAKO|_auGd^zx=r$XN5J$=X$zImGDf82&!)tu*tzjd$QoX|<_|^UVFx1mIUnymhSiQ@Sb%UU>1RnlOaJ5f zTJBlJ8U~+#%;)(SSC4UA;eGVsGRIz)tWJvBDdP&iwBJAu=w;iX1J@5{^g4Cs+ zyK>nYj!ZkBi=+A27x#+3O+#JQa%9^1TpZ0O?9~sq=qZj&JD*FU`Sje~ixK5KpCi-G z=aOhXBP0DQl5sr2k!k0%KAMm1hK=a|T8>ORpY_pvDthuk?;YUCL_X5{(yP#u$yy~P zt@r6YGJj29DstnS=x6B3j0QQC^IQ-1c*vN`X|DL)#H&3R(a^yu9yR9Mw(n zq=zE}p>^X|dgHY)$Su??MLGBRLKhL-HRxR-&)x+0PwE_#Dx;o%eEl;C<14=RDR> zMcKe!8x!uvFF8IQMGj!*==fm7ZuZuaaBrp9c|;|JJX}Apx3H`%{iy}*JfiJ9Igc^g zcsq~iI6W~BmllrfTo@Up%z^#ITJ*HU4nYQ4+Brynu@)HVa&i+bu@{N(hFuHkFXn+7 z$SNP+uqiv5hxC`^fv->{bFd8{$pQU^=;d|}C(2*qh}*wof7$ZiiT;xF3&om0+%Gr> z0{-L58v6^YV)DK#hy4Xsac*RP;eGZ-xQ0n#jS8=)Nq^y&d}ET`%IJzH^We9Zd7y>E z>{i-_N2GLqYb6h~5({sTf*q(0txU5zoHt1;wYQ{p@P6;ZfAwQGISwBG6cNZ{aZ^vq zBT30lK5Bk`z2ji>Z+#he zUY;}MeqYAjFxvEEx8vHd6|PMQGb1B4#hDzh;t_M^y@iMvE%7kW5VV7(#q=)p*y@qXQgl@m zU%9b&q0U>q7Y{a9u1MGuEmGQaH6p$piV->W!#Rkg-1L6^auDoCOHNnmITAdl4w2cz zk!KArZ~C$0vWtT_#u+IXZJcLbQr6E~HFxU5@iY1zThaP38@ze;rth6wf<8~$wV87# z*33<9{LQ?#(d1o|TT%K}wDeuX_)pX%BE$gGz&SVUgKCURXc{;$FE2^UO3Bi*l8rp0 z!oV_ywEq2t&!avSrGmB;u-lv>N8~kJu!b!N;y$wjsv)EvPM2Ya@v*HFZY)=!sM~Lb%JMdC zO3W^tym=#P`#EHl>e`FiW};sbGvniRcVl9DlRFU(pNd0Oua(-{g41+tguuz8YH@ye zMMhMD)RETa`=5z>c;VTv4YGDX1@r;G8NSO^X5DvfaA3~#3D=Drd2M3Jl>?$BJsT-0 z2_>aTNooJSq=-J8P|{x-Pj~AoC4OkHlBPo!;#Zynjt{pAQCkzC0l0IxpOiH%`?PF5 zJ5ty}5j9Q|oz$*g+8~FnPAK%@INV8{U)H?s(wtt!&R`LbiIcv|WoHA*^m_9e=Ug*l%b>p@T{c7MZ4&1P^ zsA$}}^WlHMsd^=A(%5ggN0SjQ_h(`65H_}Ws>LslMde|c^M=$ID>7}yFdf7bjmt;>7$B4bC zdd5n%06Aa{T+hd;v459CK2}8k7@F7EFlTyuv`c-y-3apOGehduRvmH4}L@RVVR#5e>WPCV|Ii^JVzW{Q#<#O>qa z`LbCL+=wG9`T9531!u<(&z_#~<_-D=HBx;%?w*XA_>DNDiF}S*Xu|^3IY-0oAkZ}3 zbmJa%cd?$WRCb_6GPM^q?f=*Z;k`v8aBCE(AjaTj>g20@N7m8LD^=4KSJf8|zWDJ+ zesSa7i(mbpOCMUKuKwp6r>&kiB(wNNa{E|xDk(dlaM!Ie-jb{JxNQwjVnymJT-3N#3$JF8nuIm0_cyX+wV9ry0tOwL|m1@jB_QpG# zGsiA_36gmSl3DC%gNGig9htbYVh%jxF6^KUv}C2Y5@)x#P8JLu!q}E48?)?NbxIdgbVctM!HQqlFPykFB+49AMst*igFX7PemkH0x6 zwtoBK>mCUH>;BLFZdFWNvS89OuikE9AHYZbm9J>`bEi#v@399|;&s-y1Fl^5tF32_ z#+*YP_u%ySA>M$5(;wl>qW+(*Jpwm{H_FKAEvaZ^Bl~}JLzKQ3mp~1hJUOZNl~DNC zuF@w?yaMW^E1}$P@k*$lz2d0n-lv~j0fm0qpdWI+>Zcc{>!qPp^Oi1Y%_E$%)E$$jDxT)G%1TT?W6&tbRptPdf+t*o2b_b3SyW#J+e ztljZU2@Dt6FU~>cW(b6H2arTv0hdCms;yH%R184`rzqve(5fXtyxfr}fB)76FJbua&Gz4I_e1#iFS)$ozsIO)n0+&c$jx%LOrj;k=sww3 zCuP{qD6j-R)B0h29SzNVNEx6`x%8_VTYmCzc6h6W%`87olDf)!-^$F=fCnA(#xckH z+cOnsWd4jd9D{qkanbP|_8ZZi*LcJDN6#B-^6?q=8)mOO@W$F`DJzao!yDo`M8pKG zbeQ-!B$uNyXR>ReW*#4B=MtHB@r_$$r)v0(smGVtZ^ZO2=OgjdhTmvDKIp_Zj^En- zy~xFWLvyJai^5VcQe(QJznd2J*s1tv&Q`VaUC5I;V?I_U2Mkc_IMjNh^Y5AmCEg?w zRI|H}9=}dY{DX?A!WmIDLMwF-i%42Zc1hjB?fnmA!rK0S{^lonES34KEhBxI@ue-J zxNuu>1A1OB8DVB@?16U4|0zv-q)Jm0UBA?{q}oC_lnalq270k(=+x?nKB6C+tDV}| zBJetnS4Hr>Df#Nn4UwNM{HwRL1H_xgV;$75pQ9+w=;)3 zSo%)loy1+lyNGua@8O&G5`Rm)k9a@vVdC$Jj}ZSre3bYY@p0De3F4E)r-;w7K6_cp z^Gv_M^ovZt#Plo7VIOfn@eSge#J7lV6Aus%65k~rB7VTK4ii5neoFjNP`QY)#6)7U z{7SirX~Ya-7XO+<>_^Ne7D{g_?0N&1@<|!7f>=qcCJrOk^3CDW3(7|vBkfhx1laA+ z2SpuF)B!bze?5)3lz2Ar627_q_yN4Xfp{sOY-TBKd=ezK6GOx<;uU=JO1`;`>0c4A zCf-2Y$yVRXvUW4gURJL%hu8U>eWBiF`hWNiC9mFR`YYnM#P3+v5x)5&C2)*r3F^3~ z1vppU(dWrKdW+OSUo5}Xm-6`vrZ3=M*AU?;!(TV?c?U5>>>_R@?jcf3_1BqxgTFmU zd`H@%zsvM{Odn$UeWpL;`yVm=3Gpv{a)kK3pb;nU8z$57OeZi+{V`JcB$H2aiG7HD z`Me*ozqHiIV|oD7`AiRFx`62-Vlkh1m>$G*3Dbj_E@gTM(`8JTGhM;-P^K%Hu41~H z=^CbMS*zhhAJI>2B#tJIB~BtvAvP1qO9mOqn8PRYi1UdHh>M8qO@qB@oFRQ`EF&%_ zt{|REJde0aw8B_TTtnOjZ86EHCK=Tvqnes9stNC9I#9-uNk%ovsHP^P$;2MRy+C19 zQxirtHL1C&38R{r8%tUk)x`OHL19!=6Gk;PVN_ESMm05IR8td1H8o*WQxirtHDOd! z6Gk;PVN_ESMm05IR8td1H8o*WQxirtwR?%esHP^2YHGr$rY5>-YBJVLO&HbGgi%dR z7}eB-QB6%4)zpMhO-&fp)Pzw@O&HbGgi%dR7}eB-QB6%4)zpMhO-&fp)Pzw@O&HbG zWE7j4Fsi8uqnes9s;LR1nwl`GsmZuDHDOd!6Gk;PVN_ESMm05IR8td1HOZ)^5=J$Z zFsiA9QB5+csf1BYC5&n+VN_EIqnb(>)l|Z$rV>Uq$*3k7)l|Z$rV>Uql`yKQgi%c; zjA|-jR8t9~nq*W{38R{1RFjNql2J`Es!2vQl`yKQgi%c;jA|-jR8t9~nq*W{38P{! z9ZL~LHI*=`sf1BYC5&n+VN_EIqnb(>)l|Z$rV>Uql`yKQgi%c;jA|-jR8t9~nu@(l zMm3c%s;Sr)WK>fLqne76C!?C`D?SlMHI*=`sf1BYC5&n+VN_EIqncz?lZcXfd8P(KsqESCU!8N-|(GV_}5)bKg#su#3%UVDdzU<@de0P_&Hg< z$G;wCK6bl)WcnD<62!?WLHR-@>!->4`VuKoKbPrWNN)P2O#hPav=Q6+q?33V@p9r7 z#CxQ4{a&UYBtAs^J)b|qw0w7x_5UJ1$>&e;`O_@%89rxQ^yipf&wNL|Bgy*z z@>hQ){*Bnpzp`~kqP%0UHx2nx;C2Oh$H*XNNx4Qg(-Vo4iBpNwh%<<@hymhUVhgdA zxR6Nc8I+!Jy2#KtlXw>KY~ne@mBdx7&uZct;x^PLMf0K`Q&b^QI3z`_CjN#fU;GsH z1o3&IFky-k#!J!fktdM6q<_!!BTPTZ^iz^HvLuaGOIp4rZjMbi$EI78vFX-iY`RgC z)j%1WZjMbi$EKTO)6KEz)?{qDH5r?3O~$5MldMvAu-gJ zW7DlE_sUb8NafHr*VXZe7Nvn`6_h%h+`5GB(}1j7_&LW7Dn6*mUbM zHr=|6O*b?I_2Jlb>oPXox{OUXv_+oF*mUbMHr*VXZe7NvTbHrv)@5wEbs3v(oo(UR zbn7xU-MWlTw=QGTt;^VSb8NbG8Jlih#->}BvFX;?I*v^QC6nhIn{JLxH^-(MT8eTx zHr}@-G+=!w;^NGZOGVk8!|TChKxV207#;HdtHjrcuM@@QDa7ay z6q~0IqXUT1A(%o;C8iT)bQE%Q6hiY+A8LLfHNOy=FTeVc&yNu;L26*39wWci#a=3e z9^y^(h~Q-6RN^$^4B{+efH;@fLTn{2B-;6ioC_)ELdv<2axT)6QF@W)CKlrTBFJ+u zunsn45#%XY&*y%o8;D{>7hygn*iMuYT7>zOpjgyJ;2inwb4))^d{GeWf&3vK!CH9- z@)2ZNs-9_Lm8OF)i9yOsy-X))j-R<%wurF}PY#w5}Lj zEhzd{OnoZ`8%tXBtr%=9DEd}ReJiHE6;t1esc*$#WBe6tEGQar4Ka%yrpHMyLcTux0crzV$E zlgp{e<<#VIYH~R>xty9@f$zuytwJ-2GG;5-(h9b;f-S9pZp(9Fp$cfYqQDqssCfA&ZPd!&LrQo$anV2@O=M=IDO73`4;_DBVLq=G$CVfP4Z z1Ig`l;+e#=h-VYeA+98@lKNnj39cb-Lw%~qPPn24Y+uEZRYi8HB0E))ovO%ARb(fu zDkHZlj=n06zABEsDvrJ?j=n06zACa)6~|x|$6yu5U=`V^itJQHcB&#fRgs;l$WB#c zrz)~j6~}B9*{O=`R7G~GB0E))ovO%ARb;0sj_4|m=qirrDvszXj_4|m=qirrDvszX zj_4|m=qirrDvszXj_4|~Qx(~%itJQHcBng&SSdwMAkLE~Xq{jlF`rmKEFyY{CB#x< z8L@&`NvsCeu=i`&`!($S8uoq-d%uRgj~m&bCpGN-8n&*6yvz3}G?K1r0>oL76AtrM@l7hZjlX0VGa4`a|C0WM=}(#dQEIMS#8_e?QD!|}l`QY@+vHVlro|%lsx+p> zF7>JmrnC5~9AZDw0jv%P%IbiZs{>xF4oF!t-n~l3yI0A0_bM6hUaSrX$~W4p{GuUh z1hJ7QYXn}b5kRU~BM_9Yn-?nu@?5;KUUigDx&?LI#s)Nq4x(6AURqXOc-m1G#v^_U zPdjqs7tjlTyF6Jcf5kXO8s2IA6{A(s1DF=?v=`oKc`n{*FGj9lF`tNc+G`AAx`gS$ zOpABgYYbspywhHIrzM99riU_J$#fOd;+^)wJ1y_jGCiE=Bl?Mr#L>jDM43f;4USfR z!M*TQOFlA3@EXlb%S^$`uesOYDCRfaYj70v%kG6ATYe>T2QR$YlIB=8<}=N)Y%E|} zW)oicx8)tNBE0Z&OWKy<8IZxas?4-(%c9wNTaUwuIQka(E* z5%FW|Wadv)MRLFyiOQqp5YGT=kWpLzv8l;_kd@FCLBe`qQ6UvMs;%#&Y%@$f4! zp1iY|>7|m!=)hmWc=#*Eh@=NFozL_@rVE%ZB8n|h2a84C9K>`9)8fIa!w8b+LzpgO zx}50>rp0?)2YW`|5x+_utQtwzFfDVLI;_VD${ei@>v4jO#L+~y9kUgw`6ND>%=8qd zr!w8l^fab9zQA~r562f6PtqJ;U_41vN?<%mxA0eDz0_fLBc+J-QfDk=dJ)r@GoJ z4N(@6=Uk(n9;$lI z8tOS;sOL*+PBr=3|(3$vcKWj(FR zddLUAg=7T9hODRc=m$4;U}u=jTm9rlKe$oS(rQ0j?Psg~Y_%WUcq5*VC(2F$Ke$m) zz6gGB<6fZbAM=A7<+7Q&o@e?6re9?GC8l3y+h1Y&Ri^hb z{TkEznSPz=H<*5t_!jYP;sN48;=9B{M46NN!H|L<5)TtUB7RK#g!m~@cBc8kkb<%^ z4X4zIN%B`PBw9*s^n)QKEjsCkeI;qpOg|V>(z0XC4~7&J+r|%u6qJ3xelVn<>{9cC zAq8cZnxDJW{Fs4CJ|l=?b@;)VkRdoza;Cmf|NY=hc``|I24~_OaHil~$qk$-X<0w@ zbENpenUa=$m40w0{tC{-6L6-a2QV#jXFoVoo)<7(L@eeL57UE~E@65w)1^!gVY-az za;7Vo9?Enj)3PVQ56+ZQYM8Di4k!AEeqtkWG?8uRNcV#?C5Oo(8E~egr!w8l^fabt z5IOG10Dgnxjy&K8XUeZ+j_C(yN?JI<56+adFoPeQDQS*MaHgbXj_C(yO4^p8>`nE9 zGX-TQl^>ibC_AbA;LN>R1K8smpjcK7U=P6>qS!eNv~wD0=QPmHX`r3cKs%>_c1{EB zhXz^>4YU~=Xe~7G>)*idegnVw4gA(O@N3?{?|1|B6Qw{i1;t8l;McQ(U!MkkcN+M` zY2de}f!~@2eq|c?eQDsArGej+27XN%_#J8B7i0wYgN?-s$Tx^VWeVys#CYI1J|D;D z2c$|JH(Z*v} zDNv6g#siyJdJ{`;V(CpRy@{navGgXE-o(kvFon~4)&9ru!Y3(%A+G(b>(@blp z8Dkc|rG?W>+osuIt1&9&xy*o?X}vVlZfT~)(o9>WnO4el%5ys9Ii2#HPI=DY^BH_T zgU@I1`Aj~?xhVAJO!odv_Wn%v{!I4%O!odv_Wn%v{!I4%O!odv_Wn%v{!I4%Oy)n+ z&Y!(Mi>1tBDYID0ES55hrOaX}vslV3mNJW_%wj3CSjsGxGK;0mVkxs&$}E;Li=_mh zV>7h?bWBjJ#{jh`pota*s6_$J$O6=*0Cg!qT?%l16yW?Q!1+;t^P>RgM*+@{0@Swv z^({bs3sBzz)VBcjEkJz>P~QU7w*d7mKz$2v1{C1jC%{=xfEpN}1_r2s0cv1?8W^Ak z2B?7nYG8mG7@!6QsDS~_YXY3n1UQ!oa26AwW(KI40cvJ|ni=4nBEUICfLa>Bc!b0- z9tDNr1Jv69X9@w%5dxeY1UMrI7=z>;&H@6o{{yuA1GM=AwDtq|X30BZ=Le|y0cw7L znjfI%2dMc0YJPy4AE4$3sQCeEet?=Epymgt`2lKvfSMnm<_Dpj|E0iWbRT)It(BVAN=<8}rnORwTB${?)S^~uQ7g5mm0HwFEo!9}wNi^( zsYR{SqE_lmD|M!oI@3y>X{FAzQfFGJGp*E_R_aVEb*7a%(@NcFrEauRH(IG1t<;BB z_I@k-u9bb)%D!u5-?g&uTG@B4?7LR>T`T*pm3`OBzH4RQwX*M8*>|n%yH@sHEBmgM zeYb$pUO;JM?=9qy9dktS+%BNB7f{*@DD4H5_9A{&+rTZWwKi~zpv*zqU_}VZ{FS9Pix~$p^Y7kowadx)<*lejkB{h&d%CkY2ba@!);0|;Wk(rg0kM%hSf|#*`L;?WY=^X zRx<^Kwc4<1DbHnpTAPynX>GbDe+B#DS71LuvAEi3^|jI7Yon#t23tj*i;dR?TSYKH z6pOBnwp<&nxHj5vZM59lj8&4qv6?9R0Nc1fEl4>BDd!;N9Hg9slyi`B4r(IjAmtpS zoP(5eka7-E&OypKNI3^7=OE=Aq@074bC7ZlQqDojIY>DNDd!;N9Hg9slyi`B4pPoR z$~j0m2Px+u0?LCQHuIR`1{AmtpSoP(5eka7-E&OypKNI3^7=OE=A zq@074bC7Zl(sB+`&OypKNI3^7=OE=Aq@06>$T>(kw^PpTlyf`f+)g>SQ_k&_b35hS zPC2(z&h3SQ_k&_b35hSPC2(z&h3SQ_k&_b35hSPC2(z&h3SQ_k&_b35hSPC2(z&h3?f<=ja*cT&!slyfKL+(|iiQqG-}b0_88 zNjY~?&YhHVC*|BpId@Xdos@GY<=ja*cT&!slyfKL+(|iiQqG-}b0_88NjY~?&YhHV zC*|BpId@Xdos@GY<=ja*cT&!slyfKL+(|iiQqG-}b0_88NjY~?&YhHVC*|BpId@Xd zos@GY<=ja*cT&zF$~iA<8*KIfp3c5ak@AoI{jzh;j~5 z&LPS!DCZF69HN{A<8*KIfp3c5ak@AoI{jzh;j~5&LPS!DCZF6d>MC^c2UAzlyDbi+eO)SQHEWVVHaiCMHzNchFz3l7iHK*>2*jJUKgd;Mfr5G?Okkp7u(*&ws*1ZU2J<7+up^t zcd_kVY_evF(?$ja!IU5VsPyYhs&i*Tgp44zKS4pzKE84qf^N=p)wix%daR zYYoIUJ_!=ri5%NK?ch$i9o#9m z172=XsQm+ z(=H8@OK=_YOBlENxG&7sEKpbq1lj}=`{D6J*fp#i!kU%>EpY;D3hYL|qF9w>o~c)&p-n@YVxwJ@D28Z$0qV18+U>)&p-n@YVxw zJ@D28Z$0qV18+U>)&p-n@YVxwJ@D28Z$0qV18+U>)&p-n@YVxwJ@D28Z$0qV18+U> z)&p-n@YVxwJ@D28Z$0qV18+U>)&p-n@YVxwJ@D28Z$0qV18+U>)(daF@YV}&z3|ox zZ@uu=3va#f)(daF@YV}&z3|oxZ@uu=3va#f)(daF@YV}&z3|oxZ@uu=3va#f)(daF z@YV}&z3|oxZ@uu=3va#f)(daF@YV}&z3|oxZ@uu=3va#f)(daF@YV}&z3|oxZ@uu= z3va#f)(daF@YV}&z3|otZ+-CA2XB4w)(3BW@YV-!eel)?Z+-CA2XB4w)(3BW@YV-! zeel)?Z+-CA2XB4w)(3BW@YV-!eel)?Z+-CA2XB4w)(3BW@YV-!eel)?Z+-CA2XB4w z)(3BW@YV-!eel)?Z+-CA2XB4w)(3BW@YV-!eel)?Z+-CA2XB4wrvJ*-NTmPL13jK< zx1IX0b^}Qd`{Au0-t;Yn6psu2@YWA+{qWWgZ~gGr4{!bO)(>y}@YWA+{qWWgZ~gGr z4{!bO)(>y}@YWA+{qWWgZ~gGr4{!bO)(>y}@YWA+{qWWgZ~gGr4{!bO)(>y}@YWA+ z{qWWgZ~gGr4{!bO)(>y}@YWA+{qXjbcw0(6CEkp8h?A$piScXTBj8@}QSdQv8Z3cj zqiQEq`Sl)^-{}2&PpSOI-vYhk>nWAr_y+J!@QvV`K<@;5O651c8T3xDeUx(_<=jU( z_fgJ$lyjea=Vx5bee#{r<=iK)8C}kO@|uux?xURhDCa)PxsP)0qn!K1v!0}!`zYr= z@$3|rbDwxNx}5tc=RV50PdqQD1}NtM6fKsg5}=K$p#pqvAgbAWOVP|g9$IY2oFDCYp>9H5*7lyi`B4pPoR$~j0m z2Px+u0?LCQHuIR`1{AmtpSoP(5eka7-E&OypKNI3^7=OE=Aq@074 zbC7ZlQqDojIY>G4DyQcBDyPwFn0b}fw$~Z*%o_5{8uH8<^6ZhwYxP+DHsw7M`INs| z=h-8XXOBcah5_x?kF?x?gUSCO!-XoFM`nJ(~B=YQ$ z$ZLJuw)aTnwZ3ii9*I1AB=YQ$$g@Wx&mM_9dnEGgk;t=0A}>F>%-$oBmp5&Dk3?QR zwe39;d1h64t&rRH9*Mlx$!&X&L|&`qw!KFpuQhYq-XoFMnz_+?B=TA_H+qjmUTfw? z?~%x-yhkF>9*I1&v%J2!IOQkcOW-xodnEFl-jff!MH39*I1AB=YQ$$g@WxA9#;MKJXrieBeD2 zdG<);*&~tH7c`YeU(k%+Bavs1M4mkodFGFK_DJN}Bav6X&@<{6M(>fxt9RJ;9*KO~ ztIc_RBe3o7`+4;m{gpiudG#IJ-XoD$53=n&5_$C_+ukFQ*Hm)Z6niM;xnZSRrDtH;^)9*MlZSs1-XBCl^2M(>fx>zjqq zdnEFq_ekWKDd$7)k;pS&&a+1% gdXGe&xpSVmb3UZsF@w&B^gHI!dG<);L$9dk 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 DzdWN1 literal 0 HcmV?d00001 diff --git a/src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Italic.ttf b/src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c90da48ff3b8ad6167236d70c48df4d7b5de3bbb GIT binary patch literal 212896 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 I-Ko?4FC8~NI{*Lx literal 0 HcmV?d00001 diff --git a/src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Light.ttf b/src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Light.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0d381897da20345fa63112f19042561f44ee3aa0 GIT binary patch literal 222412 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%0AG%b#%#Weyp=oz<}IGPqm z)8c4aT%)1Wt!Z(MiMFk2@iJ>#98HU(X>l|yj;6)Yv^bg;N7LeHS{zM_Yxd#ySkvN~ zeHg82+}v^bg;*NE&CYg!yli=%0AG%cHosL)|1w>IGPqm)8c4a98HU( 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%0AcdZx)e(&Qd#a*s5*M_SL=`WWXP>A<;1 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

    tNNc zgH^i@R_!`iwd+Xy19j~N_2jAkYA>i?0ad&od=k_zcBgx)+N^iG?Ogr6GgNaz_=p`K9{`l+#wgq~3q>WOBd-V-7GHRzo=9f|)1dVfww z!cPQruu9pHm>@m_o(13ZH7BnH{k&C2vKaJEs*a?e4DDb&vm@yzLpxa2>`0apdv8xi z@;YMgl

    o8+@-@Iav9JaRqTDcmpL>#2+NC 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 !}#gv~NV!5|5YF|kE)J0y^zWbk4>=%|6F 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Semibold.ttf b/src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Semibold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1a7679e3949fb045f152f456bc4adad31e8b9f55 GIT binary patch literal 221328 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%0DJH?LFC28_mTUAZOar9j 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

    MAzfu-#(7W5VH7%hxxNU1% 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 b^2ROSp1r5Xdx>eYXCxdsa=Oc~d6M+Mf|cc} literal 0 HcmV?d00001 diff --git a/src/main/resources/net/rptools/maptool/client/fonts/OpenSans_Apache License.txt b/src/main/resources/net/rptools/maptool/client/fonts/OpenSans_Apache License.txt new file mode 100644 index 0000000000..989e2c59e9 --- /dev/null +++ b/src/main/resources/net/rptools/maptool/client/fonts/OpenSans_Apache License.txt @@ -0,0 +1,201 @@ +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. \ No newline at end of file diff --git a/src/main/resources/net/rptools/maptool/client/maptool.atlas b/src/main/resources/net/rptools/maptool/client/maptool.atlas index 60873e3ea6..bf530aea45 100644 --- a/src/main/resources/net/rptools/maptool/client/maptool.atlas +++ b/src/main/resources/net/rptools/maptool/client/maptool.atlas @@ -15,133 +15,133 @@ blueLabelbox index: -1 border/blue/bl rotate: false - xy: 216, 210 + xy: 103, 41 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/blue/bottom rotate: false - xy: 162, 184 + xy: 132, 67 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/blue/br rotate: false - xy: 170, 166 + xy: 216, 107 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/blue/right rotate: false - xy: 79, 46 + xy: 201, 56 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/blue/left rotate: false - xy: 79, 46 + xy: 201, 56 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/blue/tl rotate: false - xy: 85, 109 + xy: 206, 79 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/blue/top rotate: false - xy: 162, 199 + xy: 78, 66 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/blue/tr rotate: false - xy: 107, 136 + xy: 148, 57 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/fowtools/bl rotate: false - xy: 17, 26 + xy: 78, 104 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/fowtools/bottom rotate: false - xy: 31, 125 + xy: 78, 71 size: 52, 6 orig: 52, 6 offset: 0, 0 index: -1 border/fowtools/br rotate: false - xy: 25, 26 + xy: 86, 104 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/fowtools/left rotate: false - xy: 33, 41 + xy: 195, 105 size: 6, 52 orig: 6, 52 offset: 0, 0 index: -1 border/fowtools/right rotate: false - xy: 41, 41 + xy: 203, 105 size: 6, 52 orig: 6, 52 offset: 0, 0 index: -1 border/fowtools/tl rotate: false - xy: 33, 33 + xy: 140, 54 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/fowtools/top rotate: false - xy: 31, 133 + xy: 78, 79 size: 52, 6 orig: 52, 6 offset: 0, 0 index: -1 border/fowtools/tr rotate: false - xy: 99, 133 + xy: 85, 38 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/gray/bl rotate: false - xy: 170, 171 + xy: 206, 89 size: 5, 6 orig: 5, 6 offset: 0, 0 index: -1 border/gray/bottom rotate: false - xy: 17, 148 + xy: 78, 94 size: 111, 6 orig: 111, 6 offset: 0, 0 index: -1 border/gray/br rotate: false - xy: 221, 231 + xy: 206, 97 size: 6, 6 orig: 6, 6 offset: 0, 0 @@ -162,308 +162,308 @@ border/gray/right index: -1 border/gray/tl rotate: false - xy: 243, 246 + xy: 235, 238 size: 5, 5 orig: 5, 5 offset: 0, 0 index: -1 border/gray/top rotate: false - xy: 17, 141 + xy: 78, 87 size: 111, 5 orig: 111, 5 offset: 0, 0 index: -1 border/gray/tr rotate: false - xy: 162, 164 + xy: 71, 25 size: 6, 5 orig: 6, 5 offset: 0, 0 index: -1 border/gray2/bl rotate: false - xy: 229, 234 + xy: 85, 33 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/gray2/bottom rotate: false - xy: 162, 189 + xy: 132, 72 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/gray2/br rotate: false - xy: 112, 136 + xy: 235, 228 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/gray2/left rotate: false - xy: 54, 41 + xy: 216, 117 size: 3, 52 orig: 3, 52 offset: 0, 0 index: -1 border/gray2/right rotate: false - xy: 49, 41 + xy: 211, 105 size: 3, 52 orig: 3, 52 offset: 0, 0 index: -1 border/gray2/tl rotate: false - xy: 216, 220 + xy: 216, 112 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/gray2/top rotate: false - xy: 31, 105 + xy: 78, 56 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/gray2/tr rotate: false - xy: 177, 174 + xy: 221, 112 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/green/bl rotate: false - xy: 10, 5 + xy: 243, 248 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/green/bottom rotate: false - xy: 162, 179 + xy: 71, 46 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/green/br rotate: false - xy: 221, 226 + xy: 125, 46 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/green/left rotate: false - xy: 64, 46 + xy: 186, 38 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/green/right rotate: false - xy: 64, 46 + xy: 186, 38 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/green/tl rotate: false - xy: 235, 240 + xy: 10, 5 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/green/top rotate: false - xy: 31, 110 + xy: 78, 61 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/green/tr rotate: false - xy: 182, 174 + xy: 222, 202 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/highlight/bl rotate: false - xy: 85, 119 + xy: 222, 217 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/highlight/bottom rotate: false - xy: 162, 209 + xy: 17, 35 size: 52, 6 orig: 52, 6 offset: 0, 0 index: -1 border/highlight/br rotate: false - xy: 235, 245 + xy: 2, 2 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/highlight/left rotate: false - xy: 17, 34 + xy: 214, 171 size: 6, 52 orig: 6, 52 offset: 0, 0 index: -1 border/highlight/right rotate: false - xy: 25, 34 + xy: 187, 105 size: 6, 52 orig: 6, 52 offset: 0, 0 index: -1 border/highlight/tl rotate: false - xy: 2, 2 + xy: 235, 245 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/highlight/top rotate: false - xy: 162, 217 + xy: 17, 43 size: 52, 6 orig: 52, 6 offset: 0, 0 index: -1 border/highlight/tr rotate: false - xy: 162, 171 + xy: 132, 54 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/purple/bl rotate: false - xy: 221, 221 + xy: 153, 57 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/purple/bottom rotate: false - xy: 31, 115 + xy: 132, 77 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/purple/br rotate: false - xy: 33, 28 + xy: 79, 27 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/purple/left rotate: false - xy: 59, 46 + xy: 221, 122 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/purple/right rotate: false - xy: 59, 46 + xy: 221, 122 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/purple/tl rotate: false - xy: 250, 248 + xy: 248, 248 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/purple/top rotate: false - xy: 162, 204 + xy: 132, 82 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/purple/tr rotate: false - xy: 93, 122 + xy: 230, 220 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/red/bl rotate: false - xy: 59, 41 + xy: 221, 117 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/red/bottom rotate: false - xy: 31, 95 + xy: 132, 62 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/red/br rotate: false - xy: 216, 215 + xy: 222, 207 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/red/left rotate: false - xy: 69, 46 + xy: 191, 56 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/red/right rotate: false - xy: 69, 46 + xy: 191, 56 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/red/tl rotate: false - xy: 46, 36 + xy: 221, 107 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/red/top rotate: false - xy: 31, 120 + xy: 17, 30 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/red/tr rotate: false - xy: 41, 36 + xy: 206, 84 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/shadow/bl rotate: false - xy: 130, 142 + xy: 221, 225 size: 12, 12 orig: 12, 12 offset: 0, 0 @@ -477,28 +477,28 @@ border/shadow/bottom index: -1 border/shadow/br rotate: false - xy: 85, 127 + xy: 191, 42 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 border/shadow/left rotate: false - xy: 148, 172 + xy: 159, 106 size: 12, 51 orig: 12, 51 offset: 0, 0 index: -1 border/shadow/right rotate: false - xy: 17, 88 + xy: 173, 106 size: 12, 51 orig: 12, 51 offset: 0, 0 index: -1 border/shadow/tl rotate: false - xy: 221, 239 + xy: 2, 10 size: 12, 12 orig: 12, 12 offset: 0, 0 @@ -512,63 +512,63 @@ border/shadow/top index: -1 border/shadow/tr rotate: false - xy: 148, 158 + xy: 71, 32 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 border/yellow/bl rotate: false - xy: 64, 41 + xy: 98, 41 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/yellow/bottom rotate: false - xy: 31, 100 + xy: 78, 51 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/yellow/br rotate: false - xy: 99, 128 + xy: 93, 41 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/yellow/left rotate: false - xy: 74, 46 + xy: 196, 56 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/yellow/right rotate: false - xy: 74, 46 + xy: 196, 56 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/yellow/tl rotate: false - xy: 162, 159 + xy: 235, 233 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/yellow/top rotate: false - xy: 162, 194 + xy: 17, 25 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/yellow/tr rotate: false - xy: 85, 114 + xy: 222, 212 size: 3, 3 orig: 3, 3 offset: 0, 0 @@ -591,10 +591,38 @@ grayLabelbox orig: 129, 21 offset: 0, 0 index: -1 +hexBorder + rotate: false + xy: 97, 102 + size: 60, 52 + orig: 60, 52 + offset: 0, 0 + index: -1 +isoBorder + rotate: false + xy: 17, 112 + size: 78, 42 + orig: 78, 42 + offset: 0, 0 + index: -1 +redDot + rotate: false + xy: 148, 159 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 stack rotate: false - xy: 2, 10 + xy: 221, 239 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 +whiteBorder + rotate: false + xy: 17, 51 + size: 59, 59 + orig: 59, 59 + offset: 0, 0 + index: -1 diff --git a/src/main/resources/net/rptools/maptool/client/maptool.png b/src/main/resources/net/rptools/maptool/client/maptool.png index e9a943c7b007457d5b5a35cd7a131b6d4292050f..05ee45427c58693b9c3569b2450ca8a283e150e2 100644 GIT binary patch literal 40428 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

    |8utrdjSPm?O8e-c)1CPRjcA^$=pIa{RL#Aef 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 literal 22466 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 TL08Tz5cr)lxTs&Ii;4I@zu9L5 From 488b0ad97ce06a36a59b92f11c34d5ddd72372d4 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 19 Apr 2021 19:55:15 +0200 Subject: [PATCH 033/139] add stubs for token overlays --- .../maptool/client/ui/zone/GdxRenderer.java | 426 +++++++++++++++++- .../maptool/client/ui/zone/ZoneRenderer.java | 2 + 2 files changed, 425 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 3637bf3a3f..cfd0db45be 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -33,8 +33,9 @@ import net.rptools.maptool.client.tool.drawing.RectangleExposeTool; import net.rptools.maptool.client.ui.Scale; import net.rptools.maptool.client.ui.Tool; -import net.rptools.maptool.client.ui.token.AbstractTokenOverlay; -import net.rptools.maptool.client.ui.token.BarTokenOverlay; +import net.rptools.maptool.client.ui.token.*; +import net.rptools.maptool.client.walker.ZoneWalker; +import net.rptools.maptool.client.walker.astar.AStarCellPoint; import net.rptools.maptool.model.Label; import net.rptools.maptool.model.Path; import net.rptools.maptool.model.*; @@ -53,9 +54,11 @@ import javax.swing.*; import java.awt.*; import java.awt.geom.*; +import java.awt.image.BufferedImage; import java.text.NumberFormat; import java.util.*; import java.util.List; +import java.util.concurrent.Flow; import static java.util.zip.Deflater.DEFAULT_COMPRESSION; @@ -859,7 +862,296 @@ private void renderLabels(PlayerView view) { timer.stop("labels-1"); } - private void showBlockedMoves(PlayerView view, Set unOwnedMovementSet) { + private void showBlockedMoves(PlayerView view, Set movementSet) { + var selectionSetMap = zoneRenderer.getSelectionSetMap(); + if (selectionSetMap.isEmpty()) { + return; + } + + boolean clipInstalled = false; + for (ZoneRenderer.SelectionSet set : movementSet) { + Token keyToken = zone.getToken(set.getKeyToken()); + if (keyToken == null) { + // It was removed ? + selectionSetMap.remove(set.getKeyToken()); + continue; + } + // Hide the hidden layer + if (keyToken.getLayer() == Zone.Layer.GM && !view.isGMView()) { + continue; + } + ZoneWalker walker = set.getWalker(); + + for (GUID tokenGUID : set.getTokens()) { + Token token = zone.getToken(tokenGUID); + + // Perhaps deleted? + if (token == null) { + continue; + } + + // Don't bother if it's not visible + if (!token.isVisible() && !view.isGMView()) { + continue; + } + + // ... or if it's visible only to the owner and that's not us! + if (token.isVisibleOnlyToOwner() && !AppUtil.playerOwns(token)) { + continue; + } + + // ... or there are no lights/visibleScreen and you are not the owner or gm and there is fow + // or vision + if (!view.isGMView() + && !AppUtil.playerOwns(token) + && visibleScreenArea == null + && zone.hasFog() + && zoneRenderer.getZoneView().isUsingVision()) { + continue; + } + + // ... or if it doesn't have an image to display. (Hm, should still show *something*?) + Asset asset = AssetManager.getAsset(token.getImageAssetId()); + if (asset == null) { + continue; + } + + // OPTIMIZE: combine this with the code in renderTokens() + java.awt.Rectangle footprintBounds = token.getBounds(zone); + + + // get token image, using image table if present + Sprite image = sprites.get(token.getImageAssetId()); + if(image == null) + continue; + + // Vision visibility + boolean isOwner = view.isGMView() || AppUtil.playerOwns(token); // || + // set.getPlayerId().equals(MapTool.getPlayer().getName()); + if (!view.isGMView() && visibleScreenArea != null && !isOwner) { + // FJE Um, why not just assign the clipping area at the top of the routine? + //TODO: Path clipping + if (!clipInstalled) { + // Only show the part of the path that is visible + // Area visibleArea = new Area(g.getClipBounds()); + // visibleArea.intersect(visibleScreenArea); + + // g = (Graphics2D) g.create(); + // g.setClip(new GeneralPath(visibleArea)); + + clipInstalled = true; + // System.out.println("Adding Clip: " + MapTool.getPlayer().getName()); + } + } + // Show path only on the key token on token layer that are visible to the owner or gm while + // fow and vision is on + if (token == keyToken && !token.isStamp()) { + renderPath( + walker != null ? walker.getPath() : set.getGridlessPath(), + token.getFootprint(zone.getGrid())); + } + + // Show current Blocked Movement directions for A* + if (walker != null && (log.isDebugEnabled() || showAstarDebugging)) { + Collection checkPoints = walker.getCheckedPoints(); + // Color currentColor = g.getColor(); + for (AStarCellPoint acp : checkPoints) { + Set validMoves = acp.getValidMoves(); + + for (Point2D point : validMoves) { + ZonePoint zp = acp.offsetZonePoint(zoneRenderer.getZone().getGrid(), point.getX(), point.getY()); + double r = (zp.x - 1) * 45; + showBlockedMoves(zp, r, AppStyle.blockMoveImage, 1.0f); + } + } + } +/* // handle flipping + BufferedImage workImage = image; + if (token.isFlippedX() || token.isFlippedY()) { + workImage = + new BufferedImage(image.getWidth(), image.getHeight(), image.getTransparency()); + + int workW = image.getWidth() * (token.isFlippedX() ? -1 : 1); + int workH = image.getHeight() * (token.isFlippedY() ? -1 : 1); + int workX = token.isFlippedX() ? image.getWidth() : 0; + int workY = token.isFlippedY() ? image.getHeight() : 0; + + Graphics2D wig = workImage.createGraphics(); + wig.drawImage(image, workX, workY, workW, workH, null); + wig.dispose(); + } + // on the iso plane + if (token.isFlippedIso()) { + if (flipIsoImageMap.get(token) == null) { + workImage = IsometricGrid.isoImage(workImage); + } else { + workImage = flipIsoImageMap.get(token); + } + token.setHeight(workImage.getHeight()); + token.setWidth(workImage.getWidth()); + footprintBounds = token.getBounds(zone); + } + // Draw token + double iso_ho = 0; + Dimension imgSize = new Dimension(workImage.getWidth(), workImage.getHeight()); + if (token.getShape() == Token.TokenShape.FIGURE) { + double th = token.getHeight() * (double) footprintBounds.width / token.getWidth(); + iso_ho = footprintBounds.height - th; + footprintBounds = + new java.awt.Rectangle( + footprintBounds.x, + footprintBounds.y - (int) iso_ho, + footprintBounds.width, + (int) th); + iso_ho = iso_ho * getScale(); + } + SwingUtil.constrainTo(imgSize, footprintBounds.width, footprintBounds.height); + + int offsetx = 0; + int offsety = 0; + if (token.isSnapToScale()) { + offsetx = + (int) + (imgSize.width < footprintBounds.width + ? (footprintBounds.width - imgSize.width) / 2 * getScale() + : 0); + offsety = + (int) + (imgSize.height < footprintBounds.height + ? (footprintBounds.height - imgSize.height) / 2 * getScale() + : 0); + } + int tx = x + offsetx; + int ty = y + offsety + (int) iso_ho; + + AffineTransform at = new AffineTransform(); + at.translate(tx, ty); + + if (token.hasFacing() && token.getShape() == Token.TokenShape.TOP_DOWN) { + at.rotate( + Math.toRadians(-token.getFacing() - 90), + scaledWidth / 2 - token.getAnchor().x * scale - offsetx, + scaledHeight / 2 + - token.getAnchor().y * scale + - offsety); // facing defaults to down, or -90 degrees + } + if (token.isSnapToScale()) { + at.scale( + (double) imgSize.width / workImage.getWidth(), + (double) imgSize.height / workImage.getHeight()); + at.scale(getScale(), getScale()); + } else { + if (token.getShape() == Token.TokenShape.FIGURE) { + at.scale( + (double) scaledWidth / workImage.getWidth(), + (double) scaledWidth / workImage.getWidth()); + } else { + at.scale( + (double) scaledWidth / workImage.getWidth(), + (double) scaledHeight / workImage.getHeight()); + } + } + + g.drawImage(workImage, at, this); + + // Other details + if (token == keyToken) { + java.awt.Rectangle bounds = new java.awt.Rectangle(tx, ty, imgSize.width, imgSize.height); + bounds.width *= getScale(); + bounds.height *= getScale(); + + Grid grid = zone.getGrid(); + boolean checkForFog = + MapTool.getServerPolicy().isUseIndividualFOW() && zoneView.isUsingVision(); + boolean showLabels = isOwner; + if (checkForFog) { + Path path = + set.getWalker() != null ? set.getWalker().getPath() : set.gridlessPath; + List thePoints = path.getCellPath(); + + // now that we have the last point, we can check to see if it's gridless or not. If not + // gridless, get the last point the token was at and see if the token's footprint is inside + // the visible area to show the label. + + if (thePoints.isEmpty()) { + showLabels = false; + } else { + AbstractPoint lastPoint = thePoints.get(thePoints.size() - 1); + + java.awt.Rectangle tokenRectangle = null; + if (lastPoint instanceof CellPoint) { + tokenRectangle = token.getFootprint(grid).getBounds(grid, (CellPoint) lastPoint); + } else { + java.awt.Rectangle tokBounds = token.getBounds(zone); + tokenRectangle = new java.awt.Rectangle(); + tokenRectangle.setBounds( + lastPoint.x, + lastPoint.y, + (int) tokBounds.getWidth(), + (int) tokBounds.getHeight()); + } + showLabels = showLabels || zoneView.getVisibleArea(view).intersects(tokenRectangle); + } + } else { + boolean hasFog = zone.hasFog(); + boolean fogIntersects = exposedFogArea.intersects(bounds); + showLabels = showLabels || (visibleScreenArea == null && !hasFog); // no vision - fog + showLabels = + showLabels + || (visibleScreenArea == null && hasFog && fogIntersects); // no vision + fog + showLabels = + showLabels + || (visibleScreenArea != null + && visibleScreenArea.intersects(bounds) + && fogIntersects); // vision + } + if (showLabels) { + // if the token is visible on the screen it will be in the location cache + if (tokenLocationCache.containsKey(token)) { + y += 10 + scaledHeight; + x += scaledWidth / 2; + + if (!token.isStamp() && AppState.getShowMovementMeasurements()) { + String distance = ""; + if (walker != null) { // This wouldn't be true unless token.isSnapToGrid() && + // grid.isPathingSupported() + double distanceTraveled = walker.getDistance(); + if (distanceTraveled >= 0) { + distance = NumberFormat.getInstance().format(distanceTraveled); + } + } else { + double c = 0; + ZonePoint lastPoint = null; + for (ZonePoint zp : set.gridlessPath.getCellPath()) { + if (lastPoint == null) { + lastPoint = zp; + continue; + } + int a = lastPoint.x - zp.x; + int b = lastPoint.y - zp.y; + c += Math.hypot(a, b); + lastPoint = zp; + } + c /= zone.getGrid().getSize(); // Number of "cells" + c *= zone.getUnitsPerCell(); // "actual" distance traveled + distance = NumberFormat.getInstance().format(c); + } + if (!distance.isEmpty()) { + delayRendering(new ZoneRenderer.LabelRenderer(distance, x, y)); + y += 20; + } + } + if (set.getPlayerId() != null && set.getPlayerId().length() >= 1) { + delayRendering(new ZoneRenderer.LabelRenderer(set.getPlayerId(), x, y)); + } + } // !token.isStamp() + } // showLabels + } // token == keyToken*/ + } + } + } + + private void showBlockedMoves(ZonePoint zp, double r, BufferedImage blockMoveImage, float v) { //TODO: implement } @@ -1852,6 +2144,134 @@ private void renderImageBorderAround(ImageBorder border, Rectangle bounds) { } private void renderTokenOverlay(AbstractTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) { + if(overlay instanceof MultipleImageBarTokenOverlay) + renderTokenOverlay((MultipleImageBarTokenOverlay)overlay, token, bounds, barValue); + else if(overlay instanceof SingleImageBarTokenOverlay) + renderTokenOverlay((SingleImageBarTokenOverlay)overlay, token, bounds, barValue); + else if(overlay instanceof DrawnBarTokenOverlay) + renderTokenOverlay((DrawnBarTokenOverlay)overlay, token, bounds, barValue); + else if(overlay instanceof TwoToneBarTokenOverlay) + renderTokenOverlay((TwoToneBarTokenOverlay)overlay, token, bounds, barValue); + else if(overlay instanceof TwoImageBarTokenOverlay) + renderTokenOverlay((TwoImageBarTokenOverlay)overlay, token, bounds, barValue); + else if(overlay instanceof ImageTokenOverlay) + renderTokenOverlay((ImageTokenOverlay)overlay, token, bounds, barValue); + else if(overlay instanceof FlowImageTokenOverlay) + renderTokenOverlay((FlowImageTokenOverlay)overlay, token, bounds, barValue); + else if(overlay instanceof CornerImageTokenOverlay) + renderTokenOverlay((CornerImageTokenOverlay)overlay, token, bounds, barValue); + else if(overlay instanceof XTokenOverlay) + renderTokenOverlay((XTokenOverlay)overlay, token, bounds, barValue); + else if(overlay instanceof FlowColorDotTokenOverlay) + renderTokenOverlay((FlowColorDotTokenOverlay)overlay, token, bounds, barValue); + else if(overlay instanceof FlowTriangleTokenOverlay) + renderTokenOverlay((FlowTriangleTokenOverlay)overlay, token, bounds, barValue); + else if(overlay instanceof FlowDiamondTokenOverlay) + renderTokenOverlay((FlowDiamondTokenOverlay)overlay, token, bounds, barValue); + else if(overlay instanceof FlowColorSquareTokenOverlay) + renderTokenOverlay((FlowColorSquareTokenOverlay)overlay, token, bounds, barValue); + else if(overlay instanceof FlowYieldTokenOverlay) + renderTokenOverlay((FlowYieldTokenOverlay)overlay, token, bounds, barValue); + else if(overlay instanceof YieldTokenOverlay) + renderTokenOverlay((YieldTokenOverlay)overlay, token, bounds, barValue); + else if(overlay instanceof OTokenOverlay) + renderTokenOverlay((OTokenOverlay)overlay, token, bounds, barValue); + else if(overlay instanceof ColorDotTokenOverlay) + renderTokenOverlay((ColorDotTokenOverlay)overlay, token, bounds, barValue); + else if(overlay instanceof DiamondTokenOverlay) + renderTokenOverlay((DiamondTokenOverlay)overlay, token, bounds, barValue); + else if(overlay instanceof TriangleTokenOverlay) + renderTokenOverlay((TriangleTokenOverlay)overlay, token, bounds, barValue); + else if(overlay instanceof CrossTokenOverlay) + renderTokenOverlay((CrossTokenOverlay)overlay, token, bounds, barValue); + } + + private void renderTokenOverlay(MultipleImageBarTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + { + //TODO: Implement + } + + private void renderTokenOverlay(SingleImageBarTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + { + //TODO: Implement + } + + private void renderTokenOverlay(DrawnBarTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + { + //TODO: Implement + } + + private void renderTokenOverlay(TwoToneBarTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + { + //TODO: Implement + } + + private void renderTokenOverlay(ImageTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + { + //TODO: Implement + } + + private void renderTokenOverlay(TwoImageBarTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + { + //TODO: Implement + } + + private void renderTokenOverlay(FlowImageTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + { + //TODO: Implement + } + + private void renderTokenOverlay(CornerImageTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + { + //TODO: Implement + } + + private void renderTokenOverlay(XTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + { + //TODO: Implement + } + private void renderTokenOverlay(FlowColorDotTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + { + //TODO: Implement + } + private void renderTokenOverlay(FlowTriangleTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + { + //TODO: Implement + } + private void renderTokenOverlay(FlowDiamondTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + { + //TODO: Implement + } + private void renderTokenOverlay(FlowColorSquareTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + { + //TODO: Implement + } + private void renderTokenOverlay(FlowYieldTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + { + //TODO: Implement + } + private void renderTokenOverlay(YieldTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + { + //TODO: Implement + } + private void renderTokenOverlay(OTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + { + //TODO: Implement + } + private void renderTokenOverlay(ColorDotTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + { + //TODO: Implement + } + private void renderTokenOverlay(DiamondTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + { + //TODO: Implement + } + private void renderTokenOverlay(TriangleTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + { + //TODO: Implement + } + private void renderTokenOverlay(CrossTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + { //TODO: Implement } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index 54d1835d6c..3d8ca1a214 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -284,6 +284,8 @@ public void mouseMoved(MouseEvent e) { public void setAutoResizeStamp(boolean value) { this.autoResizeStamp = value; } + + public Map getSelectionSetMap() { return selectionSetMap; } public boolean isAutoResizeStamp() { return autoResizeStamp; From 2a01b9453f231201920385e742162eed9e42a6d5 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Wed, 21 Apr 2021 19:18:50 +0200 Subject: [PATCH 034/139] rendererd CrossTokenOverlay --- .../client/ui/token/XTokenOverlay.java | 2 +- .../maptool/client/ui/zone/GdxRenderer.java | 121 +++++++++++------- 2 files changed, 73 insertions(+), 50 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/token/XTokenOverlay.java b/src/main/java/net/rptools/maptool/client/ui/token/XTokenOverlay.java index 71acdde86b..d9bc47b8a0 100644 --- a/src/main/java/net/rptools/maptool/client/ui/token/XTokenOverlay.java +++ b/src/main/java/net/rptools/maptool/client/ui/token/XTokenOverlay.java @@ -108,7 +108,7 @@ public Color getColor() { * * @return Returns the current value of stroke. */ - protected BasicStroke getStroke() { + public BasicStroke getStroke() { return stroke; } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index cfd0db45be..9ff2829c8e 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -43,6 +43,7 @@ import net.rptools.maptool.model.drawing.DrawablePaint; import net.rptools.maptool.model.drawing.DrawableTexturePaint; import net.rptools.maptool.model.drawing.DrawnElement; +import net.rptools.maptool.util.FunctionUtil; import net.rptools.maptool.util.GraphicsUtil; import net.rptools.maptool.util.ImageManager; import net.rptools.maptool.util.StringUtil; @@ -1505,7 +1506,6 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure Set tempVisTokens = new HashSet(); - List tokenPostProcessing = new ArrayList(tokenList.size()); for (Token token : tokenList) { if (token.getShape() != Token.TokenShape.FIGURE && figuresOnly && !token.isAlwaysVisible()) { continue; @@ -1900,7 +1900,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure || !overlay.showPlayer(token, MapTool.getPlayer())) { continue; } - renderTokenOverlay(overlay, token, image.getBoundingRectangle(), stateValue); + renderTokenOverlay(overlay, token, origBounds, stateValue); } timer.stop("tokenlist-9"); @@ -1914,7 +1914,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure || !overlay.showPlayer(token, MapTool.getPlayer())) { continue; } - renderTokenOverlay(overlay, token, image.getBoundingRectangle(), barValue); + renderTokenOverlay(overlay, token, origBounds, barValue); } // endfor timer.stop("tokenlist-10"); @@ -2143,136 +2143,159 @@ private void renderImageBorderAround(ImageBorder border, Rectangle bounds) { tmpTile.draw(batch, x + width - rightMargin, y + topMargin, right.getRegionWidth(), height - topMargin - bottomMargin); } - private void renderTokenOverlay(AbstractTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) { + private void renderTokenOverlay(AbstractTokenOverlay overlay, Token token, Rectangle2D bounds, Object value) { if(overlay instanceof MultipleImageBarTokenOverlay) - renderTokenOverlay((MultipleImageBarTokenOverlay)overlay, token, bounds, barValue); + renderTokenOverlay((MultipleImageBarTokenOverlay)overlay, token, bounds, value); else if(overlay instanceof SingleImageBarTokenOverlay) - renderTokenOverlay((SingleImageBarTokenOverlay)overlay, token, bounds, barValue); - else if(overlay instanceof DrawnBarTokenOverlay) - renderTokenOverlay((DrawnBarTokenOverlay)overlay, token, bounds, barValue); + renderTokenOverlay((SingleImageBarTokenOverlay)overlay, token, bounds, value); else if(overlay instanceof TwoToneBarTokenOverlay) - renderTokenOverlay((TwoToneBarTokenOverlay)overlay, token, bounds, barValue); + renderTokenOverlay((TwoToneBarTokenOverlay)overlay, token, bounds, value); + else if(overlay instanceof DrawnBarTokenOverlay) + renderTokenOverlay((DrawnBarTokenOverlay)overlay, token, bounds, value); else if(overlay instanceof TwoImageBarTokenOverlay) - renderTokenOverlay((TwoImageBarTokenOverlay)overlay, token, bounds, barValue); - else if(overlay instanceof ImageTokenOverlay) - renderTokenOverlay((ImageTokenOverlay)overlay, token, bounds, barValue); - else if(overlay instanceof FlowImageTokenOverlay) - renderTokenOverlay((FlowImageTokenOverlay)overlay, token, bounds, barValue); + renderTokenOverlay((TwoImageBarTokenOverlay)overlay, token, bounds, value); + else if(overlay instanceof BooleanTokenOverlay) + renderTokenOverlay((BooleanTokenOverlay)overlay, token, bounds, value); + } + + private void renderTokenOverlay(BooleanTokenOverlay overlay, Token token, Rectangle2D bounds, Object value) + { + if (!FunctionUtil.getBooleanValue(value)) + return; + + if(overlay instanceof FlowImageTokenOverlay) + renderTokenOverlay((FlowImageTokenOverlay)overlay, token, bounds); else if(overlay instanceof CornerImageTokenOverlay) - renderTokenOverlay((CornerImageTokenOverlay)overlay, token, bounds, barValue); - else if(overlay instanceof XTokenOverlay) - renderTokenOverlay((XTokenOverlay)overlay, token, bounds, barValue); + renderTokenOverlay((CornerImageTokenOverlay)overlay, token, bounds); + else if(overlay instanceof ImageTokenOverlay) + renderTokenOverlay((ImageTokenOverlay)overlay, token, bounds); else if(overlay instanceof FlowColorDotTokenOverlay) - renderTokenOverlay((FlowColorDotTokenOverlay)overlay, token, bounds, barValue); + renderTokenOverlay((FlowColorDotTokenOverlay)overlay, token, bounds); else if(overlay instanceof FlowTriangleTokenOverlay) - renderTokenOverlay((FlowTriangleTokenOverlay)overlay, token, bounds, barValue); + renderTokenOverlay((FlowTriangleTokenOverlay)overlay, token, bounds); else if(overlay instanceof FlowDiamondTokenOverlay) - renderTokenOverlay((FlowDiamondTokenOverlay)overlay, token, bounds, barValue); + renderTokenOverlay((FlowDiamondTokenOverlay)overlay, token, bounds); else if(overlay instanceof FlowColorSquareTokenOverlay) - renderTokenOverlay((FlowColorSquareTokenOverlay)overlay, token, bounds, barValue); + renderTokenOverlay((FlowColorSquareTokenOverlay)overlay, token, bounds); else if(overlay instanceof FlowYieldTokenOverlay) - renderTokenOverlay((FlowYieldTokenOverlay)overlay, token, bounds, barValue); + renderTokenOverlay((FlowYieldTokenOverlay)overlay, token, bounds); else if(overlay instanceof YieldTokenOverlay) - renderTokenOverlay((YieldTokenOverlay)overlay, token, bounds, barValue); + renderTokenOverlay((YieldTokenOverlay)overlay, token, bounds); else if(overlay instanceof OTokenOverlay) - renderTokenOverlay((OTokenOverlay)overlay, token, bounds, barValue); + renderTokenOverlay((OTokenOverlay)overlay, token, bounds); else if(overlay instanceof ColorDotTokenOverlay) - renderTokenOverlay((ColorDotTokenOverlay)overlay, token, bounds, barValue); + renderTokenOverlay((ColorDotTokenOverlay)overlay, token, bounds); else if(overlay instanceof DiamondTokenOverlay) - renderTokenOverlay((DiamondTokenOverlay)overlay, token, bounds, barValue); + renderTokenOverlay((DiamondTokenOverlay)overlay, token, bounds); else if(overlay instanceof TriangleTokenOverlay) - renderTokenOverlay((TriangleTokenOverlay)overlay, token, bounds, barValue); + renderTokenOverlay((TriangleTokenOverlay)overlay, token, bounds); else if(overlay instanceof CrossTokenOverlay) - renderTokenOverlay((CrossTokenOverlay)overlay, token, bounds, barValue); + renderTokenOverlay((CrossTokenOverlay)overlay, token); + else if(overlay instanceof XTokenOverlay) + renderTokenOverlay((XTokenOverlay)overlay, token, bounds); } - private void renderTokenOverlay(MultipleImageBarTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + private void renderTokenOverlay(MultipleImageBarTokenOverlay overlay, Token token, Rectangle2D bounds, Object barValue) { //TODO: Implement } - private void renderTokenOverlay(SingleImageBarTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + private void renderTokenOverlay(SingleImageBarTokenOverlay overlay, Token token, Rectangle2D bounds, Object barValue) { //TODO: Implement } - private void renderTokenOverlay(DrawnBarTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + private void renderTokenOverlay(DrawnBarTokenOverlay overlay, Token token, Rectangle2D bounds, Object barValue) { //TODO: Implement } - private void renderTokenOverlay(TwoToneBarTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + private void renderTokenOverlay(TwoToneBarTokenOverlay overlay, Token token, Rectangle2D bounds, Object barValue) { //TODO: Implement } - private void renderTokenOverlay(ImageTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + private void renderTokenOverlay(ImageTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement } - private void renderTokenOverlay(TwoImageBarTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + private void renderTokenOverlay(TwoImageBarTokenOverlay overlay, Token token, Rectangle2D bounds, Object barValue) { //TODO: Implement } - private void renderTokenOverlay(FlowImageTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + private void renderTokenOverlay(FlowImageTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement } - private void renderTokenOverlay(CornerImageTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + private void renderTokenOverlay(CornerImageTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement } - private void renderTokenOverlay(XTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + private void renderTokenOverlay(XTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement } - private void renderTokenOverlay(FlowColorDotTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + private void renderTokenOverlay(FlowColorDotTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement } - private void renderTokenOverlay(FlowTriangleTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + private void renderTokenOverlay(FlowTriangleTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement } - private void renderTokenOverlay(FlowDiamondTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + private void renderTokenOverlay(FlowDiamondTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement } - private void renderTokenOverlay(FlowColorSquareTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + private void renderTokenOverlay(FlowColorSquareTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement } - private void renderTokenOverlay(FlowYieldTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + private void renderTokenOverlay(FlowYieldTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement } - private void renderTokenOverlay(YieldTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + private void renderTokenOverlay(YieldTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement } - private void renderTokenOverlay(OTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + private void renderTokenOverlay(OTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement } - private void renderTokenOverlay(ColorDotTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + private void renderTokenOverlay(ColorDotTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement } - private void renderTokenOverlay(DiamondTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + private void renderTokenOverlay(DiamondTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement } - private void renderTokenOverlay(TriangleTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + private void renderTokenOverlay(TriangleTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement } - private void renderTokenOverlay(CrossTokenOverlay overlay, Token token, Rectangle bounds, Object barValue) + private void renderTokenOverlay(CrossTokenOverlay overlay, Token token) { - //TODO: Implement + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + var color = overlay.getColor(); + Color.argb8888ToColor(tmpColor, color.getRGB()); + tmpColor.set(color.getRed()/255f, color.getGreen()/255f, color.getBlue()/255f, overlay.getOpacity()/100); + var stroke = overlay.getStroke(); + + drawer.setColor(tmpColor); + drawer.line(x, y + h/2f,x + w, y + h/2f, stroke.getLineWidth()); + drawer.line(x + w/2f, y,x + w/2f, y + h, stroke.getLineWidth()); + drawer.setColor(Color.WHITE); } // FIXME: I don't like this hardwiring From cb29c7b9cfa555bf18c901c053045cee088b78cc Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Wed, 21 Apr 2021 21:39:28 +0200 Subject: [PATCH 035/139] rendered OTokenOverlay, ColorDotTokenOverlay, DiamondTokenOverlay and TriangeTokenOverlay --- .../maptool/client/ui/zone/GdxRenderer.java | 513 ++++++++++-------- 1 file changed, 296 insertions(+), 217 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 9ff2829c8e..b6b78c750c 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -3,20 +3,19 @@ import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver; -import com.badlogic.gdx.graphics.*; import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.*; import com.badlogic.gdx.graphics.g2d.*; import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator; import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGeneratorLoader; import com.badlogic.gdx.graphics.g2d.freetype.FreetypeFontLoader; -import com.badlogic.gdx.math.*; import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.math.*; import com.badlogic.gdx.scenes.scene2d.utils.TiledDrawable; import com.badlogic.gdx.utils.FloatArray; import com.badlogic.gdx.utils.ScreenUtils; import com.crashinvaders.vfx.VfxManager; import com.crashinvaders.vfx.effects.ChainVfxEffect; -import com.crashinvaders.vfx.effects.FxaaEffect; import com.crashinvaders.vfx.framebuffer.VfxFrameBuffer; import net.rptools.lib.AppEvent; import net.rptools.lib.AppEventListener; @@ -57,9 +56,8 @@ import java.awt.geom.*; import java.awt.image.BufferedImage; import java.text.NumberFormat; -import java.util.*; import java.util.List; -import java.util.concurrent.Flow; +import java.util.*; import static java.util.zip.Deflater.DEFAULT_COMPRESSION; @@ -67,7 +65,7 @@ * The coordinates in the model are y-down, x-left. * The world coordinates are y-up, x-left. I moved the world to the 4th quadrant of the * coordinate system. So if you would draw a token t awt at (x,y) you have to draw it at (x, -y - t.width) - * + *

    * Bugs: * - y offset of VerticalHexgrid is wrong * - Imageborders are not rotated @@ -117,7 +115,8 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private float distanceFontScale = 0; private GlyphLayout glyphLayout = new GlyphLayout(); - private CodeTimer timer; + private CodeTimer timer = new CodeTimer("GdxRenderer.renderZone"); + ; private VfxManager vfxManager; private ChainVfxEffect vfxEffect; private VfxFrameBuffer backBuffer; @@ -267,19 +266,19 @@ public void render() { } private void ensureCorrectDistanceFont() { - if(zone == null) + if (zone == null) return; var fontScale = (float) zone.getGrid().getSize() / 50; // Font size of 12 at grid size 50 is default - if(fontScale == this.distanceFontScale && distanceFont != null) + if (fontScale == this.distanceFontScale && distanceFont != null) return; - if(distanceFont != null) + if (distanceFont != null) manager.unload(FONT_DISTANCE); var fontParams = new FreetypeFontLoader.FreeTypeFontLoaderParameter(); - fontParams.fontFileName = "net/rptools/maptool/client/fonts/OpenSans-Bold.ttf"; + fontParams.fontFileName = "net/rptools/maptool/client/fonts/OpenSans-Bold.ttf"; fontParams.fontParameters.size = (int) (12 * fontScale); manager.load(FONT_DISTANCE, BitmapFont.class, fontParams); manager.finishLoading(); @@ -292,7 +291,7 @@ private void loadAssets() { manager.load(ATLAS, TextureAtlas.class); var mySmallFont = new FreetypeFontLoader.FreeTypeFontLoaderParameter(); - mySmallFont.fontFileName = "net/rptools/maptool/client/fonts/OpenSans-Regular.ttf"; + mySmallFont.fontFileName = "net/rptools/maptool/client/fonts/OpenSans-Regular.ttf"; mySmallFont.fontParameters.size = 12; manager.load(FONT_NORMAL, BitmapFont.class, mySmallFont); } @@ -303,7 +302,7 @@ private void doRendering() { batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); //this happens sometimes when starting with ide (non-debug) - if(batch.isDrawing()) + if (batch.isDrawing()) batch.end(); batch.begin(); @@ -359,9 +358,6 @@ private void collectTimerResults() { } private void initializeTimer() { - if (timer == null) { - timer = new CodeTimer("ZoneRenderer.renderZone"); - } timer.setEnabled(AppState.isCollectProfilingData() || log.isDebugEnabled()); timer.clear(); timer.setThreshold(10); @@ -582,11 +578,11 @@ private void renderZone(PlayerView view) { } private void updateVisibleArea() { - if (zoneRenderer.getZoneView().isUsingVision()) { - timer.start("ZoneRenderer-getVisibleArea"); - visibleScreenArea = zoneRenderer.getZoneView().getVisibleArea(zoneRenderer.getPlayerView()); - timer.stop("ZoneRenderer-getVisibleArea"); - } + // if (zoneRenderer.getZoneView().isUsingVision()) { + timer.start("ZoneRenderer-getVisibleArea"); + visibleScreenArea = zoneRenderer.getZoneView().getVisibleArea(zoneRenderer.getPlayerView()); + timer.stop("ZoneRenderer-getVisibleArea"); + // } } private void renderPlayerVisionOverlay(PlayerView view) { @@ -864,14 +860,14 @@ private void renderLabels(PlayerView view) { } private void showBlockedMoves(PlayerView view, Set movementSet) { - var selectionSetMap = zoneRenderer.getSelectionSetMap(); + var selectionSetMap = zoneRenderer.getSelectionSetMap(); if (selectionSetMap.isEmpty()) { return; } boolean clipInstalled = false; for (ZoneRenderer.SelectionSet set : movementSet) { - Token keyToken = zone.getToken(set.getKeyToken()); + Token keyToken = zone.getToken(set.getKeyToken()); if (keyToken == null) { // It was removed ? selectionSetMap.remove(set.getKeyToken()); @@ -923,7 +919,7 @@ private void showBlockedMoves(PlayerView view, Set mo // get token image, using image table if present Sprite image = sprites.get(token.getImageAssetId()); - if(image == null) + if (image == null) continue; // Vision visibility @@ -934,17 +930,17 @@ private void showBlockedMoves(PlayerView view, Set mo //TODO: Path clipping if (!clipInstalled) { // Only show the part of the path that is visible - // Area visibleArea = new Area(g.getClipBounds()); - // visibleArea.intersect(visibleScreenArea); + // Area visibleArea = new Area(g.getClipBounds()); + // visibleArea.intersect(visibleScreenArea); - // g = (Graphics2D) g.create(); - // g.setClip(new GeneralPath(visibleArea)); + // g = (Graphics2D) g.create(); + // g.setClip(new GeneralPath(visibleArea)); clipInstalled = true; // System.out.println("Adding Clip: " + MapTool.getPlayer().getName()); } } - // Show path only on the key token on token layer that are visible to the owner or gm while + // Show path only on the key token on token layer that are visible to the owner or gm while // fow and vision is on if (token == keyToken && !token.isStamp()) { renderPath( @@ -1776,9 +1772,9 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure if (token.getFacing() < 0) { - // shape.setColor(Color.YELLOW); + // shape.setColor(Color.YELLOW); } else { - // shape.setColor(1, 1, 0, 0.5f); + // shape.setColor(1, 1, 0, 0.5f); } //shape.set(ShapeRenderer.ShapeType.Filled); @@ -1792,7 +1788,6 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure draw(arrowArea); - break; case TOP_DOWN: if (AppPreferences.getForceFacingArrow() == false) { @@ -2014,78 +2009,10 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure timer.stop("tokenlist-13"); } - private class LabelRenderer implements ItemRenderer - { - private final boolean isGMView; - private Token token; - - public LabelRenderer(Token token, boolean isGMView) { - this.token = token; - this.isGMView = isGMView; - } - - @Override - public void render() { - int offset = 3; // Keep it from tramping on the token border. - NinePatch background; - Color foreground; - - if (token.isVisible()) { - if (token.getType() == Token.Type.NPC) { - background = blueLabel; - foreground = Color.WHITE; - } else { - background = grayLabel; - foreground = Color.BLACK; - } - } else { - background = darkGrayLabel; - foreground = Color.WHITE; - } - String name = token.getName(); - if (isGMView && token.getGMName() != null && !StringUtil.isEmpty(token.getGMName())) { - name += " (" + token.getGMName() + ")"; - } - - - // Calculate image dimensions - - float labelHeight = normalFont.getLineHeight() + GraphicsUtil.BOX_PADDINGY * 2; - - - java.awt.Rectangle r = token.getBounds(zone); - tmpWorldCoord.x = r.x + r.width / 2; - tmpWorldCoord.y = (r.y + r.height + offset + labelHeight*zoom / 2) * -1; - tmpWorldCoord.z = 0; - tmpScreenCoord = cam.project(tmpWorldCoord); - - drawBoxedString( - name, - tmpScreenCoord.x, - tmpScreenCoord.y, - SwingUtilities.CENTER, - background, - foreground); - - var label = token.getLabel(); - - // Draw name and label to image - if (label != null && label.trim().length() > 0) { - drawBoxedString( - label, - tmpScreenCoord.x, - tmpScreenCoord.y - labelHeight, - SwingUtilities.CENTER, - background, - foreground); - } - } - } - private TextureRegion fetch(String regionName) { var region = fetchedRegions.get(regionName); - if(region != null) - return region; + if (region != null) + return region; region = atlas.findRegion(regionName); fetchedRegions.put(regionName, region); @@ -2099,7 +2026,6 @@ private void renderImageBorderAround(ImageBorder border, Rectangle bounds) { var bordername = imagePath.substring(index); - var topRight = fetch(bordername + "/tr"); var top = fetch(bordername + "/top"); var topLeft = fetch(bordername + "/tl"); @@ -2144,143 +2070,230 @@ private void renderImageBorderAround(ImageBorder border, Rectangle bounds) { } private void renderTokenOverlay(AbstractTokenOverlay overlay, Token token, Rectangle2D bounds, Object value) { - if(overlay instanceof MultipleImageBarTokenOverlay) - renderTokenOverlay((MultipleImageBarTokenOverlay)overlay, token, bounds, value); - else if(overlay instanceof SingleImageBarTokenOverlay) - renderTokenOverlay((SingleImageBarTokenOverlay)overlay, token, bounds, value); - else if(overlay instanceof TwoToneBarTokenOverlay) - renderTokenOverlay((TwoToneBarTokenOverlay)overlay, token, bounds, value); - else if(overlay instanceof DrawnBarTokenOverlay) - renderTokenOverlay((DrawnBarTokenOverlay)overlay, token, bounds, value); - else if(overlay instanceof TwoImageBarTokenOverlay) - renderTokenOverlay((TwoImageBarTokenOverlay)overlay, token, bounds, value); - else if(overlay instanceof BooleanTokenOverlay) - renderTokenOverlay((BooleanTokenOverlay)overlay, token, bounds, value); - } - - private void renderTokenOverlay(BooleanTokenOverlay overlay, Token token, Rectangle2D bounds, Object value) - { + if (overlay instanceof MultipleImageBarTokenOverlay) + renderTokenOverlay((MultipleImageBarTokenOverlay) overlay, token, bounds, value); + else if (overlay instanceof SingleImageBarTokenOverlay) + renderTokenOverlay((SingleImageBarTokenOverlay) overlay, token, bounds, value); + else if (overlay instanceof TwoToneBarTokenOverlay) + renderTokenOverlay((TwoToneBarTokenOverlay) overlay, token, bounds, value); + else if (overlay instanceof DrawnBarTokenOverlay) + renderTokenOverlay((DrawnBarTokenOverlay) overlay, token, bounds, value); + else if (overlay instanceof TwoImageBarTokenOverlay) + renderTokenOverlay((TwoImageBarTokenOverlay) overlay, token, bounds, value); + else if (overlay instanceof BooleanTokenOverlay) + renderTokenOverlay((BooleanTokenOverlay) overlay, token, bounds, value); + } + + private void renderTokenOverlay(BooleanTokenOverlay overlay, Token token, Rectangle2D bounds, Object value) { if (!FunctionUtil.getBooleanValue(value)) return; - if(overlay instanceof FlowImageTokenOverlay) - renderTokenOverlay((FlowImageTokenOverlay)overlay, token, bounds); - else if(overlay instanceof CornerImageTokenOverlay) - renderTokenOverlay((CornerImageTokenOverlay)overlay, token, bounds); - else if(overlay instanceof ImageTokenOverlay) - renderTokenOverlay((ImageTokenOverlay)overlay, token, bounds); - else if(overlay instanceof FlowColorDotTokenOverlay) - renderTokenOverlay((FlowColorDotTokenOverlay)overlay, token, bounds); - else if(overlay instanceof FlowTriangleTokenOverlay) - renderTokenOverlay((FlowTriangleTokenOverlay)overlay, token, bounds); - else if(overlay instanceof FlowDiamondTokenOverlay) - renderTokenOverlay((FlowDiamondTokenOverlay)overlay, token, bounds); - else if(overlay instanceof FlowColorSquareTokenOverlay) - renderTokenOverlay((FlowColorSquareTokenOverlay)overlay, token, bounds); - else if(overlay instanceof FlowYieldTokenOverlay) - renderTokenOverlay((FlowYieldTokenOverlay)overlay, token, bounds); - else if(overlay instanceof YieldTokenOverlay) - renderTokenOverlay((YieldTokenOverlay)overlay, token, bounds); - else if(overlay instanceof OTokenOverlay) - renderTokenOverlay((OTokenOverlay)overlay, token, bounds); - else if(overlay instanceof ColorDotTokenOverlay) - renderTokenOverlay((ColorDotTokenOverlay)overlay, token, bounds); - else if(overlay instanceof DiamondTokenOverlay) - renderTokenOverlay((DiamondTokenOverlay)overlay, token, bounds); - else if(overlay instanceof TriangleTokenOverlay) - renderTokenOverlay((TriangleTokenOverlay)overlay, token, bounds); - else if(overlay instanceof CrossTokenOverlay) - renderTokenOverlay((CrossTokenOverlay)overlay, token); - else if(overlay instanceof XTokenOverlay) - renderTokenOverlay((XTokenOverlay)overlay, token, bounds); - } - - private void renderTokenOverlay(MultipleImageBarTokenOverlay overlay, Token token, Rectangle2D bounds, Object barValue) - { + if (overlay instanceof FlowImageTokenOverlay) + renderTokenOverlay((FlowImageTokenOverlay) overlay, token, bounds); + else if (overlay instanceof CornerImageTokenOverlay) + renderTokenOverlay((CornerImageTokenOverlay) overlay, token, bounds); + else if (overlay instanceof ImageTokenOverlay) + renderTokenOverlay((ImageTokenOverlay) overlay, token, bounds); + else if (overlay instanceof FlowColorDotTokenOverlay) + renderTokenOverlay((FlowColorDotTokenOverlay) overlay, token, bounds); + else if (overlay instanceof FlowTriangleTokenOverlay) + renderTokenOverlay((FlowTriangleTokenOverlay) overlay, token, bounds); + else if (overlay instanceof FlowDiamondTokenOverlay) + renderTokenOverlay((FlowDiamondTokenOverlay) overlay, token, bounds); + else if (overlay instanceof FlowColorSquareTokenOverlay) + renderTokenOverlay((FlowColorSquareTokenOverlay) overlay, token, bounds); + else if (overlay instanceof FlowYieldTokenOverlay) + renderTokenOverlay((FlowYieldTokenOverlay) overlay, token, bounds); + else if (overlay instanceof YieldTokenOverlay) + renderTokenOverlay((YieldTokenOverlay) overlay, token, bounds); + else if (overlay instanceof OTokenOverlay) + renderTokenOverlay((OTokenOverlay) overlay, token); + else if (overlay instanceof ColorDotTokenOverlay) + renderTokenOverlay((ColorDotTokenOverlay) overlay, token); + else if (overlay instanceof DiamondTokenOverlay) + renderTokenOverlay((DiamondTokenOverlay) overlay, token); + else if (overlay instanceof TriangleTokenOverlay) + renderTokenOverlay((TriangleTokenOverlay) overlay, token); + else if (overlay instanceof CrossTokenOverlay) + renderTokenOverlay((CrossTokenOverlay) overlay, token); + else if (overlay instanceof XTokenOverlay) + renderTokenOverlay((XTokenOverlay) overlay, token, bounds); + } + + private void renderTokenOverlay(MultipleImageBarTokenOverlay overlay, Token token, Rectangle2D bounds, Object barValue) { //TODO: Implement } - private void renderTokenOverlay(SingleImageBarTokenOverlay overlay, Token token, Rectangle2D bounds, Object barValue) - { + private void renderTokenOverlay(SingleImageBarTokenOverlay overlay, Token token, Rectangle2D bounds, Object barValue) { //TODO: Implement } - private void renderTokenOverlay(DrawnBarTokenOverlay overlay, Token token, Rectangle2D bounds, Object barValue) - { + private void renderTokenOverlay(DrawnBarTokenOverlay overlay, Token token, Rectangle2D bounds, Object barValue) { //TODO: Implement } - private void renderTokenOverlay(TwoToneBarTokenOverlay overlay, Token token, Rectangle2D bounds, Object barValue) - { + private void renderTokenOverlay(TwoToneBarTokenOverlay overlay, Token token, Rectangle2D bounds, Object barValue) { //TODO: Implement } - private void renderTokenOverlay(ImageTokenOverlay overlay, Token token, Rectangle2D bounds) - { + private void renderTokenOverlay(ImageTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement } - private void renderTokenOverlay(TwoImageBarTokenOverlay overlay, Token token, Rectangle2D bounds, Object barValue) - { + private void renderTokenOverlay(TwoImageBarTokenOverlay overlay, Token token, Rectangle2D bounds, Object barValue) { //TODO: Implement } - private void renderTokenOverlay(FlowImageTokenOverlay overlay, Token token, Rectangle2D bounds) - { + private void renderTokenOverlay(FlowImageTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement } - private void renderTokenOverlay(CornerImageTokenOverlay overlay, Token token, Rectangle2D bounds) - { + private void renderTokenOverlay(CornerImageTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement } - private void renderTokenOverlay(XTokenOverlay overlay, Token token, Rectangle2D bounds) - { + private void renderTokenOverlay(XTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement } - private void renderTokenOverlay(FlowColorDotTokenOverlay overlay, Token token, Rectangle2D bounds) - { + + private void renderTokenOverlay(FlowColorDotTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement } - private void renderTokenOverlay(FlowTriangleTokenOverlay overlay, Token token, Rectangle2D bounds) - { + + private void renderTokenOverlay(FlowTriangleTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement } - private void renderTokenOverlay(FlowDiamondTokenOverlay overlay, Token token, Rectangle2D bounds) - { + + private void renderTokenOverlay(FlowDiamondTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement } - private void renderTokenOverlay(FlowColorSquareTokenOverlay overlay, Token token, Rectangle2D bounds) - { + + private void renderTokenOverlay(FlowColorSquareTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement } - private void renderTokenOverlay(FlowYieldTokenOverlay overlay, Token token, Rectangle2D bounds) - { + + private void renderTokenOverlay(FlowYieldTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement } - private void renderTokenOverlay(YieldTokenOverlay overlay, Token token, Rectangle2D bounds) - { + + private void renderTokenOverlay(YieldTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement } - private void renderTokenOverlay(OTokenOverlay overlay, Token token, Rectangle2D bounds) - { - //TODO: Implement + + private void renderTokenOverlay(OTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + var color = overlay.getColor(); + Color.argb8888ToColor(tmpColor, color.getRGB()); + tmpColor.set(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, overlay.getOpacity() / 100); + + var stroke = overlay.getStroke(); + var lineWidth = stroke.getLineWidth(); + + var centerX = x + w/2f; + var centerY = y + h/2f; + var radiusX = w/2f - lineWidth/2f; + var radiusY = h/2f - lineWidth/2f; + + drawer.setColor(tmpColor); + drawer.ellipse(centerX, centerY, radiusX,radiusY, 0, lineWidth ); + drawer.setColor(Color.WHITE); } - private void renderTokenOverlay(ColorDotTokenOverlay overlay, Token token, Rectangle2D bounds) - { - //TODO: Implement + + private void renderTokenOverlay(ColorDotTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + + var color = overlay.getColor(); + Color.argb8888ToColor(tmpColor, color.getRGB()); + tmpColor.set(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, overlay.getOpacity() / 100); + + var size = w * 0.1f; + var offset = w * 0.8f; + + var posX = x + size; + var posY = y + size; + + switch (overlay.getCorner()) { + case SOUTH_EAST: + posX += offset; + break; + case SOUTH_WEST: + break; + case NORTH_EAST: + posX += offset; + posY += offset; + break; + case NORTH_WEST: + posY += offset; + break; + } + + drawer.setColor(tmpColor); + drawer.filledEllipse(posX, posY, size, size); + drawer.setColor(Color.WHITE); } - private void renderTokenOverlay(DiamondTokenOverlay overlay, Token token, Rectangle2D bounds) - { - //TODO: Implement + + private void renderTokenOverlay(DiamondTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + var color = overlay.getColor(); + Color.argb8888ToColor(tmpColor, color.getRGB()); + tmpColor.set(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, overlay.getOpacity() / 100); + var stroke = overlay.getStroke(); + + var hc = w / 2f; + var vc = h / 2f; + + var floats = new float[] { + x, y + vc, + x + hc, y, + x + w, y + vc, + x + hc, y + h, + }; + + drawer.setColor(tmpColor); + drawer.path(floats, stroke.getLineWidth(), JoinType.POINTY, false); + drawer.setColor(Color.WHITE); } - private void renderTokenOverlay(TriangleTokenOverlay overlay, Token token, Rectangle2D bounds) - { - //TODO: Implement + + private void renderTokenOverlay(TriangleTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + var color = overlay.getColor(); + Color.argb8888ToColor(tmpColor, color.getRGB()); + tmpColor.set(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, overlay.getOpacity() / 100); + var stroke = overlay.getStroke(); + + var hc = w / 2f; + var vc = h * (1 - 0.866f); + + var floats = new float[] { + x, y + vc, + x + w, y + vc, + x + hc, y + h, + }; + + drawer.setColor(tmpColor); + drawer.path(floats, stroke.getLineWidth(), JoinType.POINTY, false); + drawer.setColor(Color.WHITE); } - private void renderTokenOverlay(CrossTokenOverlay overlay, Token token) - { + + private void renderTokenOverlay(CrossTokenOverlay overlay, Token token) { var bounds = token.getBounds(zone); var x = bounds.x; var y = -bounds.y - bounds.height; @@ -2289,12 +2302,12 @@ private void renderTokenOverlay(CrossTokenOverlay overlay, Token token) var color = overlay.getColor(); Color.argb8888ToColor(tmpColor, color.getRGB()); - tmpColor.set(color.getRed()/255f, color.getGreen()/255f, color.getBlue()/255f, overlay.getOpacity()/100); + tmpColor.set(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, overlay.getOpacity() / 100); var stroke = overlay.getStroke(); drawer.setColor(tmpColor); - drawer.line(x, y + h/2f,x + w, y + h/2f, stroke.getLineWidth()); - drawer.line(x + w/2f, y,x + w/2f, y + h, stroke.getLineWidth()); + drawer.line(x, y + h / 2f, x + w, y + h / 2f, stroke.getLineWidth()); + drawer.line(x + w / 2f, y, x + w / 2f, y + h, stroke.getLineWidth()); drawer.setColor(Color.WHITE); } @@ -2343,7 +2356,6 @@ protected java.awt.Shape getSquareFacingArrow(int angle, int size) { AffineTransform.getRotateInstance(-Math.toRadians(angle))); } - private void paintClipped(Sprite image, Area bounds, Area clip) { backBuffer.begin(); @@ -2436,7 +2448,7 @@ private void renderPath(Path path, TokenFootprint footprint) { zp.x += grid.getCellWidth() / cellAdj + cellOffset.width; zp.y += grid.getCellHeight() / cellAdj + cellOffset.height; addDistanceText( - zp, 1.0f, (float)p.getDistanceTraveled(zone), (float)p.getDistanceTraveledWithoutTerrain()); + zp, 1.0f, (float) p.getDistanceTraveled(zone), (float) p.getDistanceTraveledWithoutTerrain()); } } int w = 0; @@ -2513,7 +2525,7 @@ private void renderPath(Path path, TokenFootprint footprint) { // Line var highlight = tmpColor; - highlight.set(1,1,1,80/255f); + highlight.set(1, 1, 1, 80 / 255f); var highlightStroke = 9f; ScreenPoint lastPoint = null; @@ -2536,11 +2548,11 @@ private void renderPath(Path path, TokenFootprint footprint) { zp.y + (footprintBounds.height / 2) * footprint.getScale()); - drawer.line((float)lastPoint.x, -(float)lastPoint.y, - (float)nextPoint.x, -(float)nextPoint.y, highlight, highlightStroke); + drawer.line((float) lastPoint.x, -(float) lastPoint.y, + (float) nextPoint.x, -(float) nextPoint.y, highlight, highlightStroke); - drawer.line((float)lastPoint.x, -(float)lastPoint.y, - (float)nextPoint.x, -(float)nextPoint.y, Color.BLUE, drawer.getDefaultLineWidth()); + drawer.line((float) lastPoint.x, -(float) lastPoint.y, + (float) nextPoint.x, -(float) nextPoint.y, Color.BLUE, drawer.getDefaultLineWidth()); lastPoint = nextPoint; } @@ -2559,8 +2571,8 @@ private void renderPath(Path path, TokenFootprint footprint) { } p = new ZonePoint( - (p.x + (footprintBounds.width / 2)), - (p.y + (footprintBounds.height / 2))); + (p.x + (footprintBounds.width / 2)), + (p.y + (footprintBounds.height / 2))); highlightCell(p, fetch("redDot"), .333f); } timer.stop("renderPath-3"); @@ -2568,23 +2580,23 @@ private void renderPath(Path path, TokenFootprint footprint) { } private TextureRegion getCellHighlight() { - if(zone.getGrid() instanceof SquareGrid) + if (zone.getGrid() instanceof SquareGrid) return fetch("whiteBorder"); - if(zone.getGrid() instanceof HexGrid) + if (zone.getGrid() instanceof HexGrid) return fetch("hexBorder"); - if(zone.getGrid() instanceof IsometricGrid) + if (zone.getGrid() instanceof IsometricGrid) return fetch("isoBorder"); return null; } private void addDistanceText(ZonePoint point, float size, float distance, float distanceWithoutTerrain) { - if(distance == 0) + if (distance == 0) return; Grid grid = zone.getGrid(); - float cwidth = (float)grid.getCellWidth(); - float cheight = (float)grid.getCellHeight(); + float cwidth = (float) grid.getCellWidth(); + float cheight = (float) grid.getCellHeight(); float iwidth = cwidth * size; float iheight = cheight * size; @@ -2615,11 +2627,11 @@ private void addDistanceText(ZonePoint point, float size, float distance, float private void highlightCell(ZonePoint zp, TextureRegion image, float size) { Grid grid = zone.getGrid(); - float cwidth = (float)grid.getCellWidth() * size; - float cheight = (float)grid.getCellHeight() * size; + float cwidth = (float) grid.getCellWidth() * size; + float cheight = (float) grid.getCellHeight() * size; float rotation = 0; - if(zone.getGrid() instanceof HexGridHorizontal) + if (zone.getGrid() instanceof HexGridHorizontal) rotation = 90; batch.draw(image, zp.x - cwidth / 2, -zp.y - cheight / 2, @@ -2770,7 +2782,7 @@ private void paintArea(Area area, boolean fill) { if (fill) { drawer.filledPolygon(tmpFloat.toArray()); } else { - drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.SMOOTH, true); + drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.SMOOTH, true); } tmpFloat.clear(); break; @@ -2888,4 +2900,71 @@ public void flushFog() { private interface ItemRenderer { void render(); } + + private class LabelRenderer implements ItemRenderer { + private final boolean isGMView; + private Token token; + + public LabelRenderer(Token token, boolean isGMView) { + this.token = token; + this.isGMView = isGMView; + } + + @Override + public void render() { + int offset = 3; // Keep it from tramping on the token border. + NinePatch background; + Color foreground; + + if (token.isVisible()) { + if (token.getType() == Token.Type.NPC) { + background = blueLabel; + foreground = Color.WHITE; + } else { + background = grayLabel; + foreground = Color.BLACK; + } + } else { + background = darkGrayLabel; + foreground = Color.WHITE; + } + String name = token.getName(); + if (isGMView && token.getGMName() != null && !StringUtil.isEmpty(token.getGMName())) { + name += " (" + token.getGMName() + ")"; + } + + + // Calculate image dimensions + + float labelHeight = normalFont.getLineHeight() + GraphicsUtil.BOX_PADDINGY * 2; + + + java.awt.Rectangle r = token.getBounds(zone); + tmpWorldCoord.x = r.x + r.width / 2; + tmpWorldCoord.y = (r.y + r.height + offset + labelHeight * zoom / 2) * -1; + tmpWorldCoord.z = 0; + tmpScreenCoord = cam.project(tmpWorldCoord); + + drawBoxedString( + name, + tmpScreenCoord.x, + tmpScreenCoord.y, + SwingUtilities.CENTER, + background, + foreground); + + var label = token.getLabel(); + + // Draw name and label to image + if (label != null && label.trim().length() > 0) { + drawBoxedString( + label, + tmpScreenCoord.x, + tmpScreenCoord.y - labelHeight, + SwingUtilities.CENTER, + background, + foreground); + } + } + } } From d1ba71311dbba8acfba60711df3965cf99ec9e48 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 22 Apr 2021 21:58:31 +0200 Subject: [PATCH 036/139] rendered drawn FLow*TokenOverlays --- .../ui/token/FlowColorDotTokenOverlay.java | 2 +- .../ui/token/FlowColorSquareTokenOverlay.java | 2 +- .../ui/token/FlowDiamondTokenOverlay.java | 2 +- .../ui/token/FlowTriangleTokenOverlay.java | 2 +- .../ui/token/FlowYieldTokenOverlay.java | 2 +- .../maptool/client/ui/zone/GdxRenderer.java | 99 +++++++++++++------ 6 files changed, 75 insertions(+), 34 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/token/FlowColorDotTokenOverlay.java b/src/main/java/net/rptools/maptool/client/ui/token/FlowColorDotTokenOverlay.java index 906c6c27c8..0157a6a9c2 100644 --- a/src/main/java/net/rptools/maptool/client/ui/token/FlowColorDotTokenOverlay.java +++ b/src/main/java/net/rptools/maptool/client/ui/token/FlowColorDotTokenOverlay.java @@ -111,7 +111,7 @@ public void paintOverlay(Graphics2D g, Token aToken, Rectangle bounds) { * @param token Token being rendered. * @return An ellipse that fits inside of the bounding box returned by the flow. */ - protected Shape getShape(Rectangle bounds, Token token) { + public Shape getShape(Rectangle bounds, Token token) { Rectangle2D r = getFlow().getStateBounds2D(bounds, token, getName()); return new Ellipse2D.Double(r.getX(), r.getY(), r.getWidth(), r.getHeight()); } diff --git a/src/main/java/net/rptools/maptool/client/ui/token/FlowColorSquareTokenOverlay.java b/src/main/java/net/rptools/maptool/client/ui/token/FlowColorSquareTokenOverlay.java index 699cdb8d77..e18a67ed53 100644 --- a/src/main/java/net/rptools/maptool/client/ui/token/FlowColorSquareTokenOverlay.java +++ b/src/main/java/net/rptools/maptool/client/ui/token/FlowColorSquareTokenOverlay.java @@ -62,7 +62,7 @@ public Object clone() { * net.rptools.maptool.model.Token) */ @Override - protected Shape getShape(Rectangle bounds, Token token) { + public Shape getShape(Rectangle bounds, Token token) { return getFlow().getStateBounds2D(bounds, token, getName()); } } diff --git a/src/main/java/net/rptools/maptool/client/ui/token/FlowDiamondTokenOverlay.java b/src/main/java/net/rptools/maptool/client/ui/token/FlowDiamondTokenOverlay.java index d9be0361b9..d2737f6e9c 100644 --- a/src/main/java/net/rptools/maptool/client/ui/token/FlowDiamondTokenOverlay.java +++ b/src/main/java/net/rptools/maptool/client/ui/token/FlowDiamondTokenOverlay.java @@ -64,7 +64,7 @@ public Object clone() { * net.rptools.maptool.model.Token) */ @Override - protected Shape getShape(Rectangle bounds, Token token) { + public Shape getShape(Rectangle bounds, Token token) { Rectangle2D r = getFlow().getStateBounds2D(bounds, token, getName()); GeneralPath p = new GeneralPath(); p.moveTo((float) r.getCenterX(), (float) r.getY()); diff --git a/src/main/java/net/rptools/maptool/client/ui/token/FlowTriangleTokenOverlay.java b/src/main/java/net/rptools/maptool/client/ui/token/FlowTriangleTokenOverlay.java index 9ef3c8c4f5..db6ccfa1b1 100644 --- a/src/main/java/net/rptools/maptool/client/ui/token/FlowTriangleTokenOverlay.java +++ b/src/main/java/net/rptools/maptool/client/ui/token/FlowTriangleTokenOverlay.java @@ -64,7 +64,7 @@ public Object clone() { * net.rptools.maptool.model.Token) */ @Override - protected Shape getShape(Rectangle bounds, Token token) { + public Shape getShape(Rectangle bounds, Token token) { Rectangle2D r = getFlow().getStateBounds2D(bounds, token, getName()); GeneralPath p = new GeneralPath(); p.moveTo((float) r.getCenterX(), (float) r.getY()); diff --git a/src/main/java/net/rptools/maptool/client/ui/token/FlowYieldTokenOverlay.java b/src/main/java/net/rptools/maptool/client/ui/token/FlowYieldTokenOverlay.java index bf7a1e61cd..185908ac22 100644 --- a/src/main/java/net/rptools/maptool/client/ui/token/FlowYieldTokenOverlay.java +++ b/src/main/java/net/rptools/maptool/client/ui/token/FlowYieldTokenOverlay.java @@ -64,7 +64,7 @@ public Object clone() { * net.rptools.maptool.model.Token) */ @Override - protected Shape getShape(Rectangle bounds, Token token) { + public Shape getShape(Rectangle bounds, Token token) { Rectangle2D r = getFlow().getStateBounds2D(bounds, token, getName()); GeneralPath p = new GeneralPath(); p.moveTo((float) r.getX(), (float) r.getY()); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index b6b78c750c..90834fd076 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -2095,17 +2095,9 @@ else if (overlay instanceof CornerImageTokenOverlay) else if (overlay instanceof ImageTokenOverlay) renderTokenOverlay((ImageTokenOverlay) overlay, token, bounds); else if (overlay instanceof FlowColorDotTokenOverlay) - renderTokenOverlay((FlowColorDotTokenOverlay) overlay, token, bounds); - else if (overlay instanceof FlowTriangleTokenOverlay) - renderTokenOverlay((FlowTriangleTokenOverlay) overlay, token, bounds); - else if (overlay instanceof FlowDiamondTokenOverlay) - renderTokenOverlay((FlowDiamondTokenOverlay) overlay, token, bounds); - else if (overlay instanceof FlowColorSquareTokenOverlay) - renderTokenOverlay((FlowColorSquareTokenOverlay) overlay, token, bounds); - else if (overlay instanceof FlowYieldTokenOverlay) - renderTokenOverlay((FlowYieldTokenOverlay) overlay, token, bounds); + renderTokenOverlay((FlowColorDotTokenOverlay) overlay, token); else if (overlay instanceof YieldTokenOverlay) - renderTokenOverlay((YieldTokenOverlay) overlay, token, bounds); + renderTokenOverlay((YieldTokenOverlay) overlay, token); else if (overlay instanceof OTokenOverlay) renderTokenOverlay((OTokenOverlay) overlay, token); else if (overlay instanceof ColorDotTokenOverlay) @@ -2117,7 +2109,23 @@ else if (overlay instanceof TriangleTokenOverlay) else if (overlay instanceof CrossTokenOverlay) renderTokenOverlay((CrossTokenOverlay) overlay, token); else if (overlay instanceof XTokenOverlay) - renderTokenOverlay((XTokenOverlay) overlay, token, bounds); + renderTokenOverlay((XTokenOverlay) overlay, token); + else if (overlay instanceof ShadedTokenOverlay) + renderTokenOverlay((ShadedTokenOverlay) overlay, token); + } + + private void renderTokenOverlay(ShadedTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + tmpColor.set(1, 1, 1, overlay.getOpacity() / 100); + //FIXME: this should change the transparency of the token. Test this when tokendrawing is moved to backbuffer + drawer.setColor(tmpColor); + drawer.filledRectangle(x, y, w, h); + drawer.setColor(Color.WHITE); } private void renderTokenOverlay(MultipleImageBarTokenOverlay overlay, Token token, Rectangle2D bounds, Object barValue) { @@ -2152,32 +2160,65 @@ private void renderTokenOverlay(CornerImageTokenOverlay overlay, Token token, Re //TODO: Implement } - private void renderTokenOverlay(XTokenOverlay overlay, Token token, Rectangle2D bounds) { - //TODO: Implement - } + private void renderTokenOverlay(XTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; - private void renderTokenOverlay(FlowColorDotTokenOverlay overlay, Token token, Rectangle2D bounds) { - //TODO: Implement - } + var color = overlay.getColor(); + Color.argb8888ToColor(tmpColor, color.getRGB()); + tmpColor.set(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, overlay.getOpacity() / 100); - private void renderTokenOverlay(FlowTriangleTokenOverlay overlay, Token token, Rectangle2D bounds) { - //TODO: Implement - } + var stroke = overlay.getStroke(); - private void renderTokenOverlay(FlowDiamondTokenOverlay overlay, Token token, Rectangle2D bounds) { - //TODO: Implement + drawer.setColor(tmpColor); + drawer.line(x, y, x+w, y+h, stroke.getLineWidth()); + drawer.line(x, y+h, x+w, y, stroke.getLineWidth()); + drawer.setColor(Color.WHITE); } - private void renderTokenOverlay(FlowColorSquareTokenOverlay overlay, Token token, Rectangle2D bounds) { - //TODO: Implement - } + private void renderTokenOverlay(FlowColorDotTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; - private void renderTokenOverlay(FlowYieldTokenOverlay overlay, Token token, Rectangle2D bounds) { - //TODO: Implement + var color = overlay.getColor(); + Color.argb8888ToColor(tmpColor, color.getRGB()); + tmpColor.set(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, overlay.getOpacity() / 100); + drawer.setColor(tmpColor); + Shape s = overlay.getShape(bounds, token); + fill(new Area(s)); + drawer.setColor(Color.WHITE); } - private void renderTokenOverlay(YieldTokenOverlay overlay, Token token, Rectangle2D bounds) { - //TODO: Implement + private void renderTokenOverlay(YieldTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + var color = overlay.getColor(); + Color.argb8888ToColor(tmpColor, color.getRGB()); + tmpColor.set(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, overlay.getOpacity() / 100); + + var stroke = overlay.getStroke(); + var hc = w / 2f; + var vc = h * (1 - 0.134f); + + var floats = new float[] { + x, y + vc, + x + w, y + vc, + x + hc, y, + }; + + drawer.setColor(tmpColor); + drawer.path(floats, stroke.getLineWidth(), JoinType.POINTY, false); + drawer.setColor(Color.WHITE); } private void renderTokenOverlay(OTokenOverlay overlay, Token token) { From de9fb75daf0018e170fffb5fa6ba8e9a25adb6f9 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 22 Apr 2021 22:57:40 +0200 Subject: [PATCH 037/139] remove unused texture loading code --- .../rptools/maptool/util/ImageManager.java | 90 +------------------ 1 file changed, 1 insertion(+), 89 deletions(-) diff --git a/src/main/java/net/rptools/maptool/util/ImageManager.java b/src/main/java/net/rptools/maptool/util/ImageManager.java index 71b267d62f..a19f159b52 100644 --- a/src/main/java/net/rptools/maptool/util/ImageManager.java +++ b/src/main/java/net/rptools/maptool/util/ImageManager.java @@ -23,8 +23,6 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.graphics.Texture; import net.rptools.lib.MD5Key; import net.rptools.lib.image.ImageUtil; import net.rptools.maptool.client.MapTool; @@ -51,7 +49,6 @@ public class ImageManager { /** Cache of images loaded for assets. */ private static final Map imageMap = new HashMap(); - private static final Map textureMap = new HashMap(); /** Additional Soft-reference Cache of images that allows best . */ private static final Map backupImageMap = @@ -66,13 +63,12 @@ public class ImageManager { /** The buffered "?" image to display while transferring the image. */ public static BufferedImage TRANSFERING_IMAGE; - public static Texture TRANSFERING_TEXTURE; + /** The broken image, a "X" is used for all situations where the asset or image was invalid. */ private static final String BROKEN_IMAGE_PNG = "net/rptools/maptool/client/image/broken.png"; public static BufferedImage BROKEN_IMAGE; - public static Texture BROKEN_TEXTURE; /** Small and large thread pools for background processing of asset raw image data. */ private static ExecutorService smallImageLoader = Executors.newFixedThreadPool(1); @@ -247,45 +243,6 @@ public static void flushImage(MD5Key assetId) { imageMap.remove(assetId); } - public static byte[] getTexture(MD5Key assetId, ImageObserver... observers) { - return getTexture(assetId, null, observers); - } - - public static byte[] getTexture(MD5Key assetId, Map hints, ImageObserver... observers) { - // Ugg, can't load textures before libgdx app is loaded... - if (TRANSFERING_TEXTURE == null) - TRANSFERING_TEXTURE = new Texture(Gdx.files.internal(UNKNOWN_IMAGE_PNG)); - - if (BROKEN_TEXTURE == null) - BROKEN_TEXTURE = new Texture(Gdx.files.internal(BROKEN_IMAGE_PNG)); - - if (assetId == null) { - return null; - } - - synchronized (imageLoaderMutex) { - byte[] texture = textureMap.get(assetId); - - if (texture != null) { - // System.out.println("here... "); - return texture; - } - // Make note that we're currently processing it - // textureMap.put(assetId, TRANSFERING_TEXTURE); - - // Make sure we are informed when it's done loading - addObservers(assetId, observers); - - // Force a load of the asset, this will trigger a transfer if the - // asset is not available locally - if (texture == null) { - AssetManager.getAssetAsynchronously(assetId, new AssetListener(assetId, hints)); - } - - return null; - } - } - /** * Add observers, and associated hints for image loading, to be notified when the asset has * completed loading. @@ -302,51 +259,6 @@ public static void addObservers(MD5Key assetId, ImageObserver... observers) { observerSet.addAll(Arrays.asList(observers)); } - private static class BackgroundTextureLoader implements Runnable { - private final Asset asset; - - /** - * Create a background image loader to load the asset image using the hints provided. - * - * @param asset - * Asset to load - */ - public BackgroundTextureLoader(Asset asset) { - this.asset = asset; - } - - /** - * Load the asset raw texture data and notify observers that the image is loaded. - */ - public void run() { - log.debug("Loading asset: " + asset.getId()); - byte[] texture = textureMap.get(asset.getId()); - - if ((texture != null) || !MapTool.libgdxLoaded) { - // We've somehow already loaded this texture - log.debug("Texture wasn't in transit: " + asset.getId()); - return; - } - - try { - assert asset.getImage() != null : "asset.getImage() for " + asset.toString() + "returns null?!"; - texture = asset.getImage(); - } catch (Exception e) { - log.error("BackgroundTextureLoader.run(" + asset.getName() + "," + asset.getId() - + "): texture not resolved", e); - System.out.println("BackgroundTextureLoader.run(" + asset.getName() + "," + asset.getId() - + "): texture not resolved :: " + e); - // texture = BROKEN_TEXTURE; - } - - synchronized (imageLoaderMutex) { - // Replace placeholder with actual image - textureMap.put(asset.getId(), texture); - } - } - } - - /** * Load the asset's raw image data into a BufferedImage. * From d42dc750cbf2213ce247ecc83578a83eca4ca9eb Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Fri, 23 Apr 2021 18:21:16 +0200 Subject: [PATCH 038/139] added files to texture atlas --- maptool.tpproj | 2 +- .../net/rptools/maptool/client/maptool.atlas | 192 ++++++++++-------- .../net/rptools/maptool/client/maptool.png | Bin 40428 -> 74628 bytes 3 files changed, 104 insertions(+), 90 deletions(-) diff --git a/maptool.tpproj b/maptool.tpproj index 17acc5ef11..963724459b 100644 --- a/maptool.tpproj +++ b/maptool.tpproj @@ -32,7 +32,7 @@ limitMemory=true useIndexes=true scaleFactors=[{suffix:"",factor:1,resampling:bicubic}] -inputFiles=[{path:src/main/resources/net/rptools/maptool/client/image/blueLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/darkGreyLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/grayLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/border,type:Input,dirFilePrefix:border/,recursive:true,flattenPaths:false},{path:src/main/resources/net/rptools/maptool/client/image/stack.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/whiteBorder.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/hexBorder.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/isoBorder.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/redDot.png,type:Input,regionName:null}] +inputFiles=[{path:src/main/resources/net/rptools/maptool/client/image/blueLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/darkGreyLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/grayLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/border,type:Input,dirFilePrefix:border/,recursive:true,flattenPaths:false},{path:src/main/resources/net/rptools/maptool/client/image/stack.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/whiteBorder.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/hexBorder.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/isoBorder.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/redDot.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/broken.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/unknown.png,type:Input,regionName:null}] -PROJ- diff --git a/src/main/resources/net/rptools/maptool/client/maptool.atlas b/src/main/resources/net/rptools/maptool/client/maptool.atlas index bf530aea45..f795847113 100644 --- a/src/main/resources/net/rptools/maptool/client/maptool.atlas +++ b/src/main/resources/net/rptools/maptool/client/maptool.atlas @@ -1,12 +1,12 @@ maptool.png -size: 256, 256 +size: 512, 256 format: RGBA8888 filter: Nearest, Nearest repeat: none blueLabelbox rotate: false - xy: 17, 156 + xy: 236, 159 size: 129, 21 split: 10, 10, 10, 10 pad: 10, 10, 10, 10 @@ -15,567 +15,574 @@ blueLabelbox index: -1 border/blue/bl rotate: false - xy: 103, 41 + xy: 344, 134 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/blue/bottom rotate: false - xy: 132, 67 + xy: 367, 161 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/blue/br rotate: false - xy: 216, 107 + xy: 344, 139 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/blue/right rotate: false - xy: 201, 56 + xy: 283, 80 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/blue/left rotate: false - xy: 201, 56 + xy: 283, 80 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/blue/tl rotate: false - xy: 206, 79 + xy: 462, 170 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/blue/top rotate: false - xy: 78, 66 + xy: 455, 235 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/blue/tr rotate: false - xy: 148, 57 + xy: 462, 175 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/fowtools/bl rotate: false - xy: 78, 104 + xy: 68, 15 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/fowtools/bottom rotate: false - xy: 78, 71 + xy: 455, 240 size: 52, 6 orig: 52, 6 offset: 0, 0 index: -1 border/fowtools/br rotate: false - xy: 86, 104 + xy: 476, 200 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/fowtools/left rotate: false - xy: 195, 105 + xy: 237, 75 size: 6, 52 orig: 6, 52 offset: 0, 0 index: -1 border/fowtools/right rotate: false - xy: 203, 105 + xy: 245, 75 size: 6, 52 orig: 6, 52 offset: 0, 0 index: -1 border/fowtools/tl rotate: false - xy: 140, 54 + xy: 498, 222 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/fowtools/top rotate: false - xy: 78, 79 + xy: 367, 176 size: 52, 6 orig: 52, 6 offset: 0, 0 index: -1 border/fowtools/tr rotate: false - xy: 85, 38 + xy: 76, 15 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/gray/bl rotate: false - xy: 206, 89 + xy: 344, 144 size: 5, 6 orig: 5, 6 offset: 0, 0 index: -1 border/gray/bottom rotate: false - xy: 78, 94 + xy: 2, 2 size: 111, 6 orig: 111, 6 offset: 0, 0 index: -1 border/gray/br rotate: false - xy: 206, 97 + xy: 435, 176 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/gray/left rotate: false - xy: 10, 24 + xy: 455, 29 size: 5, 199 orig: 5, 199 offset: 0, 0 index: -1 border/gray/right rotate: false - xy: 2, 24 + xy: 447, 27 size: 6, 199 orig: 6, 199 offset: 0, 0 index: -1 border/gray/tl rotate: false - xy: 235, 238 + xy: 229, 65 size: 5, 5 orig: 5, 5 offset: 0, 0 index: -1 border/gray/top rotate: false - xy: 78, 87 + xy: 236, 152 size: 111, 5 orig: 111, 5 offset: 0, 0 index: -1 border/gray/tr rotate: false - xy: 71, 25 + xy: 349, 152 size: 6, 5 orig: 6, 5 offset: 0, 0 index: -1 border/gray2/bl rotate: false - xy: 85, 33 + xy: 83, 10 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/gray2/bottom rotate: false - xy: 132, 72 + xy: 455, 230 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/gray2/br rotate: false - xy: 235, 228 + xy: 476, 190 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/gray2/left rotate: false - xy: 216, 117 + xy: 258, 75 size: 3, 52 orig: 3, 52 offset: 0, 0 index: -1 border/gray2/right rotate: false - xy: 211, 105 + xy: 253, 75 size: 3, 52 orig: 3, 52 offset: 0, 0 index: -1 border/gray2/tl rotate: false - xy: 216, 112 + xy: 68, 10 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/gray2/top rotate: false - xy: 78, 56 + xy: 236, 134 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/gray2/tr rotate: false - xy: 221, 112 + xy: 351, 147 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/green/bl rotate: false - xy: 243, 248 + xy: 429, 165 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/green/bottom rotate: false - xy: 71, 46 + xy: 236, 129 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/green/br rotate: false - xy: 125, 46 + xy: 78, 10 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/green/left rotate: false - xy: 186, 38 + xy: 268, 80 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/green/right rotate: false - xy: 186, 38 + xy: 268, 80 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/green/tl rotate: false - xy: 10, 5 + xy: 263, 75 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/green/top rotate: false - xy: 78, 61 + xy: 290, 142 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/green/tr rotate: false - xy: 222, 202 + xy: 367, 156 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/highlight/bl rotate: false - xy: 222, 217 + xy: 462, 180 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/highlight/bottom rotate: false - xy: 17, 35 + xy: 236, 144 size: 52, 6 orig: 52, 6 offset: 0, 0 index: -1 border/highlight/br rotate: false - xy: 2, 2 + xy: 476, 208 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/highlight/left rotate: false - xy: 214, 171 + xy: 229, 72 size: 6, 52 orig: 6, 52 offset: 0, 0 index: -1 border/highlight/right rotate: false - xy: 187, 105 + xy: 96, 22 size: 6, 52 orig: 6, 52 offset: 0, 0 index: -1 border/highlight/tl rotate: false - xy: 235, 245 + xy: 490, 222 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/highlight/top rotate: false - xy: 17, 43 + xy: 455, 248 size: 52, 6 orig: 52, 6 offset: 0, 0 index: -1 border/highlight/tr rotate: false - xy: 132, 54 + xy: 421, 162 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/purple/bl rotate: false - xy: 153, 57 + xy: 495, 217 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/purple/bottom rotate: false - xy: 132, 77 + xy: 236, 139 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/purple/br rotate: false - xy: 79, 27 + xy: 470, 183 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/purple/left rotate: false - xy: 221, 122 + xy: 263, 80 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/purple/right rotate: false - xy: 221, 122 + xy: 263, 80 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/purple/tl rotate: false - xy: 248, 248 + xy: 84, 18 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/purple/top rotate: false - xy: 132, 82 + xy: 367, 171 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/purple/tr rotate: false - xy: 230, 220 + xy: 484, 211 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/red/bl rotate: false - xy: 221, 117 + xy: 73, 10 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/red/bottom rotate: false - xy: 132, 62 + xy: 290, 132 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/red/br rotate: false - xy: 222, 207 + xy: 268, 75 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/red/left rotate: false - xy: 191, 56 + xy: 273, 80 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/red/right rotate: false - xy: 191, 56 + xy: 273, 80 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/red/tl rotate: false - xy: 221, 107 + xy: 362, 154 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/red/top rotate: false - xy: 17, 30 + xy: 290, 147 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/red/tr rotate: false - xy: 206, 84 + xy: 476, 195 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/shadow/bl rotate: false - xy: 221, 225 + xy: 462, 202 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 border/shadow/bottom rotate: false - xy: 2, 239 + xy: 236, 242 size: 217, 12 orig: 217, 12 offset: 0, 0 index: -1 border/shadow/br rotate: false - xy: 191, 42 + xy: 462, 188 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 border/shadow/left rotate: false - xy: 159, 106 + xy: 68, 23 size: 12, 51 orig: 12, 51 offset: 0, 0 index: -1 border/shadow/right rotate: false - xy: 173, 106 + xy: 82, 23 size: 12, 51 orig: 12, 51 offset: 0, 0 index: -1 border/shadow/tl rotate: false - xy: 2, 10 + xy: 421, 170 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 border/shadow/top rotate: false - xy: 2, 225 + xy: 236, 228 size: 217, 12 orig: 217, 12 offset: 0, 0 index: -1 border/shadow/tr rotate: false - xy: 71, 32 + xy: 476, 216 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 border/yellow/bl rotate: false - xy: 98, 41 + xy: 484, 206 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/yellow/bottom rotate: false - xy: 78, 51 + xy: 290, 137 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/yellow/br rotate: false - xy: 93, 41 + xy: 490, 217 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/yellow/left rotate: false - xy: 196, 56 + xy: 278, 80 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/yellow/right rotate: false - xy: 196, 56 + xy: 278, 80 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/yellow/tl rotate: false - xy: 235, 233 + xy: 357, 154 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/yellow/top rotate: false - xy: 17, 25 + xy: 367, 166 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/yellow/tr rotate: false - xy: 222, 212 + xy: 435, 171 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 +broken + rotate: false + xy: 106, 126 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 darkGreyLabelbox rotate: false - xy: 17, 202 + xy: 236, 205 size: 129, 21 split: 10, 10, 10, 10 pad: 10, 10, 10, 10 @@ -584,7 +591,7 @@ darkGreyLabelbox index: -1 grayLabelbox rotate: false - xy: 17, 179 + xy: 236, 182 size: 129, 21 split: 10, 10, 10, 10 pad: 10, 10, 10, 10 @@ -593,35 +600,42 @@ grayLabelbox index: -1 hexBorder rotate: false - xy: 97, 102 + xy: 106, 72 size: 60, 52 orig: 60, 52 offset: 0, 0 index: -1 isoBorder rotate: false - xy: 17, 112 + xy: 367, 184 size: 78, 42 orig: 78, 42 offset: 0, 0 index: -1 redDot rotate: false - xy: 148, 159 + xy: 2, 10 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 stack rotate: false - xy: 221, 239 + xy: 462, 216 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 +unknown + rotate: false + xy: 2, 76 + size: 102, 178 + orig: 102, 178 + offset: 0, 0 + index: -1 whiteBorder rotate: false - xy: 17, 51 + xy: 168, 65 size: 59, 59 orig: 59, 59 offset: 0, 0 diff --git a/src/main/resources/net/rptools/maptool/client/maptool.png b/src/main/resources/net/rptools/maptool/client/maptool.png index 05ee45427c58693b9c3569b2450ca8a283e150e2..d0f46469fe49997d4e4a2fa60fa8915ad743f191 100644 GIT binary patch literal 74628 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 z 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%0AW+Z<6mNX#G3X4U^m1Oj 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 literal 40428 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

    |8utrdjSPm?O8e-c)1CPRjcA^$=pIa{RL#Aef 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 From 9e868495307f4ece8458507ae2fc671f0cab2dbb Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 24 Apr 2021 17:45:16 +0200 Subject: [PATCH 039/139] pack token to atlas and change loading of assets. --- .../maptool/box2d/unused/Box2dRenderer.java | 4 +- .../maptool/client/ui/zone/GdxRenderer.java | 184 ++++++++++++------ 2 files changed, 123 insertions(+), 65 deletions(-) diff --git a/src/main/java/net/rptools/maptool/box2d/unused/Box2dRenderer.java b/src/main/java/net/rptools/maptool/box2d/unused/Box2dRenderer.java index ccf86df294..3d668ff12f 100644 --- a/src/main/java/net/rptools/maptool/box2d/unused/Box2dRenderer.java +++ b/src/main/java/net/rptools/maptool/box2d/unused/Box2dRenderer.java @@ -302,7 +302,7 @@ private void debugLights() { * For POC only TODO: Check for color vs image and change to a listener vs getting images every frame */ private void drawBackgroundTile() { - Zone zone = mapToolFrame.getCurrentZoneRenderer().getZone(); + /* Zone zone = mapToolFrame.getCurrentZoneRenderer().getZone(); byte[] image = ImageManager.getTexture(zone.getBackgroundAsset(), mapToolFrame.getCurrentZoneRenderer()); if (image != null && image != backgroundImage) { @@ -317,7 +317,7 @@ private void drawBackgroundTile() { backgroundTexture.setWrap(TextureWrap.Repeat, TextureWrap.Repeat); app.sb.begin(); app.sb.draw(backgroundTexture, 0, 0, 0, 0, MapToolGame.SCREEN_WIDTH, MapToolGame.SCREEN_HEIGHT); - app.sb.end(); + app.sb.end();*/ } /* diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 90834fd076..a760479349 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -13,6 +13,7 @@ import com.badlogic.gdx.math.*; import com.badlogic.gdx.scenes.scene2d.utils.TiledDrawable; import com.badlogic.gdx.utils.FloatArray; +import com.badlogic.gdx.utils.GdxRuntimeException; import com.badlogic.gdx.utils.ScreenUtils; import com.crashinvaders.vfx.VfxManager; import com.crashinvaders.vfx.effects.ChainVfxEffect; @@ -48,6 +49,7 @@ import net.rptools.maptool.util.StringUtil; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.jetbrains.annotations.NotNull; import space.earlygrey.shapedrawer.JoinType; import space.earlygrey.shapedrawer.ShapeDrawer; @@ -72,20 +74,23 @@ */ -public class GdxRenderer extends ApplicationAdapter implements AppEventListener, ModelChangeListener { +public class GdxRenderer extends ApplicationAdapter implements AppEventListener, ModelChangeListener, AssetAvailableListener { private static final Logger log = LogManager.getLogger(GdxRenderer.class); private static GdxRenderer _instance; - private final Map sprites = new HashMap<>(); + //private final Map sprites = new HashMap<>(); + private final Map fetchedSprites = new HashMap<>(); private final Map isoSprites = new HashMap<>(); private final Map fetchedRegions = new HashMap<>(); + private final Map bigSprites = new HashMap<>(); //renderFog private final String ATLAS = "net/rptools/maptool/client/maptool.atlas"; private final String FONT_NORMAL = "normalFont.ttf"; private final String FONT_DISTANCE = "distanceFont.ttf"; - + PixmapPacker packer = createPacker(); + TextureAtlas tokenAtlas = new TextureAtlas(); private boolean flushFog = true; //from renderToken: private Area visibleScreenArea; @@ -97,7 +102,7 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private ZoneRenderer zoneRenderer; private Sprite background; private Sprite fog; - private MD5Key mapAssetId; + //private MD5Key mapAssetId; private int offsetX = 0; private int offsetY = 0; private float zoom = 1.0f; @@ -113,10 +118,9 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private BitmapFont normalFont; private BitmapFont distanceFont; private float distanceFontScale = 0; - + ; private GlyphLayout glyphLayout = new GlyphLayout(); private CodeTimer timer = new CodeTimer("GdxRenderer.renderZone"); - ; private VfxManager vfxManager; private ChainVfxEffect vfxEffect; private VfxFrameBuffer backBuffer; @@ -207,6 +211,9 @@ public void dispose() { vfxEffect.dispose(); disposeZoneResources(); onePixel.dispose(); + packer.updateTextureAtlas(atlas, Texture.TextureFilter.Linear, Texture.TextureFilter.Linear, false); + packer.dispose(); + tokenAtlas.dispose(); } @Override @@ -239,6 +246,8 @@ private void updateCam() { @Override public void render() { manager.finishLoading(); + packer.updateTextureAtlas(tokenAtlas, Texture.TextureFilter.Linear, Texture.TextureFilter.Linear, false); + if (atlas == null) atlas = manager.get(ATLAS, TextureAtlas.class); @@ -265,6 +274,11 @@ public void render() { copyFramebufferToJfx(); } + @NotNull + private PixmapPacker createPacker() { + return new PixmapPacker(2048, 2048, Pixmap.Format.RGBA8888, 2, false); + } + private void ensureCorrectDistanceFont() { if (zone == null) return; @@ -918,7 +932,7 @@ private void showBlockedMoves(PlayerView view, Set mo // get token image, using image table if present - Sprite image = sprites.get(token.getImageAssetId()); + Sprite image = getSprite(token.getImageAssetId()); if (image == null) continue; @@ -1463,18 +1477,14 @@ private void renderBoard() { fillViewportWith(background); - if (mapAssetId != null) { - var map = sprites.get(mapAssetId); - if (map != null) { - map.setPosition(zone.getBoardX(), zone.getBoardY() - map.getHeight()); - map.draw(batch); - } + var map = getSprite(zone.getMapAssetId()); + if (map != null) { + map.setPosition(zone.getBoardX(), zone.getBoardY() - map.getHeight()); + map.draw(batch); } } private void fillViewportWith(Sprite fill) { - - var startX = (cam.position.x - cam.viewportWidth * zoom / 2); startX = (int) (startX / fill.getWidth()) * fill.getWidth() - fill.getWidth(); var endX = cam.position.x + cam.viewportWidth / 2 * zoom; @@ -1530,11 +1540,8 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure // get token image sprite, using image table if present var imageKey = token.getTokenImageAssetId(); - Sprite image = sprites.get(imageKey); - if (image == null) - continue; + Sprite image = getSprite(imageKey); - image.setSize(image.getTexture().getWidth(), image.getTexture().getHeight()); image.setRotation(0); @@ -2009,17 +2016,53 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure timer.stop("tokenlist-13"); } + private Sprite getSprite(MD5Key key) { + if (key == null) + return null; + + var sprite = bigSprites.get(key); + if (sprite != null) + return sprite; + + return getSprite(key.toString()); + } + + + private Sprite getSprite(String name) { + var sprite = fetchedSprites.get(name); + if (sprite != null) + return sprite; + + var region = fetch(name); + + if (name != "unknown" && region == null) { + AssetManager.getAssetAsynchronously(new MD5Key(name), this); + return getSprite("unknown"); + } + + + sprite = new Sprite(region); + sprite.setSize(region.getRegionWidth(), region.getRegionHeight()); + + fetchedSprites.put(name, sprite); + return sprite; + } + + private TextureRegion fetch(String regionName) { var region = fetchedRegions.get(regionName); if (region != null) return region; - region = atlas.findRegion(regionName); - fetchedRegions.put(regionName, region); + region = tokenAtlas.findRegion(regionName); + if (region == null) + region = atlas.findRegion(regionName); + fetchedRegions.put(regionName, region); return region; } + private void renderImageBorderAround(ImageBorder border, Rectangle bounds) { var imagePath = border.getImagePath(); var index = imagePath.indexOf("border/"); @@ -2174,8 +2217,8 @@ private void renderTokenOverlay(XTokenOverlay overlay, Token token) { var stroke = overlay.getStroke(); drawer.setColor(tmpColor); - drawer.line(x, y, x+w, y+h, stroke.getLineWidth()); - drawer.line(x, y+h, x+w, y, stroke.getLineWidth()); + drawer.line(x, y, x + w, y + h, stroke.getLineWidth()); + drawer.line(x, y + h, x + w, y, stroke.getLineWidth()); drawer.setColor(Color.WHITE); } @@ -2210,7 +2253,7 @@ private void renderTokenOverlay(YieldTokenOverlay overlay, Token token) { var hc = w / 2f; var vc = h * (1 - 0.134f); - var floats = new float[] { + var floats = new float[]{ x, y + vc, x + w, y + vc, x + hc, y, @@ -2235,13 +2278,13 @@ private void renderTokenOverlay(OTokenOverlay overlay, Token token) { var stroke = overlay.getStroke(); var lineWidth = stroke.getLineWidth(); - var centerX = x + w/2f; - var centerY = y + h/2f; - var radiusX = w/2f - lineWidth/2f; - var radiusY = h/2f - lineWidth/2f; + var centerX = x + w / 2f; + var centerY = y + h / 2f; + var radiusX = w / 2f - lineWidth / 2f; + var radiusY = h / 2f - lineWidth / 2f; drawer.setColor(tmpColor); - drawer.ellipse(centerX, centerY, radiusX,radiusY, 0, lineWidth ); + drawer.ellipse(centerX, centerY, radiusX, radiusY, 0, lineWidth); drawer.setColor(Color.WHITE); } @@ -2296,7 +2339,7 @@ private void renderTokenOverlay(DiamondTokenOverlay overlay, Token token) { var hc = w / 2f; var vc = h / 2f; - var floats = new float[] { + var floats = new float[]{ x, y + vc, x + hc, y, x + w, y + vc, @@ -2323,10 +2366,10 @@ private void renderTokenOverlay(TriangleTokenOverlay overlay, Token token) { var hc = w / 2f; var vc = h * (1 - 0.866f); - var floats = new float[] { - x, y + vc, - x + w, y + vc, - x + hc, y + h, + var floats = new float[]{ + x, y + vc, + x + w, y + vc, + x + hc, y + h, }; drawer.setColor(tmpColor); @@ -2703,6 +2746,11 @@ private void disposeZoneResources() { offsetY = 0; fogX = null; fogY = null; + fetchedRegions.clear(); + fetchedSprites.clear(); + var oldPacker = packer; + packer = createPacker(); + oldPacker.dispose(); Gdx.app.postRunnable(() -> { updateCam(); @@ -2718,15 +2766,15 @@ private void disposeZoneResources() { fog.getTexture().dispose(); } - for (var sprite : sprites.values()) { + for (var sprite : isoSprites.values()) { sprite.getTexture().dispose(); } - sprites.clear(); + isoSprites.clear(); - for (var sprite : isoSprites.values()) { + for (var sprite : bigSprites.values()) { sprite.getTexture().dispose(); } - sprites.clear(); + bigSprites.clear(); }); } @@ -2736,32 +2784,10 @@ private void initializeZoneResources(Zone newZone) { zoneRenderer = MapTool.getFrame().getZoneRenderer(newZone); updateVisibleArea(); - mapAssetId = newZone.getMapAssetId(); - - // FIXME: zonechanges during wait for resources - new Thread(() -> { - try { - while (zoneRenderer.isLoading()) { - Thread.sleep(100); - } - - // create sprites for all assets - //TODO: create textureAtlas ? - Gdx.app.postRunnable(() -> { - for (var assetId : newZone.getAllAssetIds()) { - var bytes = AssetManager.getAsset(assetId).getImage(); - - var pix = new Pixmap(bytes, 0, bytes.length); - var sprite = new Sprite(new Texture(pix)); - sprite.setSize(pix.getWidth(), pix.getHeight()); - sprites.put(assetId, sprite); - pix.dispose(); - } - }); - } catch (InterruptedException e) { - } - }).start(); + for (var assetId : newZone.getAllAssetIds()) { + AssetManager.getAssetAsynchronously(assetId, this); + } zone = newZone; } @@ -2938,6 +2964,38 @@ public void flushFog() { updateVisibleArea(); } + @Override + public void assetAvailable(MD5Key key) { + try { + var img = ImageManager.getImageAndWait(key); + var bytes = ImageUtil.imageToBytes(img, "png"); + // without imageutil there seem to be some issues with tranparency for some images. + // (black background instead of tranparent) + //var bytes = AssetManager.getAsset(key).getImage(); + var pix = new Pixmap(bytes, 0, bytes.length); + + try { + var name = key.toString(); + synchronized (packer) { + if (packer.getRect(name) == null) + packer.pack(name, pix); + + pix.dispose(); + } + } catch (GdxRuntimeException x) { + // this means that the pixmap is to big for the atlas. + Gdx.app.postRunnable(() -> { + synchronized (bigSprites) { + if (!bigSprites.containsKey(key)) + bigSprites.put(key, new Sprite(new Texture(pix))); + } + pix.dispose(); + }); + } + } catch (Exception e) { + } + } + private interface ItemRenderer { void render(); } From d2b7fd63b7593192a82627d265aaabdbe1057c78 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 24 Apr 2021 22:32:38 +0200 Subject: [PATCH 040/139] render boolean *ImageTokenOverlays --- .../ui/token/CornerImageTokenOverlay.java | 2 +- .../ui/token/FlowImageTokenOverlay.java | 2 +- .../client/ui/token/ImageTokenOverlay.java | 2 +- .../maptool/client/ui/zone/GdxRenderer.java | 84 +++++++++++-------- 4 files changed, 50 insertions(+), 40 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/token/CornerImageTokenOverlay.java b/src/main/java/net/rptools/maptool/client/ui/token/CornerImageTokenOverlay.java index 2be3e39c4e..0a692c0cad 100644 --- a/src/main/java/net/rptools/maptool/client/ui/token/CornerImageTokenOverlay.java +++ b/src/main/java/net/rptools/maptool/client/ui/token/CornerImageTokenOverlay.java @@ -65,7 +65,7 @@ public Object clone() { * Token) */ @Override - protected Rectangle getImageBounds(Rectangle bounds, Token token) { + public Rectangle getImageBounds(Rectangle bounds, Token token) { int x = (bounds.width + 1) / 2; int y = (bounds.height + 1) / 2; switch (corner) { diff --git a/src/main/java/net/rptools/maptool/client/ui/token/FlowImageTokenOverlay.java b/src/main/java/net/rptools/maptool/client/ui/token/FlowImageTokenOverlay.java index 5fadad8d58..ec60919555 100644 --- a/src/main/java/net/rptools/maptool/client/ui/token/FlowImageTokenOverlay.java +++ b/src/main/java/net/rptools/maptool/client/ui/token/FlowImageTokenOverlay.java @@ -65,7 +65,7 @@ protected TokenOverlayFlow getFlow() { * Token) */ @Override - protected Rectangle getImageBounds(Rectangle bounds, Token token) { + public Rectangle getImageBounds(Rectangle bounds, Token token) { return getFlow().getStateBounds(bounds, token, getName()); } diff --git a/src/main/java/net/rptools/maptool/client/ui/token/ImageTokenOverlay.java b/src/main/java/net/rptools/maptool/client/ui/token/ImageTokenOverlay.java index d7f1729bf0..afeb8fb8f4 100644 --- a/src/main/java/net/rptools/maptool/client/ui/token/ImageTokenOverlay.java +++ b/src/main/java/net/rptools/maptool/client/ui/token/ImageTokenOverlay.java @@ -110,7 +110,7 @@ public MD5Key getAssetId() { * @param token Token being decorated. * @return The bounds w/in the token where the image is painted. */ - protected Rectangle getImageBounds(Rectangle bounds, Token token) { + public Rectangle getImageBounds(Rectangle bounds, Token token) { return bounds; } } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index a760479349..3d363e7dec 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -1770,28 +1770,21 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure float fy = y + (float) origBounds.getHeight() / zoom / 2; - //drawer.setDefaultLineWidth() - tmpMatrix.idt(); tmpMatrix.translate(fx, -fy, 0); batch.setTransformMatrix(tmpMatrix); drawer.update(); - if (token.getFacing() < 0) { - // shape.setColor(Color.YELLOW); - } else { - // shape.setColor(1, 1, 0, 0.5f); + if (token.getFacing() < 0) + drawer.setColor(Color.YELLOW); + else + drawer.setColor(1, 1, 0, 0.5f); - } - //shape.set(ShapeRenderer.ShapeType.Filled); var arrowArea = new Area(arrow); fill(arrowArea); - //shape.setColor(Color.DARK_GRAY); drawer.setColor(Color.DARK_GRAY); - - //shape.set(ShapeRenderer.ShapeType.Line); draw(arrowArea); @@ -1810,9 +1803,6 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure float cx = x + (float) origBounds.getWidth() / 2; float cy = y + (float) origBounds.getHeight() / 2; - //shape.translate(cx, -cy, 0); - //shape.setColor(Color.YELLOW); - //shape.set(ShapeRenderer.ShapeType.Filled); tmpMatrix.idt(); tmpMatrix.translate(cx, -cy, 0); batch.setTransformMatrix(tmpMatrix); @@ -1822,10 +1812,8 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure fill(arrowArea); drawer.setColor(Color.DARK_GRAY); drawer.setDefaultLineWidth(1); - //shape.setColor(Color.DARK_GRAY); - //shape.set(ShapeRenderer.ShapeType.Line); + draw(arrowArea); - //shape.translate(-cx, cy, 0); tmpMatrix.idt(); batch.setTransformMatrix(tmpMatrix); drawer.update(); @@ -1837,20 +1825,12 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure cy = y + (float) origBounds.getHeight() / 2; } else { int facing = token.getFacing(); - while (facing < 0) { - facing += 360; - } - // TODO: this should really be done in Token.setFacing() but I didn't want to take - // the chance - // of breaking something, so change this when it's safe to break stuff - facing %= 360; arrow = getSquareFacingArrow(facing, footprintBounds.width / 2); cx = x + (float) origBounds.getWidth() / 2; cy = y + (float) origBounds.getHeight() / 2; // Find the edge of the image - // TODO: Man, this is horrible, there's gotta be a better way to do this double xp = origBounds.getWidth() / 2; double yp = origBounds.getHeight() / 2; if (facing >= 45 && facing <= 135 || facing >= 225 && facing <= 315) { @@ -1976,7 +1956,6 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure } else { renderImageBorderAround(selectedBorder, gdxTokenRectangle); } - // Remove labels from the cache if the corresponding tokens are deselected } // Token names and labels @@ -2131,12 +2110,12 @@ private void renderTokenOverlay(BooleanTokenOverlay overlay, Token token, Rectan if (!FunctionUtil.getBooleanValue(value)) return; - if (overlay instanceof FlowImageTokenOverlay) + /* if (overlay instanceof FlowImageTokenOverlay) renderTokenOverlay((FlowImageTokenOverlay) overlay, token, bounds); else if (overlay instanceof CornerImageTokenOverlay) renderTokenOverlay((CornerImageTokenOverlay) overlay, token, bounds); - else if (overlay instanceof ImageTokenOverlay) - renderTokenOverlay((ImageTokenOverlay) overlay, token, bounds); + else*/ if (overlay instanceof ImageTokenOverlay) + renderTokenOverlay((ImageTokenOverlay) overlay, token); else if (overlay instanceof FlowColorDotTokenOverlay) renderTokenOverlay((FlowColorDotTokenOverlay) overlay, token); else if (overlay instanceof YieldTokenOverlay) @@ -2187,21 +2166,49 @@ private void renderTokenOverlay(TwoToneBarTokenOverlay overlay, Token token, Rec //TODO: Implement } - private void renderTokenOverlay(ImageTokenOverlay overlay, Token token, Rectangle2D bounds) { - //TODO: Implement - } - private void renderTokenOverlay(TwoImageBarTokenOverlay overlay, Token token, Rectangle2D bounds, Object barValue) { //TODO: Implement } + private void renderTokenOverlay(ImageTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y; + + // Get the image + java.awt.Rectangle iBounds = overlay.getImageBounds(bounds, token); + Dimension d = iBounds.getSize(); + + var image = getSprite(overlay.getAssetId()); + + Dimension size = new Dimension((int)image.getWidth(), (int)image.getHeight()); + SwingUtil.constrainTo(size, d.width, d.height); + + // Paint it at the right location + int width = size.width; + int height = size.height; + + if(overlay instanceof CornerImageTokenOverlay) { + x += iBounds.x + (d.width - width) / 2; + y -= iBounds.y + (d.height - height) / 2 + iBounds.height; + } else { + x = iBounds.x + (d.width - width) / 2; + y = -(iBounds.y + (d.height - height) / 2) - iBounds.height; + } + + image.setAlpha(overlay.getOpacity()/100f); + image.setPosition(x, y); + image.setSize(size.width, size.height); + image.draw(batch); + } +/* private void renderTokenOverlay(FlowImageTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement } private void renderTokenOverlay(CornerImageTokenOverlay overlay, Token token, Rectangle2D bounds) { //TODO: Implement - } + }*/ private void renderTokenOverlay(XTokenOverlay overlay, Token token) { var bounds = token.getBounds(zone); @@ -2930,6 +2937,7 @@ public void modelChanged(ModelChangeEvent event) { updateVisibleArea(); return; } + return; /* if (evt == Zone.Event.TOKEN_CHANGED || evt == Zone.Event.TOKEN_REMOVED @@ -2944,13 +2952,13 @@ public void modelChanged(ModelChangeEvent event) { zoneRenderer.flush((Token) event.getArg()); } }*/ - +/* var currentZone = zone; // for now quick and dirty disposeZoneResources(); initializeZoneResources(currentZone); - } + */ } public void setScale(Scale scale) { offsetX = scale.getOffsetX() * -1; @@ -2967,7 +2975,9 @@ public void flushFog() { @Override public void assetAvailable(MD5Key key) { try { - var img = ImageManager.getImageAndWait(key); + var asset = AssetManager.getAsset(key); + var img = ImageUtil.createCompatibleImage(ImageUtil.bytesToImage(asset.getImage(), asset.getName()), null); + //var img = ImageManager.getImage(key); var bytes = ImageUtil.imageToBytes(img, "png"); // without imageutil there seem to be some issues with tranparency for some images. // (black background instead of tranparent) From 427b1d50314320a0c48fac72e1f048b37c8f4fcb Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sun, 25 Apr 2021 12:03:25 +0200 Subject: [PATCH 041/139] render boolean *ImageBarOverlays --- .../maptool/client/ui/zone/GdxRenderer.java | 271 +++++++++++++++--- 1 file changed, 226 insertions(+), 45 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 3d363e7dec..141b790502 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -2000,8 +2000,10 @@ private Sprite getSprite(MD5Key key) { return null; var sprite = bigSprites.get(key); - if (sprite != null) + if (sprite != null) { + sprite.setSize(sprite.getTexture().getWidth(), sprite.getTexture().getHeight()); return sprite; + } return getSprite(key.toString()); } @@ -2009,8 +2011,11 @@ private Sprite getSprite(MD5Key key) { private Sprite getSprite(String name) { var sprite = fetchedSprites.get(name); - if (sprite != null) + if (sprite != null) { + var region = fetchedRegions.get(name); + sprite.setSize(region.getRegionWidth(), region.getRegionHeight()); return sprite; + } var region = fetch(name); @@ -2092,29 +2097,234 @@ private void renderImageBorderAround(ImageBorder border, Rectangle bounds) { } private void renderTokenOverlay(AbstractTokenOverlay overlay, Token token, Rectangle2D bounds, Object value) { + if(overlay instanceof BarTokenOverlay) + renderTokenOverlay((BarTokenOverlay) overlay, token, bounds, value); + else if (overlay instanceof BooleanTokenOverlay) + renderTokenOverlay((BooleanTokenOverlay) overlay, token, value); + } + + private void renderTokenOverlay(BarTokenOverlay overlay, Token token, Rectangle2D bounds, Object value) + { + if (value == null) return; + double val = 0; + if (value instanceof Number) { + val = ((Number) value).doubleValue(); + } else { + try { + val = Double.parseDouble(value.toString()); + } catch (NumberFormatException e) { + return; // Bad value so don't paint. + } // endtry + } // endif + if (val < 0) val = 0; + if (val > 1) val = 1; + if (overlay instanceof MultipleImageBarTokenOverlay) - renderTokenOverlay((MultipleImageBarTokenOverlay) overlay, token, bounds, value); + renderTokenOverlay((MultipleImageBarTokenOverlay) overlay, token, val); else if (overlay instanceof SingleImageBarTokenOverlay) - renderTokenOverlay((SingleImageBarTokenOverlay) overlay, token, bounds, value); + renderTokenOverlay((SingleImageBarTokenOverlay) overlay, token, val); else if (overlay instanceof TwoToneBarTokenOverlay) - renderTokenOverlay((TwoToneBarTokenOverlay) overlay, token, bounds, value); + renderTokenOverlay((TwoToneBarTokenOverlay) overlay, token, val); else if (overlay instanceof DrawnBarTokenOverlay) - renderTokenOverlay((DrawnBarTokenOverlay) overlay, token, bounds, value); + renderTokenOverlay((DrawnBarTokenOverlay) overlay, token, val); else if (overlay instanceof TwoImageBarTokenOverlay) - renderTokenOverlay((TwoImageBarTokenOverlay) overlay, token, bounds, value); - else if (overlay instanceof BooleanTokenOverlay) - renderTokenOverlay((BooleanTokenOverlay) overlay, token, bounds, value); + renderTokenOverlay((TwoImageBarTokenOverlay) overlay, token, val); + } + + private void renderTokenOverlay(MultipleImageBarTokenOverlay overlay, Token token, double barValue) { + int incr = overlay.findIncrement(barValue); + + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + + // Get the images + var image = getSprite(overlay.getAssetIds()[incr]); + + Dimension d = bounds.getSize(); + Dimension size = new Dimension((int)image.getWidth(), (int)image.getHeight()); + SwingUtil.constrainTo(size, d.width, d.height); + + // Find the position of the image according to the size and side where they are placed + switch (overlay.getSide()) { + case LEFT: + y += d.height - size.height; + break; + case RIGHT: + x += d.width - size.width; + y += d.height - size.height; + break; + case TOP: + y += d.height - size.height; + break; + } + + image.setPosition(x, y); + image.setSize(size.width, size.height); + image.draw(batch, overlay.getOpacity()/100f); + } + + private void renderTokenOverlay(SingleImageBarTokenOverlay overlay, Token token, double barValue) { + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + + // Get the images + var image = getSprite(overlay.getAssetId()); + + Dimension d = bounds.getSize(); + Dimension size = new Dimension((int)image.getWidth(), (int)image.getHeight()); + SwingUtil.constrainTo(size, d.width, d.height); + + var side = overlay.getSide(); + // Find the position of the images according to the size and side where they are placed + switch (side) { + case LEFT: + y += d.height - size.height; + break; + case RIGHT: + x += d.width - size.width; + y += d.height - size.height; + break; + case TOP: + y += d.height - size.height; + break; + } + + int width = + (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) + ? overlay.calcBarSize((int)image.getWidth(), barValue) + : (int)image.getWidth(); + int height = + (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) + ? overlay.calcBarSize((int)image.getHeight(), barValue) + : (int)image.getHeight(); + + int screenWidth = + (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) + ? overlay.calcBarSize(size.width, barValue) + : size.width; + int screenHeight = + (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) + ? overlay.calcBarSize(size.height, barValue) + : size.height; + + image.setPosition(x + size.width - screenWidth, y + size.height - screenHeight); + image.setSize(screenWidth, screenHeight); + + var u = image.getU(); + var v = image.getV(); + var u2 = image.getU2(); + var v2 = image.getV2(); + + var wfactor = screenWidth * 1.0f/size.width; + var uDiff = (u2 - u) * wfactor; + image.setU(u2 - uDiff); + + var vfactor = screenHeight * 1.0f/size.height; + var vDiff = (v2 - v) * vfactor; + image.setV(v2 - vDiff); + + image.draw(batch, overlay.getOpacity()/100f); + + image.setU(u); + image.setV(v); + } + + private void renderTokenOverlay(DrawnBarTokenOverlay overlay, Token token, double barValue) { + //TODO: Implement + } + + private void renderTokenOverlay(TwoToneBarTokenOverlay overlay, Token token, double barValue) { + //TODO: Implement + } + + private void renderTokenOverlay(TwoImageBarTokenOverlay overlay, Token token, double barValue) { + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + + // Get the images + var topImage = getSprite(overlay.getTopAssetId()); + var bottomImage = getSprite(overlay.getBottomAssetId()); + + + Dimension d = bounds.getSize(); + Dimension size = new Dimension((int)topImage.getWidth(), (int)topImage.getHeight()); + SwingUtil.constrainTo(size, d.width, d.height); + + var side = overlay.getSide(); + // Find the position of the images according to the size and side where they are placed + switch (side) { + case LEFT: + y += d.height - size.height; + break; + case RIGHT: + x += d.width - size.width; + y += d.height - size.height; + break; + case TOP: + y += d.height - size.height; + break; + } + + var width = + (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) + ? overlay.calcBarSize((int)topImage.getWidth(), barValue) + : topImage.getWidth(); + var height = + (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) + ? overlay.calcBarSize((int)topImage.getHeight(), barValue) + : topImage.getHeight(); + + var screenWidth = + (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) + ? overlay.calcBarSize(size.width, barValue) + : size.width; + var screenHeight = + (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) + ? overlay.calcBarSize(size.height, barValue) + : size.height; + + bottomImage.setPosition(x, y); + bottomImage.setSize(size.width, size.height); + bottomImage.draw(batch, overlay.getOpacity()/100f); + + var u = topImage.getU(); + var v = topImage.getV(); + var u2 = topImage.getU2(); + var v2 = topImage.getV2(); + + var wFactor = screenWidth * 1.0f/size.width; + var uDiff = (u2 - u) * wFactor; + + var vFactor = screenHeight * 1.0f/size.height; + var vDiff = (v2 - v) * vFactor; + + topImage.setPosition(x, y); + topImage.setSize(screenWidth, screenHeight); + + if (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) { + topImage.setU(u2 - uDiff); + topImage.setV(v2 - vDiff); + } else { + + topImage.setU2(u + uDiff); + topImage.setV2(v + vDiff); + } + topImage.draw(batch, overlay.getOpacity()/100f); + + topImage.setU(u); + topImage.setV(v); + topImage.setU2(u2); + topImage.setV2(v2); } - private void renderTokenOverlay(BooleanTokenOverlay overlay, Token token, Rectangle2D bounds, Object value) { + private void renderTokenOverlay(BooleanTokenOverlay overlay, Token token, Object value) { if (!FunctionUtil.getBooleanValue(value)) return; - /* if (overlay instanceof FlowImageTokenOverlay) - renderTokenOverlay((FlowImageTokenOverlay) overlay, token, bounds); - else if (overlay instanceof CornerImageTokenOverlay) - renderTokenOverlay((CornerImageTokenOverlay) overlay, token, bounds); - else*/ if (overlay instanceof ImageTokenOverlay) + if (overlay instanceof ImageTokenOverlay) renderTokenOverlay((ImageTokenOverlay) overlay, token); else if (overlay instanceof FlowColorDotTokenOverlay) renderTokenOverlay((FlowColorDotTokenOverlay) overlay, token); @@ -2150,26 +2360,6 @@ private void renderTokenOverlay(ShadedTokenOverlay overlay, Token token) { drawer.setColor(Color.WHITE); } - private void renderTokenOverlay(MultipleImageBarTokenOverlay overlay, Token token, Rectangle2D bounds, Object barValue) { - //TODO: Implement - } - - private void renderTokenOverlay(SingleImageBarTokenOverlay overlay, Token token, Rectangle2D bounds, Object barValue) { - //TODO: Implement - } - - private void renderTokenOverlay(DrawnBarTokenOverlay overlay, Token token, Rectangle2D bounds, Object barValue) { - //TODO: Implement - } - - private void renderTokenOverlay(TwoToneBarTokenOverlay overlay, Token token, Rectangle2D bounds, Object barValue) { - //TODO: Implement - } - - private void renderTokenOverlay(TwoImageBarTokenOverlay overlay, Token token, Rectangle2D bounds, Object barValue) { - //TODO: Implement - } - private void renderTokenOverlay(ImageTokenOverlay overlay, Token token) { var bounds = token.getBounds(zone); var x = bounds.x; @@ -2196,20 +2386,11 @@ private void renderTokenOverlay(ImageTokenOverlay overlay, Token token) { y = -(iBounds.y + (d.height - height) / 2) - iBounds.height; } - image.setAlpha(overlay.getOpacity()/100f); image.setPosition(x, y); image.setSize(size.width, size.height); - image.draw(batch); - } -/* - private void renderTokenOverlay(FlowImageTokenOverlay overlay, Token token, Rectangle2D bounds) { - //TODO: Implement + image.draw(batch, overlay.getOpacity()/100f); } - private void renderTokenOverlay(CornerImageTokenOverlay overlay, Token token, Rectangle2D bounds) { - //TODO: Implement - }*/ - private void renderTokenOverlay(XTokenOverlay overlay, Token token) { var bounds = token.getBounds(zone); var x = bounds.x; From 9c896ea979161b4089e7c658c0d926f83f7baef5 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sun, 25 Apr 2021 13:01:29 +0200 Subject: [PATCH 042/139] render DrawnBarTokenOverlay and TwoToneBarTokenOverlay --- .../maptool/client/ui/zone/GdxRenderer.java | 81 ++++++++++++++++++- 1 file changed, 79 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 141b790502..12d2caf01c 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -2232,11 +2232,88 @@ private void renderTokenOverlay(SingleImageBarTokenOverlay overlay, Token token, } private void renderTokenOverlay(DrawnBarTokenOverlay overlay, Token token, double barValue) { - //TODO: Implement + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + var side = overlay.getSide(); + var thickness = overlay.getThickness(); + + int width = (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) ? w : thickness; + int height = (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) ? h : thickness; + + switch (side) { + case LEFT: + y += h - height; + break; + case RIGHT: + x += w - width; + y += h - height; + break; + case TOP: + y += h - height; + break; + } + + if (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) { + width = overlay.calcBarSize(width, barValue); + } else { + height = overlay.calcBarSize(height, barValue); + y += bounds.height - height; + } + + var barColor = overlay.getBarColor(); + tmpColor.set(barColor.getRed()/255f, barColor.getGreen()/255f, barColor.getBlue()/255f, barColor.getAlpha()/255f); + drawer.filledRectangle(x, y, width, height, tmpColor); } private void renderTokenOverlay(TwoToneBarTokenOverlay overlay, Token token, double barValue) { - //TODO: Implement + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + var side = overlay.getSide(); + var thickness = overlay.getThickness(); + + int width = (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) ? w : thickness; + int height = (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) ? h : thickness; + + switch (side) { + case LEFT: + y += h - height; + break; + case RIGHT: + x += w - width; + y += h - height; + break; + case TOP: + y += h - height; + break; + } + + var color = overlay.getBgColor(); + tmpColor.set(color.getRed()/255f, color.getGreen()/255f, color.getBlue()/255f, color.getAlpha()/255f); + drawer.filledRectangle(x, y, width, height, tmpColor); + + // Draw the bar + int borderSize = thickness > 5 ? 2 : 1; + x += borderSize; + y += borderSize; + width -= borderSize * 2; + height -= borderSize * 2; + if (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) { + width = overlay.calcBarSize(width, barValue); + } else { + height = overlay.calcBarSize(height, barValue); + } + + color = overlay.getBarColor(); + tmpColor.set(color.getRed()/255f, color.getGreen()/255f, color.getBlue()/255f, color.getAlpha()/255f); + drawer.filledRectangle(x, y, width, height, tmpColor); } private void renderTokenOverlay(TwoImageBarTokenOverlay overlay, Token token, double barValue) { From 2d8c48eaf711323c08c26e7bda1f6125d553689f Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sun, 25 Apr 2021 14:46:10 +0200 Subject: [PATCH 043/139] implement rendering of movement --- maptool.tpproj | 2 +- .../maptool/client/ui/zone/GdxRenderer.java | 555 ++++++++---------- .../net/rptools/maptool/client/maptool.atlas | 189 +++--- .../net/rptools/maptool/client/maptool.png | Bin 74628 -> 111717 bytes 4 files changed, 348 insertions(+), 398 deletions(-) diff --git a/maptool.tpproj b/maptool.tpproj index 963724459b..7f99d53641 100644 --- a/maptool.tpproj +++ b/maptool.tpproj @@ -32,7 +32,7 @@ limitMemory=true useIndexes=true scaleFactors=[{suffix:"",factor:1,resampling:bicubic}] -inputFiles=[{path:src/main/resources/net/rptools/maptool/client/image/blueLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/darkGreyLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/grayLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/border,type:Input,dirFilePrefix:border/,recursive:true,flattenPaths:false},{path:src/main/resources/net/rptools/maptool/client/image/stack.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/whiteBorder.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/hexBorder.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/isoBorder.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/redDot.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/broken.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/unknown.png,type:Input,regionName:null}] +inputFiles=[{path:src/main/resources/net/rptools/maptool/client/image/blueLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/darkGreyLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/grayLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/border,type:Input,dirFilePrefix:border/,recursive:true,flattenPaths:false},{path:src/main/resources/net/rptools/maptool/client/image/stack.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/whiteBorder.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/hexBorder.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/isoBorder.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/redDot.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/broken.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/unknown.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/block_move.png,type:Input,regionName:null}] -PROJ- diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 12d2caf01c..bb45a5a7ab 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -150,7 +150,7 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private Area tmpArea = new Area(); private TiledDrawable tmpTile = new TiledDrawable(); private float pointsPerBezier = 10f; - private boolean showAstarDebugging; + private boolean showAstarDebugging = false; public GdxRenderer() { @@ -972,117 +972,38 @@ private void showBlockedMoves(PlayerView view, Set mo for (Point2D point : validMoves) { ZonePoint zp = acp.offsetZonePoint(zoneRenderer.getZone().getGrid(), point.getX(), point.getY()); double r = (zp.x - 1) * 45; - showBlockedMoves(zp, r, AppStyle.blockMoveImage, 1.0f); + showBlockedMoves(zp, r, getSprite("block_move"), 1.0f); } } } -/* // handle flipping - BufferedImage workImage = image; - if (token.isFlippedX() || token.isFlippedY()) { - workImage = - new BufferedImage(image.getWidth(), image.getHeight(), image.getTransparency()); - - int workW = image.getWidth() * (token.isFlippedX() ? -1 : 1); - int workH = image.getHeight() * (token.isFlippedY() ? -1 : 1); - int workX = token.isFlippedX() ? image.getWidth() : 0; - int workY = token.isFlippedY() ? image.getHeight() : 0; - - Graphics2D wig = workImage.createGraphics(); - wig.drawImage(image, workX, workY, workW, workH, null); - wig.dispose(); - } - // on the iso plane - if (token.isFlippedIso()) { - if (flipIsoImageMap.get(token) == null) { - workImage = IsometricGrid.isoImage(workImage); - } else { - workImage = flipIsoImageMap.get(token); - } - token.setHeight(workImage.getHeight()); - token.setWidth(workImage.getWidth()); - footprintBounds = token.getBounds(zone); - } - // Draw token - double iso_ho = 0; - Dimension imgSize = new Dimension(workImage.getWidth(), workImage.getHeight()); - if (token.getShape() == Token.TokenShape.FIGURE) { - double th = token.getHeight() * (double) footprintBounds.width / token.getWidth(); - iso_ho = footprintBounds.height - th; - footprintBounds = - new java.awt.Rectangle( - footprintBounds.x, - footprintBounds.y - (int) iso_ho, - footprintBounds.width, - (int) th); - iso_ho = iso_ho * getScale(); - } - SwingUtil.constrainTo(imgSize, footprintBounds.width, footprintBounds.height); - - int offsetx = 0; - int offsety = 0; - if (token.isSnapToScale()) { - offsetx = - (int) - (imgSize.width < footprintBounds.width - ? (footprintBounds.width - imgSize.width) / 2 * getScale() - : 0); - offsety = - (int) - (imgSize.height < footprintBounds.height - ? (footprintBounds.height - imgSize.height) / 2 * getScale() - : 0); - } - int tx = x + offsetx; - int ty = y + offsety + (int) iso_ho; - - AffineTransform at = new AffineTransform(); - at.translate(tx, ty); - - if (token.hasFacing() && token.getShape() == Token.TokenShape.TOP_DOWN) { - at.rotate( - Math.toRadians(-token.getFacing() - 90), - scaledWidth / 2 - token.getAnchor().x * scale - offsetx, - scaledHeight / 2 - - token.getAnchor().y * scale - - offsety); // facing defaults to down, or -90 degrees - } - if (token.isSnapToScale()) { - at.scale( - (double) imgSize.width / workImage.getWidth(), - (double) imgSize.height / workImage.getHeight()); - at.scale(getScale(), getScale()); - } else { - if (token.getShape() == Token.TokenShape.FIGURE) { - at.scale( - (double) scaledWidth / workImage.getWidth(), - (double) scaledWidth / workImage.getWidth()); - } else { - at.scale( - (double) scaledWidth / workImage.getWidth(), - (double) scaledHeight / workImage.getHeight()); - } - } - g.drawImage(workImage, at, this); + footprintBounds.x += set.getOffsetX(); + footprintBounds.y += set.getOffsetY(); + + prepareTokenSprite(image, token, footprintBounds); + image.draw(batch); + // Other details if (token == keyToken) { - java.awt.Rectangle bounds = new java.awt.Rectangle(tx, ty, imgSize.width, imgSize.height); - bounds.width *= getScale(); - bounds.height *= getScale(); + var x = footprintBounds.x; + var y = footprintBounds.y; + var w = footprintBounds.width; + var h = footprintBounds.height; + Grid grid = zone.getGrid(); boolean checkForFog = - MapTool.getServerPolicy().isUseIndividualFOW() && zoneView.isUsingVision(); + MapTool.getServerPolicy().isUseIndividualFOW() && zoneRenderer.getZoneView().isUsingVision(); boolean showLabels = isOwner; if (checkForFog) { Path path = - set.getWalker() != null ? set.getWalker().getPath() : set.gridlessPath; + set.getWalker() != null ? set.getWalker().getPath() : set.getGridlessPath(); List thePoints = path.getCellPath(); - // now that we have the last point, we can check to see if it's gridless or not. If not - // gridless, get the last point the token was at and see if the token's footprint is inside - // the visible area to show the label. + // now that we have the last point, we can check to see if it's gridless or not. If not + // gridless, get the last point the token was at and see if the token's footprint is inside + // the visible area to show the label. if (thePoints.isEmpty()) { showLabels = false; @@ -1101,11 +1022,11 @@ private void showBlockedMoves(PlayerView view, Set mo (int) tokBounds.getWidth(), (int) tokBounds.getHeight()); } - showLabels = showLabels || zoneView.getVisibleArea(view).intersects(tokenRectangle); + showLabels = showLabels || zoneRenderer.getZoneView().getVisibleArea(view).intersects(tokenRectangle); } } else { boolean hasFog = zone.hasFog(); - boolean fogIntersects = exposedFogArea.intersects(bounds); + boolean fogIntersects = exposedFogArea.intersects(footprintBounds); showLabels = showLabels || (visibleScreenArea == null && !hasFog); // no vision - fog showLabels = showLabels @@ -1113,57 +1034,64 @@ private void showBlockedMoves(PlayerView view, Set mo showLabels = showLabels || (visibleScreenArea != null - && visibleScreenArea.intersects(bounds) + && visibleScreenArea.intersects(footprintBounds) && fogIntersects); // vision } if (showLabels) { - // if the token is visible on the screen it will be in the location cache - if (tokenLocationCache.containsKey(token)) { - y += 10 + scaledHeight; - x += scaledWidth / 2; - - if (!token.isStamp() && AppState.getShowMovementMeasurements()) { - String distance = ""; - if (walker != null) { // This wouldn't be true unless token.isSnapToGrid() && - // grid.isPathingSupported() - double distanceTraveled = walker.getDistance(); - if (distanceTraveled >= 0) { - distance = NumberFormat.getInstance().format(distanceTraveled); - } - } else { - double c = 0; - ZonePoint lastPoint = null; - for (ZonePoint zp : set.gridlessPath.getCellPath()) { - if (lastPoint == null) { - lastPoint = zp; - continue; - } - int a = lastPoint.x - zp.x; - int b = lastPoint.y - zp.y; - c += Math.hypot(a, b); + + y += 10 + h; + x += w / 2; + + if (!token.isStamp() && AppState.getShowMovementMeasurements()) { + String distance = ""; + if (walker != null) { // This wouldn't be true unless token.isSnapToGrid() && + // grid.isPathingSupported() + double distanceTraveled = walker.getDistance(); + if (distanceTraveled >= 0) { + distance = NumberFormat.getInstance().format(distanceTraveled); + } + } else { + double c = 0; + ZonePoint lastPoint = null; + for (ZonePoint zp : set.getGridlessPath().getCellPath()) { + if (lastPoint == null) { lastPoint = zp; + continue; } - c /= zone.getGrid().getSize(); // Number of "cells" - c *= zone.getUnitsPerCell(); // "actual" distance traveled - distance = NumberFormat.getInstance().format(c); - } - if (!distance.isEmpty()) { - delayRendering(new ZoneRenderer.LabelRenderer(distance, x, y)); - y += 20; + int a = lastPoint.x - zp.x; + int b = lastPoint.y - zp.y; + c += Math.hypot(a, b); + lastPoint = zp; } + c /= zone.getGrid().getSize(); // Number of "cells" + c *= zone.getUnitsPerCell(); // "actual" distance traveled + distance = NumberFormat.getInstance().format(c); } - if (set.getPlayerId() != null && set.getPlayerId().length() >= 1) { - delayRendering(new ZoneRenderer.LabelRenderer(set.getPlayerId(), x, y)); + if (!distance.isEmpty()) { + itemRenderList.add(new LabelRenderer(distance, x, -y)); + y += 20; } - } // !token.isStamp() + } + if (set.getPlayerId() != null && set.getPlayerId().length() >= 1) { + itemRenderList.add(new LabelRenderer(set.getPlayerId(), x, -y)); + } } // showLabels - } // token == keyToken*/ + } // token == keyToken } } } - private void showBlockedMoves(ZonePoint zp, double r, BufferedImage blockMoveImage, float v) { - //TODO: implement + private void showBlockedMoves(ZonePoint zp, double angle, Sprite image, float size) { + // Resize image to size of 1/4 size of grid + var resizeWidth = (float)zone.getGrid().getCellWidth() / image.getWidth() * .25f; + var resizeHeight = (float)zone.getGrid().getCellHeight() / image.getHeight() * .25f; + + var w = image.getWidth() * resizeWidth * size; + var h = image.getHeight() * resizeHeight * size; + + image.setSize(w, h); + image.setPosition(zp.x - w / 2f, -(zp.y - h / 2f)); + image.draw(batch); } private void renderAuras(PlayerView view) { @@ -1510,8 +1438,6 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure if (visibleScreenArea == null) return; - Set tempVisTokens = new HashSet(); - for (Token token : tokenList) { if (token.getShape() != Token.TokenShape.FIGURE && figuresOnly && !token.isAlwaysVisible()) { continue; @@ -1536,42 +1462,21 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure timer.stop("tokenlist-1"); } - timer.start("tokenlist-1b"); - - // get token image sprite, using image table if present - var imageKey = token.getTokenImageAssetId(); - Sprite image = getSprite(imageKey); - - image.setRotation(0); - - - timer.stop("tokenlist-1b"); - - timer.start("tokenlist-1a"); java.awt.Rectangle footprintBounds = token.getBounds(zone); + java.awt.Rectangle origBounds = (java.awt.Rectangle) footprintBounds.clone(); + Area tokenBounds = new Area(footprintBounds); - timer.stop("tokenlist-1a"); timer.start("tokenlist-1d"); - // Tokens are centered on the image center point - float x = footprintBounds.x; - float y = footprintBounds.y; - - Rectangle2D origBounds = new Rectangle2D.Double(x, y, footprintBounds.width, footprintBounds.height); - Area tokenBounds = new Area(origBounds); if (token.hasFacing() && token.getShape() == Token.TokenShape.TOP_DOWN) { - double sx = footprintBounds.width / 2 + x - (token.getAnchor().x); - double sy = footprintBounds.height / 2 + y - (token.getAnchor().y); + double sx = footprintBounds.width / 2 + footprintBounds.x - (token.getAnchor().x); + double sy = footprintBounds.height / 2 + footprintBounds.y - (token.getAnchor().y); tokenBounds.transform( AffineTransform.getRotateInstance( Math.toRadians(-token.getFacing() - 90), sx, sy)); // facing - // defaults - // to - // down, - // or - // -90 - // degrees + // defaults to down, or -90 degrees } timer.stop("tokenlist-1d"); + timer.start("tokenlist-1e"); try { @@ -1586,9 +1491,6 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure timer.stop("tokenlist-1e"); } - // Add the token to our visible set. - tempVisTokens.add(token.getId()); - // Previous path timer.start("renderTokens:ShowPath"); if (zoneRenderer.getShowPathList().contains(token) && token.getLastPath() != null) { @@ -1596,103 +1498,11 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure } timer.stop("renderTokens:ShowPath"); - timer.start("tokenlist-5"); - - // handle flipping - image.setFlip(token.isFlippedX(), token.isFlippedY()); - timer.stop("tokenlist-5"); - - image.setOriginCenter(); - - timer.start("tokenlist-5a"); - if (token.isFlippedIso()) { - var assetId = token.getImageAssetId(); - if (!isoSprites.containsKey(assetId)) { - var workImage = IsometricGrid.isoImage(ImageManager.getImage(assetId)); - try { - var bytes = ImageUtil.imageToBytes(workImage, "png"); - var pix = new Pixmap(bytes, 0, bytes.length); - image = new Sprite(new Texture(pix)); - pix.dispose(); - } catch (Exception e) { - } - isoSprites.put(assetId, image); - } else { - image = isoSprites.get(assetId); - } - token.setHeight((int) image.getHeight()); - token.setWidth((int) image.getWidth()); - footprintBounds = token.getBounds(zone); - } - timer.stop("tokenlist-5a"); - - timer.start("tokenlist-6"); - // Position - // For Isometric Grid we alter the height offset - float iso_ho = 0; - java.awt.Dimension imgSize = new java.awt.Dimension((int) image.getWidth(), (int) image.getHeight()); - if (token.getShape() == Token.TokenShape.FIGURE) { - float th = token.getHeight() * (float) footprintBounds.width / token.getWidth(); - iso_ho = footprintBounds.height - th; - footprintBounds = - new java.awt.Rectangle( - footprintBounds.x, - footprintBounds.y - (int) iso_ho, - footprintBounds.width, - (int) th); - } - SwingUtil.constrainTo(imgSize, footprintBounds.width, footprintBounds.height); - - int offsetx = 0; - int offsety = 0; - if (token.isSnapToScale()) { - offsetx = - (int) - (imgSize.width < footprintBounds.width - ? (footprintBounds.width - imgSize.width) / 2 - : 0); - offsety = - (int) - (imgSize.height < footprintBounds.height - ? (footprintBounds.height - imgSize.height) / 2 - : 0); - - - } - float tx = x + offsetx; - float ty = y + offsety + iso_ho; - - // Snap - var scaleX = 1f; - var scaleY = 1f; - if (token.isSnapToScale()) { - scaleX = imgSize.width / image.getWidth(); - scaleY = imgSize.height / image.getHeight(); - } else { - if (token.getShape() == Token.TokenShape.FIGURE) { - scaleX = footprintBounds.width / image.getHeight(); - scaleY = footprintBounds.width / image.getWidth(); - } else { - scaleX = footprintBounds.width / image.getWidth(); - scaleY = footprintBounds.height / image.getHeight(); - } - } - image.setSize(scaleX * image.getWidth(), scaleY * image.getHeight()); - - image.setPosition(tx, -image.getHeight() - ty); - - image.setOriginCenter(); - - // Rotated - if (token.hasFacing() && token.getShape() == Token.TokenShape.TOP_DOWN) { - var originX = image.getWidth() / 2 - token.getAnchorX(); - var originY = image.getHeight() / 2 + token.getAnchorY(); - image.setOrigin(originX, originY); - image.setRotation(token.getFacing() + 90); - } - - timer.stop("tokenlist-6"); + // get token image sprite, using image table if present + var imageKey = token.getTokenImageAssetId(); + Sprite image = getSprite(imageKey); + prepareTokenSprite(image, token, footprintBounds); // Render Halo if (token.hasHalo()) { @@ -1766,8 +1576,8 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure arrow = getCircleFacingArrow(token.getFacing(), footprintBounds.width / 2); } - float fx = x + (float) origBounds.getWidth() / zoom / 2; - float fy = y + (float) origBounds.getHeight() / zoom / 2; + float fx = origBounds.x + origBounds.width / zoom / 2f; + float fy = origBounds.y + origBounds.height / zoom / 2f; tmpMatrix.idt(); @@ -1800,8 +1610,8 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure } arrowArea = new Area(arrow); - float cx = x + (float) origBounds.getWidth() / 2; - float cy = y + (float) origBounds.getHeight() / 2; + float cx = origBounds.x + origBounds.width / 2f; + float cy = origBounds.y + origBounds.height / 2f; tmpMatrix.idt(); tmpMatrix.translate(cx, -cy, 0); @@ -1821,14 +1631,14 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure case SQUARE: if (zone.getGrid().isIsometric()) { arrow = getFigureFacingArrow(token.getFacing(), footprintBounds.width / 2); - cx = x + (float) origBounds.getWidth() / 2; - cy = y + (float) origBounds.getHeight() / 2; + cx = origBounds.x + origBounds.width / 2f; + cy = origBounds.y + origBounds.height / 2f; } else { int facing = token.getFacing(); arrow = getSquareFacingArrow(facing, footprintBounds.width / 2); - cx = x + (float) origBounds.getWidth() / 2; - cy = y + (float) origBounds.getHeight() / 2; + cx = origBounds.x + origBounds.width / 2f; + cy = origBounds.y + origBounds.height / 2f; // Find the edge of the image double xp = origBounds.getWidth() / 2; @@ -1882,7 +1692,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure || !overlay.showPlayer(token, MapTool.getPlayer())) { continue; } - renderTokenOverlay(overlay, token, origBounds, stateValue); + renderTokenOverlay(overlay, token, stateValue); } timer.stop("tokenlist-9"); @@ -1896,7 +1706,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure || !overlay.showPlayer(token, MapTool.getPlayer())) { continue; } - renderTokenOverlay(overlay, token, origBounds, barValue); + renderTokenOverlay(overlay, token, barValue); } // endfor timer.stop("tokenlist-10"); @@ -1969,7 +1779,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure showCurrentTokenLabel = false; } if (showCurrentTokenLabel) { - itemRenderList.add(new LabelRenderer(token, isGMView)); + itemRenderList.add(new TokenLabelRenderer(token, isGMView)); } timer.stop("tokenlist-12"); } @@ -1995,6 +1805,111 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure timer.stop("tokenlist-13"); } + private void prepareTokenSprite(Sprite image, Token token, java.awt.Rectangle footprintBounds) { + image.setRotation(0); + + // Tokens are centered on the image center point + float x = footprintBounds.x; + float y = footprintBounds.y; + + timer.start("tokenlist-5"); + + // handle flipping + image.setFlip(token.isFlippedX(), token.isFlippedY()); + timer.stop("tokenlist-5"); + + image.setOriginCenter(); + + timer.start("tokenlist-5a"); + if (token.isFlippedIso()) { + var assetId = token.getImageAssetId(); + if (!isoSprites.containsKey(assetId)) { + var workImage = IsometricGrid.isoImage(ImageManager.getImage(assetId)); + try { + var bytes = ImageUtil.imageToBytes(workImage, "png"); + var pix = new Pixmap(bytes, 0, bytes.length); + image = new Sprite(new Texture(pix)); + pix.dispose(); + } catch (Exception e) { + } + isoSprites.put(assetId, image); + } else { + image = isoSprites.get(assetId); + } + token.setHeight((int) image.getHeight()); + token.setWidth((int) image.getWidth()); + footprintBounds = token.getBounds(zone); + } + timer.stop("tokenlist-5a"); + + timer.start("tokenlist-6"); + // Position + // For Isometric Grid we alter the height offset + float iso_ho = 0; + java.awt.Dimension imgSize = new java.awt.Dimension((int) image.getWidth(), (int) image.getHeight()); + if (token.getShape() == Token.TokenShape.FIGURE) { + float th = token.getHeight() * (float) footprintBounds.width / token.getWidth(); + iso_ho = footprintBounds.height - th; + footprintBounds = + new java.awt.Rectangle( + footprintBounds.x, + footprintBounds.y - (int) iso_ho, + footprintBounds.width, + (int) th); + } + SwingUtil.constrainTo(imgSize, footprintBounds.width, footprintBounds.height); + + int offsetx = 0; + int offsety = 0; + if (token.isSnapToScale()) { + offsetx = + (int) + (imgSize.width < footprintBounds.width + ? (footprintBounds.width - imgSize.width) / 2 + : 0); + offsety = + (int) + (imgSize.height < footprintBounds.height + ? (footprintBounds.height - imgSize.height) / 2 + : 0); + + + } + float tx = x + offsetx; + float ty = y + offsety + iso_ho; + + // Snap + var scaleX = 1f; + var scaleY = 1f; + if (token.isSnapToScale()) { + scaleX = imgSize.width / image.getWidth(); + scaleY = imgSize.height / image.getHeight(); + } else { + if (token.getShape() == Token.TokenShape.FIGURE) { + scaleX = footprintBounds.width / image.getHeight(); + scaleY = footprintBounds.width / image.getWidth(); + } else { + scaleX = footprintBounds.width / image.getWidth(); + scaleY = footprintBounds.height / image.getHeight(); + } + } + image.setSize(scaleX * image.getWidth(), scaleY * image.getHeight()); + + image.setPosition(tx, -image.getHeight() - ty); + + image.setOriginCenter(); + + // Rotated + if (token.hasFacing() && token.getShape() == Token.TokenShape.TOP_DOWN) { + var originX = image.getWidth() / 2 - token.getAnchorX(); + var originY = image.getHeight() / 2 + token.getAnchorY(); + image.setOrigin(originX, originY); + image.setRotation(token.getFacing() + 90); + } + + timer.stop("tokenlist-6"); + } + private Sprite getSprite(MD5Key key) { if (key == null) return null; @@ -2096,15 +2011,14 @@ private void renderImageBorderAround(ImageBorder border, Rectangle bounds) { tmpTile.draw(batch, x + width - rightMargin, y + topMargin, right.getRegionWidth(), height - topMargin - bottomMargin); } - private void renderTokenOverlay(AbstractTokenOverlay overlay, Token token, Rectangle2D bounds, Object value) { - if(overlay instanceof BarTokenOverlay) - renderTokenOverlay((BarTokenOverlay) overlay, token, bounds, value); + private void renderTokenOverlay(AbstractTokenOverlay overlay, Token token, Object value) { + if (overlay instanceof BarTokenOverlay) + renderTokenOverlay((BarTokenOverlay) overlay, token, value); else if (overlay instanceof BooleanTokenOverlay) renderTokenOverlay((BooleanTokenOverlay) overlay, token, value); } - private void renderTokenOverlay(BarTokenOverlay overlay, Token token, Rectangle2D bounds, Object value) - { + private void renderTokenOverlay(BarTokenOverlay overlay, Token token, Object value) { if (value == null) return; double val = 0; if (value instanceof Number) { @@ -2142,7 +2056,7 @@ private void renderTokenOverlay(MultipleImageBarTokenOverlay overlay, Token toke var image = getSprite(overlay.getAssetIds()[incr]); Dimension d = bounds.getSize(); - Dimension size = new Dimension((int)image.getWidth(), (int)image.getHeight()); + Dimension size = new Dimension((int) image.getWidth(), (int) image.getHeight()); SwingUtil.constrainTo(size, d.width, d.height); // Find the position of the image according to the size and side where they are placed @@ -2161,7 +2075,7 @@ private void renderTokenOverlay(MultipleImageBarTokenOverlay overlay, Token toke image.setPosition(x, y); image.setSize(size.width, size.height); - image.draw(batch, overlay.getOpacity()/100f); + image.draw(batch, overlay.getOpacity() / 100f); } private void renderTokenOverlay(SingleImageBarTokenOverlay overlay, Token token, double barValue) { @@ -2173,7 +2087,7 @@ private void renderTokenOverlay(SingleImageBarTokenOverlay overlay, Token token, var image = getSprite(overlay.getAssetId()); Dimension d = bounds.getSize(); - Dimension size = new Dimension((int)image.getWidth(), (int)image.getHeight()); + Dimension size = new Dimension((int) image.getWidth(), (int) image.getHeight()); SwingUtil.constrainTo(size, d.width, d.height); var side = overlay.getSide(); @@ -2193,12 +2107,12 @@ private void renderTokenOverlay(SingleImageBarTokenOverlay overlay, Token token, int width = (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) - ? overlay.calcBarSize((int)image.getWidth(), barValue) - : (int)image.getWidth(); + ? overlay.calcBarSize((int) image.getWidth(), barValue) + : (int) image.getWidth(); int height = (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) - ? overlay.calcBarSize((int)image.getHeight(), barValue) - : (int)image.getHeight(); + ? overlay.calcBarSize((int) image.getHeight(), barValue) + : (int) image.getHeight(); int screenWidth = (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) @@ -2217,15 +2131,15 @@ private void renderTokenOverlay(SingleImageBarTokenOverlay overlay, Token token, var u2 = image.getU2(); var v2 = image.getV2(); - var wfactor = screenWidth * 1.0f/size.width; + var wfactor = screenWidth * 1.0f / size.width; var uDiff = (u2 - u) * wfactor; image.setU(u2 - uDiff); - var vfactor = screenHeight * 1.0f/size.height; + var vfactor = screenHeight * 1.0f / size.height; var vDiff = (v2 - v) * vfactor; image.setV(v2 - vDiff); - image.draw(batch, overlay.getOpacity()/100f); + image.draw(batch, overlay.getOpacity() / 100f); image.setU(u); image.setV(v); @@ -2265,7 +2179,7 @@ private void renderTokenOverlay(DrawnBarTokenOverlay overlay, Token token, doubl } var barColor = overlay.getBarColor(); - tmpColor.set(barColor.getRed()/255f, barColor.getGreen()/255f, barColor.getBlue()/255f, barColor.getAlpha()/255f); + tmpColor.set(barColor.getRed() / 255f, barColor.getGreen() / 255f, barColor.getBlue() / 255f, barColor.getAlpha() / 255f); drawer.filledRectangle(x, y, width, height, tmpColor); } @@ -2296,7 +2210,7 @@ private void renderTokenOverlay(TwoToneBarTokenOverlay overlay, Token token, dou } var color = overlay.getBgColor(); - tmpColor.set(color.getRed()/255f, color.getGreen()/255f, color.getBlue()/255f, color.getAlpha()/255f); + tmpColor.set(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f); drawer.filledRectangle(x, y, width, height, tmpColor); // Draw the bar @@ -2312,7 +2226,7 @@ private void renderTokenOverlay(TwoToneBarTokenOverlay overlay, Token token, dou } color = overlay.getBarColor(); - tmpColor.set(color.getRed()/255f, color.getGreen()/255f, color.getBlue()/255f, color.getAlpha()/255f); + tmpColor.set(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f); drawer.filledRectangle(x, y, width, height, tmpColor); } @@ -2327,7 +2241,7 @@ private void renderTokenOverlay(TwoImageBarTokenOverlay overlay, Token token, do Dimension d = bounds.getSize(); - Dimension size = new Dimension((int)topImage.getWidth(), (int)topImage.getHeight()); + Dimension size = new Dimension((int) topImage.getWidth(), (int) topImage.getHeight()); SwingUtil.constrainTo(size, d.width, d.height); var side = overlay.getSide(); @@ -2347,11 +2261,11 @@ private void renderTokenOverlay(TwoImageBarTokenOverlay overlay, Token token, do var width = (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) - ? overlay.calcBarSize((int)topImage.getWidth(), barValue) + ? overlay.calcBarSize((int) topImage.getWidth(), barValue) : topImage.getWidth(); var height = (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) - ? overlay.calcBarSize((int)topImage.getHeight(), barValue) + ? overlay.calcBarSize((int) topImage.getHeight(), barValue) : topImage.getHeight(); var screenWidth = @@ -2365,17 +2279,17 @@ private void renderTokenOverlay(TwoImageBarTokenOverlay overlay, Token token, do bottomImage.setPosition(x, y); bottomImage.setSize(size.width, size.height); - bottomImage.draw(batch, overlay.getOpacity()/100f); + bottomImage.draw(batch, overlay.getOpacity() / 100f); var u = topImage.getU(); var v = topImage.getV(); var u2 = topImage.getU2(); var v2 = topImage.getV2(); - var wFactor = screenWidth * 1.0f/size.width; + var wFactor = screenWidth * 1.0f / size.width; var uDiff = (u2 - u) * wFactor; - var vFactor = screenHeight * 1.0f/size.height; + var vFactor = screenHeight * 1.0f / size.height; var vDiff = (v2 - v) * vFactor; topImage.setPosition(x, y); @@ -2389,7 +2303,7 @@ private void renderTokenOverlay(TwoImageBarTokenOverlay overlay, Token token, do topImage.setU2(u + uDiff); topImage.setV2(v + vDiff); } - topImage.draw(batch, overlay.getOpacity()/100f); + topImage.draw(batch, overlay.getOpacity() / 100f); topImage.setU(u); topImage.setV(v); @@ -2448,14 +2362,14 @@ private void renderTokenOverlay(ImageTokenOverlay overlay, Token token) { var image = getSprite(overlay.getAssetId()); - Dimension size = new Dimension((int)image.getWidth(), (int)image.getHeight()); + Dimension size = new Dimension((int) image.getWidth(), (int) image.getHeight()); SwingUtil.constrainTo(size, d.width, d.height); // Paint it at the right location int width = size.width; int height = size.height; - if(overlay instanceof CornerImageTokenOverlay) { + if (overlay instanceof CornerImageTokenOverlay) { x += iBounds.x + (d.width - width) / 2; y -= iBounds.y + (d.height - height) / 2 + iBounds.height; } else { @@ -2465,7 +2379,7 @@ private void renderTokenOverlay(ImageTokenOverlay overlay, Token token) { image.setPosition(x, y); image.setSize(size.width, size.height); - image.draw(batch, overlay.getOpacity()/100f); + image.draw(batch, overlay.getOpacity() / 100f); } private void renderTokenOverlay(XTokenOverlay overlay, Token token) { @@ -3216,7 +3130,8 @@ public void modelChanged(ModelChangeEvent event) { // for now quick and dirty disposeZoneResources(); initializeZoneResources(currentZone); - */ } + */ + } public void setScale(Scale scale) { offsetX = scale.getOffsetX() * -1; @@ -3269,10 +3184,38 @@ private interface ItemRenderer { } private class LabelRenderer implements ItemRenderer { + private float x; + private float y; + private String text; + + public LabelRenderer(String text, float x, float y) { + this.x = x; + this.y = y; + this.text = text; + } + + @Override + public void render() { + tmpWorldCoord.x = x; + tmpWorldCoord.y = y; + tmpWorldCoord.z = 0; + tmpScreenCoord = cam.project(tmpWorldCoord); + + drawBoxedString( + text, + tmpScreenCoord.x, + tmpScreenCoord.y, + SwingUtilities.CENTER, + grayLabel, + Color.BLACK); + } + } + + private class TokenLabelRenderer implements ItemRenderer { private final boolean isGMView; private Token token; - public LabelRenderer(Token token, boolean isGMView) { + public TokenLabelRenderer(Token token, boolean isGMView) { this.token = token; this.isGMView = isGMView; } diff --git a/src/main/resources/net/rptools/maptool/client/maptool.atlas b/src/main/resources/net/rptools/maptool/client/maptool.atlas index f795847113..df0a1ccb08 100644 --- a/src/main/resources/net/rptools/maptool/client/maptool.atlas +++ b/src/main/resources/net/rptools/maptool/client/maptool.atlas @@ -1,12 +1,19 @@ maptool.png -size: 512, 256 +size: 512, 512 format: RGBA8888 filter: Nearest, Nearest repeat: none +block_move + rotate: false + xy: 2, 254 + size: 256, 256 + orig: 256, 256 + offset: 0, 0 + index: -1 blueLabelbox rotate: false - xy: 236, 159 + xy: 121, 185 size: 129, 21 split: 10, 10, 10, 10 pad: 10, 10, 10, 10 @@ -15,574 +22,574 @@ blueLabelbox index: -1 border/blue/bl rotate: false - xy: 344, 134 + xy: 383, 369 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/blue/bottom rotate: false - xy: 367, 161 + xy: 2, 2 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/blue/br rotate: false - xy: 344, 139 + xy: 452, 387 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/blue/right rotate: false - xy: 283, 80 + xy: 480, 463 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/blue/left rotate: false - xy: 283, 80 + xy: 480, 463 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/blue/tl rotate: false - xy: 462, 170 + xy: 284, 308 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/blue/top rotate: false - xy: 455, 235 + xy: 234, 144 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/blue/tr rotate: false - xy: 462, 175 + xy: 329, 340 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/fowtools/bl rotate: false - xy: 68, 15 + xy: 252, 192 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/fowtools/bottom rotate: false - xy: 455, 240 + xy: 329, 374 size: 52, 6 orig: 52, 6 offset: 0, 0 index: -1 border/fowtools/br rotate: false - xy: 476, 200 + xy: 284, 313 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/fowtools/left rotate: false - xy: 237, 75 + xy: 121, 88 size: 6, 52 orig: 6, 52 offset: 0, 0 index: -1 border/fowtools/right rotate: false - xy: 245, 75 + xy: 260, 214 size: 6, 52 orig: 6, 52 offset: 0, 0 index: -1 border/fowtools/tl rotate: false - xy: 498, 222 + xy: 485, 504 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/fowtools/top rotate: false - xy: 367, 176 + xy: 234, 149 size: 52, 6 orig: 52, 6 offset: 0, 0 index: -1 border/fowtools/tr rotate: false - xy: 76, 15 + xy: 456, 451 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/gray/bl rotate: false - xy: 344, 144 + xy: 383, 374 size: 5, 6 orig: 5, 6 offset: 0, 0 index: -1 border/gray/bottom rotate: false - xy: 2, 2 + xy: 121, 149 size: 111, 6 orig: 111, 6 offset: 0, 0 index: -1 border/gray/br rotate: false - xy: 435, 176 + xy: 288, 149 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/gray/left rotate: false - xy: 455, 29 + xy: 114, 53 size: 5, 199 orig: 5, 199 offset: 0, 0 index: -1 border/gray/right rotate: false - xy: 447, 27 + xy: 106, 53 size: 6, 199 orig: 6, 199 offset: 0, 0 index: -1 border/gray/tl rotate: false - xy: 229, 65 + xy: 321, 321 size: 5, 5 orig: 5, 5 offset: 0, 0 index: -1 border/gray/top rotate: false - xy: 236, 152 + xy: 121, 142 size: 111, 5 orig: 111, 5 offset: 0, 0 index: -1 border/gray/tr rotate: false - xy: 349, 152 + xy: 252, 185 size: 6, 5 orig: 6, 5 offset: 0, 0 index: -1 border/gray2/bl rotate: false - xy: 83, 10 + xy: 96, 69 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/gray2/bottom rotate: false - xy: 455, 230 + xy: 329, 364 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/gray2/br rotate: false - xy: 476, 190 + xy: 292, 316 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/gray2/left rotate: false - xy: 258, 75 + xy: 452, 392 size: 3, 52 orig: 3, 52 offset: 0, 0 index: -1 border/gray2/right rotate: false - xy: 253, 75 + xy: 268, 214 size: 3, 52 orig: 3, 52 offset: 0, 0 index: -1 border/gray2/tl rotate: false - xy: 68, 10 + xy: 456, 446 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/gray2/top rotate: false - xy: 236, 134 + xy: 2, 7 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/gray2/tr rotate: false - xy: 351, 147 + xy: 260, 201 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/green/bl rotate: false - xy: 429, 165 + xy: 70, 25 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/green/bottom rotate: false - xy: 236, 129 + xy: 329, 359 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/green/br rotate: false - xy: 78, 10 + xy: 82, 55 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/green/left rotate: false - xy: 268, 80 + xy: 274, 272 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/green/right rotate: false - xy: 268, 80 + xy: 274, 272 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/green/tl rotate: false - xy: 263, 75 + xy: 101, 69 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/green/top rotate: false - xy: 290, 142 + xy: 129, 132 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/green/tr rotate: false - xy: 367, 156 + xy: 493, 507 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/highlight/bl rotate: false - xy: 462, 180 + xy: 129, 114 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/highlight/bottom rotate: false - xy: 236, 144 + xy: 390, 384 size: 52, 6 orig: 52, 6 offset: 0, 0 index: -1 border/highlight/br rotate: false - xy: 476, 208 + xy: 444, 384 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/highlight/left rotate: false - xy: 229, 72 + xy: 252, 200 size: 6, 52 orig: 6, 52 offset: 0, 0 index: -1 border/highlight/right rotate: false - xy: 96, 22 + xy: 321, 328 size: 6, 52 orig: 6, 52 offset: 0, 0 index: -1 border/highlight/tl rotate: false - xy: 490, 222 + xy: 260, 206 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/highlight/top rotate: false - xy: 455, 248 + xy: 2, 22 size: 52, 6 orig: 52, 6 offset: 0, 0 index: -1 border/highlight/tr rotate: false - xy: 421, 162 + xy: 121, 80 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 border/purple/bl rotate: false - xy: 495, 217 + xy: 464, 454 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/purple/bottom rotate: false - xy: 236, 139 + xy: 329, 369 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/purple/br rotate: false - xy: 470, 183 + xy: 121, 75 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/purple/left rotate: false - xy: 263, 80 + xy: 470, 463 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/purple/right rotate: false - xy: 263, 80 + xy: 470, 463 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/purple/tl rotate: false - xy: 84, 18 + xy: 268, 209 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/purple/top rotate: false - xy: 367, 171 + xy: 2, 17 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/purple/tr rotate: false - xy: 484, 211 + xy: 197, 137 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/red/bl rotate: false - xy: 73, 10 + xy: 390, 379 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/red/bottom rotate: false - xy: 290, 132 + xy: 129, 122 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/red/br rotate: false - xy: 268, 75 + xy: 129, 109 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/red/left rotate: false - xy: 273, 80 + xy: 475, 463 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/red/right rotate: false - xy: 273, 80 + xy: 475, 463 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/red/tl rotate: false - xy: 362, 154 + xy: 485, 499 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/red/top rotate: false - xy: 290, 147 + xy: 129, 137 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/red/tr rotate: false - xy: 476, 195 + xy: 288, 144 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/shadow/bl rotate: false - xy: 462, 202 + xy: 56, 2 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 border/shadow/bottom rotate: false - xy: 236, 242 + xy: 121, 171 size: 217, 12 orig: 217, 12 offset: 0, 0 index: -1 border/shadow/br rotate: false - xy: 462, 188 + xy: 329, 345 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 border/shadow/left rotate: false - xy: 68, 23 + xy: 456, 459 size: 12, 51 orig: 12, 51 offset: 0, 0 index: -1 border/shadow/right rotate: false - xy: 82, 23 + xy: 260, 268 size: 12, 51 orig: 12, 51 offset: 0, 0 index: -1 border/shadow/tl rotate: false - xy: 421, 170 + xy: 82, 60 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 border/shadow/top rotate: false - xy: 236, 228 + xy: 121, 157 size: 217, 12 orig: 217, 12 offset: 0, 0 index: -1 border/shadow/tr rotate: false - xy: 476, 216 + xy: 183, 128 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 border/yellow/bl rotate: false - xy: 484, 206 + xy: 137, 117 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/yellow/bottom rotate: false - xy: 290, 137 + xy: 129, 127 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/yellow/br rotate: false - xy: 490, 217 + xy: 343, 354 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/yellow/left rotate: false - xy: 278, 80 + xy: 279, 272 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/yellow/right rotate: false - xy: 278, 80 + xy: 279, 272 size: 3, 47 orig: 3, 47 offset: 0, 0 index: -1 border/yellow/tl rotate: false - xy: 357, 154 + xy: 296, 152 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 border/yellow/top rotate: false - xy: 367, 166 + xy: 2, 12 size: 52, 3 orig: 52, 3 offset: 0, 0 index: -1 border/yellow/tr rotate: false - xy: 435, 171 + xy: 183, 123 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 broken rotate: false - xy: 106, 126 + xy: 260, 382 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 darkGreyLabelbox rotate: false - xy: 236, 205 + xy: 121, 231 size: 129, 21 split: 10, 10, 10, 10 pad: 10, 10, 10, 10 @@ -591,7 +598,7 @@ darkGreyLabelbox index: -1 grayLabelbox rotate: false - xy: 236, 182 + xy: 121, 208 size: 129, 21 split: 10, 10, 10, 10 pad: 10, 10, 10, 10 @@ -600,42 +607,42 @@ grayLabelbox index: -1 hexBorder rotate: false - xy: 106, 72 + xy: 390, 392 size: 60, 52 orig: 60, 52 offset: 0, 0 index: -1 isoBorder rotate: false - xy: 367, 184 + xy: 2, 30 size: 78, 42 orig: 78, 42 offset: 0, 0 index: -1 redDot rotate: false - xy: 2, 10 + xy: 390, 446 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 stack rotate: false - xy: 462, 216 + xy: 56, 16 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 unknown rotate: false - xy: 2, 76 + xy: 2, 74 size: 102, 178 orig: 102, 178 offset: 0, 0 index: -1 whiteBorder rotate: false - xy: 168, 65 + xy: 260, 321 size: 59, 59 orig: 59, 59 offset: 0, 0 diff --git a/src/main/resources/net/rptools/maptool/client/maptool.png b/src/main/resources/net/rptools/maptool/client/maptool.png index d0f46469fe49997d4e4a2fa60fa8915ad743f191..c06d080a6fd5fb98b57194115b196c4c3d7ef4ce 100644 GIT binary patch literal 111717 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 z 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%0AW+Z<6mNX#G3X4U^m1Oj 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 From 024b7525dd2d438c1bec56bcd668eb6ec005301d Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Wed, 5 May 2021 21:48:42 +0200 Subject: [PATCH 044/139] add big instanceof if-else for rendering of drawables --- .../maptool/client/ui/zone/GdxRenderer.java | 99 +++++++++++++++++-- 1 file changed, 93 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index bb45a5a7ab..09e5f223b7 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -39,10 +39,7 @@ import net.rptools.maptool.model.Label; import net.rptools.maptool.model.Path; import net.rptools.maptool.model.*; -import net.rptools.maptool.model.drawing.DrawableColorPaint; -import net.rptools.maptool.model.drawing.DrawablePaint; -import net.rptools.maptool.model.drawing.DrawableTexturePaint; -import net.rptools.maptool.model.drawing.DrawnElement; +import net.rptools.maptool.model.drawing.*; import net.rptools.maptool.util.FunctionUtil; import net.rptools.maptool.util.GraphicsUtil; import net.rptools.maptool.util.ImageManager; @@ -56,7 +53,6 @@ import javax.swing.*; import java.awt.*; import java.awt.geom.*; -import java.awt.image.BufferedImage; import java.text.NumberFormat; import java.util.List; import java.util.*; @@ -1335,7 +1331,98 @@ private FloatArray pathToVertices(GeneralPath path) { } private void renderDrawableOverlay(PlayerView view, List drawables) { - // TODO: implement + for(var drawable: drawables) + renderDrawable(drawable); + } + + private void renderDrawable(DrawnElement element) { + var pen = element.getPen(); + var drawable = element.getDrawable(); + + if(drawable instanceof ShapeDrawable) + render((ShapeDrawable)drawable, pen); + else if(drawable instanceof LineSegment) + render((LineSegment)drawable, pen); + else if(drawable instanceof DrawablesGroup) + render((DrawablesGroup)drawable, pen); + else if(drawable instanceof Cross) + render((Cross)drawable, pen); + else if(drawable instanceof Oval) + render((Oval)drawable, pen); + else if(drawable instanceof net.rptools.maptool.model.drawing.Rectangle) + render((net.rptools.maptool.model.drawing.Rectangle)drawable, pen); + else if(drawable instanceof RadiusCellTemplate) + render((RadiusCellTemplate)drawable, pen); + else if(drawable instanceof LineCellTemplate) + render((LineCellTemplate)drawable, pen); + else if(drawable instanceof BlastTemplate) + render((BlastTemplate)drawable, pen); + else if(drawable instanceof ConeTemplate) + render((ConeTemplate)drawable, pen); + else if(drawable instanceof BurstTemplate) + render((BurstTemplate)drawable, pen); + else if(drawable instanceof RadiusTemplate) + render((RadiusTemplate)drawable, pen); + else if(drawable instanceof WallTemplate) + render((WallTemplate)drawable, pen); + else if(drawable instanceof LineTemplate) + render((LineTemplate)drawable, pen); + } + + private void render(ShapeDrawable drawable, Pen pen) { + //TODO: implement + } + + private void render(LineSegment drawable, Pen pen) { + //TODO: implement + } + + private void render(DrawablesGroup drawable, Pen pen) { + //TODO: implement + } + + private void render(Cross drawable, Pen pen) { + //TODO: implement + } + + private void render(Oval drawable, Pen pen) { + //TODO: implement + } + + private void render(net.rptools.maptool.model.drawing.Rectangle drawable, Pen pen) { + //TODO: implement + } + + private void render(LineCellTemplate drawable, Pen pen) { + //TODO: implement + } + + private void render(RadiusCellTemplate drawable, Pen pen) { + //TODO: implement + } + + private void render(BlastTemplate drawable, Pen pen) { + //TODO: implement + } + + private void render(ConeTemplate drawable, Pen pen) { + //TODO: implement + } + + private void render(BurstTemplate drawable, Pen pen) { + //TODO: implement + } + + private void render(RadiusTemplate drawable, Pen pen) { + //TODO: implement + } + + private void render(WallTemplate drawable, Pen pen) { + //TODO: implement + } + + private void render(LineTemplate drawable, Pen pen) { + //TODO: implement } public void drawString(String text, float centerX, float centerY, Color foreground) { From 3e5c0f7ed44905260dac09f114c9a606836faa4c Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sun, 16 May 2021 19:34:56 +0200 Subject: [PATCH 045/139] add drawing of templates and shapes --- .../maptool/client/ui/zone/GdxRenderer.java | 836 +++++++++++++++--- .../maptool/model/drawing/BurstTemplate.java | 3 + .../maptool/model/drawing/ConeTemplate.java | 2 +- .../model/drawing/LineCellTemplate.java | 2 +- .../maptool/model/drawing/LineTemplate.java | 4 +- .../maptool/model/drawing/WallTemplate.java | 2 +- 6 files changed, 718 insertions(+), 131 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 09e5f223b7..480d967ff6 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -52,10 +52,11 @@ import javax.swing.*; import java.awt.*; +import java.awt.Polygon; import java.awt.geom.*; import java.text.NumberFormat; -import java.util.List; import java.util.*; +import java.util.List; import static java.util.zip.Deflater.DEFAULT_COMPRESSION; @@ -114,7 +115,6 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private BitmapFont normalFont; private BitmapFont distanceFont; private float distanceFontScale = 0; - ; private GlyphLayout glyphLayout = new GlyphLayout(); private CodeTimer timer = new CodeTimer("GdxRenderer.renderZone"); private VfxManager vfxManager; @@ -129,6 +129,14 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private NinePatch darkGrayLabel; private Texture onePixel; private ShapeDrawer drawer; + private final LineTemplateDrawer lineTemplateDrawer = new LineTemplateDrawer(); + private final LineCellTemplateDrawer lineCellTemplateDrawer = new LineCellTemplateDrawer(); + private final RadiusTemplateDrawer radiusTemplateDrawer = new RadiusTemplateDrawer(); + private final BurstTemplateDrawer burstTemplateDrawer = new BurstTemplateDrawer(); + private final ConeTemplateDrawer coneTemplateDrawer = new ConeTemplateDrawer(); + private final BlastTemplateDrawer blastTemplateDrawer = new BlastTemplateDrawer(); + private final RadiusCellTemplateDrawer radiusCellTemplateDrawer = new RadiusCellTemplateDrawer(); + private final ShapeDrawableDrawer shapeDrawableDrawer = new ShapeDrawableDrawer(); //temorary objects. Stored here to avoid garbage collection; private Vector3 tmpWorldCoord = new Vector3(); @@ -136,6 +144,7 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private Color tmpColor = new Color(); private float[] floatsFromArea = new float[6]; private FloatArray tmpFloat = new FloatArray(); + private FloatArray tmpFloat1 = new FloatArray(); private Vector2 tmpVector = new Vector2(); private Vector2 tmpVectorOut = new Vector2(); private Vector2 tmpVector0 = new Vector2(); @@ -337,13 +346,13 @@ private void doRendering() { setProjectionMatrix(hudCam.combined); if (zoneRenderer.isLoading()) - drawBoxedString(zoneRenderer.getLoadingProgress(), width / 2, height / 2); + drawBoxedString(zoneRenderer.getLoadingProgress(), width / 2f, height / 2f); else if (MapTool.getCampaign().isBeingSerialized()) - drawBoxedString(" Please Wait ", width / 2, height / 2); + drawBoxedString(" Please Wait ", width / 2f, height / 2f); int noteVPos = 20; if (!zone.isVisible() && playerView.isGMView()) { - drawBoxedString("Map not visible to players", width / 2, height - noteVPos); + drawBoxedString("Map not visible to players", width / 2f, height - noteVPos); noteVPos += 20; } if (AppState.isShowAsPlayer()) { @@ -656,7 +665,7 @@ private void renderVisionOverlay(PlayerView view) { */ if (showVisionAndHalo) { drawer.setColor(Color.WHITE); - draw(combined); + drawArea(combined); renderHaloArea(combined); } } @@ -674,7 +683,7 @@ private void renderHaloArea(Area visible) { drawer.setColor(visionColor.getRed() / 255f, visionColor.getGreen() / 255f, visionColor.getBlue() / 255f, AppPreferences.getHaloOverlayOpacity() / 255f); - fill(visible); + fillArea(visible); } } @@ -754,7 +763,7 @@ private void renderFog(PlayerView view) { tempArea.add(new Area(exposedArea)); } if (combinedView) { - fill(combined); + fillArea(combined); renderFogArea(combined, visibleArea); renderFogOutline(); } else { @@ -762,7 +771,7 @@ private void renderFog(PlayerView view) { // use 'combined' instead in this block of code? tempArea.add(combined); - fill(tempArea); + fillArea(tempArea); renderFogArea(tempArea, visibleArea); renderFogOutline(); } @@ -773,7 +782,7 @@ private void renderFog(PlayerView view) { if (combined.isEmpty()) { combined = zone.getExposedArea(); } - fill(combined); + fillArea(combined); renderFogArea(combined, visibleArea); renderFogOutline(); } else { @@ -789,7 +798,7 @@ private void renderFog(PlayerView view) { exposedArea = meta.getExposedAreaHistory(); myCombined.add(new Area(exposedArea)); } - fill(myCombined); + fillArea(myCombined); renderFogArea(myCombined, visibleArea); renderFogOutline(); } @@ -823,19 +832,19 @@ private void renderFogArea(Area softFog, Area visibleArea) { drawer.setColor(0, 0, 0, AppPreferences.getFogOverlayOpacity() / 255.0f); // Fill in the exposed area - fill(softFog); + fillArea(softFog); //batch.setColor(Color.CLEAR); drawer.setColor(Color.CLEAR); - fill(visibleArea); + fillArea(visibleArea); } else { drawer.setColor(0, 0, 0, 80 / 255.0f); - fill(softFog); + fillArea(softFog); drawer.setColor(Color.WHITE); } } else { - fill(softFog); + fillArea(softFog); } } @@ -844,7 +853,7 @@ private void renderFogOutline() { return; drawer.setColor(Color.BLACK); - draw(visibleScreenArea); + drawArea(visibleScreenArea); } private void renderLabels(PlayerView view) { @@ -1105,7 +1114,7 @@ private void renderAuras(PlayerView view) { tmpColor.set(1, 1, 1, 0.59f); } drawer.setColor(tmpColor); - fill(light.getArea()); + fillArea(light.getArea()); } timer.stop("auras-4"); @@ -1146,7 +1155,7 @@ private void renderLights(PlayerView view) { } tmpColor.a = alpha; drawer.setColor(tmpColor); - fill(light.getArea()); + fillArea(light.getArea()); } timer.stop("lights-3"); @@ -1154,7 +1163,7 @@ private void renderLights(PlayerView view) { timer.start("lights-4"); for (Area brightArea : zoneRenderer.getZoneView().getBrightLights(view)) { drawer.setColor(Color.CLEAR); - fill(brightArea); + fillArea(brightArea); } timer.stop("lights-4"); //createScreenShot("light"); @@ -1331,8 +1340,8 @@ private FloatArray pathToVertices(GeneralPath path) { } private void renderDrawableOverlay(PlayerView view, List drawables) { - for(var drawable: drawables) - renderDrawable(drawable); + for(var drawable: drawables.toArray()) + renderDrawable((DrawnElement)drawable); } private void renderDrawable(DrawnElement element) { @@ -1340,89 +1349,24 @@ private void renderDrawable(DrawnElement element) { var drawable = element.getDrawable(); if(drawable instanceof ShapeDrawable) - render((ShapeDrawable)drawable, pen); - else if(drawable instanceof LineSegment) - render((LineSegment)drawable, pen); - else if(drawable instanceof DrawablesGroup) - render((DrawablesGroup)drawable, pen); - else if(drawable instanceof Cross) - render((Cross)drawable, pen); - else if(drawable instanceof Oval) - render((Oval)drawable, pen); - else if(drawable instanceof net.rptools.maptool.model.drawing.Rectangle) - render((net.rptools.maptool.model.drawing.Rectangle)drawable, pen); - else if(drawable instanceof RadiusCellTemplate) - render((RadiusCellTemplate)drawable, pen); - else if(drawable instanceof LineCellTemplate) - render((LineCellTemplate)drawable, pen); - else if(drawable instanceof BlastTemplate) - render((BlastTemplate)drawable, pen); + shapeDrawableDrawer.draw(drawable, pen); + else if(drawable instanceof DrawablesGroup) + for(var groupElement: ((DrawablesGroup)drawable).getDrawableList()) + renderDrawable(groupElement); + else if(drawable instanceof RadiusCellTemplate) + radiusCellTemplateDrawer.draw(drawable, pen); + else if(drawable instanceof LineCellTemplate) + lineCellTemplateDrawer.draw(drawable, pen); + else if(drawable instanceof BlastTemplate) + blastTemplateDrawer.draw(drawable, pen); else if(drawable instanceof ConeTemplate) - render((ConeTemplate)drawable, pen); + coneTemplateDrawer.draw(drawable, pen); else if(drawable instanceof BurstTemplate) - render((BurstTemplate)drawable, pen); - else if(drawable instanceof RadiusTemplate) - render((RadiusTemplate)drawable, pen); - else if(drawable instanceof WallTemplate) - render((WallTemplate)drawable, pen); - else if(drawable instanceof LineTemplate) - render((LineTemplate)drawable, pen); - } - - private void render(ShapeDrawable drawable, Pen pen) { - //TODO: implement - } - - private void render(LineSegment drawable, Pen pen) { - //TODO: implement - } - - private void render(DrawablesGroup drawable, Pen pen) { - //TODO: implement - } - - private void render(Cross drawable, Pen pen) { - //TODO: implement - } - - private void render(Oval drawable, Pen pen) { - //TODO: implement - } - - private void render(net.rptools.maptool.model.drawing.Rectangle drawable, Pen pen) { - //TODO: implement - } - - private void render(LineCellTemplate drawable, Pen pen) { - //TODO: implement - } - - private void render(RadiusCellTemplate drawable, Pen pen) { - //TODO: implement - } - - private void render(BlastTemplate drawable, Pen pen) { - //TODO: implement - } - - private void render(ConeTemplate drawable, Pen pen) { - //TODO: implement - } - - private void render(BurstTemplate drawable, Pen pen) { - //TODO: implement - } - - private void render(RadiusTemplate drawable, Pen pen) { - //TODO: implement - } - - private void render(WallTemplate drawable, Pen pen) { - //TODO: implement - } - - private void render(LineTemplate drawable, Pen pen) { - //TODO: implement + burstTemplateDrawer.draw(drawable, pen); + else if(drawable instanceof RadiusTemplate) + radiusTemplateDrawer.draw(drawable, pen); + else if(drawable instanceof LineTemplate) + lineTemplateDrawer.draw(drawable, pen); } public void drawString(String text, float centerX, float centerY, Color foreground) { @@ -1555,8 +1499,8 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure timer.start("tokenlist-1d"); if (token.hasFacing() && token.getShape() == Token.TokenShape.TOP_DOWN) { - double sx = footprintBounds.width / 2 + footprintBounds.x - (token.getAnchor().x); - double sy = footprintBounds.height / 2 + footprintBounds.y - (token.getAnchor().y); + double sx = footprintBounds.width / 2f + footprintBounds.x - (token.getAnchor().x); + double sy = footprintBounds.height / 2f + footprintBounds.y - (token.getAnchor().y); tokenBounds.transform( AffineTransform.getRotateInstance( Math.toRadians(-token.getFacing() - 90), sx, sy)); // facing @@ -1596,7 +1540,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure drawer.setDefaultLineWidth(AppPreferences.getHaloLineWidth()); Color.argb8888ToColor(tmpColor, token.getHaloColor().getRGB()); drawer.setColor(tmpColor); - draw(zone.getGrid().getTokenCellArea(tokenBounds)); + drawArea(zone.getGrid().getTokenCellArea(tokenBounds)); } // Calculate alpha Transparency from token and use opacity for indicating that token is moving @@ -1679,10 +1623,10 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure drawer.setColor(1, 1, 0, 0.5f); var arrowArea = new Area(arrow); - fill(arrowArea); + fillArea(arrowArea); drawer.setColor(Color.DARK_GRAY); - draw(arrowArea); + drawArea(arrowArea); break; @@ -1706,11 +1650,11 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure drawer.update(); drawer.setColor(Color.YELLOW); - fill(arrowArea); + fillArea(arrowArea); drawer.setColor(Color.DARK_GRAY); drawer.setDefaultLineWidth(1); - draw(arrowArea); + drawArea(arrowArea); tmpMatrix.idt(); batch.setTransformMatrix(tmpMatrix); drawer.update(); @@ -1754,9 +1698,9 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure drawer.update(); drawer.setColor(Color.YELLOW); - fill(arrowArea); + fillArea(arrowArea); drawer.setColor(Color.DARK_GRAY); - draw(arrowArea); + drawArea(arrowArea); batch.setTransformMatrix(tmpMatrix.idt()); drawer.update(); break; @@ -2500,7 +2444,7 @@ private void renderTokenOverlay(FlowColorDotTokenOverlay overlay, Token token) { tmpColor.set(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, overlay.getOpacity() / 100); drawer.setColor(tmpColor); Shape s = overlay.getShape(bounds, token); - fill(new Area(s)); + fillArea(new Area(s)); drawer.setColor(Color.WHITE); } @@ -2720,7 +2664,7 @@ private void paintClipped(Sprite image, Area bounds, Area clip) { tmpArea.reset(); tmpArea.add(bounds); tmpArea.subtract(clip); - fill(tmpArea); + fillArea(tmpArea); backBuffer.end(); @@ -3057,6 +3001,31 @@ private void initializeZoneResources(Zone newZone) { zone = newZone; } + private Texture paintToTexture(DrawablePaint paint) { + if (paint instanceof DrawableTexturePaint) { + var texturePaint = (DrawableTexturePaint) paint; + var image = texturePaint.getAsset().getImage(); + var pix = new Pixmap(image, 0, image.length); + var texture = new Texture(pix); + pix.dispose(); + return texture; + } + if (paint instanceof DrawableColorPaint) { + var colorPaint = (DrawableColorPaint) paint; + var colorValue = colorPaint.getColor(); + var color = new Color(); + Color.argb8888ToColor(color, colorValue); + var pix = new Pixmap(1, 1, Pixmap.Format.RGBA8888); + + pix.setColor(color); + pix.fill(); + var texture = new Texture(pix); + pix.dispose(); + return texture; + } + return null; + } + private Sprite paintToSprite(DrawablePaint paint) { if (paint instanceof DrawableTexturePaint) { var texturePaint = (DrawableTexturePaint) paint; @@ -3086,21 +3055,46 @@ private Sprite paintToSprite(DrawablePaint paint) { return null; } - private void fill(Area area) { + private void fillArea(Area area) { + if (area == null || area.isEmpty()) + return; + paintArea(area, true); } - private void draw(Area area) { + private void drawArea(Area area) { + if (area == null || area.isEmpty()) + return; + paintArea(area, false); } private void paintArea(Area area, boolean fill) { - if (area == null || area.isEmpty()) - return; + pathToFloatArray(area.getPathIterator(null)); + + if (fill) { + var lastX = tmpFloat.get(tmpFloat.size-2); + var lastY = tmpFloat.get(tmpFloat.size-1); + if(lastX != tmpFloat.get(0) && lastY != tmpFloat.get(1)) + tmpFloat.add(tmpFloat.get(0), tmpFloat.get(1)); + drawer.filledPolygon(tmpFloat.toArray()); + } else { + if(tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) + && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { + tmpFloat.pop(); + tmpFloat.pop(); + } + + drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.SMOOTH, false); + } + } + + + private void pathToFloatArray(PathIterator it) { tmpFloat.clear(); - for (var it = area.getPathIterator(null); !it.isDone(); it.next()) { + for (; !it.isDone(); it.next()) { int type = it.currentSegment(floatsFromArea); switch (type) { @@ -3111,14 +3105,8 @@ private void paintArea(Area area, boolean fill) { break; case PathIterator.SEG_CLOSE: // System.out.println("Close"); - tmpFloat.add(tmpFloat.get(0), tmpFloat.get(1)); - if (fill) { - drawer.filledPolygon(tmpFloat.toArray()); - } else { - drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.SMOOTH, true); - } - tmpFloat.clear(); - break; + + return; case PathIterator.SEG_LINETO: // System.out.println("Line to: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + ")"); tmpFloat.add(floatsFromArea[0], -floatsFromArea[1]); @@ -3364,4 +3352,600 @@ public void render() { } } } + + private abstract class AbstractDrawingDrawer { + public void draw(Drawable element, Pen pen) { + if(pen.getBackgroundPaint() instanceof DrawableColorPaint) { + var colorPaint = (DrawableColorPaint)pen.getBackgroundPaint(); + Color.argb8888ToColor(tmpColor, colorPaint.getColor()); + drawer.setColor(tmpColor); + } + drawBackground(element, pen); + + if(pen.getPaint() instanceof DrawableColorPaint) { + var colorPaint = (DrawableColorPaint)pen.getPaint(); + Color.argb8888ToColor(tmpColor, colorPaint.getColor()); + drawer.setColor(tmpColor); + } + var lineWidth = drawer.getDefaultLineWidth(); + drawer.setDefaultLineWidth(pen.getThickness()); + drawBorder(element, pen); + drawer.setDefaultLineWidth(lineWidth); + } + + protected abstract void drawBackground(Drawable element, Pen pen); + protected abstract void drawBorder(Drawable element, Pen pen); + } + + private abstract class AbstractTemplateDrawer extends AbstractDrawingDrawer { + @Override + protected void drawBackground(Drawable element, Pen pen) { + tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, AbstractTemplate.DEFAULT_BG_ALPHA); + drawer.setColor(tmpColor); + paint((AbstractTemplate)element, false, true); + } + + @Override + protected void drawBorder(Drawable element, Pen pen) { + paint((AbstractTemplate)element, true, false); + } + + protected void paint(AbstractTemplate template, boolean border, boolean area) { + var radius = template.getRadius(); + + if (radius == 0) return; + Zone zone = MapTool.getCampaign().getZone(template.getZoneId()); + if (zone == null) return; + + // Find the proper distance + int gridSize = zone.getGrid().getSize(); + for (int y = 0; y < radius; y++) { + for (int x = 0; x < radius; x++) { + + // Get the offset to the corner of the square + int xOff = x * gridSize; + int yOff = y * gridSize; + + // Template specific painting + if (border) paintBorder(template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); + if (area) paintArea(template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); + } // endfor + } // endfor + } + + protected void paintArea(AbstractTemplate template, int xOff, int yOff, int gridSize, AbstractTemplate.Quadrant q) { + var vertex = template.getVertex(); + int x = vertex.x + getXMult(q) * xOff + ((getXMult(q) - 1) / 2) * gridSize; + int y = vertex.y + getYMult(q) * yOff + ((getYMult(q) - 1) / 2) * gridSize; + drawer.filledRectangle(x, -y - gridSize, gridSize, gridSize); + } + + protected int getXMult(AbstractTemplate.Quadrant q) { + return ((q == AbstractTemplate.Quadrant.NORTH_WEST || q == AbstractTemplate.Quadrant.SOUTH_WEST) ? -1 : +1); + } + + protected int getYMult(AbstractTemplate.Quadrant q) { + return ((q == AbstractTemplate.Quadrant.NORTH_WEST || q == AbstractTemplate.Quadrant.NORTH_EAST) ? -1 : +1); + } + + protected void paintCloseVerticalBorder( + AbstractTemplate template, int xOff, int yOff, int gridSize, AbstractTemplate.Quadrant q) { + var vertex = template.getVertex(); + int x = vertex.x + getXMult(q) * xOff; + int y = vertex.y + getYMult(q) * yOff; + drawer.line(x, -y, x, -(y + getYMult(q) * gridSize)); + } + + protected void paintFarHorizontalBorder( + AbstractTemplate template, int xOff, int yOff, int gridSize, AbstractTemplate.Quadrant q) { + var vertex = template.getVertex(); + int x = vertex.x + getXMult(q) * xOff; + int y = vertex.y + getYMult(q) * yOff + getYMult(q) * gridSize; + drawer.line(x, -y, x + getXMult(q) * gridSize, -y); + } + + protected void paintFarVerticalBorder( + AbstractTemplate template, int xOff, int yOff, int gridSize, AbstractTemplate.Quadrant q) { + var vertex = template.getVertex(); + int x = vertex.x + getXMult(q) * xOff + getXMult(q) * gridSize; + int y = vertex.y + getYMult(q) * yOff; + drawer.line(x, -y, x, -(y + getYMult(q) * gridSize)); + } + + protected void paintCloseHorizontalBorder( + AbstractTemplate template, int xOff, int yOff, int gridSize, AbstractTemplate.Quadrant q) { + var vertex = template.getVertex(); + int x = vertex.x + getXMult(q) * xOff; + int y = vertex.y + getYMult(q) * yOff; + drawer.line(x, -y, x + getXMult(q) * gridSize, -y); + } + + protected abstract void paintArea(AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance); + + protected abstract void paintBorder(AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance); + } + + private class LineTemplateDrawer extends AbstractTemplateDrawer { + @Override + protected void paint(AbstractTemplate template, boolean border, boolean area) { + if (MapTool.getCampaign().getZone(template.getZoneId()) == null) { + return; + } + var lineTemplate = (LineTemplate)template; + + // Need to paint? We need a line and to translate the painting + if (lineTemplate.getPathVertex() == null) return; + if (template.getRadius() == 0) return; + if (lineTemplate.getPath() == null && lineTemplate.calcPath() == null) return; + + // Paint each element in the path + int gridSize = MapTool.getCampaign().getZone(template.getZoneId()).getGrid().getSize(); + ListIterator i = lineTemplate.getPath().listIterator(); + while (i.hasNext()) { + CellPoint p = i.next(); + int xOff = p.x * gridSize; + int yOff = p.y * gridSize; + int distance = template.getDistance(p.x, p.y); + + // Paint what is needed. + if (area) { + paintArea(template, p.x, p.y, xOff, yOff, gridSize, distance); + } // endif + if (border) { + paintBorder(template, p.x, p.y, xOff, yOff, gridSize, i.previousIndex()); + } // endif + } // endfor + } + @Override + protected void paintArea(AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + var lineTemplate = (LineTemplate)template; + paintArea(template, xOff, yOff, gridSize, lineTemplate.getQuadrant()); + } + + @Override + protected void paintBorder(AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int pElement) { + var lineTemplate = (LineTemplate)template; + + // Have to scan 3 points behind and ahead, since that is the maximum number of points + // that can be added to the path from any single intersection. + boolean[] noPaint = new boolean[4]; + var path = lineTemplate.getPath(); + for (int i = pElement - 3; i < pElement + 3; i++) { + if (i < 0 || i >= path.size() || i == pElement) continue; + CellPoint p = path.get(i); + + // Ignore diagonal cells and cells that are not adjacent + int dx = p.x - x; + int dy = p.y - y; + if (Math.abs(dx) == Math.abs(dy) || Math.abs(dx) > 1 || Math.abs(dy) > 1) continue; + + // Remove the border between the 2 points + noPaint[dx != 0 ? (dx < 0 ? 0 : 2) : (dy < 0 ? 3 : 1)] = true; + } // endif + + var quadrant = lineTemplate.getQuadrant(); + // Paint the borders as needed + if (!noPaint[0]) paintCloseVerticalBorder(template, xOff, yOff, gridSize, quadrant); + if (!noPaint[1]) paintFarHorizontalBorder(template, xOff, yOff, gridSize, quadrant); + if (!noPaint[2]) paintFarVerticalBorder(template, xOff, yOff, gridSize, quadrant); + if (!noPaint[3]) paintCloseHorizontalBorder(template, xOff, yOff, gridSize, quadrant); + } + } + + private class LineCellTemplateDrawer extends AbstractTemplateDrawer { + + @Override + protected void paintArea(AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + var lineCellTemplate = (LineCellTemplate)template; + paintArea(template, xOff, yOff, gridSize, lineCellTemplate.getQuadrant()); + } + + @Override + protected void paintBorder(AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int pElement) { + var lineCellTemplate = (LineCellTemplate)template; + // Have to scan 3 points behind and ahead, since that is the maximum number of points + // that can be added to the path from any single intersection. + boolean[] noPaint = new boolean[4]; + var path = lineCellTemplate.getPath(); + for (int i = pElement - 3; i < pElement + 3; i++) { + if (i < 0 || i >= path.size() || i == pElement) continue; + CellPoint p = path.get(i); + + // Ignore diagonal cells and cells that are not adjacent + int dx = p.x - x; + int dy = p.y - y; + if (Math.abs(dx) == Math.abs(dy) || Math.abs(dx) > 1 || Math.abs(dy) > 1) continue; + + // Remove the border between the 2 points + noPaint[dx != 0 ? (dx < 0 ? 0 : 2) : (dy < 0 ? 3 : 1)] = true; + } // endif + + var quadrant = lineCellTemplate.getQuadrant(); + // Paint the borders as needed + if (!noPaint[0]) paintCloseVerticalBorder(template, xOff, yOff, gridSize, quadrant); + if (!noPaint[1]) paintFarHorizontalBorder(template, xOff, yOff, gridSize, quadrant); + if (!noPaint[2]) paintFarVerticalBorder(template, xOff, yOff, gridSize, quadrant); + if (!noPaint[3]) paintCloseHorizontalBorder(template, xOff, yOff, gridSize, quadrant); + } + + @Override + protected void paint(AbstractTemplate template, boolean border, boolean area) { + if (MapTool.getCampaign().getZone(template.getZoneId()) == null) { + return; + } + var lineCellTemplate = (LineCellTemplate)template; + var path = lineCellTemplate.getPath(); + // Need to paint? We need a line and to translate the painting + if (lineCellTemplate.getPathVertex() == null) return; + if (lineCellTemplate.getRadius() == 0) return; + if (path == null && lineCellTemplate.calcPath() == null) return; + + var quadrant = lineCellTemplate.getQuadrant(); + + // Paint each element in the path + int gridSize = MapTool.getCampaign().getZone(lineCellTemplate.getZoneId()).getGrid().getSize(); + ListIterator i = path.listIterator(); + while (i.hasNext()) { + CellPoint p = i.next(); + int xOff = p.x * gridSize; + int yOff = p.y * gridSize; + int distance = template.getDistance(p.x, p.y); + + if (quadrant.equals(AbstractTemplate.Quadrant.NORTH_EAST.name())) { + yOff = yOff - gridSize; + } else if (quadrant.equals(AbstractTemplate.Quadrant.SOUTH_WEST.name())) { + xOff = xOff - gridSize; + } else if (quadrant.equals(AbstractTemplate.Quadrant.NORTH_WEST.name())) { + xOff = xOff - gridSize; + yOff = yOff - gridSize; + } + + // Paint what is needed. + if (area) { + paintArea(template, p.x, p.y, xOff, yOff, gridSize, distance); + } // endif + if (border) { + paintBorder(template, p.x, p.y, xOff, yOff, gridSize, i.previousIndex()); + } // endif + } // endfor + } + } + + private class RadiusTemplateDrawer extends AbstractTemplateDrawer { + @Override + protected void paintArea(AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + var radiusTemplate = (RadiusTemplate)template; + // Only squares w/in the radius + if (distance <= radiusTemplate.getRadius()) { + // Paint the squares + for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { + paintArea(template, xOff, yOff, gridSize, q); + } + } + } + + @Override + protected void paintBorder(AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + var radiusTemplate = (RadiusTemplate)template; + paintBorderAtRadius(template, x, y, xOff, yOff, gridSize, distance, radiusTemplate.getRadius()); + } + + private void paintBorderAtRadius(AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance, int radius) { + // At the border? + if (distance == radius) { + // Paint lines between vertical boundaries if needed + if (template.getDistance(x + 1, y) > radius) { + for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { + paintFarVerticalBorder(template, xOff, yOff, gridSize, q); + } + } + + // Paint lines between horizontal boundaries if needed + if (template.getDistance(x, y + 1) > radius) { + for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { + paintFarHorizontalBorder(template, xOff, yOff, gridSize, q); + } + } + } + } + } + + private class BurstTemplateDrawer extends AbstractDrawingDrawer { + + @Override + protected void drawBackground(Drawable element, Pen pen) { + var template = (BurstTemplate)element; + tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, AbstractTemplate.DEFAULT_BG_ALPHA); + drawer.setColor(tmpColor); + fillArea(template.getArea()); + } + + @Override + protected void drawBorder(Drawable element, Pen pen) { + var template = (BurstTemplate)element; + drawArea(template.getArea()); + drawArea(template.getVertexRenderer().getArea()); + } + } + + private class ConeTemplateDrawer extends RadiusTemplateDrawer { + @Override + protected void paintArea( + AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + var coneTemplate = (ConeTemplate)template; + + var direction = coneTemplate.getDirection(); + + // Drawing along the spines only? + if ((direction == AbstractTemplate.Direction.EAST || direction == AbstractTemplate.Direction.WEST) && y > x) return; + if ((direction == AbstractTemplate.Direction.NORTH || direction == AbstractTemplate.Direction.SOUTH) && x > y) return; + + // Only squares w/in the radius + if (distance > coneTemplate.getRadius()) { + return; + } + for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { + if (coneTemplate.withinQuadrant(q)) { + paintArea(template, xOff, yOff, gridSize, q); + } + } + } + + @Override + protected void paintBorder( + AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + var coneTemplate = (ConeTemplate)template; + paintBorderAtRadius(coneTemplate, x, y, xOff, yOff, gridSize, distance, coneTemplate.getRadius()); + paintEdges(coneTemplate, x, y, xOff, yOff, gridSize, distance); + } + + protected void paintEdges( + ConeTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + + // Handle the edges + int radius = template.getRadius(); + var direction = template.getDirection(); + if (direction.ordinal() % 2 == 0) { + if (x == 0) { + if (direction == AbstractTemplate.Direction.SOUTH_EAST || direction == AbstractTemplate.Direction.SOUTH_WEST) + paintCloseVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + if (direction == AbstractTemplate.Direction.NORTH_EAST || direction == AbstractTemplate.Direction.NORTH_WEST) + paintCloseVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + } // endif + if (y == 0) { + if (direction == AbstractTemplate.Direction.SOUTH_EAST || direction == AbstractTemplate.Direction.NORTH_EAST) + paintCloseHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + if (direction == AbstractTemplate.Direction.SOUTH_WEST || direction == AbstractTemplate.Direction.NORTH_WEST) + paintCloseHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } // endif + } else if (direction.ordinal() % 2 == 1 && x == y && distance <= radius) { + if (direction == AbstractTemplate.Direction.SOUTH) { + paintFarVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + paintFarVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + paintCloseHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + paintCloseHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + } // endif + if (direction == AbstractTemplate.Direction.NORTH) { + paintFarVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + paintFarVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + paintCloseHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + paintCloseHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } // endif + if (direction == AbstractTemplate.Direction.EAST) { + paintCloseVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + paintCloseVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + paintFarHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + paintFarHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + } // endif + if (direction == AbstractTemplate.Direction.WEST) { + paintCloseVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + paintCloseVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + paintFarHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + paintFarHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } // endif + } // endif + } + + protected void paintBorderAtRadius( + ConeTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance, int radius) { + // At the border? + if (distance == radius) { + var direction = template.getDirection(); + // Paint lines between vertical boundaries if needed + if (template.getDistance(x + 1, y) > radius) { + if (direction == AbstractTemplate.Direction.SOUTH_EAST + || (direction == AbstractTemplate.Direction.SOUTH && y >= x) + || (direction == AbstractTemplate.Direction.EAST && x >= y)) + paintFarVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + if (direction == AbstractTemplate.Direction.NORTH_EAST + || (direction == AbstractTemplate.Direction.NORTH && y >= x) + || (direction == AbstractTemplate.Direction.EAST && x >= y)) + paintFarVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + if (direction == AbstractTemplate.Direction.SOUTH_WEST + || (direction == AbstractTemplate.Direction.SOUTH && y >= x) + || (direction == AbstractTemplate.Direction.WEST && x >= y)) + paintFarVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + if (direction == AbstractTemplate.Direction.NORTH_WEST + || (direction == AbstractTemplate.Direction.NORTH && y >= x) + || (direction == AbstractTemplate.Direction.WEST && x >= y)) + paintFarVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } // endif + + // Paint lines between horizontal boundaries if needed + if (template.getDistance(x, y + 1) > radius) { + if (direction == AbstractTemplate.Direction.SOUTH_EAST + || (direction == AbstractTemplate.Direction.SOUTH && y >= x) + || (direction == AbstractTemplate.Direction.EAST && x >= y)) + paintFarHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + if (direction == AbstractTemplate.Direction.SOUTH_WEST + || (direction == AbstractTemplate.Direction.SOUTH && y >= x) + || (direction == AbstractTemplate.Direction.WEST && x >= y)) + paintFarHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + if (direction == AbstractTemplate.Direction.NORTH_EAST + || (direction == AbstractTemplate.Direction.NORTH && y >= x) + || (direction == AbstractTemplate.Direction.EAST && x >= y)) + paintFarHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + if (direction == AbstractTemplate.Direction.NORTH_WEST + || (direction == AbstractTemplate.Direction.NORTH && y >= x) + || (direction == AbstractTemplate.Direction.WEST && x >= y)) + paintFarHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } // endif + } // endif + } + } + + private class BlastTemplateDrawer extends AbstractDrawingDrawer { + + @Override + protected void drawBackground(Drawable element, Pen pen) { + var template = (BlastTemplate)element; + tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, AbstractTemplate.DEFAULT_BG_ALPHA); + drawer.setColor(tmpColor); + fillArea(template.getArea()); + } + + @Override + protected void drawBorder(Drawable element, Pen pen) { + var template = (BlastTemplate)element; + drawArea(template.getArea()); + } + } + + private class RadiusCellTemplateDrawer extends AbstractTemplateDrawer { + + @Override + protected void paintArea(AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + // Only squares w/in the radius + int radius = template.getRadius(); + if (distance <= radius) { + paintArea(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + } + + if (template.getDistance(x, y + 1) <= radius) { + paintArea(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + } + + if (template.getDistance(x + 1, y) <= radius) { + paintArea(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + } + + if (template.getDistance(x + 1, y + 1) <= radius) { + paintArea(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } + } + + @Override + protected void paintArea(AbstractTemplate template, int xOff, int yOff, int gridSize, AbstractTemplate.Quadrant q) { + ZonePoint vertex = template.getVertex(); + int x = vertex.x + getXMult(q) * xOff + ((getXMult(q) - 1) / 2) * gridSize; + int y = vertex.y + getYMult(q) * yOff + ((getYMult(q) - 1) / 2) * gridSize; + drawer.filledRectangle(x, -y - gridSize, gridSize, gridSize); + } + + @Override + protected int getXMult(AbstractTemplate.Quadrant q) { + return ((q == AbstractTemplate.Quadrant.NORTH_WEST || q == AbstractTemplate.Quadrant.SOUTH_WEST) ? -1 : +1); + } + + @Override + protected int getYMult(AbstractTemplate.Quadrant q) { + return ((q == AbstractTemplate.Quadrant.NORTH_WEST || q == AbstractTemplate.Quadrant.NORTH_EAST) ? -1 : +1); + } + + @Override + protected void paintBorder(AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + paintBorderAtRadius(template, x, y, xOff, yOff, gridSize, distance, template.getRadius()); + } + + protected void paintBorderAtRadius( + AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance, int radius) { + // At the border? + // Paint lines between vertical boundaries if needed + + if (template.getDistance(x, y + 1) == radius && template.getDistance(x + 1, y + 1) > radius) { + paintFarVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + } + if (distance == radius && template.getDistance(x + 1, y) > radius) { + paintFarVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + } + if (template.getDistance(x + 1, y + 1) == radius && template.getDistance(x + 2, y + 1) > radius) { + paintFarVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } + if (template.getDistance(x + 1, y) == radius && template.getDistance(x + 2, y) > radius) { + paintFarVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + } // endif + if (x == 0 && y + 1 == radius) { + paintFarVerticalBorder(template, xOff - gridSize, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + } + if (x == 0 && y + 2 == radius) { + paintFarVerticalBorder(template, xOff - gridSize, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } + + // Paint lines between horizontal boundaries if needed + if (template.getDistance(x, y + 1) == radius && template.getDistance(x, y + 2) > radius) { + paintFarHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + } + if (template.getDistance(x, y) == radius && template.getDistance(x, y + 1) > radius) { + paintFarHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + } + if (y == 0 && x + 1 == radius) { + paintFarHorizontalBorder(template, xOff, yOff - gridSize, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + } + if (y == 0 && x + 2 == radius) { + paintFarHorizontalBorder(template, xOff, yOff - gridSize, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } + if (template.getDistance(x + 1, y + 1) == radius && template.getDistance(x + 1, y + 2) > radius) { + paintFarHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } + if (template.getDistance(x + 1, y) == radius && template.getDistance(x + 1, y + 1) > radius) { + paintFarHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + } // endif + } + + @Override + protected void paint(AbstractTemplate template, boolean border, boolean area) { + int radius = template.getRadius(); + GUID zoneId = template.getZoneId(); + + if (radius == 0) return; + Zone zone = MapTool.getCampaign().getZone(zoneId); + if (zone == null) return; + + // Find the proper distance + int gridSize = zone.getGrid().getSize(); + for (int y = 0; y < radius; y++) { + for (int x = 0; x < radius; x++) { + + // Get the offset to the corner of the square + int xOff = x * gridSize; + int yOff = y * gridSize; + + // Template specific painting + if (border) paintBorder(template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); + if (area) paintArea(template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); + } // endfor + } // endfor + } + } + + private class ShapeDrawableDrawer extends AbstractDrawingDrawer { + + @Override + protected void drawBackground(Drawable element, Pen pen) { + var shape = (ShapeDrawable)element; + fillArea(shape.getArea()); + } + + @Override + protected void drawBorder(Drawable element, Pen pen) { + var shape = (ShapeDrawable)element; + var area = shape.getArea(); + if(area.isEmpty()) { + pathToFloatArray(shape.getShape().getPathIterator(null)); + drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.SMOOTH, false); + } else { + drawArea(area); + } + } + } } diff --git a/src/main/java/net/rptools/maptool/model/drawing/BurstTemplate.java b/src/main/java/net/rptools/maptool/model/drawing/BurstTemplate.java index 9b49cb890c..b32b7e35f8 100644 --- a/src/main/java/net/rptools/maptool/model/drawing/BurstTemplate.java +++ b/src/main/java/net/rptools/maptool/model/drawing/BurstTemplate.java @@ -22,6 +22,7 @@ import java.awt.geom.Area; import net.rptools.maptool.client.MapTool; import net.rptools.maptool.model.ZonePoint; +import org.locationtech.jts.awt.ShapeReader; /** * Create and paint a donut burst @@ -124,4 +125,6 @@ protected void drawBackground(Graphics2D g) { public Area getArea() { return renderer.getArea(); } + + public ShapeDrawable getVertexRenderer() { return vertexRenderer; } } diff --git a/src/main/java/net/rptools/maptool/model/drawing/ConeTemplate.java b/src/main/java/net/rptools/maptool/model/drawing/ConeTemplate.java index 8fe0595004..a802d95db0 100644 --- a/src/main/java/net/rptools/maptool/model/drawing/ConeTemplate.java +++ b/src/main/java/net/rptools/maptool/model/drawing/ConeTemplate.java @@ -225,7 +225,7 @@ protected void paintArea( } } - private boolean withinQuadrant(Quadrant q) { + public boolean withinQuadrant(Quadrant q) { Direction dir = getDirection(); switch (q) { case SOUTH_EAST: diff --git a/src/main/java/net/rptools/maptool/model/drawing/LineCellTemplate.java b/src/main/java/net/rptools/maptool/model/drawing/LineCellTemplate.java index 818ca031a9..f391ee7376 100644 --- a/src/main/java/net/rptools/maptool/model/drawing/LineCellTemplate.java +++ b/src/main/java/net/rptools/maptool/model/drawing/LineCellTemplate.java @@ -168,7 +168,7 @@ public void setRadius(int squares) { * * @return The new path or null if there is no path. */ - protected List calcPath() { + public List calcPath() { if (getRadius() == 0) return null; if (pathVertex == null) return null; int radius = getRadius(); diff --git a/src/main/java/net/rptools/maptool/model/drawing/LineTemplate.java b/src/main/java/net/rptools/maptool/model/drawing/LineTemplate.java index 915fcf25c7..34e5664539 100644 --- a/src/main/java/net/rptools/maptool/model/drawing/LineTemplate.java +++ b/src/main/java/net/rptools/maptool/model/drawing/LineTemplate.java @@ -120,7 +120,7 @@ protected void paint(Graphics2D g, boolean border, boolean area) { // Need to paint? We need a line and to translate the painting if (pathVertex == null) return; if (getRadius() == 0) return; - if (calcPath() == null) return; + if (path == null && calcPath() == null) return; // Paint each element in the path int gridSize = MapTool.getCampaign().getZone(getZoneId()).getGrid().getSize(); @@ -165,7 +165,7 @@ public void setRadius(int squares) { * * @return The new path or null if there is no path. */ - protected List calcPath() { + public List calcPath() { if (getRadius() == 0) return null; if (pathVertex == null) return null; int radius = getRadius(); diff --git a/src/main/java/net/rptools/maptool/model/drawing/WallTemplate.java b/src/main/java/net/rptools/maptool/model/drawing/WallTemplate.java index fb762ef986..caa0671c19 100644 --- a/src/main/java/net/rptools/maptool/model/drawing/WallTemplate.java +++ b/src/main/java/net/rptools/maptool/model/drawing/WallTemplate.java @@ -56,7 +56,7 @@ public void setVertex(ZonePoint vertex) { /** @see net.rptools.maptool.model.drawing.LineTemplate#calcPath() */ @Override - protected List calcPath() { + public List calcPath() { return getPath(); // Do nothing, path is set by tool. } } From 39e7b202fa68d953650ab15bd2f01f98d046d1c1 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sun, 16 May 2021 21:26:45 +0200 Subject: [PATCH 046/139] enable AA and disable Effects for now --- .../rptools/maptool/box2d/NativeRenderer.java | 2 +- .../maptool/client/ui/zone/GdxRenderer.java | 209 ++++++++++-------- 2 files changed, 117 insertions(+), 94 deletions(-) diff --git a/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java b/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java index 93e3a43146..bef88f2829 100644 --- a/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java +++ b/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java @@ -53,7 +53,7 @@ public void init() { var config = new LwjglApplicationConfiguration(); config.allowSoftwareMode = true; - //config.samples = 8; + config.samples = 8; config.forceExit = false; LwjglApplicationConfiguration.disableAudio = true; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 480d967ff6..383c7a6fa4 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -270,12 +270,12 @@ public void render() { ensureCorrectDistanceFont(); - vfxManager.cleanUpBuffers(); - vfxManager.beginInputCapture(); + // vfxManager.cleanUpBuffers(); + // vfxManager.beginInputCapture(); doRendering(); - vfxManager.endInputCapture(); - vfxManager.applyEffects(); - vfxManager.renderToScreen(); + // vfxManager.endInputCapture(); + // vfxManager.applyEffects(); + // vfxManager.renderToScreen(); copyFramebufferToJfx(); } @@ -3372,6 +3372,22 @@ public void draw(Drawable element, Pen pen) { drawBorder(element, pen); drawer.setDefaultLineWidth(lineWidth); } + + protected void line(Pen pen, float x1, float y1, float x2, float y2) { + var halfLineWidth = pen.getThickness()/2f; + if(!pen.getSquareCap()) + { + drawer.filledCircle(x1, -y1, halfLineWidth); + drawer.filledCircle(x2, -y2, halfLineWidth); + drawer.line(x1, -y1, x2, -y2); + } else { + tmpVector.set(x1-x2, y1-y2).nor(); + var tx = tmpVector.x * halfLineWidth; + var ty = tmpVector.y * halfLineWidth; + drawer.line(x1 + tx, y1 + ty, x2 - tx, y2 - ty); + } + } + protected abstract void drawBackground(Drawable element, Pen pen); protected abstract void drawBorder(Drawable element, Pen pen); @@ -3382,15 +3398,15 @@ private abstract class AbstractTemplateDrawer extends AbstractDrawingDrawer { protected void drawBackground(Drawable element, Pen pen) { tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, AbstractTemplate.DEFAULT_BG_ALPHA); drawer.setColor(tmpColor); - paint((AbstractTemplate)element, false, true); + paint(pen, (AbstractTemplate)element, false, true); } @Override protected void drawBorder(Drawable element, Pen pen) { - paint((AbstractTemplate)element, true, false); + paint(pen, (AbstractTemplate)element, true, false); } - protected void paint(AbstractTemplate template, boolean border, boolean area) { + protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean area) { var radius = template.getRadius(); if (radius == 0) return; @@ -3407,7 +3423,7 @@ protected void paint(AbstractTemplate template, boolean border, boolean area) { int yOff = y * gridSize; // Template specific painting - if (border) paintBorder(template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); + if (border) paintBorder(pen, template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); if (area) paintArea(template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); } // endfor } // endfor @@ -3428,46 +3444,46 @@ protected int getYMult(AbstractTemplate.Quadrant q) { return ((q == AbstractTemplate.Quadrant.NORTH_WEST || q == AbstractTemplate.Quadrant.NORTH_EAST) ? -1 : +1); } - protected void paintCloseVerticalBorder( + protected void paintCloseVerticalBorder(Pen pen, AbstractTemplate template, int xOff, int yOff, int gridSize, AbstractTemplate.Quadrant q) { var vertex = template.getVertex(); int x = vertex.x + getXMult(q) * xOff; int y = vertex.y + getYMult(q) * yOff; - drawer.line(x, -y, x, -(y + getYMult(q) * gridSize)); + line(pen, x, y, x, y + getYMult(q) * gridSize); } - protected void paintFarHorizontalBorder( + protected void paintFarHorizontalBorder(Pen pen, AbstractTemplate template, int xOff, int yOff, int gridSize, AbstractTemplate.Quadrant q) { var vertex = template.getVertex(); int x = vertex.x + getXMult(q) * xOff; int y = vertex.y + getYMult(q) * yOff + getYMult(q) * gridSize; - drawer.line(x, -y, x + getXMult(q) * gridSize, -y); + line(pen, x, y, x + getXMult(q) * gridSize, y); } - protected void paintFarVerticalBorder( + protected void paintFarVerticalBorder(Pen pen, AbstractTemplate template, int xOff, int yOff, int gridSize, AbstractTemplate.Quadrant q) { var vertex = template.getVertex(); int x = vertex.x + getXMult(q) * xOff + getXMult(q) * gridSize; int y = vertex.y + getYMult(q) * yOff; - drawer.line(x, -y, x, -(y + getYMult(q) * gridSize)); + line(pen, x, y, x, y + getYMult(q) * gridSize); } - protected void paintCloseHorizontalBorder( + protected void paintCloseHorizontalBorder(Pen pen, AbstractTemplate template, int xOff, int yOff, int gridSize, AbstractTemplate.Quadrant q) { var vertex = template.getVertex(); int x = vertex.x + getXMult(q) * xOff; int y = vertex.y + getYMult(q) * yOff; - drawer.line(x, -y, x + getXMult(q) * gridSize, -y); + line(pen, x, y, x + getXMult(q) * gridSize, y); } protected abstract void paintArea(AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance); - protected abstract void paintBorder(AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance); + protected abstract void paintBorder(Pen pen, AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance); } private class LineTemplateDrawer extends AbstractTemplateDrawer { @Override - protected void paint(AbstractTemplate template, boolean border, boolean area) { + protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean area) { if (MapTool.getCampaign().getZone(template.getZoneId()) == null) { return; } @@ -3492,7 +3508,7 @@ protected void paint(AbstractTemplate template, boolean border, boolean area) { paintArea(template, p.x, p.y, xOff, yOff, gridSize, distance); } // endif if (border) { - paintBorder(template, p.x, p.y, xOff, yOff, gridSize, i.previousIndex()); + paintBorder(pen, template, p.x, p.y, xOff, yOff, gridSize, i.previousIndex()); } // endif } // endfor } @@ -3503,7 +3519,7 @@ protected void paintArea(AbstractTemplate template, int x, int y, int xOff, int } @Override - protected void paintBorder(AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int pElement) { + protected void paintBorder(Pen pen ,AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int pElement) { var lineTemplate = (LineTemplate)template; // Have to scan 3 points behind and ahead, since that is the maximum number of points @@ -3525,10 +3541,10 @@ protected void paintBorder(AbstractTemplate template, int x, int y, int xOff, in var quadrant = lineTemplate.getQuadrant(); // Paint the borders as needed - if (!noPaint[0]) paintCloseVerticalBorder(template, xOff, yOff, gridSize, quadrant); - if (!noPaint[1]) paintFarHorizontalBorder(template, xOff, yOff, gridSize, quadrant); - if (!noPaint[2]) paintFarVerticalBorder(template, xOff, yOff, gridSize, quadrant); - if (!noPaint[3]) paintCloseHorizontalBorder(template, xOff, yOff, gridSize, quadrant); + if (!noPaint[0]) paintCloseVerticalBorder(pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[1]) paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[2]) paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[3]) paintCloseHorizontalBorder(pen, template, xOff, yOff, gridSize, quadrant); } } @@ -3541,7 +3557,7 @@ protected void paintArea(AbstractTemplate template, int x, int y, int xOff, int } @Override - protected void paintBorder(AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int pElement) { + protected void paintBorder(Pen pen, AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int pElement) { var lineCellTemplate = (LineCellTemplate)template; // Have to scan 3 points behind and ahead, since that is the maximum number of points // that can be added to the path from any single intersection. @@ -3562,14 +3578,14 @@ protected void paintBorder(AbstractTemplate template, int x, int y, int xOff, in var quadrant = lineCellTemplate.getQuadrant(); // Paint the borders as needed - if (!noPaint[0]) paintCloseVerticalBorder(template, xOff, yOff, gridSize, quadrant); - if (!noPaint[1]) paintFarHorizontalBorder(template, xOff, yOff, gridSize, quadrant); - if (!noPaint[2]) paintFarVerticalBorder(template, xOff, yOff, gridSize, quadrant); - if (!noPaint[3]) paintCloseHorizontalBorder(template, xOff, yOff, gridSize, quadrant); + if (!noPaint[0]) paintCloseVerticalBorder(pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[1]) paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[2]) paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[3]) paintCloseHorizontalBorder(pen, template, xOff, yOff, gridSize, quadrant); } @Override - protected void paint(AbstractTemplate template, boolean border, boolean area) { + protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean area) { if (MapTool.getCampaign().getZone(template.getZoneId()) == null) { return; } @@ -3605,7 +3621,7 @@ protected void paint(AbstractTemplate template, boolean border, boolean area) { paintArea(template, p.x, p.y, xOff, yOff, gridSize, distance); } // endif if (border) { - paintBorder(template, p.x, p.y, xOff, yOff, gridSize, i.previousIndex()); + paintBorder(pen, template, p.x, p.y, xOff, yOff, gridSize, i.previousIndex()); } // endif } // endfor } @@ -3625,25 +3641,25 @@ protected void paintArea(AbstractTemplate template, int x, int y, int xOff, int } @Override - protected void paintBorder(AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + protected void paintBorder(Pen pen, AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { var radiusTemplate = (RadiusTemplate)template; - paintBorderAtRadius(template, x, y, xOff, yOff, gridSize, distance, radiusTemplate.getRadius()); + paintBorderAtRadius(pen, template, x, y, xOff, yOff, gridSize, distance, radiusTemplate.getRadius()); } - private void paintBorderAtRadius(AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance, int radius) { + private void paintBorderAtRadius(Pen pen, AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance, int radius) { // At the border? if (distance == radius) { // Paint lines between vertical boundaries if needed if (template.getDistance(x + 1, y) > radius) { for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { - paintFarVerticalBorder(template, xOff, yOff, gridSize, q); + paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, q); } } // Paint lines between horizontal boundaries if needed if (template.getDistance(x, y + 1) > radius) { for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { - paintFarHorizontalBorder(template, xOff, yOff, gridSize, q); + paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, q); } } } @@ -3692,14 +3708,14 @@ protected void paintArea( } @Override - protected void paintBorder( + protected void paintBorder(Pen pen, AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { var coneTemplate = (ConeTemplate)template; - paintBorderAtRadius(coneTemplate, x, y, xOff, yOff, gridSize, distance, coneTemplate.getRadius()); - paintEdges(coneTemplate, x, y, xOff, yOff, gridSize, distance); + paintBorderAtRadius(pen, coneTemplate, x, y, xOff, yOff, gridSize, distance, coneTemplate.getRadius()); + paintEdges(pen, coneTemplate, x, y, xOff, yOff, gridSize, distance); } - protected void paintEdges( + protected void paintEdges(Pen pen, ConeTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { // Handle the edges @@ -3708,45 +3724,45 @@ protected void paintEdges( if (direction.ordinal() % 2 == 0) { if (x == 0) { if (direction == AbstractTemplate.Direction.SOUTH_EAST || direction == AbstractTemplate.Direction.SOUTH_WEST) - paintCloseVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + paintCloseVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); if (direction == AbstractTemplate.Direction.NORTH_EAST || direction == AbstractTemplate.Direction.NORTH_WEST) - paintCloseVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + paintCloseVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); } // endif if (y == 0) { if (direction == AbstractTemplate.Direction.SOUTH_EAST || direction == AbstractTemplate.Direction.NORTH_EAST) - paintCloseHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + paintCloseHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); if (direction == AbstractTemplate.Direction.SOUTH_WEST || direction == AbstractTemplate.Direction.NORTH_WEST) - paintCloseHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + paintCloseHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); } // endif } else if (direction.ordinal() % 2 == 1 && x == y && distance <= radius) { if (direction == AbstractTemplate.Direction.SOUTH) { - paintFarVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - paintFarVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); - paintCloseHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - paintCloseHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + paintCloseHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + paintCloseHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); } // endif if (direction == AbstractTemplate.Direction.NORTH) { - paintFarVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); - paintFarVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - paintCloseHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); - paintCloseHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + paintCloseHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + paintCloseHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); } // endif if (direction == AbstractTemplate.Direction.EAST) { - paintCloseVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - paintCloseVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); - paintFarHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - paintFarHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + paintCloseVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + paintCloseVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); } // endif if (direction == AbstractTemplate.Direction.WEST) { - paintCloseVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); - paintCloseVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - paintFarHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); - paintFarHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + paintCloseVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + paintCloseVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); } // endif } // endif } - protected void paintBorderAtRadius( + protected void paintBorderAtRadius(Pen pen, ConeTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance, int radius) { // At the border? if (distance == radius) { @@ -3756,19 +3772,19 @@ protected void paintBorderAtRadius( if (direction == AbstractTemplate.Direction.SOUTH_EAST || (direction == AbstractTemplate.Direction.SOUTH && y >= x) || (direction == AbstractTemplate.Direction.EAST && x >= y)) - paintFarVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); if (direction == AbstractTemplate.Direction.NORTH_EAST || (direction == AbstractTemplate.Direction.NORTH && y >= x) || (direction == AbstractTemplate.Direction.EAST && x >= y)) - paintFarVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); if (direction == AbstractTemplate.Direction.SOUTH_WEST || (direction == AbstractTemplate.Direction.SOUTH && y >= x) || (direction == AbstractTemplate.Direction.WEST && x >= y)) - paintFarVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); if (direction == AbstractTemplate.Direction.NORTH_WEST || (direction == AbstractTemplate.Direction.NORTH && y >= x) || (direction == AbstractTemplate.Direction.WEST && x >= y)) - paintFarVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); } // endif // Paint lines between horizontal boundaries if needed @@ -3776,19 +3792,19 @@ protected void paintBorderAtRadius( if (direction == AbstractTemplate.Direction.SOUTH_EAST || (direction == AbstractTemplate.Direction.SOUTH && y >= x) || (direction == AbstractTemplate.Direction.EAST && x >= y)) - paintFarHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); if (direction == AbstractTemplate.Direction.SOUTH_WEST || (direction == AbstractTemplate.Direction.SOUTH && y >= x) || (direction == AbstractTemplate.Direction.WEST && x >= y)) - paintFarHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); if (direction == AbstractTemplate.Direction.NORTH_EAST || (direction == AbstractTemplate.Direction.NORTH && y >= x) || (direction == AbstractTemplate.Direction.EAST && x >= y)) - paintFarHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); if (direction == AbstractTemplate.Direction.NORTH_WEST || (direction == AbstractTemplate.Direction.NORTH && y >= x) || (direction == AbstractTemplate.Direction.WEST && x >= y)) - paintFarHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); } // endif } // endif } @@ -3853,57 +3869,57 @@ protected int getYMult(AbstractTemplate.Quadrant q) { } @Override - protected void paintBorder(AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { - paintBorderAtRadius(template, x, y, xOff, yOff, gridSize, distance, template.getRadius()); + protected void paintBorder(Pen pen, AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + paintBorderAtRadius(pen, template, x, y, xOff, yOff, gridSize, distance, template.getRadius()); } - protected void paintBorderAtRadius( + protected void paintBorderAtRadius(Pen pen, AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance, int radius) { // At the border? // Paint lines between vertical boundaries if needed if (template.getDistance(x, y + 1) == radius && template.getDistance(x + 1, y + 1) > radius) { - paintFarVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); } if (distance == radius && template.getDistance(x + 1, y) > radius) { - paintFarVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); } if (template.getDistance(x + 1, y + 1) == radius && template.getDistance(x + 2, y + 1) > radius) { - paintFarVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); } if (template.getDistance(x + 1, y) == radius && template.getDistance(x + 2, y) > radius) { - paintFarVerticalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); } // endif if (x == 0 && y + 1 == radius) { - paintFarVerticalBorder(template, xOff - gridSize, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + paintFarVerticalBorder(pen, template, xOff - gridSize, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); } if (x == 0 && y + 2 == radius) { - paintFarVerticalBorder(template, xOff - gridSize, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + paintFarVerticalBorder(pen, template, xOff - gridSize, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); } // Paint lines between horizontal boundaries if needed if (template.getDistance(x, y + 1) == radius && template.getDistance(x, y + 2) > radius) { - paintFarHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); } if (template.getDistance(x, y) == radius && template.getDistance(x, y + 1) > radius) { - paintFarHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); } if (y == 0 && x + 1 == radius) { - paintFarHorizontalBorder(template, xOff, yOff - gridSize, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + paintFarHorizontalBorder(pen, template, xOff, yOff - gridSize, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); } if (y == 0 && x + 2 == radius) { - paintFarHorizontalBorder(template, xOff, yOff - gridSize, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + paintFarHorizontalBorder(pen, template, xOff, yOff - gridSize, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); } if (template.getDistance(x + 1, y + 1) == radius && template.getDistance(x + 1, y + 2) > radius) { - paintFarHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); } if (template.getDistance(x + 1, y) == radius && template.getDistance(x + 1, y + 1) > radius) { - paintFarHorizontalBorder(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); } // endif } @Override - protected void paint(AbstractTemplate template, boolean border, boolean area) { + protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean area) { int radius = template.getRadius(); GUID zoneId = template.getZoneId(); @@ -3921,7 +3937,7 @@ protected void paint(AbstractTemplate template, boolean border, boolean area) { int yOff = y * gridSize; // Template specific painting - if (border) paintBorder(template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); + if (border) paintBorder(pen, template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); if (area) paintArea(template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); } // endfor } // endfor @@ -3939,12 +3955,19 @@ protected void drawBackground(Drawable element, Pen pen) { @Override protected void drawBorder(Drawable element, Pen pen) { var shape = (ShapeDrawable)element; - var area = shape.getArea(); - if(area.isEmpty()) { - pathToFloatArray(shape.getShape().getPathIterator(null)); - drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.SMOOTH, false); - } else { - drawArea(area); + pathToFloatArray(shape.getShape().getPathIterator(null)); + if(tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) + && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { + tmpFloat.pop(); + tmpFloat.pop(); + } + if(pen.getSquareCap()) + drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.POINTY, false); + else + { + drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.NONE, false); + for(int i=0; i + 1 < tmpFloat.size; i+=2) + drawer.filledCircle(tmpFloat.get(i), tmpFloat.get(i+1), pen.getThickness()/2f); } } } From 560e143b39e393264f1e37d2d544b58c41679993 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sun, 16 May 2021 21:59:45 +0200 Subject: [PATCH 047/139] remove label --- .../maptool/client/ui/MapToolFrame.java | 5 +- .../maptool/client/ui/zone/ZoneRenderer.java | 96 +++++++++++-------- 2 files changed, 59 insertions(+), 42 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index 83982a3277..63f96c1bd5 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -494,13 +494,14 @@ public MapToolFrame(JMenuBar menuBar) { */ - javafx.scene.control.Label label = new Label("This is JavaFX"); + javafx.scene.control.Label label = new Label(" "); label.setMouseTransparent(true); - label.setStyle("-fx-font-size: 64pt; -fx-font-family: Arial; -fx-font-weight: bold; -fx-text-fill: white; -fx-opacity: 0.8;"); + //label.setStyle("-fx-font-size: 64pt; -fx-font-family: Arial; -fx-font-weight: bold; -fx-text-fill: white; -fx-opacity: 0.8;"); var canvas = new NativeRenderingCanvas(gdxCanvas); var root = new StackPane(); + //FIXME: find out why gdx doen't render without this label root.getChildren().addAll(/*swingNode, */canvas.getRoot(),label); Scene scene = new Scene(root); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index 658793f7a4..06b344fc0d 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -218,6 +218,8 @@ public class ZoneRenderer extends JComponent private ZonePoint previousZonePoint; + private boolean skipDrawing; + public enum TokenMoveCompletion { TRUE, FALSE, @@ -912,24 +914,20 @@ public void paintComponent(Graphics g) { PlayerView pl = getPlayerView(); timer.stop("paintComponent:createView"); - if(MapTool.getFrame().getJfxPanel().isVisible()) { - // zoneoverlays and gridcoordinates are still drawn with Graphics2D - renderOverlays(g2d, pl); - return; - } else { - renderZone(g2d, pl); - int noteVPos = 20; - if (MapTool.getFrame().areFullScreenToolsShown()) noteVPos += 40; + skipDrawing = MapTool.getFrame().getJfxPanel().isVisible(); - if (!zone.isVisible() && pl.isGMView()) { - GraphicsUtil.drawBoxedString( - g2d, I18N.getText("zone.map_not_visible"), getSize().width / 2, noteVPos); - noteVPos += 20; - } - if (AppState.isShowAsPlayer()) { - GraphicsUtil.drawBoxedString( - g2d, I18N.getText("zone.player_view"), getSize().width / 2, noteVPos); - } + renderZone(g2d, pl); + int noteVPos = 20; + if (MapTool.getFrame().areFullScreenToolsShown()) noteVPos += 40; + + if (!zone.isVisible() && pl.isGMView()) { + GraphicsUtil.drawBoxedString( + g2d, I18N.getText("zone.map_not_visible"), getSize().width / 2, noteVPos); + noteVPos += 20; + } + if (AppState.isShowAsPlayer()) { + GraphicsUtil.drawBoxedString( + g2d, I18N.getText("zone.player_view"), getSize().width / 2, noteVPos); } if (timer.isEnabled()) { @@ -1169,16 +1167,20 @@ public void renderZone(Graphics2D g2d, PlayerView view) { } // Are we still waiting to show the zone ? if (isLoading()) { - g2d.setColor(Color.black); - g2d.fillRect(0, 0, viewRect.width, viewRect.height); - GraphicsUtil.drawBoxedString(g2d, loadingProgress, viewRect.width / 2, viewRect.height / 2); + if(!skipDrawing) { + g2d.setColor(Color.black); + g2d.fillRect(0, 0, viewRect.width, viewRect.height); + GraphicsUtil.drawBoxedString(g2d, loadingProgress, viewRect.width / 2, viewRect.height / 2); + } return; } if (MapTool.getCampaign().isBeingSerialized()) { - g2d.setColor(Color.black); - g2d.fillRect(0, 0, viewRect.width, viewRect.height); - GraphicsUtil.drawBoxedString( - g2d, " Please Wait ", viewRect.width / 2, viewRect.height / 2); + if(!skipDrawing) { + g2d.setColor(Color.black); + g2d.fillRect(0, 0, viewRect.width, viewRect.height); + GraphicsUtil.drawBoxedString( + g2d, " Please Wait ", viewRect.width / 2, viewRect.height / 2); + } return; } if (zone == null) { @@ -1254,7 +1256,7 @@ public void renderZone(Graphics2D g2d, PlayerView view) { timer.stop("calcs-2"); // Rendering pipeline - if (zone.drawBoard()) { + if (zone.drawBoard() && !skipDrawing) { Rectangle fill = new Rectangle(getWidth(), getHeight()); timer.start("board"); renderBoard(g2d, view); @@ -1264,7 +1266,8 @@ public void renderZone(Graphics2D g2d, PlayerView view) { List drawables = zone.getBackgroundDrawnElements(); // if (!drawables.isEmpty()) { timer.start("drawableBackground"); - renderDrawableOverlay(g2d, backgroundDrawableRenderer, view, drawables); + if(!skipDrawing) + renderDrawableOverlay(g2d, backgroundDrawableRenderer, view, drawables); timer.stop("drawableBackground"); // } List background = zone.getBackgroundStamps(false); @@ -1279,12 +1282,13 @@ public void renderZone(Graphics2D g2d, PlayerView view) { List drawables = zone.getObjectDrawnElements(); // if (!drawables.isEmpty()) { timer.start("drawableObjects"); - renderDrawableOverlay(g2d, objectDrawableRenderer, view, drawables); + if(!skipDrawing) + renderDrawableOverlay(g2d, objectDrawableRenderer, view, drawables); timer.stop("drawableObjects"); // } } timer.start("grid"); - renderGrid(g2d, view); + if(!skipDrawing) renderGrid(g2d, view); timer.stop("grid"); if (Zone.Layer.OBJECT.isEnabled()) { @@ -1298,11 +1302,13 @@ public void renderZone(Graphics2D g2d, PlayerView view) { } if (Zone.Layer.TOKEN.isEnabled()) { timer.start("lights"); - renderLights(g2d, view); + if(!skipDrawing) + renderLights(g2d, view); timer.stop("lights"); timer.start("auras"); - renderAuras(g2d, view); + if(!skipDrawing) + renderAuras(g2d, view); timer.stop("auras"); } @@ -1331,7 +1337,8 @@ public void renderZone(Graphics2D g2d, PlayerView view) { List drawables = zone.getDrawnElements(); // if (!drawables.isEmpty()) { timer.start("drawableTokens"); - renderDrawableOverlay(g2d, tokenDrawableRenderer, view, drawables); + if(!skipDrawing) + renderDrawableOverlay(g2d, tokenDrawableRenderer, view, drawables); timer.stop("drawableTokens"); // } @@ -1339,7 +1346,8 @@ public void renderZone(Graphics2D g2d, PlayerView view) { drawables = zone.getGMDrawnElements(); // if (!drawables.isEmpty()) { timer.start("drawableGM"); - renderDrawableOverlay(g2d, gmDrawableRenderer, view, drawables); + if(!skipDrawing) + renderDrawableOverlay(g2d, gmDrawableRenderer, view, drawables); timer.stop("drawableGM"); // } List stamps = zone.getGMStamps(false); @@ -1356,7 +1364,8 @@ public void renderZone(Graphics2D g2d, PlayerView view) { timer.stop("tokens"); } timer.start("unowned movement"); - showBlockedMoves(g2d, view, getUnOwnedMovementSet(view)); + if(!skipDrawing) + showBlockedMoves(g2d, view, getUnOwnedMovementSet(view)); timer.stop("unowned movement"); // Moved below, after the renderFog() call... @@ -1384,12 +1393,12 @@ public void renderZone(Graphics2D g2d, PlayerView view) { // Perhaps we should draw the fog first and use hard fog to determine whether labels need to be // drawn? // (This method has it's own 'timer' calls) - if (AppState.getShowTextLabels()) { + if (AppState.getShowTextLabels() && !skipDrawing) { renderLabels(g2d, view); } // (This method has it's own 'timer' calls) - if (zone.hasFog()) { + if (zone.hasFog() && !skipDrawing) { renderFog(g2d, view); } @@ -1416,7 +1425,8 @@ public void renderZone(Graphics2D g2d, PlayerView view) { } timer.start("owned movement"); - showBlockedMoves(g2d, view, getOwnedMovementSet(view)); + if(!skipDrawing) + showBlockedMoves(g2d, view, getOwnedMovementSet(view)); timer.stop("owned movement"); // Text associated with tokens being moved is added to a list to be drawn after, i.e. on top @@ -1426,18 +1436,21 @@ public void renderZone(Graphics2D g2d, PlayerView view) { // will be // visible. timer.start("token name/labels"); - renderRenderables(g2d); + if(!skipDrawing) + renderRenderables(g2d); timer.stop("token name/labels"); } // if (zone.visionType ...) if (view.isGMView()) { timer.start("visionOverlayGM"); - renderGMVisionOverlay(g2d, view); + if(!skipDrawing) + renderGMVisionOverlay(g2d, view); timer.stop("visionOverlayGM"); } else { timer.start("visionOverlayPlayer"); - renderPlayerVisionOverlay(g2d, view); + if(!skipDrawing) + renderPlayerVisionOverlay(g2d, view); timer.stop("visionOverlayPlayer"); } @@ -3218,6 +3231,9 @@ protected void renderTokens( } timer.stop("renderTokens:OnscreenCheck"); + if(skipDrawing) + continue; + // create a per token Graphics object - normally clipped, unless always visible Area tokenCellArea = zone.getGrid().getTokenCellArea(tokenBounds); @@ -3756,7 +3772,7 @@ protected void renderTokens( // Stacks if (!tokenList.isEmpty() && !tokenList.get(0).isStamp()) { // TODO: find a cleaner way to indicate token layer - if (tokenStackMap != null) { // FIXME Needed to prevent NPE but how can it be null? + if (tokenStackMap != null && !skipDrawing) { // FIXME Needed to prevent NPE but how can it be null? for (Token token : tokenStackMap.keySet()) { Area bounds = getTokenBounds(token); if (bounds == null) { From d6b5c2379be841b49198db10245854c97abcba22 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 17 May 2021 21:32:09 +0200 Subject: [PATCH 048/139] fixed grids. Horizontal Hex grid is still wrong. --- .../maptool/client/ui/zone/GdxRenderer.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 383c7a6fa4..08f8197985 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -1186,6 +1186,8 @@ private void renderGrid(PlayerView view) { return; } + setProjectionMatrix(hudCam.combined); + if (grid instanceof GridlessGrid) { // do nothing } else if (grid instanceof HexGrid) { @@ -1195,6 +1197,7 @@ private void renderGrid(PlayerView view) { } else if (grid instanceof IsometricGrid) { renderGrid((IsometricGrid) grid); } + setProjectionMatrix(cam.combined); } private void renderGrid(HexGrid grid) { @@ -1203,13 +1206,14 @@ private void renderGrid(HexGrid grid) { drawer.setColor(tmpColor); var path = grid.createShape(zoneRenderer.getScale()); - var vertices = pathToVertices(path); + pathToFloatArray(path.getPathIterator(null)); int offU = grid.getOffU(zoneRenderer); int offV = grid.getOffV(zoneRenderer); + int count = 0; - Gdx.gl.glLineWidth(AppState.getGridSize()); + var lineWidth = AppState.getGridSize(); for (double v = offV % (grid.getScaledMinorRadius() * 2) - (grid.getScaledMinorRadius() * 2); v < grid.getRendererSizeV(zoneRenderer); @@ -1230,13 +1234,14 @@ private void renderGrid(HexGrid grid) { transY = height - (float) v; } else { transX = (float) v; - transY = height - (float) (u + offsetU); + transY = (float) (-u - offsetU) + height; } tmpMatrix.translate(transX, transY, 0); batch.setTransformMatrix(tmpMatrix); drawer.update(); - drawer.path(vertices.toArray(), 1, JoinType.SMOOTH, true); + + drawer.path(tmpFloat.toArray(), lineWidth, JoinType.SMOOTH, true); tmpMatrix.idt(); batch.setTransformMatrix(tmpMatrix); drawer.update(); @@ -1297,7 +1302,6 @@ private void renderGrid(SquareGrid grid) { var scale = (float) zoneRenderer.getScale(); int gridSize = (int) (grid.getSize() * scale); - Color.argb8888ToColor(tmpColor, zone.getGridColor()); drawer.setColor(tmpColor); From 19e819fa925a6c46e5d7cd9d465d0efc9cbb40ea Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Tue, 18 May 2021 22:26:22 +0200 Subject: [PATCH 049/139] better performance with background and fog drawing with textures --- .../maptool/client/ui/zone/GdxRenderer.java | 78 ++++++++++++------- 1 file changed, 48 insertions(+), 30 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 08f8197985..f981c24375 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -66,7 +66,6 @@ * coordinate system. So if you would draw a token t awt at (x,y) you have to draw it at (x, -y - t.width) *

    * Bugs: - * - y offset of VerticalHexgrid is wrong * - Imageborders are not rotated */ @@ -97,8 +96,6 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, // zone specific resources private Zone zone; private ZoneRenderer zoneRenderer; - private Sprite background; - private Sprite fog; //private MD5Key mapAssetId; private int offsetX = 0; private int offsetY = 0; @@ -128,6 +125,8 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private NinePatch blueLabel; private NinePatch darkGrayLabel; private Texture onePixel; + private Texture fog; + private Texture background; private ShapeDrawer drawer; private final LineTemplateDrawer lineTemplateDrawer = new LineTemplateDrawer(); private final LineCellTemplateDrawer lineCellTemplateDrawer = new LineCellTemplateDrawer(); @@ -722,13 +721,25 @@ private void renderFog(PlayerView view) { // Fill - if (fog == null) - fog = paintToSprite(zone.getFogPaint()); - batch.setColor(Color.WHITE); - var color = fog.getColor(); - fog.setColor(color.r, color.g, color.b, view.isGMView() ? .6f : 1f); - fillViewportWith(fog); + var paint = zone.getFogPaint(); + if(paint instanceof DrawableColorPaint) { + Color.argb8888ToColor(tmpColor, ((DrawableColorPaint)paint).getColor()); + tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, view.isGMView() ? .6f : 1f); + drawer.setColor(tmpColor); + drawer.filledRectangle(cam.position.x - width * zoom / 2f, cam.position.y - height * zoom / 2f, + width * zoom, height * zoom); + } else { + if(fog == null) { + var texturePaint = (DrawableTexturePaint)paint; + var image = texturePaint.getAsset().getImage(); + var pix = new Pixmap(image, 0, image.length); + fog = new Texture(pix); + fog.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat); + pix.dispose(); + } + fillViewportWith(fog); + } timer.start("renderFog-visibleArea"); Area visibleArea = zoneRenderer.getZoneView().getVisibleArea(view); @@ -1435,10 +1446,23 @@ private void renderBoard() { if (!zone.drawBoard()) return; - if (background == null) - background = paintToSprite(zone.getBackgroundPaint()); - - fillViewportWith(background); + var paint = zone.getBackgroundPaint(); + if(paint instanceof DrawableColorPaint) { + Color.argb8888ToColor(tmpColor, ((DrawableColorPaint)paint).getColor()); + drawer.setColor(tmpColor); + drawer.filledRectangle(cam.position.x - width * zoom / 2f, cam.position.y - height * zoom / 2f, + width * zoom, height * zoom); + } else { + if(background == null) { + var texturePaint = (DrawableTexturePaint)paint; + var image = texturePaint.getAsset().getImage(); + var pix = new Pixmap(image, 0, image.length); + background = new Texture(pix); + background.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat); + pix.dispose(); + } + fillViewportWith(background); + } var map = getSprite(zone.getMapAssetId()); if (map != null) { @@ -1447,24 +1471,18 @@ private void renderBoard() { } } - private void fillViewportWith(Sprite fill) { + private void fillViewportWith(Texture texture) { + var w = ((int)(cam.viewportWidth * zoom / texture.getWidth()) + 4) * texture.getWidth(); + var h = ((int)(cam.viewportHeight * zoom / texture.getHeight()) + 4 ) * texture.getHeight(); + var startX = (cam.position.x - cam.viewportWidth * zoom / 2); - startX = (int) (startX / fill.getWidth()) * fill.getWidth() - fill.getWidth(); - var endX = cam.position.x + cam.viewportWidth / 2 * zoom; + startX = (((int)startX) / texture.getWidth()) * texture.getWidth() - texture.getWidth(); + var startY = (cam.position.y - cam.viewportHeight * zoom / 2); - startY = (int) (startY / fill.getHeight()) * fill.getHeight() - fill.getHeight(); - var endY = (cam.position.y + cam.viewportHeight / 2 * zoom); + startY = (((int)startY) / texture.getHeight()) * texture.getHeight() - texture.getHeight(); - batch.setColor(fill.getColor()); - tmpTile.setRegion(new TextureRegion(fill.getTexture())); - tmpTile.draw(batch, startX, startY, endX - startX, endY - startY); - batch.setColor(Color.WHITE); - /* - for (var i = startX; i < endX; i += fill.getWidth()) - for (var j = startY; j < endY; j += fill.getHeight()) { - fill.setPosition(i, j); - fill.draw(batch); - } */ + batch.draw(texture, startX, startY, 0, 0, w, h); + //batch.draw(texture, startX, startY, 0, 0, (int)w, (int)h); } private void renderTokens(List tokenList, PlayerView view, boolean figuresOnly) { @@ -2971,13 +2989,13 @@ private void disposeZoneResources() { var background = this.background; this.background = null; if (background != null) { - background.getTexture().dispose(); + background.dispose(); } var fog = this.fog; this.fog = null; if (fog != null) { - fog.getTexture().dispose(); + fog.dispose(); } for (var sprite : isoSprites.values()) { From 1eab6e0d34f6634839d2ba47c22a51095833b403 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Wed, 19 May 2021 22:06:30 +0200 Subject: [PATCH 050/139] add rotation for selection border --- .../maptool/client/ui/zone/GdxRenderer.java | 33 +++++++++++-------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index f981c24375..82644150e6 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -1482,7 +1482,6 @@ private void fillViewportWith(Texture texture) { startY = (((int)startY) / texture.getHeight()) * texture.getHeight() - texture.getHeight(); batch.draw(texture, startX, startY, 0, 0, w, h); - //batch.draw(texture, startX, startY, 0, 0, (int)w, (int)h); } private void renderTokens(List tokenList, PlayerView view, boolean figuresOnly) { @@ -1783,7 +1782,6 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure tokenRectangle.height); boolean isSelected = zoneRenderer.getSelectedTokenSet().contains(token.getId()); if (isSelected) { - ImageBorder selectedBorder = token.isStamp() ? AppStyle.selectedStampBorder : AppStyle.selectedBorder; if (zoneRenderer.getHighlightCommonMacros().contains(token)) { @@ -1803,22 +1801,34 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure selectedBorder = AppConstants.FOW_TOOLS_BORDER; } } + + setProjectionMatrix(hudCam.combined); + tmpWorldCoord.set(gdxTokenRectangle.x, gdxTokenRectangle.y, 0); + cam.project(tmpWorldCoord); + gdxTokenRectangle.set(tmpWorldCoord.x, tmpWorldCoord.y, gdxTokenRectangle.width/zoom, gdxTokenRectangle.height/zoom); + if (token.hasFacing() && (token.getShape() == Token.TokenShape.TOP_DOWN || token.isStamp())) { - /* TODO: figure out how to rotate the selected border - tmpMatrix.idt(); + var transX = gdxTokenRectangle.width/2f - token.getAnchor().x/zoom; + var transY = gdxTokenRectangle.height/2f + token.getAnchor().y/zoom; - tmpMatrix.rotate(image.getX() + image.getOriginX(), - image.getY() + image.getOriginY(), 0, token.getFacing() + 90); - batch.setTransformMatrix(tmpMatrix);*/ + tmpMatrix.idt(); + tmpMatrix.translate(tmpWorldCoord.x + transX, tmpWorldCoord.y + transY, 0); + tmpMatrix.rotate(0, 0,1, token.getFacing() + 90); + tmpMatrix.translate(-transX, -transY, 0); + gdxTokenRectangle.x = 0; + gdxTokenRectangle.y = 0; + batch.setTransformMatrix(tmpMatrix); renderImageBorderAround(selectedBorder, gdxTokenRectangle); - // tmpMatrix.idt(); - // batch.setTransformMatrix(tmpMatrix); + tmpMatrix.idt(); + batch.setTransformMatrix(tmpMatrix); } else { renderImageBorderAround(selectedBorder, gdxTokenRectangle); } + + setProjectionMatrix(cam.combined); } // Token names and labels @@ -2020,7 +2030,6 @@ private void renderImageBorderAround(ImageBorder border, Rectangle bounds) { var index = imagePath.indexOf("border/"); var bordername = imagePath.substring(index); - var topRight = fetch(bordername + "/tr"); var top = fetch(bordername + "/top"); var topLeft = fetch(bordername + "/tl"); @@ -2030,7 +2039,6 @@ private void renderImageBorderAround(ImageBorder border, Rectangle bounds) { var bottomRight = fetch(bordername + "/br"); var right = fetch(bordername + "/right"); - //x,y is bottom left of the rectangle var leftMargin = border.getLeftMargin(); var rightMargin = border.getRightMargin(); @@ -2039,13 +2047,12 @@ private void renderImageBorderAround(ImageBorder border, Rectangle bounds) { var x = bounds.x - leftMargin; var y = bounds.y - bottomMargin; + var width = bounds.width + leftMargin + rightMargin; var height = bounds.height + topMargin + bottomMargin; - // Draw Corners - batch.draw(bottomLeft, x + leftMargin - bottomLeft.getRegionWidth(), y + topMargin - bottomLeft.getRegionHeight()); batch.draw(bottomRight, x + width - rightMargin, y + topMargin - bottomRight.getRegionHeight()); batch.draw(topLeft, x + leftMargin - topLeft.getRegionWidth(), y + height - bottomMargin); From 0801c1ea6af300edf88b7ad82f5e5ef69b6516c0 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Tue, 15 Jun 2021 21:18:51 +0200 Subject: [PATCH 051/139] add initial gif animation support --- .../net/rptools/maptool/box2d/GifDecoder.java | 731 ++++++++++++++++++ .../maptool/client/ui/zone/GdxRenderer.java | 36 +- 2 files changed, 761 insertions(+), 6 deletions(-) create mode 100644 src/main/java/net/rptools/maptool/box2d/GifDecoder.java diff --git a/src/main/java/net/rptools/maptool/box2d/GifDecoder.java b/src/main/java/net/rptools/maptool/box2d/GifDecoder.java new file mode 100644 index 0000000000..ae7cb5e485 --- /dev/null +++ b/src/main/java/net/rptools/maptool/box2d/GifDecoder.java @@ -0,0 +1,731 @@ +package net.rptools.maptool.box2d; + +import java.io.InputStream; +import java.util.Vector; + +import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.g2d.Animation; +import com.badlogic.gdx.graphics.g2d.TextureRegion; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.utils.Array; + +public class GifDecoder { + /** + * File read status: No errors. + */ + public static final int STATUS_OK = 0; + /** + * File read status: Error decoding file (may be partially decoded) + */ + public static final int STATUS_FORMAT_ERROR = 1; + /** + * File read status: Unable to open source. + */ + public static final int STATUS_OPEN_ERROR = 2; + /** + * max decoder pixel stack size + */ + protected static final int MAX_STACK_SIZE = 4096; + protected InputStream in; + protected int status; + protected int width; // full image width + protected int height; // full image height + protected boolean gctFlag; // global color table used + protected int gctSize; // size of global color table + protected int loopCount = 1; // iterations; 0 = repeat forever + protected int[] gct; // global color table + protected int[] lct; // local color table + protected int[] act; // active color table + protected int bgIndex; // background color index + protected int bgColor; // background color + protected int lastBgColor; // previous bg color + protected int pixelAspect; // pixel aspect ratio + protected boolean lctFlag; // local color table flag + protected boolean interlace; // interlace flag + protected int lctSize; // local color table size + protected int ix, iy, iw, ih; // current image rectangle + protected int lrx, lry, lrw, lrh; + protected DixieMap image; // current frame + protected DixieMap lastPixmap; // previous frame + protected byte[] block = new byte[256]; // current data block + protected int blockSize = 0; // block size last graphic control extension info + protected int dispose = 0; // 0=no action; 1=leave in place; 2=restore to bg; 3=restore to prev + protected int lastDispose = 0; + protected boolean transparency = false; // use transparent color + protected int delay = 0; // delay in milliseconds + protected int transIndex; // transparent color index + // LZW decoder working arrays + protected short[] prefix; + protected byte[] suffix; + protected byte[] pixelStack; + protected byte[] pixels; + protected Vector frames; // frames read from current file + protected int frameCount; + + private static class DixieMap extends Pixmap { + DixieMap(int w, int h, Pixmap.Format f) { + super(w, h, f); + } + + DixieMap(int[] data, int w, int h, Pixmap.Format f) { + super(w, h, f); + + int x, y; + + for (y = 0; y < h; y++) { + for (x = 0; x < w; x++) { + int pxl_ARGB8888 = data[x + y * w]; + int pxl_RGBA8888 = + ((pxl_ARGB8888 >> 24) & 0x000000ff) | ((pxl_ARGB8888 << 8) & 0xffffff00); + // convert ARGB8888 > RGBA8888 + drawPixel(x, y, pxl_RGBA8888); + } + } + } + + void getPixels(int[] pixels, int offset, int stride, int x, int y, int width, int height) { + java.nio.ByteBuffer bb = getPixels(); + + int k, l; + + for (k = y; k < y + height; k++) { + int _offset = offset; + for (l = x; l < x + width; l++) { + int pxl = bb.getInt(4 * (l + k * width)); + + // convert RGBA8888 > ARGB8888 + pixels[_offset++] = ((pxl >> 8) & 0x00ffffff) | ((pxl << 24) & 0xff000000); + } + offset += stride; + } + } + } + + private static class GifFrame { + public GifFrame(DixieMap im, int del) { + image = im; + delay = del; + } + + public DixieMap image; + public int delay; + } + + /** + * Gets display duration for specified frame. + * + * @param n int index of frame + * @return delay in milliseconds + */ + public int getDelay(int n) { + delay = -1; + if ((n >= 0) && (n < frameCount)) { + delay = frames.elementAt(n).delay; + } + return delay; + } + + /** + * Gets the number of frames read from file. + * + * @return frame count + */ + public int getFrameCount() { + return frameCount; + } + + /** + * Gets the first (or only) image read. + * + * @return BufferedPixmap containing first frame, or null if none. + */ + public Pixmap getPixmap() { + return getFrame(0); + } + + /** + * Gets the "Netscape" iteration count, if any. A count of 0 means repeat indefinitely. + * + * @return iteration count if one was specified, else 1. + */ + public int getLoopCount() { + return loopCount; + } + + /** + * Creates new frame image from current data (and previous frames as specified by their disposition codes). + */ + protected void setPixels() { + // expose destination image's pixels as int array + int[] dest = new int[width * height]; + // fill in starting image contents based on last image's dispose code + if (lastDispose > 0) { + if (lastDispose == 3) { + // use image before last + int n = frameCount - 2; + if (n > 0) { + lastPixmap = getFrame(n - 1); + } else { + lastPixmap = null; + } + } + if (lastPixmap != null) { + lastPixmap.getPixels(dest, 0, width, 0, 0, width, height); + // copy pixels + if (lastDispose == 2) { + // fill last image rect area with background color + int c = 0; + if (!transparency) { + c = lastBgColor; + } + for (int i = 0; i < lrh; i++) { + int n1 = (lry + i) * width + lrx; + int n2 = n1 + lrw; + for (int k = n1; k < n2; k++) { + dest[k] = c; + } + } + } + } + } + // copy each source line to the appropriate place in the destination + int pass = 1; + int inc = 8; + int iline = 0; + for (int i = 0; i < ih; i++) { + int line = i; + if (interlace) { + if (iline >= ih) { + pass++; + switch (pass) { + case 2: + iline = 4; + break; + case 3: + iline = 2; + inc = 4; + break; + case 4: + iline = 1; + inc = 2; + break; + default: + break; + } + } + line = iline; + iline += inc; + } + line += iy; + if (line < height) { + int k = line * width; + int dx = k + ix; // start of line in dest + int dlim = dx + iw; // end of dest line + if ((k + width) < dlim) { + dlim = k + width; // past dest edge + } + int sx = i * iw; // start of line in source + while (dx < dlim) { + // map color and insert in destination + int index = ((int) pixels[sx++]) & 0xff; + int c = act[index]; + if (c != 0) { + dest[dx] = c; + } + dx++; + } + } + } + image = new DixieMap(dest, width, height, Pixmap.Format.RGBA8888); + //Pixmap.createPixmap(dest, width, height, Config.ARGB_4444); + } + + /** + * Gets the image contents of frame n. + * + * @return BufferedPixmap representation of frame, or null if n is invalid. + */ + public DixieMap getFrame(int n) { + if (frameCount <= 0) + return null; + n = n % frameCount; + return ((GifFrame) frames.elementAt(n)).image; + } + + /** + * Reads GIF image from stream + * + * @param is containing GIF file. + * @return read status code (0 = no errors) + */ + public int read(InputStream is) { + init(); + if (is != null) { + in = is; + readHeader(); + if (!err()) { + readContents(); + if (frameCount < 0) { + status = STATUS_FORMAT_ERROR; + } + } + } else { + status = STATUS_OPEN_ERROR; + } + try { + is.close(); + } catch (Exception e) { + } + return status; + } + + /** + * Decodes LZW image data into pixel array. Adapted from John Cristy's BitmapMagick. + */ + protected void decodeBitmapData() { + int nullCode = -1; + int npix = iw * ih; + int available, clear, code_mask, code_size, end_of_information, in_code, old_code, bits, code, count, i, datum, data_size, first, top, bi, pi; + if ((pixels == null) || (pixels.length < npix)) { + pixels = new byte[npix]; // allocate new pixel array + } + if (prefix == null) { + prefix = new short[MAX_STACK_SIZE]; + } + if (suffix == null) { + suffix = new byte[MAX_STACK_SIZE]; + } + if (pixelStack == null) { + pixelStack = new byte[MAX_STACK_SIZE + 1]; + } + // Initialize GIF data stream decoder. + data_size = read(); + clear = 1 << data_size; + end_of_information = clear + 1; + available = clear + 2; + old_code = nullCode; + code_size = data_size + 1; + code_mask = (1 << code_size) - 1; + for (code = 0; code < clear; code++) { + prefix[code] = 0; // XXX ArrayIndexOutOfBoundsException + suffix[code] = (byte) code; + } + // Decode GIF pixel stream. + datum = bits = count = first = top = pi = bi = 0; + for (i = 0; i < npix; ) { + if (top == 0) { + if (bits < code_size) { + // Load bytes until there are enough bits for a code. + if (count == 0) { + // Read a new data block. + count = readBlock(); + if (count <= 0) { + break; + } + bi = 0; + } + datum += (((int) block[bi]) & 0xff) << bits; + bits += 8; + bi++; + count--; + continue; + } + // Get the next code. + code = datum & code_mask; + datum >>= code_size; + bits -= code_size; + // Interpret the code + if ((code > available) || (code == end_of_information)) { + break; + } + if (code == clear) { + // Reset decoder. + code_size = data_size + 1; + code_mask = (1 << code_size) - 1; + available = clear + 2; + old_code = nullCode; + continue; + } + if (old_code == nullCode) { + pixelStack[top++] = suffix[code]; + old_code = code; + first = code; + continue; + } + in_code = code; + if (code == available) { + pixelStack[top++] = (byte) first; + code = old_code; + } + while (code > clear) { + pixelStack[top++] = suffix[code]; + code = prefix[code]; + } + first = ((int) suffix[code]) & 0xff; + // Add a new string to the string table, + if (available >= MAX_STACK_SIZE) { + break; + } + pixelStack[top++] = (byte) first; + prefix[available] = (short) old_code; + suffix[available] = (byte) first; + available++; + if (((available & code_mask) == 0) && (available < MAX_STACK_SIZE)) { + code_size++; + code_mask += available; + } + old_code = in_code; + } + // Pop a pixel off the pixel stack. + top--; + pixels[pi++] = pixelStack[top]; + i++; + } + for (i = pi; i < npix; i++) { + pixels[i] = 0; // clear missing pixels + } + } + + /** + * Returns true if an error was encountered during reading/decoding + */ + protected boolean err() { + return status != STATUS_OK; + } + + /** + * Initializes or re-initializes reader + */ + protected void init() { + status = STATUS_OK; + frameCount = 0; + frames = new Vector(); + gct = null; + lct = null; + } + + /** + * Reads a single byte from the input stream. + */ + protected int read() { + int curByte = 0; + try { + curByte = in.read(); + } catch (Exception e) { + status = STATUS_FORMAT_ERROR; + } + return curByte; + } + + /** + * Reads next variable length block from input. + * + * @return number of bytes stored in "buffer" + */ + protected int readBlock() { + blockSize = read(); + int n = 0; + if (blockSize > 0) { + try { + int count = 0; + while (n < blockSize) { + count = in.read(block, n, blockSize - n); + if (count == -1) { + break; + } + n += count; + } + } catch (Exception e) { + e.printStackTrace(); + } + if (n < blockSize) { + status = STATUS_FORMAT_ERROR; + } + } + return n; + } + + /** + * Reads color table as 256 RGB integer values + * + * @param ncolors int number of colors to read + * @return int array containing 256 colors (packed ARGB with full alpha) + */ + protected int[] readColorTable(int ncolors) { + int nbytes = 3 * ncolors; + int[] tab = null; + byte[] c = new byte[nbytes]; + int n = 0; + try { + n = in.read(c); + } catch (Exception e) { + e.printStackTrace(); + } + if (n < nbytes) { + status = STATUS_FORMAT_ERROR; + } else { + tab = new int[256]; // max size to avoid bounds checks + int i = 0; + int j = 0; + while (i < ncolors) { + int r = ((int) c[j++]) & 0xff; + int g = ((int) c[j++]) & 0xff; + int b = ((int) c[j++]) & 0xff; + tab[i++] = 0xff000000 | (r << 16) | (g << 8) | b; + } + } + return tab; + } + + /** + * Main file parser. Reads GIF content blocks. + */ + protected void readContents() { + // read GIF file content blocks + boolean done = false; + while (!(done || err())) { + int code = read(); + switch (code) { + case 0x2C: // image separator + readBitmap(); + break; + case 0x21: // extension + code = read(); + switch (code) { + case 0xf9: // graphics control extension + readGraphicControlExt(); + break; + case 0xff: // application extension + readBlock(); + String app = ""; + for (int i = 0; i < 11; i++) { + app += (char) block[i]; + } + if (app.equals("NETSCAPE2.0")) { + readNetscapeExt(); + } else { + skip(); // don't care + } + break; + case 0xfe:// comment extension + skip(); + break; + case 0x01:// plain text extension + skip(); + break; + default: // uninteresting extension + skip(); + } + break; + case 0x3b: // terminator + done = true; + break; + case 0x00: // bad byte, but keep going and see what happens break; + default: + status = STATUS_FORMAT_ERROR; + } + } + } + + /** + * Reads Graphics Control Extension values + */ + protected void readGraphicControlExt() { + read(); // block size + int packed = read(); // packed fields + dispose = (packed & 0x1c) >> 2; // disposal method + if (dispose == 0) { + dispose = 1; // elect to keep old image if discretionary + } + transparency = (packed & 1) != 0; + delay = readShort() * 10; // delay in milliseconds + transIndex = read(); // transparent color index + read(); // block terminator + } + + /** + * Reads GIF file header information. + */ + protected void readHeader() { + String id = ""; + for (int i = 0; i < 6; i++) { + id += (char) read(); + } + if (!id.startsWith("GIF")) { + status = STATUS_FORMAT_ERROR; + return; + } + readLSD(); + if (gctFlag && !err()) { + gct = readColorTable(gctSize); + bgColor = gct[bgIndex]; + } + } + + /** + * Reads next frame image + */ + protected void readBitmap() { + ix = readShort(); // (sub)image position & size + iy = readShort(); + iw = readShort(); + ih = readShort(); + int packed = read(); + lctFlag = (packed & 0x80) != 0; // 1 - local color table flag interlace + lctSize = (int) Math.pow(2, (packed & 0x07) + 1); + // 3 - sort flag + // 4-5 - reserved lctSize = 2 << (packed & 7); // 6-8 - local color + // table size + interlace = (packed & 0x40) != 0; + if (lctFlag) { + lct = readColorTable(lctSize); // read table + act = lct; // make local table active + } else { + act = gct; // make global table active + if (bgIndex == transIndex) { + bgColor = 0; + } + } + int save = 0; + if (transparency) { + save = act[transIndex]; + act[transIndex] = 0; // set transparent color if specified + } + if (act == null) { + status = STATUS_FORMAT_ERROR; // no color table defined + } + if (err()) { + return; + } + decodeBitmapData(); // decode pixel data + skip(); + if (err()) { + return; + } + frameCount++; + // create new image to receive frame data + image = new DixieMap(width, height, Pixmap.Format.RGBA8888); + setPixels(); // transfer pixel data to image + frames.addElement(new GifFrame(image, delay)); // add image to frame + // list + if (transparency) { + act[transIndex] = save; + } + resetFrame(); + } + + /** + * Reads Logical Screen Descriptor + */ + protected void readLSD() { + // logical screen size + width = readShort(); + height = readShort(); + // packed fields + int packed = read(); + gctFlag = (packed & 0x80) != 0; // 1 : global color table flag + // 2-4 : color resolution + // 5 : gct sort flag + gctSize = 2 << (packed & 7); // 6-8 : gct size + bgIndex = read(); // background color index + pixelAspect = read(); // pixel aspect ratio + } + + /** + * Reads Netscape extenstion to obtain iteration count + */ + protected void readNetscapeExt() { + do { + readBlock(); + if (block[0] == 1) { + // loop count sub-block + int b1 = ((int) block[1]) & 0xff; + int b2 = ((int) block[2]) & 0xff; + loopCount = (b2 << 8) | b1; + } + } while ((blockSize > 0) && !err()); + } + + /** + * Reads next 16-bit value, LSB first + */ + protected int readShort() { + // read 16-bit value, LSB first + return read() | (read() << 8); + } + + /** + * Resets frame state for reading next image. + */ + protected void resetFrame() { + lastDispose = dispose; + lrx = ix; + lry = iy; + lrw = iw; + lrh = ih; + lastPixmap = image; + lastBgColor = bgColor; + dispose = 0; + transparency = false; + delay = 0; + lct = null; + } + + /** + * Skips variable length blocks up to and including next zero length block. + */ + protected void skip() { + do { + readBlock(); + } while ((blockSize > 0) && !err()); + } + + public Animation getAnimation(Animation.PlayMode playMode) { + int nrFrames = getFrameCount(); + Pixmap frame = getFrame(0); + int width = frame.getWidth(); + int height = frame.getHeight(); + int vzones = (int) Math.sqrt((double) nrFrames); + int hzones = vzones; + + while (vzones * hzones < nrFrames) vzones++; + + int v, h; + + Pixmap target = new Pixmap(width * hzones, height * vzones, Pixmap.Format.RGBA8888); + + for (h = 0; h < hzones; h++) { + for (v = 0; v < vzones; v++) { + int frameID = v + h * vzones; + if (frameID < nrFrames) { + frame = getFrame(frameID); + target.drawPixmap(frame, h * width, v * height); + } + } + } + + Texture texture = new Texture(target); + Array texReg = new Array(); + + for (h = 0; h < hzones; h++) { + for (v = 0; v < vzones; v++) { + int frameID = v + h * vzones; + if (frameID < nrFrames) { + TextureRegion tr = new TextureRegion(texture, h * width, v * height, width, height); + texReg.add(tr); + } + } + } + float frameDuration = (float) getDelay(0); + frameDuration /= 1000; // convert milliseconds into seconds + Animation result = new Animation(frameDuration, texReg, playMode); + + return result; + } + + public static Animation loadGIFAnimation(Animation.PlayMode playMode, InputStream is) { + GifDecoder gdec = new GifDecoder(); + gdec.read(is); + return gdec.getAnimation(playMode); + } +} \ No newline at end of file diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 82644150e6..978f6a7158 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -25,6 +25,7 @@ import net.rptools.lib.image.ImageUtil; import net.rptools.lib.swing.ImageBorder; import net.rptools.lib.swing.SwingUtil; +import net.rptools.maptool.box2d.GifDecoder; import net.rptools.maptool.box2d.NativeRenderer; import net.rptools.maptool.client.*; import net.rptools.maptool.client.tool.drawing.FreehandExposeTool; @@ -54,6 +55,7 @@ import java.awt.*; import java.awt.Polygon; import java.awt.geom.*; +import java.io.ByteArrayInputStream; import java.text.NumberFormat; import java.util.*; import java.util.List; @@ -80,6 +82,7 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private final Map isoSprites = new HashMap<>(); private final Map fetchedRegions = new HashMap<>(); private final Map bigSprites = new HashMap<>(); + private final Map> animationMap = new HashMap<>(); //renderFog private final String ATLAS = "net/rptools/maptool/client/maptool.atlas"; @@ -100,6 +103,7 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private int offsetX = 0; private int offsetY = 0; private float zoom = 1.0f; + private float stateTime = 0f; private boolean renderZone = false; // general resources private OrthographicCamera cam; @@ -249,6 +253,7 @@ private void updateCam() { @Override public void render() { + stateTime += Gdx.graphics.getDeltaTime(); manager.finishLoading(); packer.updateTextureAtlas(tokenAtlas, Texture.TextureFilter.Linear, Texture.TextureFilter.Linear, false); @@ -1311,8 +1316,7 @@ private void drawHatch(IsometricGrid grid, float x, float y) { private void renderGrid(SquareGrid grid) { var scale = (float) zoneRenderer.getScale(); - int gridSize = (int) (grid.getSize() * scale); - + float gridSize = (grid.getSize() * scale); Color.argb8888ToColor(tmpColor, zone.getGridColor()); drawer.setColor(tmpColor); @@ -1322,8 +1326,8 @@ private void renderGrid(SquareGrid grid) { var w = hudCam.viewportWidth; var h = hudCam.viewportHeight; - var offX = (int) (zoneRenderer.getViewOffsetX() % gridSize + grid.getOffsetX() * scale) + 1; - var offY = (int) (zoneRenderer.getViewOffsetY() % gridSize + grid.getOffsetY() * scale) + 1; + var offX = Math.round(zoneRenderer.getViewOffsetX() % gridSize + grid.getOffsetX() * scale); + var offY = Math.round(zoneRenderer.getViewOffsetY() % gridSize + grid.getOffsetY() * scale); var startCol = ((int) (x / gridSize) * gridSize); var startRow = ((int) (y / gridSize) * gridSize); @@ -1331,10 +1335,10 @@ private void renderGrid(SquareGrid grid) { var lineWidth = AppState.getGridSize(); for (float row = startRow; row < y + h + gridSize; row += gridSize) - drawer.line(x, (int) (h - (row + offY)), x + w, (int) (h - (row + offY)), lineWidth); + drawer.line(x, Math.round(h - (row + offY)), x + w, Math.round(h - (row + offY)), lineWidth); for (float col = startCol; col < x + w + gridSize; col += gridSize) - drawer.line((int) (col + offX), y, (int) (col + offX), y + h, lineWidth); + drawer.line(Math.round(col + offX), y, Math.round(col + offX), y + h, lineWidth); } private FloatArray pathToVertices(GeneralPath path) { @@ -1977,12 +1981,21 @@ private Sprite getSprite(MD5Key key) { if (key == null) return null; + var animation = animationMap.get(key); + if(animation != null) { + var currentFrame = animation.getKeyFrame(stateTime, true); + var sprite = new Sprite(currentFrame); + sprite.setSize(currentFrame.getRegionWidth(), currentFrame.getRegionHeight()); + return sprite; + } + var sprite = bigSprites.get(key); if (sprite != null) { sprite.setSize(sprite.getTexture().getWidth(), sprite.getTexture().getHeight()); return sprite; } + return getSprite(key.toString()); } @@ -3014,6 +3027,7 @@ private void disposeZoneResources() { sprite.getTexture().dispose(); } bigSprites.clear(); + animationMap.clear(); }); } @@ -3253,6 +3267,16 @@ public void flushFog() { public void assetAvailable(MD5Key key) { try { var asset = AssetManager.getAsset(key); + if(asset.getImageExtension() == "gif") { + + Gdx.app.postRunnable(() -> { + var ass = AssetManager.getAsset(key); + var is = new ByteArrayInputStream(asset.getImage()); + var animation = GifDecoder.loadGIFAnimation(Animation.PlayMode.LOOP, is); + animationMap.put(key, animation); + }); + return; + } var img = ImageUtil.createCompatibleImage(ImageUtil.bytesToImage(asset.getImage(), asset.getName()), null); //var img = ImageManager.getImage(key); var bytes = ImageUtil.imageToBytes(img, "png"); From fd83cd626d7507a723d584afd951f94467dc8aca Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sun, 8 Aug 2021 15:15:11 +0200 Subject: [PATCH 052/139] switch to jogl-backend of libgdx --- build.gradle | 7 +++++- .../maptool/client/ui/MapToolFrame.java | 25 ++++++++++--------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/build.gradle b/build.gradle index f458d663b2..7a41e6bffa 100644 --- a/build.gradle +++ b/build.gradle @@ -33,7 +33,7 @@ def winUpgradeUUID = UUID.randomUUID().toString(); // Custom properties ext { - gdxVersion = '1.9.15-SNAPSHOT' + gdxVersion = '1.10.0' roboVMVersion = '2.3.12' box2DLightsVersion = '1.5' ashleyVersion = '1.7.3' @@ -243,6 +243,10 @@ repositories { maven { url "https://oss.sonatype.org/content/repositories/releases/" } } +configurations.all { + resolutionStrategy.cacheChangingModulesFor 0, 'seconds' + resolutionStrategy.cacheDynamicVersionsFor 0, 'seconds' +} // In this section you declare the dependencies for your production and test code dependencies { @@ -375,6 +379,7 @@ dependencies { // Noise Generator implementation 'com.github.cwisniew:NoiseLib:1.0.0-rc3' // The most recent version, 1.0.0 is build for a later java version: major version 55 is newer than 54, the highest major version supported by this compiler + implementation 'com.github.thelsing:libgdx-jogl-backend:1.10.0' implementation "com.badlogicgames.gdx:gdx:$gdxVersion" implementation "com.badlogicgames.gdx:gdx-box2d:$gdxVersion" implementation "com.badlogicgames.box2dlights:box2dlights:$box2DLightsVersion" diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index bfbafa98e1..ac4da5edda 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -14,6 +14,7 @@ */ package net.rptools.maptool.client.ui; +import com.badlogic.gdx.backends.jogamp.JoglSwingCanvas; import com.jidesoft.docking.DefaultDockableHolder; import com.jidesoft.docking.DockableFrame; import java.awt.*; @@ -40,6 +41,7 @@ import javafx.application.Platform; import javafx.embed.swing.JFXPanel; +import javafx.embed.swing.SwingNode; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.layout.StackPane; @@ -86,10 +88,7 @@ import net.rptools.maptool.client.ui.tokenpanel.InitiativePanel; import net.rptools.maptool.client.ui.tokenpanel.TokenPanelTreeCellRenderer; import net.rptools.maptool.client.ui.tokenpanel.TokenPanelTreeModel; -import net.rptools.maptool.client.ui.zone.PointerOverlay; -import net.rptools.maptool.client.ui.zone.PointerToolOverlay; -import net.rptools.maptool.client.ui.zone.ZoneMiniMapPanel; -import net.rptools.maptool.client.ui.zone.ZoneRenderer; +import net.rptools.maptool.client.ui.zone.*; import net.rptools.maptool.language.I18N; import net.rptools.maptool.model.Asset; import net.rptools.maptool.model.GUID; @@ -126,6 +125,7 @@ public class MapToolFrame extends DefaultDockableHolder private final Pen pen = new Pen(Pen.DEFAULT); private final Map frameMap = new HashMap(); + private JoglSwingCanvas glCanvas; /** Are the drawing measurements being painted? */ private boolean paintDrawingMeasurement = true; @@ -477,14 +477,15 @@ public MapToolFrame(JMenuBar menuBar) { setChatTypingLabelColor(AppPreferences.getChatNotificationColor()); Platform.runLater(()->{ - var gdxCanvas = new Canvas(); + + /*var gdxCanvas = new Canvas(); var frame = new JFrame(); frame.setSize(getSize()); frame.add(gdxCanvas); frame.setVisible(true); - +*/ /* var panel = new JPanel(); panel.add(gdxCanvas); @@ -493,16 +494,16 @@ public MapToolFrame(JMenuBar menuBar) { swingNode.setContent(panel); */ - - javafx.scene.control.Label label = new Label(" "); + glCanvas = new JoglSwingCanvas(GdxRenderer.getInstance(), "test", 640, 480); + SwingNode swingNode = new SwingNode(); + swingNode.setContent(glCanvas.getGLCanvas()); + javafx.scene.control.Label label = new Label("This is a jfx label"); label.setMouseTransparent(true); - //label.setStyle("-fx-font-size: 64pt; -fx-font-family: Arial; -fx-font-weight: bold; -fx-text-fill: white; -fx-opacity: 0.8;"); - - var canvas = new NativeRenderingCanvas(gdxCanvas); + label.setStyle("-fx-font-size: 64pt; -fx-font-family: Arial; -fx-font-weight: bold; -fx-text-fill: white; -fx-opacity: 0.8;"); var root = new StackPane(); //FIXME: find out why gdx doen't render without this label - root.getChildren().addAll(/*swingNode, */canvas.getRoot(),label); + root.getChildren().addAll(swingNode/*, label*/); Scene scene = new Scene(root); jfxPanel.setScene(scene); From 5a0b83d914a80a16a15649a6ba7d6d531fbd0dd5 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Tue, 10 Aug 2021 20:10:53 +0200 Subject: [PATCH 053/139] save wip --- build.gradle | 3 +- .../rptools/maptool/client/AppActions.java | 2 +- .../net/rptools/maptool/client/MapTool.java | 38 ------ .../maptool/client/ui/MapToolFrame.java | 44 +++---- .../maptool/client/ui/ToolbarPanel.java | 2 +- .../maptool/client/ui/zone/GdxRenderer.java | 122 +++++++++++++++--- .../maptool/client/ui/zone/ZoneRenderer.java | 3 +- 7 files changed, 126 insertions(+), 88 deletions(-) diff --git a/build.gradle b/build.gradle index 7a41e6bffa..3180730af5 100644 --- a/build.gradle +++ b/build.gradle @@ -243,11 +243,12 @@ repositories { maven { url "https://oss.sonatype.org/content/repositories/releases/" } } +/* configurations.all { resolutionStrategy.cacheChangingModulesFor 0, 'seconds' resolutionStrategy.cacheDynamicVersionsFor 0, 'seconds' } - +*/ // In this section you declare the dependencies for your production and test code dependencies { // Jamz: Do NOT update log4j libs without testing with uberjar build, 2.13.0 currently does not work diff --git a/src/main/java/net/rptools/maptool/client/AppActions.java b/src/main/java/net/rptools/maptool/client/AppActions.java index 5585ab87d8..62cbfc0bc2 100644 --- a/src/main/java/net/rptools/maptool/client/AppActions.java +++ b/src/main/java/net/rptools/maptool/client/AppActions.java @@ -2043,7 +2043,7 @@ protected void executeAction() { @Override public void executeAction() { - MapTool.getFrame().addJfx(); + MapTool.getFrame().addGdx(); //MapTool.loadBox2dTest(); } diff --git a/src/main/java/net/rptools/maptool/client/MapTool.java b/src/main/java/net/rptools/maptool/client/MapTool.java index 626a018782..8b1b2b5e7d 100644 --- a/src/main/java/net/rptools/maptool/client/MapTool.java +++ b/src/main/java/net/rptools/maptool/client/MapTool.java @@ -167,7 +167,6 @@ public enum PreferencesEvent { private static String lastWhisperer; private static final MTWebAppServer webAppServer = new MTWebAppServer(); - private static DesktopLauncher MapToolLwjglApplication; // Jamz: To support new command line parameters for multi-monitor support & enhanced PrintStream private static boolean debug = false; @@ -178,8 +177,6 @@ public enum PreferencesEvent { private static int windowX = -1; private static int windowY = -1; private static String loadCampaignOnStartPath = ""; - private static boolean startLibGDX = false; - public static boolean libgdxLoaded = false; public static Dimension getThumbnailSize() { return THUMBNAIL_SIZE; @@ -1255,23 +1252,6 @@ public static MapToolFrame getFrame() { return clientFrame; } - public static DesktopLauncher getApp() { - return MapToolLwjglApplication; - } - - public static void loadBox2dTest() { - if (MapToolLwjglApplication == null) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - MapToolLwjglApplication = new DesktopLauncher(clientFrame); - libgdxLoaded = true; - } - }); - } else if (!MapToolLwjglApplication.isVisible()) { - MapToolLwjglApplication.setVisible(true); - } - } - private static void configureJide() { LookAndFeelFactory.UIDefaultsCustomizer uiDefaultsCustomizer = defaults -> { @@ -1769,24 +1749,6 @@ public static void main(String[] args) { // Draw frame contents on resize tk.setDynamicLayout(true); - // Add a LibGDX App/window for testing - if (startLibGDX) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - //MapToolLwjglApplication = new DesktopLauncher(clientFrame); - libgdxLoaded = true; - } - }); - - // LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration(); - // cfg.title = MapToolGame.TITLE; - // cfg.width = MapToolGame.SCREEN_WIDTH; - // cfg.height = MapToolGame.SCREEN_HEIGHT; - // - // MapToolLwjglApplication = new LwjglApplication(new MapToolGame(), cfg); - } - - EventQueue.invokeLater( () -> { initialize(); diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index ac4da5edda..146514292d 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -39,6 +39,7 @@ import javax.swing.tree.TreeSelectionModel; import javax.xml.parsers.ParserConfigurationException; +import com.jogamp.opengl.awt.GLJPanel; import javafx.application.Platform; import javafx.embed.swing.JFXPanel; import javafx.embed.swing.SwingNode; @@ -55,7 +56,6 @@ import net.rptools.lib.swing.PositionalLayout; import net.rptools.lib.swing.SwingUtil; import net.rptools.lib.swing.preference.WindowPreferences; -import net.rptools.maptool.box2d.NativeRenderingCanvas; import net.rptools.maptool.client.AppActions; import net.rptools.maptool.client.*; import net.rptools.maptool.client.AppActions.ClientAction; @@ -125,7 +125,7 @@ public class MapToolFrame extends DefaultDockableHolder private final Pen pen = new Pen(Pen.DEFAULT); private final Map frameMap = new HashMap(); - private JoglSwingCanvas glCanvas; + private JoglSwingCanvas joglSwingCanvas; /** Are the drawing measurements being painted? */ private boolean paintDrawingMeasurement = true; @@ -221,9 +221,9 @@ public class MapToolFrame extends DefaultDockableHolder private final GlobalPanel globalPanel = new GlobalPanel(); private final SelectionPanel selectionPanel = new SelectionPanel(); private final ImpersonatePanel impersonatePanel = new ImpersonatePanel(); - private final JFXPanel jfxPanel = new JFXPanel(); private final DragImageGlassPane dragImageGlassPane = new DragImageGlassPane(); + private GLJPanel gdxPanel; private final class KeyListenerDeleteDraw implements KeyListener { private final JTree tree; @@ -476,45 +476,31 @@ public MapToolFrame(JMenuBar menuBar) { chatTimer = getChatTimer(); setChatTypingLabelColor(AppPreferences.getChatNotificationColor()); + joglSwingCanvas = new JoglSwingCanvas(GdxRenderer.getInstance(), "test", 640, 480); /* Platform.runLater(()->{ - /*var gdxCanvas = new Canvas(); - var frame = new JFrame(); - frame.setSize(getSize()); - frame.add(gdxCanvas); - frame.setVisible(true); -*/ -/* - var panel = new JPanel(); - panel.add(gdxCanvas); - panel.setSize(getSize()); - SwingNode swingNode = new SwingNode(); - swingNode.setContent(panel); -*/ - - glCanvas = new JoglSwingCanvas(GdxRenderer.getInstance(), "test", 640, 480); SwingNode swingNode = new SwingNode(); - swingNode.setContent(glCanvas.getGLCanvas()); + swingNode.setContent(joglSwingCanvas.getGLCanvas()); javafx.scene.control.Label label = new Label("This is a jfx label"); label.setMouseTransparent(true); label.setStyle("-fx-font-size: 64pt; -fx-font-family: Arial; -fx-font-weight: bold; -fx-text-fill: white; -fx-opacity: 0.8;"); var root = new StackPane(); //FIXME: find out why gdx doen't render without this label - root.getChildren().addAll(swingNode/*, label*/); + root.getChildren().addAll(swingNode); Scene scene = new Scene(root); - jfxPanel.setScene(scene); - }); - zoneRendererPanel.add(jfxPanel, PositionalLayout.Position.CENTER); - - jfxPanel.setVisible(false); + gdxPanel.setScene(scene); + }); */ + gdxPanel = joglSwingCanvas.getGLCanvas(); + zoneRendererPanel.add(gdxPanel, PositionalLayout.Position.CENTER); + gdxPanel.setVisible(false); } - public void addJfx() { - jfxPanel.setVisible(!jfxPanel.isVisible()); + public void addGdx() { + gdxPanel.setVisible(!gdxPanel.isVisible()); } public ChatNotificationTimers getChatNotificationTimers() { @@ -932,8 +918,8 @@ public ZoomStatusBar getZoomStatusBar() { return zoomStatusBar; } - public JFXPanel getJfxPanel() { - return jfxPanel; + public GLJPanel getGdxPanel() { + return gdxPanel; } diff --git a/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java b/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java index 0b6037aba8..12babe793a 100644 --- a/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java +++ b/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java @@ -412,7 +412,7 @@ private JToggleButton createJfxButton( button.setToolTipText(mutetooltip); button.addActionListener( e -> { - MapTool.getFrame().addJfx(); + MapTool.getFrame().addGdx(); }); try { diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 978f6a7158..678f187c99 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -1,5 +1,7 @@ package net.rptools.maptool.client.ui.zone; +import box2dLight.PointLight; +import box2dLight.RayHandler; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver; @@ -11,6 +13,7 @@ import com.badlogic.gdx.graphics.g2d.freetype.FreetypeFontLoader; import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.*; +import com.badlogic.gdx.physics.box2d.*; import com.badlogic.gdx.scenes.scene2d.utils.TiledDrawable; import com.badlogic.gdx.utils.FloatArray; import com.badlogic.gdx.utils.GdxRuntimeException; @@ -54,6 +57,7 @@ import javax.swing.*; import java.awt.*; import java.awt.Polygon; +import java.awt.Shape; import java.awt.geom.*; import java.io.ByteArrayInputStream; import java.text.NumberFormat; @@ -67,8 +71,6 @@ * The world coordinates are y-up, x-left. I moved the world to the 4th quadrant of the * coordinate system. So if you would draw a token t awt at (x,y) you have to draw it at (x, -y - t.width) *

    - * Bugs: - * - Imageborders are not rotated */ @@ -160,9 +162,16 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private float pointsPerBezier = 10f; private boolean showAstarDebugging = false; + // Box2D stuff + private World world; + private RayHandler rayHandler; + private Box2DDebugRenderer debugRenderer; + private Map tokenBodies = new HashMap<>(); + public GdxRenderer() { MapTool.getEventDispatcher().addListener(this, MapTool.ZoneEvent.Activated); + Box2D.init(); } public static GdxRenderer getInstance() { @@ -173,6 +182,19 @@ public static GdxRenderer getInstance() { @Override public void create() { + world = new World(new Vector2(0, 0), true); + rayHandler = new RayHandler(world); + rayHandler.setAmbientLight(0.1f, 0.1f, 0.1f, 1f); + rayHandler.setBlurNum(3); + PointLight pl = new PointLight(rayHandler, 128, new Color(0.2f,1,1,1f), 10,-500,200); + PointLight pl2 = new PointLight(rayHandler, 128, new Color(1,0,1,1f), 10,500,200); + + rayHandler.setShadows(true); + pl.setStaticLight(false); + pl.setSoft(true); + + + debugRenderer = new Box2DDebugRenderer(); var resolver = new InternalFileHandleResolver(); manager.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver)); manager.setLoader(BitmapFont.class, ".ttf", new FreetypeFontLoader(resolver)); @@ -253,7 +275,8 @@ private void updateCam() { @Override public void render() { - stateTime += Gdx.graphics.getDeltaTime(); + var delta = Gdx.graphics.getDeltaTime(); + stateTime += delta; manager.finishLoading(); packer.updateTextureAtlas(tokenAtlas, Texture.TextureFilter.Linear, Texture.TextureFilter.Linear, false); @@ -276,7 +299,12 @@ public void render() { // vfxManager.cleanUpBuffers(); // vfxManager.beginInputCapture(); + ScreenUtils.clear(Color.BLACK); doRendering(); + rayHandler.setCombinedMatrix(cam.combined, cam.position.x, cam.position.y, cam.viewportWidth, cam.viewportHeight); + rayHandler.updateAndRender(); + debugRenderer.render(world, cam.combined); + world.step(1/60f, 6, 2); // vfxManager.endInputCapture(); // vfxManager.applyEffects(); // vfxManager.renderToScreen(); @@ -320,7 +348,6 @@ private void loadAssets() { } private void doRendering() { - ScreenUtils.clear(Color.CLEAR); batch.enableBlending(); batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); @@ -3214,20 +3241,31 @@ public void handleAppEvent(AppEvent event) { public void modelChanged(ModelChangeEvent event) { Object evt = event.getEvent(); System.out.println("ModelChangend: " + evt); - if (evt == Zone.Event.TOPOLOGY_CHANGED) { - flushFog(); - //flushLight(); - return; - } - if (evt == Zone.Event.FOG_CHANGED) { - flushFog = true; - return; - } - if (evt == Zone.Event.TOKEN_CHANGED) { - updateVisibleArea(); + if(!(evt instanceof Zone.Event)) return; + var eventType = (Zone.Event)evt; + switch (eventType) { + case TOPOLOGY_CHANGED: + flushFog(); + //flushLight(); + break; + case FOG_CHANGED: + flushFog = true; + break; + case TOKEN_CHANGED: { + updateVisibleArea(); + var token = (Token)event.getArg(); + updateBodyFor(token); + break; + } + case TOKEN_ADDED: { + var token = (Token)event.getArg(); + addBodyFor(token); + System.out.println(); + break; + } } - return; + /* if (evt == Zone.Event.TOKEN_CHANGED || evt == Zone.Event.TOKEN_REMOVED @@ -3251,6 +3289,58 @@ public void modelChanged(ModelChangeEvent event) { */ } + private void addBodyFor(Token token) { + // zone.getGrid(). + var body = tokenBodies.get(token); + if(body != null) + return; + + // First we create a body definition + BodyDef bodyDef = new BodyDef(); +// We set our body to dynamic, for something like ground which doesn't move we would set it to StaticBody + bodyDef.type = BodyDef.BodyType.DynamicBody; +// Set our body's starting position in the world + // bodyDef.position.set(0, 0); + +// Create our body in the world using our body definition + body = world.createBody(bodyDef); + +// Create a circle shape and set its radius to 6 + CircleShape circle = new CircleShape(); + circle.setRadius(6f); + +// Create a fixture definition to apply our shape to + FixtureDef fixtureDef = new FixtureDef(); + fixtureDef.shape = circle; + fixtureDef.density = 0.5f; + fixtureDef.friction = 0.4f; + fixtureDef.restitution = 0.6f; // Make it bounce a little bit + +// Create our fixture and attach it to the body + Fixture fixture = body.createFixture(fixtureDef); + +// Remember to dispose of any shapes after you're done with them! +// BodyDef and FixtureDef don't need disposing, but shapes do. + circle.dispose(); + + tokenBodies.put(token, body); + updateBodyFor(token); + } + + void updateBodyFor(Token token) { + var body = tokenBodies.get(token); + if(body == null) + return; + + var bounds = token.getBounds(zone); + + + float x = token.getX() + bounds.width/2 + token.getAnchorX(); + float y = -(token.getY() + bounds.height/2 + token.getAnchorY()); + + body.setTransform(x, y, (float)Math.toRadians(token.getFacingInDegrees())); + } + public void setScale(Scale scale) { offsetX = scale.getOffsetX() * -1; offsetY = scale.getOffsetY(); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index 06b344fc0d..3c10bfbd7f 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -54,7 +54,6 @@ import javax.swing.JComponent; import javax.swing.SwingUtilities; -import com.badlogic.gdx.Gdx; import net.rptools.lib.CodeTimer; import net.rptools.lib.MD5Key; import net.rptools.lib.swing.ImageBorder; @@ -914,7 +913,7 @@ public void paintComponent(Graphics g) { PlayerView pl = getPlayerView(); timer.stop("paintComponent:createView"); - skipDrawing = MapTool.getFrame().getJfxPanel().isVisible(); + skipDrawing = MapTool.getFrame().getGdxPanel().isVisible(); renderZone(g2d, pl); int noteVPos = 20; From 7d559634f838d15285f030f977e0de0094b679bc Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 12 Aug 2021 20:09:52 +0200 Subject: [PATCH 054/139] wip --- .../maptool/box2d/unused/Box2dRenderer.java | 3 -- .../maptool/box2d/unused/DesktopLauncher.java | 2 +- .../maptool/box2d/unused/MapToolGame.java | 10 ++--- .../maptool/client/ui/MapToolFrame.java | 7 +++- .../maptool/client/ui/zone/GdxRenderer.java | 42 +++++++++++++++++++ 5 files changed, 52 insertions(+), 12 deletions(-) diff --git a/src/main/java/net/rptools/maptool/box2d/unused/Box2dRenderer.java b/src/main/java/net/rptools/maptool/box2d/unused/Box2dRenderer.java index 3d668ff12f..558cff5d50 100644 --- a/src/main/java/net/rptools/maptool/box2d/unused/Box2dRenderer.java +++ b/src/main/java/net/rptools/maptool/box2d/unused/Box2dRenderer.java @@ -146,9 +146,6 @@ public void render(float delta) { Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT); // Suspend all activity while window is closed - if (!app.launcher.isVisible()) - return; - update(delta); stage.draw(); diff --git a/src/main/java/net/rptools/maptool/box2d/unused/DesktopLauncher.java b/src/main/java/net/rptools/maptool/box2d/unused/DesktopLauncher.java index c807bd43cc..a61ba543cd 100644 --- a/src/main/java/net/rptools/maptool/box2d/unused/DesktopLauncher.java +++ b/src/main/java/net/rptools/maptool/box2d/unused/DesktopLauncher.java @@ -36,7 +36,7 @@ public DesktopLauncher(MapToolFrame clientFrame) { // setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); - canvas = new LwjglAWTCanvas(new MapToolGame(mapToolFrame, this), cfg); +// canvas = new LwjglAWTCanvas(new MapToolGame(mapToolFrame, this), cfg); canvas.getCanvas().setSize(MapToolGame.SCREEN_WIDTH, MapToolGame.SCREEN_HEIGHT); add(canvas.getCanvas()); diff --git a/src/main/java/net/rptools/maptool/box2d/unused/MapToolGame.java b/src/main/java/net/rptools/maptool/box2d/unused/MapToolGame.java index fb61a3a817..343ccd8c28 100644 --- a/src/main/java/net/rptools/maptool/box2d/unused/MapToolGame.java +++ b/src/main/java/net/rptools/maptool/box2d/unused/MapToolGame.java @@ -17,6 +17,7 @@ import net.rptools.maptool.box2d.unused.Box2dRenderer; import net.rptools.maptool.box2d.unused.DesktopLauncher; +import net.rptools.maptool.client.MapTool; import net.rptools.maptool.client.ui.MapToolFrame; public class MapToolGame extends Game { @@ -35,15 +36,10 @@ public class MapToolGame extends Game { public BitmapFont font; private MapToolFrame mapToolFrame; - public DesktopLauncher launcher; - public MapToolGame(DesktopLauncher desktopLauncher) { - launcher = desktopLauncher; - } - - public MapToolGame(MapToolFrame parentFrame, DesktopLauncher desktopLauncher) { + + public MapToolGame(MapToolFrame parentFrame) { mapToolFrame = parentFrame; - launcher = desktopLauncher; } @Override diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index 146514292d..5f2486a1eb 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -56,6 +56,8 @@ import net.rptools.lib.swing.PositionalLayout; import net.rptools.lib.swing.SwingUtil; import net.rptools.lib.swing.preference.WindowPreferences; +import net.rptools.maptool.box2d.unused.Box2dLightTest; +import net.rptools.maptool.box2d.unused.MapToolGame; import net.rptools.maptool.client.AppActions; import net.rptools.maptool.client.*; import net.rptools.maptool.client.AppActions.ClientAction; @@ -476,7 +478,10 @@ public MapToolFrame(JMenuBar menuBar) { chatTimer = getChatTimer(); setChatTypingLabelColor(AppPreferences.getChatNotificationColor()); - joglSwingCanvas = new JoglSwingCanvas(GdxRenderer.getInstance(), "test", 640, 480); /* + // joglSwingCanvas = new JoglSwingCanvas(new Box2dLightTest(), "test", 640, 480); + // joglSwingCanvas = new JoglSwingCanvas(new MapToolGame(this), "test", 640, 480); + joglSwingCanvas = new JoglSwingCanvas(GdxRenderer.getInstance(), "test", 640, 480); + /* Platform.runLater(()->{ diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 678f187c99..14e14d8f18 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -4,6 +4,7 @@ import box2dLight.RayHandler; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.*; @@ -193,6 +194,47 @@ public void create() { pl.setStaticLight(false); pl.setSoft(true); + Gdx.input.setInputProcessor(new InputProcessor() { + @Override + public boolean keyDown(int i) { + return false; + } + + @Override + public boolean keyUp(int i) { + return false; + } + + @Override + public boolean keyTyped(char c) { + return false; + } + + @Override + public boolean touchDown(int i, int i1, int i2, int i3) { + return false; + } + + @Override + public boolean touchUp(int i, int i1, int i2, int i3) { + return false; + } + + @Override + public boolean touchDragged(int i, int i1, int i2) { + return false; + } + + @Override + public boolean mouseMoved(int i, int i1) { + return false; + } + + @Override + public boolean scrolled(float v, float v1) { + return false; + } + }); debugRenderer = new Box2DDebugRenderer(); var resolver = new InternalFileHandleResolver(); From 5b52906a572b0e4dfb61805978c6a8f3d4bca657 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 12 Aug 2021 22:17:24 +0200 Subject: [PATCH 055/139] add and use alternative GifDecoder --- .../rptools/maptool/box2d/GifDecoder2.java | 291 ++++++++++++++++++ .../maptool/client/ui/zone/GdxRenderer.java | 6 +- 2 files changed, 295 insertions(+), 2 deletions(-) create mode 100644 src/main/java/net/rptools/maptool/box2d/GifDecoder2.java diff --git a/src/main/java/net/rptools/maptool/box2d/GifDecoder2.java b/src/main/java/net/rptools/maptool/box2d/GifDecoder2.java new file mode 100644 index 0000000000..0eb1488cb4 --- /dev/null +++ b/src/main/java/net/rptools/maptool/box2d/GifDecoder2.java @@ -0,0 +1,291 @@ +package net.rptools.maptool.box2d; + +import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.Animation; +import com.badlogic.gdx.graphics.g2d.TextureRegion; +import com.badlogic.gdx.utils.Array; +import net.rptools.lib.image.ImageUtil; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import javax.imageio.ImageIO; +import javax.imageio.ImageReader; +import javax.imageio.metadata.IIOMetadata; +import javax.imageio.metadata.IIOMetadataNode; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.awt.image.ColorModel; +import java.awt.image.WritableRaster; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; + +// from https://stackoverflow.com/questions/8933893/convert-each-animated-gif-frame-to-a-separate-bufferedimage + +public class GifDecoder2 { + public GifDecoder2(InputStream is) throws IOException { + frames = readGif(is); + } + + private ImageFrame[] readGif(InputStream stream) throws IOException { + ArrayList frames = new ArrayList(2); + + ImageReader reader = (ImageReader) ImageIO.getImageReadersByFormatName("gif").next(); + reader.setInput(ImageIO.createImageInputStream(stream)); + + int lastx = 0; + int lasty = 0; + + int width = -1; + int height = -1; + + IIOMetadata metadata = reader.getStreamMetadata(); + + Color backgroundColor = null; + + if(metadata != null) { + IIOMetadataNode globalRoot = (IIOMetadataNode) metadata.getAsTree(metadata.getNativeMetadataFormatName()); + + NodeList globalColorTable = globalRoot.getElementsByTagName("GlobalColorTable"); + NodeList globalScreeDescriptor = globalRoot.getElementsByTagName("LogicalScreenDescriptor"); + + if (globalScreeDescriptor != null && globalScreeDescriptor.getLength() > 0){ + IIOMetadataNode screenDescriptor = (IIOMetadataNode) globalScreeDescriptor.item(0); + + if (screenDescriptor != null){ + width = Integer.parseInt(screenDescriptor.getAttribute("logicalScreenWidth")); + height = Integer.parseInt(screenDescriptor.getAttribute("logicalScreenHeight")); + } + } + + if (globalColorTable != null && globalColorTable.getLength() > 0){ + IIOMetadataNode colorTable = (IIOMetadataNode) globalColorTable.item(0); + + if (colorTable != null) { + String bgIndex = colorTable.getAttribute("backgroundColorIndex"); + + IIOMetadataNode colorEntry = (IIOMetadataNode) colorTable.getFirstChild(); + while (colorEntry != null) { + if (colorEntry.getAttribute("index").equals(bgIndex)) { + int red = Integer.parseInt(colorEntry.getAttribute("red")); + int green = Integer.parseInt(colorEntry.getAttribute("green")); + int blue = Integer.parseInt(colorEntry.getAttribute("blue")); + + backgroundColor = new Color(red, green, blue); + break; + } + + colorEntry = (IIOMetadataNode) colorEntry.getNextSibling(); + } + } + } + } + + BufferedImage master = null; + boolean hasBackround = false; + + for (int frameIndex = 0;; frameIndex++) { + BufferedImage image; + try{ + image = reader.read(frameIndex); + }catch (IndexOutOfBoundsException io){ + break; + } + + if (width == -1 || height == -1){ + width = image.getWidth(); + height = image.getHeight(); + } + + IIOMetadataNode root = (IIOMetadataNode) reader.getImageMetadata(frameIndex).getAsTree("javax_imageio_gif_image_1.0"); + IIOMetadataNode gce = (IIOMetadataNode) root.getElementsByTagName("GraphicControlExtension").item(0); + NodeList children = root.getChildNodes(); + + int delay = Integer.valueOf(gce.getAttribute("delayTime")); + + String disposal = gce.getAttribute("disposalMethod"); + + if (master == null){ + master = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + master.createGraphics().setColor(backgroundColor); + master.createGraphics().fillRect(0, 0, master.getWidth(), master.getHeight()); + + hasBackround = image.getWidth() == width && image.getHeight() == height; + + master.createGraphics().drawImage(image, 0, 0, null); + }else{ + int x = 0; + int y = 0; + + for (int nodeIndex = 0; nodeIndex < children.getLength(); nodeIndex++){ + Node nodeItem = children.item(nodeIndex); + + if (nodeItem.getNodeName().equals("ImageDescriptor")){ + NamedNodeMap map = nodeItem.getAttributes(); + + x = Integer.valueOf(map.getNamedItem("imageLeftPosition").getNodeValue()); + y = Integer.valueOf(map.getNamedItem("imageTopPosition").getNodeValue()); + } + } + + if (disposal.equals("restoreToPrevious")){ + BufferedImage from = null; + for (int i = frameIndex - 1; i >= 0; i--){ + if (!frames.get(i).getDisposal().equals("restoreToPrevious") || frameIndex == 0){ + from = frames.get(i).getImage(); + break; + } + } + + { + ColorModel model = from.getColorModel(); + boolean alpha = from.isAlphaPremultiplied(); + WritableRaster raster = from.copyData(null); + master = new BufferedImage(model, raster, alpha, null); + } + }else if (disposal.equals("restoreToBackgroundColor") && backgroundColor != null){ + if (!hasBackround || frameIndex > 1){ + master.createGraphics().fillRect(lastx, lasty, frames.get(frameIndex - 1).getWidth(), frames.get(frameIndex - 1).getHeight()); + } + } + master.createGraphics().drawImage(image, x, y, null); + + lastx = x; + lasty = y; + } + + { + BufferedImage copy; + + { + ColorModel model = master.getColorModel(); + boolean alpha = master.isAlphaPremultiplied(); + WritableRaster raster = master.copyData(null); + copy = new BufferedImage(model, raster, alpha, null); + } + frames.add(new ImageFrame(copy, delay, disposal, image.getWidth(), image.getHeight())); + } + + master.flush(); + } + reader.dispose(); + + return frames.toArray(new ImageFrame[frames.size()]); + } + + private static class ImageFrame { + private final int delay; + private final BufferedImage image; + private final String disposal; + private final int width, height; + + public ImageFrame (BufferedImage image, int delay, String disposal, int width, int height){ + this.image = image; + this.delay = delay; + this.disposal = disposal; + this.width = width; + this.height = height; + } + + public ImageFrame (BufferedImage image){ + this.image = image; + this.delay = -1; + this.disposal = null; + this.width = -1; + this.height = -1; + } + + public BufferedImage getImage() { + return image; + } + + public int getDelay() { + return delay; + } + + public String getDisposal() { + return disposal; + } + + public int getWidth() { + return width; + } + + public int getHeight() { + return height; + } + } + + public Animation getAnimation(Animation.PlayMode playMode) throws IOException { + int nrFrames = getFrameCount(); + Pixmap frame = getFrame(0); + int width = frame.getWidth(); + int height = frame.getHeight(); + int vzones = (int) Math.sqrt((double) nrFrames); + int hzones = vzones; + + while (vzones * hzones < nrFrames) vzones++; + + int v, h; + + Pixmap target = new Pixmap(width * hzones, height * vzones, Pixmap.Format.RGBA8888); + + for (h = 0; h < hzones; h++) { + for (v = 0; v < vzones; v++) { + int frameID = v + h * vzones; + if (frameID < nrFrames) { + frame = getFrame(frameID); + target.drawPixmap(frame, h * width, v * height); + } + } + } + + Texture texture = new Texture(target); + Array texReg = new Array(); + + for (h = 0; h < hzones; h++) { + for (v = 0; v < vzones; v++) { + int frameID = v + h * vzones; + if (frameID < nrFrames) { + TextureRegion tr = new TextureRegion(texture, h * width, v * height, width, height); + texReg.add(tr); + } + } + } + float frameDuration = (float) getDelay(0); + frameDuration /= 100; // convert milliseconds into seconds + Animation result = new Animation(frameDuration, texReg, playMode); + + return result; + } + + private int getDelay(int i) { + return frames[i].getDelay(); + } + + private Pixmap getFrame(int i) throws IOException { + var bytes = ImageUtil.imageToBytes(frames[i].getImage(), "png"); + // without imageutil there seem to be some issues with tranparency for some images. + // (black background instead of tranparent) + //var bytes = AssetManager.getAsset(key).getImage(); + return new Pixmap(bytes, 0, bytes.length); + } + + private ImageFrame[] frames; + + private int getFrameCount() { + return frames.length; + } + + public static Animation loadGIFAnimation(Animation.PlayMode playMode, InputStream is) { + try { + var dec = new GifDecoder2(is); + return dec.getAnimation(playMode); + + } catch (Exception e) { + return null; + } + } +} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 14e14d8f18..d01402df68 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -30,6 +30,7 @@ import net.rptools.lib.swing.ImageBorder; import net.rptools.lib.swing.SwingUtil; import net.rptools.maptool.box2d.GifDecoder; +import net.rptools.maptool.box2d.GifDecoder2; import net.rptools.maptool.box2d.NativeRenderer; import net.rptools.maptool.client.*; import net.rptools.maptool.client.tool.drawing.FreehandExposeTool; @@ -3402,9 +3403,10 @@ public void assetAvailable(MD5Key key) { if(asset.getImageExtension() == "gif") { Gdx.app.postRunnable(() -> { - var ass = AssetManager.getAsset(key); + //var ass = AssetManager.getAsset(key); var is = new ByteArrayInputStream(asset.getImage()); - var animation = GifDecoder.loadGIFAnimation(Animation.PlayMode.LOOP, is); + var animation = GifDecoder2.loadGIFAnimation(Animation.PlayMode.LOOP, is); +// var animation = GifDecoderOptimized.loadGIFAnimation(Animation.PlayMode.LOOP, asset.getImage()); animationMap.put(key, animation); }); return; From 4a286549a705a522b94c23fcfec9a5b3453148cb Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 12 Aug 2021 23:00:49 +0200 Subject: [PATCH 056/139] add and use alternative GifDecoder --- .../net/rptools/maptool/box2d/GifDecoder.java | 2 +- .../rptools/maptool/box2d/GifDecoder3.java | 784 ++++++++++++++++++ .../maptool/client/ui/zone/GdxRenderer.java | 4 +- 3 files changed, 787 insertions(+), 3 deletions(-) create mode 100644 src/main/java/net/rptools/maptool/box2d/GifDecoder3.java diff --git a/src/main/java/net/rptools/maptool/box2d/GifDecoder.java b/src/main/java/net/rptools/maptool/box2d/GifDecoder.java index ae7cb5e485..257ecfb95b 100644 --- a/src/main/java/net/rptools/maptool/box2d/GifDecoder.java +++ b/src/main/java/net/rptools/maptool/box2d/GifDecoder.java @@ -101,7 +101,7 @@ void getPixels(int[] pixels, int offset, int stride, int x, int y, int width, in } } - private static class GifFrame { + class GifFrame { public GifFrame(DixieMap im, int del) { image = im; delay = del; diff --git a/src/main/java/net/rptools/maptool/box2d/GifDecoder3.java b/src/main/java/net/rptools/maptool/box2d/GifDecoder3.java new file mode 100644 index 0000000000..59f4ce6674 --- /dev/null +++ b/src/main/java/net/rptools/maptool/box2d/GifDecoder3.java @@ -0,0 +1,784 @@ +package net.rptools.maptool.box2d; + +import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.Animation; +import com.badlogic.gdx.graphics.g2d.TextureRegion; +import com.badlogic.gdx.utils.Array; +import net.rptools.lib.image.ImageUtil; + +import static java.lang.System.arraycopy; + +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import java.awt.image.DataBufferInt; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +/* + * Copyright 2014 Dhyan Blum + * + * 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. + */ +/** + *

    + * A decoder capable of processing a GIF data stream to render the graphics + * contained in it. This implementation follows the official + * GIF + * specification. + *

    + * + *

    + * Example usage: + *

    + * + *

    + * + *

    + * final GifImage gifImage = GifDecoder.read(int[] data);
    + * final int width = gifImage.getWidth();
    + * final int height = gifImage.getHeight();
    + * final int frameCount = gifImage.getFrameCount();
    + * for (int i = 0; i < frameCount; i++) {
    + * 	final BufferedImage image = gifImage.getFrame(i);
    + * 	final int delay = gif.getDelay(i);
    + * }
    + * 
    + * + *

    + * + * @author Dhyan Blum + * @version 1.09 November 2017 + * + */ +public final class GifDecoder3 { + private GifImage image; + public GifDecoder3(InputStream is) throws IOException { + image = read(is); + } + + public GifDecoder3() { + + } + + static final class BitReader { + private int bitPos; // Next bit to read + private int numBits; // Number of bits to read + private int bitMask; // Use to kill unwanted higher bits + private byte[] in; // Data array + + // To avoid costly bounds checks, 'in' needs 2 more 0-bytes at the end + private final void init(final byte[] in) { + this.in = in; + bitPos = 0; + } + + private final int read() { + // Byte indices: (bitPos / 8), (bitPos / 8) + 1, (bitPos / 8) + 2 + int i = bitPos >>> 3; // Byte = bit / 8 + // Bits we'll shift to the right, AND 7 is the same as MODULO 8 + final int rBits = bitPos & 7; + // Byte 0 to 2, AND to get their unsigned values + final int b0 = in[i++] & 0xFF, b1 = in[i++] & 0xFF, b2 = in[i] & 0xFF; + // Glue the bytes together, don't do more shifting than necessary + final int buf = ((b2 << 8 | b1) << 8 | b0) >>> rBits; + bitPos += numBits; + return buf & bitMask; // Kill the unwanted higher bits + } + + private final void setNumBits(final int numBits) { + this.numBits = numBits; + bitMask = (1 << numBits) - 1; + } + } + + static final class CodeTable { + private final int[][] tbl; // Maps codes to lists of colors + private int initTableSize; // Number of colors +2 for CLEAR + EOI + private int initCodeSize; // Initial code size + private int initCodeLimit; // First code limit + private int codeSize; // Current code size, maximum is 12 bits + private int nextCode; // Next available code for a new entry + private int nextCodeLimit; // Increase codeSize when nextCode == limit + private BitReader br; // Notify when code sizes increases + + public CodeTable() { + tbl = new int[4096][1]; + } + + private final int add(final int[] indices) { + if (nextCode < 4096) { + if (nextCode == nextCodeLimit && codeSize < 12) { + codeSize++; // Max code size is 12 + br.setNumBits(codeSize); + nextCodeLimit = (1 << codeSize) - 1; // 2^codeSize - 1 + } + tbl[nextCode++] = indices; + } + return codeSize; + } + + private final int clear() { + codeSize = initCodeSize; + br.setNumBits(codeSize); + nextCodeLimit = initCodeLimit; + nextCode = initTableSize; // Don't recreate table, reset pointer + return codeSize; + } + + private final void init(final GifFrame fr, final int[] activeColTbl, final BitReader br) { + this.br = br; + final int numColors = activeColTbl.length; + initCodeSize = fr.firstCodeSize; + initCodeLimit = (1 << initCodeSize) - 1; // 2^initCodeSize - 1 + initTableSize = fr.endOfInfoCode + 1; + nextCode = initTableSize; + for (int c = numColors - 1; c >= 0; c--) { + tbl[c][0] = activeColTbl[c]; // Translated color + } // A gap may follow with no colors assigned if numCols < CLEAR + tbl[fr.clearCode] = new int[] { fr.clearCode }; // CLEAR + tbl[fr.endOfInfoCode] = new int[] { fr.endOfInfoCode }; // EOI + // Locate transparent color in code table and set to 0 + if (fr.transpColFlag && fr.transpColIndex < numColors) { + tbl[fr.transpColIndex][0] = 0; + } + } + } + + final class GifFrame { + // Graphic control extension (optional) + // Disposal: 0=NO_ACTION, 1=NO_DISPOSAL, 2=RESTORE_BG, 3=RESTORE_PREV + private int disposalMethod; // 0-3 as above, 4-7 undefined + private boolean transpColFlag; // 1 Bit + private int delay; // Unsigned, LSByte first, n * 1/100 * s + private int transpColIndex; // 1 Byte + // Image descriptor + private int x; // Position on the canvas from the left + private int y; // Position on the canvas from the top + private int w; // May be smaller than the base image + private int h; // May be smaller than the base image + private int wh; // width * height + private boolean hasLocColTbl; // Has local color table? 1 Bit + private boolean interlaceFlag; // Is an interlace image? 1 Bit + @SuppressWarnings("unused") + private boolean sortFlag; // True if local colors are sorted, 1 Bit + private int sizeOfLocColTbl; // Size of the local color table, 3 Bits + private int[] localColTbl; // Local color table (optional) + // Image data + private int firstCodeSize; // LZW minimum code size + 1 for CLEAR & EOI + private int clearCode; + private int endOfInfoCode; + private byte[] data; // Holds LZW encoded data + private BufferedImage img; // Full drawn image, not just the frame area + } + + public final class GifImage { + public String header; // Bytes 0-5, GIF87a or GIF89a + private int w; // Unsigned 16 Bit, least significant byte first + private int h; // Unsigned 16 Bit, least significant byte first + private int wh; // Image width * image height + public boolean hasGlobColTbl; // 1 Bit + public int colorResolution; // 3 Bits + public boolean sortFlag; // True if global colors are sorted, 1 Bit + public int sizeOfGlobColTbl; // 2^(val(3 Bits) + 1), see spec + public int bgColIndex; // Background color index, 1 Byte + public int pxAspectRatio; // Pixel aspect ratio, 1 Byte + public int[] globalColTbl; // Global color table + private final List frames = new ArrayList(64); + public String appId = ""; // 8 Bytes at in[i+3], usually "NETSCAPE" + public String appAuthCode = ""; // 3 Bytes at in[i+11], usually "2.0" + public int repetitions = 0; // 0: infinite loop, N: number of loops + private BufferedImage img = null; // Currently drawn frame + private int[] prevPx = null; // Previous frame's pixels + private final BitReader bits = new BitReader(); + private final CodeTable codes = new CodeTable(); + private Graphics2D g; + + private final int[] decode(final GifFrame fr, final int[] activeColTbl) { + codes.init(fr, activeColTbl, bits); + bits.init(fr.data); // Incoming codes + final int clearCode = fr.clearCode, endCode = fr.endOfInfoCode; + final int[] out = new int[wh]; // Target image pixel array + final int[][] tbl = codes.tbl; // Code table + int outPos = 0; // Next pixel position in the output image array + codes.clear(); // Init code table + bits.read(); // Skip leading clear code + int code = bits.read(); // Read first code + int[] pixels = tbl[code]; // Output pixel for first code + arraycopy(pixels, 0, out, outPos, pixels.length); + outPos += pixels.length; + try { + while (true) { + final int prevCode = code; + code = bits.read(); // Get next code in stream + if (code == clearCode) { // After a CLEAR table, there is + codes.clear(); // no previous code, we need to read + code = bits.read(); // a new one + pixels = tbl[code]; // Output pixels + arraycopy(pixels, 0, out, outPos, pixels.length); + outPos += pixels.length; + continue; // Back to the loop with a valid previous code + } else if (code == endCode) { + break; + } + final int[] prevVals = tbl[prevCode]; + final int[] prevValsAndK = new int[prevVals.length + 1]; + arraycopy(prevVals, 0, prevValsAndK, 0, prevVals.length); + if (code < codes.nextCode) { // Code table contains code + pixels = tbl[code]; // Output pixels + arraycopy(pixels, 0, out, outPos, pixels.length); + outPos += pixels.length; + prevValsAndK[prevVals.length] = tbl[code][0]; // K + } else { + prevValsAndK[prevVals.length] = prevVals[0]; // K + arraycopy(prevValsAndK, 0, out, outPos, prevValsAndK.length); + outPos += prevValsAndK.length; + } + codes.add(prevValsAndK); // Previous indices + K + } + } catch (final ArrayIndexOutOfBoundsException e) { + } + return out; + } + + private final int[] deinterlace(final int[] src, final GifFrame fr) { + final int w = fr.w, h = fr.h, wh = fr.wh; + final int[] dest = new int[src.length]; + // Interlaced images are organized in 4 sets of pixel lines + final int set2Y = (h + 7) >>> 3; // Line no. = ceil(h/8.0) + final int set3Y = set2Y + ((h + 3) >>> 3); // ceil(h-4/8.0) + final int set4Y = set3Y + ((h + 1) >>> 2); // ceil(h-2/4.0) + // Sets' start indices in source array + final int set2 = w * set2Y, set3 = w * set3Y, set4 = w * set4Y; + // Line skips in destination array + final int w2 = w << 1, w4 = w2 << 1, w8 = w4 << 1; + // Group 1 contains every 8th line starting from 0 + int from = 0, to = 0; + for (; from < set2; from += w, to += w8) { + arraycopy(src, from, dest, to, w); + } // Group 2 contains every 8th line starting from 4 + for (to = w4; from < set3; from += w, to += w8) { + arraycopy(src, from, dest, to, w); + } // Group 3 contains every 4th line starting from 2 + for (to = w2; from < set4; from += w, to += w4) { + arraycopy(src, from, dest, to, w); + } // Group 4 contains every 2nd line starting from 1 (biggest group) + for (to = w; from < wh; from += w, to += w2) { + arraycopy(src, from, dest, to, w); + } + return dest; // All pixel lines have now been rearranged + } + + private final void drawFrame(final GifFrame fr) { + // Determine the color table that will be active for this frame + final int[] activeColTbl = fr.hasLocColTbl ? fr.localColTbl : globalColTbl; + // Get pixels from data stream + int[] pixels = decode(fr, activeColTbl); + if (fr.interlaceFlag) { + pixels = deinterlace(pixels, fr); // Rearrange pixel lines + } + // Create image of type 2=ARGB for frame area + final BufferedImage frame = new BufferedImage(fr.w, fr.h, 2); + arraycopy(pixels, 0, ((DataBufferInt) frame.getRaster().getDataBuffer()).getData(), 0, fr.wh); + // Draw frame area on top of working image + g.drawImage(frame, fr.x, fr.y, null); + + // Visualize frame boundaries during testing + // if (DEBUG_MODE) { + // if (prev != null) { + // g.setColor(Color.RED); // Previous frame color + // g.drawRect(prev.x, prev.y, prev.w - 1, prev.h - 1); + // } + // g.setColor(Color.GREEN); // New frame color + // g.drawRect(fr.x, fr.y, fr.w - 1, fr.h - 1); + // } + + // Keep one copy as "previous frame" in case we need to restore it + prevPx = new int[wh]; + arraycopy(((DataBufferInt) img.getRaster().getDataBuffer()).getData(), 0, prevPx, 0, wh); + + // Create another copy for the end user to not expose internal state + fr.img = new BufferedImage(w, h, 2); // 2 = ARGB + arraycopy(prevPx, 0, ((DataBufferInt) fr.img.getRaster().getDataBuffer()).getData(), 0, wh); + + // Handle disposal of current frame + if (fr.disposalMethod == 2) { + // Restore to background color (clear frame area only) + g.clearRect(fr.x, fr.y, fr.w, fr.h); + } else if (fr.disposalMethod == 3 && prevPx != null) { + // Restore previous frame + arraycopy(prevPx, 0, ((DataBufferInt) img.getRaster().getDataBuffer()).getData(), 0, wh); + } + } + + /** + * Returns the background color of the first frame in this GIF image. If + * the frame has a local color table, the returned color will be from + * that table. If not, the color will be from the global color table. + * Returns 0 if there is neither a local nor a global color table. + * + * Index of the current frame, 0 to N-1 + * @return 32 bit ARGB color in the form 0xAARRGGBB + */ + public final int getBackgroundColor() { + final GifFrame frame = frames.get(0); + if (frame.hasLocColTbl) { + return frame.localColTbl[bgColIndex]; + } else if (hasGlobColTbl) { + return globalColTbl[bgColIndex]; + } + return 0; + } + + /** + * If not 0, the delay specifies how many hundredths (1/100) of a second + * to wait before displaying the frame after the current frame. + * + * @param index + * Index of the current frame, 0 to N-1 + * @return Delay as number of hundredths (1/100) of a second + */ + public final int getDelay(final int index) { + return frames.get(index).delay; + } + + /** + * @param index + * Index of the frame to return as image, starting from 0. + * For incremental calls such as [0, 1, 2, ...] the method's + * run time is O(1) as only one frame is drawn per call. For + * random access calls such as [7, 12, ...] the run time is + * O(N+1) with N being the number of previous frames that + * need to be drawn before N+1 can be drawn on top. Once a + * frame has been drawn it is being cached and the run time + * is more or less O(0) to retrieve it from the list. + * @return A BufferedImage for the specified frame. + */ + public final BufferedImage getFrame(final int index) { + if (img == null) { // Init + img = new BufferedImage(w, h, 2); // 2 = ARGB + g = img.createGraphics(); + g.setBackground(new Color(0, true)); // Transparent color + } + GifFrame fr = frames.get(index); + if (fr.img == null) { + // Draw all frames until and including the requested frame + for (int i = 0; i <= index; i++) { + fr = frames.get(i); + if (fr.img == null) { + drawFrame(fr); + } + } + } + return fr.img; + } + + /** + * @return The number of frames contained in this GIF image + */ + public final int getFrameCount() { + return frames.size(); + } + + /** + * @return The height of the GIF image + */ + public final int getHeight() { + return h; + } + + /** + * @return The width of the GIF image + */ + public final int getWidth() { + return w; + } + } + + static final boolean DEBUG_MODE = false; + + /** + * @param in + * Raw image data as a byte[] array + * @return A GifImage object exposing the properties of the GIF image. + * @throws IOException + * If the image violates the GIF specification or is truncated. + */ + public static final GifImage read(final byte[] in) throws IOException { + final GifDecoder3 decoder = new GifDecoder3(); + final GifImage img = decoder.new GifImage(); + GifFrame frame = null; // Currently open frame + int pos = readHeader(in, img); // Read header, get next byte position + pos = readLogicalScreenDescriptor(img, in, pos); + if (img.hasGlobColTbl) { + img.globalColTbl = new int[img.sizeOfGlobColTbl]; + pos = readColTbl(in, img.globalColTbl, pos); + } + while (pos < in.length) { + final int block = in[pos] & 0xFF; + switch (block) { + case 0x21: // Extension introducer + if (pos + 1 >= in.length) { + throw new IOException("Unexpected end of file."); + } + switch (in[pos + 1] & 0xFF) { + case 0xFE: // Comment extension + pos = readTextExtension(in, pos); + break; + case 0xFF: // Application extension + pos = readAppExt(img, in, pos); + break; + case 0x01: // Plain text extension + frame = null; // End of current frame + pos = readTextExtension(in, pos); + break; + case 0xF9: // Graphic control extension + if (frame == null) { + frame = decoder.new GifFrame(); + img.frames.add(frame); + } + pos = readGraphicControlExt(frame, in, pos); + break; + default: + throw new IOException("Unknown extension at " + pos); + } + break; + case 0x2C: // Image descriptor + if (frame == null) { + frame = decoder.new GifFrame(); + img.frames.add(frame); + } + pos = readImgDescr(frame, in, pos); + if (frame.hasLocColTbl) { + frame.localColTbl = new int[frame.sizeOfLocColTbl]; + pos = readColTbl(in, frame.localColTbl, pos); + } + pos = readImgData(frame, in, pos); + frame = null; // End of current frame + break; + case 0x3B: // GIF Trailer + return img; // Found trailer, finished reading. + default: + // Unknown block. The image is corrupted. Strategies: a) Skip + // and wait for a valid block. Experience: It'll get worse. b) + // Throw exception. c) Return gracefully if we are almost done + // processing. The frames we have so far should be error-free. + final double progress = 1.0 * pos / in.length; + if (progress < 0.9) { + throw new IOException("Unknown block at: " + pos); + } + pos = in.length; // Exit loop + } + } + return img; + } + + /** + * @param is + * Image data as input stream. This method will read from the + * input stream's current position. It will not reset the + * position before reading and won't reset or close the stream + * afterwards. Call these methods before and after calling this + * method as needed. + * @return A GifImage object exposing the properties of the GIF image. + * @throws IOException + * If an I/O error occurs, the image violates the GIF + * specification or the GIF is truncated. + */ + public static final GifImage read(final InputStream is) throws IOException { + final byte[] data = new byte[is.available()]; + is.read(data, 0, data.length); + return read(data); + } + + /** + * Empty application extension object + * @param in + * Raw data + * @param i + * Index of the first byte of the application extension + * @return Index of the first byte after this extension + */ + static final int readAppExt(final GifImage img, final byte[] in, int i) { + img.appId = new String(in, i + 3, 8); // should be "NETSCAPE" + img.appAuthCode = new String(in, i + 11, 3); // should be "2.0" + i += 14; // Go to sub-block size, it's value should be 3 + final int subBlockSize = in[i] & 0xFF; + // The only app extension widely used is NETSCAPE, it's got 3 data bytes + if (subBlockSize == 3) { + // in[i+1] should have value 01, in[i+5] should be block terminator + img.repetitions = in[i + 2] & 0xFF | in[i + 3] & 0xFF << 8; // Short + return i + 5; + } // Skip unknown application extensions + while ((in[i] & 0xFF) != 0) { // While sub-block size != 0 + i += (in[i] & 0xFF) + 1; // Skip to next sub-block + } + return i + 1; + } + + /** + * @param in + * Raw data + * @param colors + * Pre-initialized target array to store ARGB colors + * @param i + * Index of the color table's first byte + * @return Index of the first byte after the color table + */ + static final int readColTbl(final byte[] in, final int[] colors, int i) { + final int numColors = colors.length; + for (int c = 0; c < numColors; c++) { + final int a = 0xFF; // Alpha 255 (opaque) + final int r = in[i++] & 0xFF; // 1st byte is red + final int g = in[i++] & 0xFF; // 2nd byte is green + final int b = in[i++] & 0xFF; // 3rd byte is blue + colors[c] = ((a << 8 | r) << 8 | g) << 8 | b; + } + return i; + } + + /** + * Graphic control extension object + * @param in + * Raw data + * @param i + * Index of the extension introducer + * @return Index of the first byte after this block + */ + static final int readGraphicControlExt(final GifFrame fr, final byte[] in, final int i) { + fr.disposalMethod = (in[i + 3] & 0b00011100) >>> 2; // Bits 4-2 + fr.transpColFlag = (in[i + 3] & 1) == 1; // Bit 0 + fr.delay = in[i + 4] & 0xFF | (in[i + 5] & 0xFF) << 8; // 16 bit LSB + fr.transpColIndex = in[i + 6] & 0xFF; // Byte 6 + return i + 8; // Skipped byte 7 (blockTerminator), as it's always 0x00 + } + + /** + * @param in + * Raw data + * @param img + * The GifImage object that is currently read + * @return Index of the first byte after this block + * @throws IOException + * If the GIF header/trailer is missing, incomplete or unknown + */ + static final int readHeader(final byte[] in, final GifImage img) throws IOException { + if (in.length < 6) { // Check first 6 bytes + throw new IOException("Image is truncated."); + } + img.header = new String(in, 0, 6); + if (!img.header.equals("GIF87a") && !img.header.equals("GIF89a")) { + throw new IOException("Invalid GIF header."); + } + return 6; + } + + /** + * @param fr + * The GIF frame to whom this image descriptor belongs + * @param in + * Raw data + * @param i + * Index of the first byte of this block, i.e. the minCodeSize + * @return + */ + static final int readImgData(final GifFrame fr, final byte[] in, int i) { + final int fileSize = in.length; + final int minCodeSize = in[i++] & 0xFF; // Read code size, go to block + final int clearCode = 1 << minCodeSize; // CLEAR = 2^minCodeSize + fr.firstCodeSize = minCodeSize + 1; // Add 1 bit for CLEAR and EOI + fr.clearCode = clearCode; + fr.endOfInfoCode = clearCode + 1; + final int imgDataSize = readImgDataSize(in, i); + final byte[] imgData = new byte[imgDataSize + 2]; + int imgDataPos = 0; + int subBlockSize = in[i] & 0xFF; + while (subBlockSize > 0) { // While block has data + try { // Next line may throw exception if sub-block size is fake + final int nextSubBlockSizePos = i + subBlockSize + 1; + final int nextSubBlockSize = in[nextSubBlockSizePos] & 0xFF; + arraycopy(in, i + 1, imgData, imgDataPos, subBlockSize); + imgDataPos += subBlockSize; // Move output data position + i = nextSubBlockSizePos; // Move to next sub-block size + subBlockSize = nextSubBlockSize; + } catch (final Exception e) { + // Sub-block exceeds file end, only use remaining bytes + subBlockSize = fileSize - i - 1; // Remaining bytes + arraycopy(in, i + 1, imgData, imgDataPos, subBlockSize); + imgDataPos += subBlockSize; // Move output data position + i += subBlockSize + 1; // Move to next sub-block size + break; + } + } + fr.data = imgData; // Holds LZW encoded data + i++; // Skip last sub-block size, should be 0 + return i; + } + + static final int readImgDataSize(final byte[] in, int i) { + final int fileSize = in.length; + int imgDataPos = 0; + int subBlockSize = in[i] & 0xFF; + while (subBlockSize > 0) { // While block has data + try { // Next line may throw exception if sub-block size is fake + final int nextSubBlockSizePos = i + subBlockSize + 1; + final int nextSubBlockSize = in[nextSubBlockSizePos] & 0xFF; + imgDataPos += subBlockSize; // Move output data position + i = nextSubBlockSizePos; // Move to next sub-block size + subBlockSize = nextSubBlockSize; + } catch (final Exception e) { + // Sub-block exceeds file end, only use remaining bytes + subBlockSize = fileSize - i - 1; // Remaining bytes + imgDataPos += subBlockSize; // Move output data position + break; + } + } + return imgDataPos; + } + + /** + * @param fr + * The GIF frame to whom this image descriptor belongs + * @param in + * Raw data + * @param i + * Index of the image separator, i.e. the first block byte + * @return Index of the first byte after this block + */ + static final int readImgDescr(final GifFrame fr, final byte[] in, int i) { + fr.x = in[++i] & 0xFF | (in[++i] & 0xFF) << 8; // Byte 1-2: left + fr.y = in[++i] & 0xFF | (in[++i] & 0xFF) << 8; // Byte 3-4: top + fr.w = in[++i] & 0xFF | (in[++i] & 0xFF) << 8; // Byte 5-6: width + fr.h = in[++i] & 0xFF | (in[++i] & 0xFF) << 8; // Byte 7-8: height + fr.wh = fr.w * fr.h; + final byte b = in[++i]; // Byte 9 is a packed byte + fr.hasLocColTbl = (b & 0b10000000) >>> 7 == 1; // Bit 7 + fr.interlaceFlag = (b & 0b01000000) >>> 6 == 1; // Bit 6 + fr.sortFlag = (b & 0b00100000) >>> 5 == 1; // Bit 5 + final int colTblSizePower = (b & 7) + 1; // Bits 2-0 + fr.sizeOfLocColTbl = 1 << colTblSizePower; // 2^(N+1), As per the spec + return ++i; + } + + /** + * @param img + * @param i + * Start index of this block. + * @return Index of the first byte after this block. + */ + static final int readLogicalScreenDescriptor(final GifImage img, final byte[] in, final int i) { + img.w = in[i] & 0xFF | (in[i + 1] & 0xFF) << 8; // 16 bit, LSB 1st + img.h = in[i + 2] & 0xFF | (in[i + 3] & 0xFF) << 8; // 16 bit + img.wh = img.w * img.h; + final byte b = in[i + 4]; // Byte 4 is a packed byte + img.hasGlobColTbl = (b & 0b10000000) >>> 7 == 1; // Bit 7 + final int colResPower = ((b & 0b01110000) >>> 4) + 1; // Bits 6-4 + img.colorResolution = 1 << colResPower; // 2^(N+1), As per the spec + img.sortFlag = (b & 0b00001000) >>> 3 == 1; // Bit 3 + final int globColTblSizePower = (b & 7) + 1; // Bits 0-2 + img.sizeOfGlobColTbl = 1 << globColTblSizePower; // 2^(N+1), see spec + img.bgColIndex = in[i + 5] & 0xFF; // 1 Byte + img.pxAspectRatio = in[i + 6] & 0xFF; // 1 Byte + return i + 7; + } + + /** + * @param in + * Raw data + * @param pos + * Index of the extension introducer + * @return Index of the first byte after this block + */ + static final int readTextExtension(final byte[] in, final int pos) { + int i = pos + 2; // Skip extension introducer and label + int subBlockSize = in[i++] & 0xFF; + while (subBlockSize != 0 && i < in.length) { + i += subBlockSize; + subBlockSize = in[i++] & 0xFF; + } + return i; + } + + public Animation getAnimation(Animation.PlayMode playMode) throws IOException { + int nrFrames = getFrameCount(); + Pixmap frame = getFrame(0); + int width = frame.getWidth(); + int height = frame.getHeight(); + int vzones = (int) Math.sqrt((double) nrFrames); + int hzones = vzones; + + while (vzones * hzones < nrFrames) vzones++; + + int v, h; + + Pixmap target = new Pixmap(width * hzones, height * vzones, Pixmap.Format.RGBA8888); + + for (h = 0; h < hzones; h++) { + for (v = 0; v < vzones; v++) { + int frameID = v + h * vzones; + if (frameID < nrFrames) { + frame = getFrame(frameID); + target.drawPixmap(frame, h * width, v * height); + } + } + } + + Texture texture = new Texture(target); + Array texReg = new Array(); + + for (h = 0; h < hzones; h++) { + for (v = 0; v < vzones; v++) { + int frameID = v + h * vzones; + if (frameID < nrFrames) { + TextureRegion tr = new TextureRegion(texture, h * width, v * height, width, height); + texReg.add(tr); + } + } + } + float frameDuration = (float) getDelay(0); + frameDuration /= 100; // convert milliseconds into seconds + Animation result = new Animation(frameDuration, texReg, playMode); + + return result; + } + + private int getDelay(int i) { + return image.getDelay(0); + } + + private Pixmap getFrame(int i) throws IOException { + var bytes = ImageUtil.imageToBytes(image.getFrame(i), "png"); + // without imageutil there seem to be some issues with tranparency for some images. + // (black background instead of tranparent) + //var bytes = AssetManager.getAsset(key).getImage(); + return new Pixmap(bytes, 0, bytes.length); + } + + + private int getFrameCount() { + return image.getFrameCount(); + } + + public static Animation loadGIFAnimation(Animation.PlayMode playMode, InputStream is) { + try { + var dec = new GifDecoder3(is); + return dec.getAnimation(playMode); + + } catch (Exception e) { + return null; + } + } +} \ No newline at end of file diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index d01402df68..9d6ea68185 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -31,6 +31,7 @@ import net.rptools.lib.swing.SwingUtil; import net.rptools.maptool.box2d.GifDecoder; import net.rptools.maptool.box2d.GifDecoder2; +import net.rptools.maptool.box2d.GifDecoder3; import net.rptools.maptool.box2d.NativeRenderer; import net.rptools.maptool.client.*; import net.rptools.maptool.client.tool.drawing.FreehandExposeTool; @@ -3405,8 +3406,7 @@ public void assetAvailable(MD5Key key) { Gdx.app.postRunnable(() -> { //var ass = AssetManager.getAsset(key); var is = new ByteArrayInputStream(asset.getImage()); - var animation = GifDecoder2.loadGIFAnimation(Animation.PlayMode.LOOP, is); -// var animation = GifDecoderOptimized.loadGIFAnimation(Animation.PlayMode.LOOP, asset.getImage()); + var animation = GifDecoder3.loadGIFAnimation(Animation.PlayMode.LOOP, is); animationMap.put(key, animation); }); return; From 318876b73226380637c4c11a0c51da078b5ca337 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 16 Aug 2021 19:35:48 +0200 Subject: [PATCH 057/139] switch main cam to PerspectiveCamera --- .../maptool/client/ui/zone/GdxRenderer.java | 58 +++++++++++-------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 9d6ea68185..a702cf553e 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -111,7 +111,7 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private float stateTime = 0f; private boolean renderZone = false; // general resources - private OrthographicCamera cam; + private PerspectiveCamera cam; private OrthographicCamera hudCam; private PolygonSpriteBatch batch; private NativeRenderer jfxRenderer; @@ -166,9 +166,9 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private boolean showAstarDebugging = false; // Box2D stuff - private World world; - private RayHandler rayHandler; - private Box2DDebugRenderer debugRenderer; + // private World world; + // private RayHandler rayHandler; +// private Box2DDebugRenderer debugRenderer; private Map tokenBodies = new HashMap<>(); @@ -185,16 +185,16 @@ public static GdxRenderer getInstance() { @Override public void create() { - world = new World(new Vector2(0, 0), true); - rayHandler = new RayHandler(world); - rayHandler.setAmbientLight(0.1f, 0.1f, 0.1f, 1f); - rayHandler.setBlurNum(3); - PointLight pl = new PointLight(rayHandler, 128, new Color(0.2f,1,1,1f), 10,-500,200); - PointLight pl2 = new PointLight(rayHandler, 128, new Color(1,0,1,1f), 10,500,200); + //world = new World(new Vector2(0, 0), true); + //rayHandler = new RayHandler(world); + //rayHandler.setAmbientLight(0.1f, 0.1f, 0.1f, 1f); + // rayHandler.setBlurNum(3); + // PointLight pl = new PointLight(rayHandler, 128, new Color(0.2f,1,1,1f), 10,500,200); + //PointLight pl2 = new PointLight(rayHandler, 128, new Color(1,0,1,1f), 10,500,200); - rayHandler.setShadows(true); - pl.setStaticLight(false); - pl.setSoft(true); + //rayHandler.setShadows(true); +// pl.setStaticLight(false); + //pl.setSoft(true); Gdx.input.setInputProcessor(new InputProcessor() { @Override @@ -238,7 +238,7 @@ public boolean scrolled(float v, float v1) { } }); - debugRenderer = new Box2DDebugRenderer(); + //debugRenderer = new Box2DDebugRenderer(); var resolver = new InternalFileHandleResolver(); manager.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver)); manager.setLoader(BitmapFont.class, ".ttf", new FreetypeFontLoader(resolver)); @@ -246,12 +246,16 @@ public boolean scrolled(float v, float v1) { width = Gdx.graphics.getWidth(); height = Gdx.graphics.getHeight(); - cam = new OrthographicCamera(); - cam.setToOrtho(false); + cam = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + cam.lookAt(0,0,0); + + //cam.setToOrtho(false); hudCam = new OrthographicCamera(); hudCam.setToOrtho(false); + updateCam(); + batch = new PolygonSpriteBatch(); backBuffer = new VfxFrameBuffer(Pixmap.Format.RGBA8888); @@ -305,9 +309,14 @@ public void resize(int width, int height) { private void updateCam() { cam.viewportWidth = width; cam.viewportHeight = height; + cam.near = 0.1f;; cam.position.x = zoom * (width / 2f + offsetX); cam.position.y = zoom * (height / 2f * -1 + offsetY); - cam.zoom = zoom; + cam.position.z = (zoom * height) / (2f * (float)Math.tan(Math.toRadians(cam.fieldOfView/2f))); + cam.far = cam.position.z + 0.1f; + + + //cam.zoom = zoom; cam.update(); hudCam.viewportWidth = width; @@ -345,10 +354,10 @@ public void render() { // vfxManager.beginInputCapture(); ScreenUtils.clear(Color.BLACK); doRendering(); - rayHandler.setCombinedMatrix(cam.combined, cam.position.x, cam.position.y, cam.viewportWidth, cam.viewportHeight); - rayHandler.updateAndRender(); - debugRenderer.render(world, cam.combined); - world.step(1/60f, 6, 2); + // rayHandler.setCombinedMatrix(cam.combined, cam.position.x, cam.position.y, cam.viewportWidth, cam.viewportHeight); + // rayHandler.updateAndRender(); + // debugRenderer.render(world, cam.combined); + // world.step(1/60f, 6, 2); // vfxManager.endInputCapture(); // vfxManager.applyEffects(); // vfxManager.renderToScreen(); @@ -3064,7 +3073,7 @@ private void disposeZoneResources() { if (!initialized) return; - cam.zoom = 1.0f; + //cam.zoom = 1.0f; offsetX = 0; offsetY = 0; fogX = null; @@ -3334,7 +3343,7 @@ public void modelChanged(ModelChangeEvent event) { } private void addBodyFor(Token token) { - // zone.getGrid(). +/* var body = tokenBodies.get(token); if(body != null) return; @@ -3369,9 +3378,11 @@ private void addBodyFor(Token token) { tokenBodies.put(token, body); updateBodyFor(token); + */ } void updateBodyFor(Token token) { + /* var body = tokenBodies.get(token); if(body == null) return; @@ -3383,6 +3394,7 @@ void updateBodyFor(Token token) { float y = -(token.getY() + bounds.height/2 + token.getAnchorY()); body.setTransform(x, y, (float)Math.toRadians(token.getFacingInDegrees())); + */ } public void setScale(Scale scale) { From b411ce7c06234990f125f9948bfe2a7ec14d79f9 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Wed, 18 Aug 2021 22:10:59 +0200 Subject: [PATCH 058/139] fix switch between gdx and normal renderer and fullscreen --- build.gradle | 5 +- .../rptools/lib/swing/PositionalLayout.java | 4 + .../maptool/client/ui/MapToolFrame.java | 904 +++++++++--------- .../maptool/client/ui/zone/GdxRenderer.java | 128 +-- 4 files changed, 521 insertions(+), 520 deletions(-) diff --git a/build.gradle b/build.gradle index 3180730af5..6d7ac6505d 100644 --- a/build.gradle +++ b/build.gradle @@ -248,7 +248,9 @@ configurations.all { resolutionStrategy.cacheChangingModulesFor 0, 'seconds' resolutionStrategy.cacheDynamicVersionsFor 0, 'seconds' } -*/ + + */ + // In this section you declare the dependencies for your production and test code dependencies { // Jamz: Do NOT update log4j libs without testing with uberjar build, 2.13.0 currently does not work @@ -380,6 +382,7 @@ dependencies { // Noise Generator implementation 'com.github.cwisniew:NoiseLib:1.0.0-rc3' // The most recent version, 1.0.0 is build for a later java version: major version 55 is newer than 54, the highest major version supported by this compiler + // implementation 'com.github.thelsing:libgdx-jogl-backend:master-SNAPSHOT' implementation 'com.github.thelsing:libgdx-jogl-backend:1.10.0' implementation "com.badlogicgames.gdx:gdx:$gdxVersion" implementation "com.badlogicgames.gdx:gdx-box2d:$gdxVersion" diff --git a/src/main/java/net/rptools/lib/swing/PositionalLayout.java b/src/main/java/net/rptools/lib/swing/PositionalLayout.java index 16408b32d7..0891841e08 100644 --- a/src/main/java/net/rptools/lib/swing/PositionalLayout.java +++ b/src/main/java/net/rptools/lib/swing/PositionalLayout.java @@ -57,6 +57,10 @@ public void addLayoutComponent(Component comp, Object constraints) { compPositionMap.put(comp, (Position) constraints); } + public Object getComponentConstraints(Component comp) { + return compPositionMap.get(comp); + } + public void addLayoutComponent(String name, Component comp) { throw new IllegalArgumentException("Use add(comp, Position)"); } diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index 5f2486a1eb..b0186ed99e 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -17,35 +17,9 @@ import com.badlogic.gdx.backends.jogamp.JoglSwingCanvas; import com.jidesoft.docking.DefaultDockableHolder; import com.jidesoft.docking.DockableFrame; -import java.awt.*; -import java.awt.event.*; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Observable; -import java.util.Observer; -import java.util.Set; -import java.util.concurrent.CopyOnWriteArrayList; -import javax.swing.*; -import javax.swing.border.BevelBorder; -import javax.swing.filechooser.FileFilter; -import javax.swing.tree.TreePath; -import javax.swing.tree.TreeSelectionModel; -import javax.xml.parsers.ParserConfigurationException; - import com.jogamp.opengl.awt.GLJPanel; -import javafx.application.Platform; -import javafx.embed.swing.JFXPanel; -import javafx.embed.swing.SwingNode; -import javafx.scene.Scene; -import javafx.scene.control.Label; -import javafx.scene.layout.StackPane; +import com.jogamp.opengl.util.Animator; +import com.jogamp.opengl.util.awt.AWTGLPixelBuffer; import net.rptools.lib.AppEvent; import net.rptools.lib.AppEventListener; import net.rptools.lib.FileUtil; @@ -56,23 +30,11 @@ import net.rptools.lib.swing.PositionalLayout; import net.rptools.lib.swing.SwingUtil; import net.rptools.lib.swing.preference.WindowPreferences; -import net.rptools.maptool.box2d.unused.Box2dLightTest; -import net.rptools.maptool.box2d.unused.MapToolGame; -import net.rptools.maptool.client.AppActions; +import net.rptools.maptool.box2d.Gears; +import net.rptools.maptool.box2d.HelloWorld; import net.rptools.maptool.client.*; import net.rptools.maptool.client.AppActions.ClientAction; -import net.rptools.maptool.client.swing.AppHomeDiskSpaceStatusBar; -import net.rptools.maptool.client.swing.AssetCacheStatusBar; -import net.rptools.maptool.client.swing.CoordinateStatusBar; -import net.rptools.maptool.client.swing.DragImageGlassPane; -import net.rptools.maptool.client.swing.GlassPane; -import net.rptools.maptool.client.swing.ImageCacheStatusBar; -import net.rptools.maptool.client.swing.ImageChooserDialog; -import net.rptools.maptool.client.swing.MemoryStatusBar; -import net.rptools.maptool.client.swing.ProgressStatusBar; -import net.rptools.maptool.client.swing.SpacerStatusBar; -import net.rptools.maptool.client.swing.StatusPanel; -import net.rptools.maptool.client.swing.ZoomStatusBar; +import net.rptools.maptool.client.swing.*; import net.rptools.maptool.client.tool.DrawTopologySelectionTool; import net.rptools.maptool.client.tool.PointerTool; import net.rptools.maptool.client.ui.assetpanel.AssetDirectory; @@ -92,25 +54,36 @@ import net.rptools.maptool.client.ui.tokenpanel.TokenPanelTreeModel; import net.rptools.maptool.client.ui.zone.*; import net.rptools.maptool.language.I18N; -import net.rptools.maptool.model.Asset; -import net.rptools.maptool.model.GUID; -import net.rptools.maptool.model.Token; -import net.rptools.maptool.model.Zone; +import net.rptools.maptool.model.*; import net.rptools.maptool.model.Zone.Layer; -import net.rptools.maptool.model.ZoneFactory; -import net.rptools.maptool.model.ZonePoint; -import net.rptools.maptool.model.drawing.DrawableColorPaint; -import net.rptools.maptool.model.drawing.DrawablePaint; -import net.rptools.maptool.model.drawing.DrawableTexturePaint; -import net.rptools.maptool.model.drawing.DrawnElement; -import net.rptools.maptool.model.drawing.Pen; +import net.rptools.maptool.model.drawing.*; import net.rptools.maptool.util.ImageManager; import org.apache.commons.collections4.map.LinkedMap; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.xml.sax.SAXException; -/** */ +import javax.swing.Timer; +import javax.swing.*; +import javax.swing.border.BevelBorder; +import javax.swing.filechooser.FileFilter; +import javax.swing.tree.TreePath; +import javax.swing.tree.TreeSelectionModel; +import javax.xml.parsers.ParserConfigurationException; +import java.awt.Rectangle; +import java.awt.*; +import java.awt.event.*; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.*; +import java.util.concurrent.CopyOnWriteArrayList; + +/** + * + */ public class MapToolFrame extends DefaultDockableHolder implements WindowListener, AppEventListener { private static final Logger log = LogManager.getLogger(MapToolFrame.class); @@ -127,22 +100,13 @@ public class MapToolFrame extends DefaultDockableHolder private final Pen pen = new Pen(Pen.DEFAULT); private final Map frameMap = new HashMap(); - private JoglSwingCanvas joglSwingCanvas; - - /** Are the drawing measurements being painted? */ - private boolean paintDrawingMeasurement = true; - - private ImageChooserDialog imageChooserDialog; - private ZoneRenderer currentRenderer; - // Components private final AssetPanel assetPanel; private final ClientConnectionPanel connectionPanel; - /** The panel showing the initiative order. */ + /** + * The panel showing the initiative order. + */ private final InitiativePanel initiativePanel; - /** The HTML pane showing the map overlay. */ - private HTMLOverlayPanel overlayPanel; - private final PointerOverlay pointerOverlay; private final CommandPanel commandPanel; private final AboutDialog aboutDialog; @@ -150,22 +114,60 @@ public class MapToolFrame extends DefaultDockableHolder private final Toolbox toolbox; private final ToolbarPanel toolbarPanel; private final ZoneMiniMapPanel zoneMiniMapPanel; - /** Contains the zoneRenderer, as well as all overlays. */ + /** + * Contains the zoneRenderer, as well as all overlays. + */ private final JPanel zoneRendererPanel; - /** Contains the overlays that should be displayed in front of everything else. */ + private JPanel currentRenderPanel; + /** + * Contains the overlays that should be displayed in front of everything else. + */ private final PointerToolOverlay pointerToolOverlay; - - private JPanel visibleControlPanel; - private FullScreenFrame fullScreenFrame; - private JPanel fullScreenToolPanel; private final JPanel rendererBorderPanel; private final List zoneRendererList; private final JMenuBar menuBar; private final StatusPanel statusPanel; - private String statusMessage = ""; private final ActivityMonitorPanel activityMonitor = new ActivityMonitorPanel(); private final ProgressStatusBar progressBar = new ProgressStatusBar(); private final ConnectionStatusPanel connectionStatusPanel = new ConnectionStatusPanel(); + private final ChatNotificationTimers chatTyperTimers; + private final ChatTyperObserver chatTyperObserver; + private final GlassPane glassPane; + private final TextureChooserPanel textureChooserPanel; + private final FileFilter campaignFilter = + new MTFileFilter("cmpgn", I18N.getText("file.ext.cmpgn")); + private final FileFilter mapFilter = new MTFileFilter("rpmap", I18N.getText("file.ext.rpmap")); + private final FileFilter propertiesFilter = + new MTFileFilter("mtprops", I18N.getText("file.ext.mtprops")); + private final FileFilter macroFilter = + new MTFileFilter("mtmacro", I18N.getText("file.ext.mtmacro")); + private final FileFilter macroSetFilter = + new MTFileFilter("mtmacset", I18N.getText("file.ext.mtmacset")); + private final FileFilter tableFilter = + new MTFileFilter("mttable", I18N.getText("file.ext.mttable")); + private final FileFilter dungeonDraftFilter = + new MTFileFilter("dd2vtt", I18N.getText("file.ext.dungeondraft")); + private final CampaignPanel campaignPanel = new CampaignPanel(); + private final GmPanel gmPanel = new GmPanel(); + private final GlobalPanel globalPanel = new GlobalPanel(); + private final SelectionPanel selectionPanel = new SelectionPanel(); + private final ImpersonatePanel impersonatePanel = new ImpersonatePanel(); + private final DragImageGlassPane dragImageGlassPane = new DragImageGlassPane(); + private JoglSwingCanvas joglSwingCanvas; + /** + * Are the drawing measurements being painted? + */ + private boolean paintDrawingMeasurement = true; + private ImageChooserDialog imageChooserDialog; + private ZoneRenderer currentRenderer; + /** + * The HTML pane showing the map overlay. + */ + private HTMLOverlayPanel overlayPanel; + private JPanel visibleControlPanel; + private FullScreenFrame fullScreenFrame; + private JPanel fullScreenToolPanel; + private String statusMessage = ""; private CoordinateStatusBar coordinateStatusBar; private AssetCacheStatusBar assetCacheStatusBar; private ImageCacheStatusBar imageCacheStatusBar; @@ -173,23 +175,17 @@ public class MapToolFrame extends DefaultDockableHolder private ZoomStatusBar zoomStatusBar; private JLabel chatActionLabel; private boolean fullScreenToolsShown; - private Color chatTypingLabelColor; private ChatTypingNotification chatTypingPanel; private Timer chatTimer; private long chatNotifyDuration; - private final ChatNotificationTimers chatTyperTimers; - private final ChatTyperObserver chatTyperObserver; - - private final GlassPane glassPane; - /** Model for the token tree panel of the map explorer. */ + /** + * Model for the token tree panel of the map explorer. + */ private TokenPanelTreeModel tokenPanelTreeModel; - private DrawPanelTreeModel drawPanelTreeModel; private DrawablesPanel drawablesPanel; - private final TextureChooserPanel textureChooserPanel; private LookupTablePanel lookupTablePanel; - // External filename support private JFileChooser loadPropsFileChooser; private JFileChooser loadFileChooser; @@ -198,154 +194,18 @@ public class MapToolFrame extends DefaultDockableHolder private JFileChooser saveFileChooser; private JFileChooser saveMapFileChooser; private JFileChooser saveTokenFileChooser; - - /** Remember the last layer selected */ + /** + * Remember the last layer selected + */ private Layer lastSelectedLayer = Zone.Layer.TOKEN; - - private final FileFilter campaignFilter = - new MTFileFilter("cmpgn", I18N.getText("file.ext.cmpgn")); - private final FileFilter mapFilter = new MTFileFilter("rpmap", I18N.getText("file.ext.rpmap")); - private final FileFilter propertiesFilter = - new MTFileFilter("mtprops", I18N.getText("file.ext.mtprops")); - private final FileFilter macroFilter = - new MTFileFilter("mtmacro", I18N.getText("file.ext.mtmacro")); - private final FileFilter macroSetFilter = - new MTFileFilter("mtmacset", I18N.getText("file.ext.mtmacset")); - private final FileFilter tableFilter = - new MTFileFilter("mttable", I18N.getText("file.ext.mttable")); - - private final FileFilter dungeonDraftFilter = - new MTFileFilter("dd2vtt", I18N.getText("file.ext.dungeondraft")); private EditTokenDialog tokenPropertiesDialog; - - private final CampaignPanel campaignPanel = new CampaignPanel(); - private final GmPanel gmPanel = new GmPanel(); - private final GlobalPanel globalPanel = new GlobalPanel(); - private final SelectionPanel selectionPanel = new SelectionPanel(); - private final ImpersonatePanel impersonatePanel = new ImpersonatePanel(); - - private final DragImageGlassPane dragImageGlassPane = new DragImageGlassPane(); private GLJPanel gdxPanel; - - private final class KeyListenerDeleteDraw implements KeyListener { - private final JTree tree; - - private KeyListenerDeleteDraw(JTree tree) { - this.tree = tree; - } - - @Override - public void keyTyped(KeyEvent e) {} - - @Override - public void keyReleased(KeyEvent e) { - if (e.getKeyCode() == KeyEvent.VK_DELETE) { - EventQueue.invokeLater( - () -> { - TreePath[] selection = tree.getSelectionPaths(); - Set selectedDrawSet = new HashSet(); - if (selection != null) { - for (TreePath path : selection) { - if (path.getLastPathComponent() instanceof DrawnElement) { - DrawnElement de = (DrawnElement) path.getLastPathComponent(); - selectedDrawSet.add(de.getDrawable().getId()); - } - } - } - if (selectedDrawSet.isEmpty()) return; - // check to see if this is the required action - if (!MapTool.confirmDrawDelete()) { - return; - } - for (GUID id : selectedDrawSet) { - MapTool.serverCommand().undoDraw(getCurrentZoneRenderer().getZone().getId(), id); - } - getCurrentZoneRenderer().repaint(); - MapTool.getFrame().updateDrawTree(); - MapTool.getFrame().refresh(); - }); - } - } - - @Override - public void keyPressed(KeyEvent e) {} - } - - private final class KeyListenerDeleteToken implements KeyListener { - private final JTree tree; - - private KeyListenerDeleteToken(JTree tree) { - this.tree = tree; - } - - @Override - public void keyTyped(KeyEvent e) {} - - @Override - public void keyReleased(KeyEvent e) { - if (e.getKeyCode() == KeyEvent.VK_DELETE) { - EventQueue.invokeLater( - () -> { - // check to see if this is the required action - if (!MapTool.confirmTokenDelete()) { - return; - } - ZoneRenderer zr = getCurrentZoneRenderer(); - AppActions.deleteTokens(zr.getZone(), zr.getSelectedTokenSet()); - }); - } - } - - @Override - public void keyPressed(KeyEvent e) {} - } - - private class ChatTyperObserver implements Observer { - public void update(Observable o, Object arg) { - SwingUtilities.invokeLater( - () -> { - chatTypingPanel.invalidate(); - chatTypingPanel.repaint(); - }); - } - } - - public static class ChatNotificationTimers extends Observable { - private final LinkedMap chatTypingNotificationTimers; - - public synchronized void setChatTyper(final String playerName) { - if (AppPreferences.getTypingNotificationDuration() == 0) { - turnOffUpdates(); - chatTypingNotificationTimers.clear(); - } else { - MapTool.getFrame().getChatTimer().start(); - MapTool.getFrame().getChatTypingPanel().setVisible(true); - chatTypingNotificationTimers.put(playerName, System.currentTimeMillis()); - setChanged(); - notifyObservers(); - } - } - - private void turnOffUpdates() { - MapTool.getFrame().getChatTimer().stop(); - MapTool.getFrame().getChatTypingPanel().setVisible(false); - } - - public synchronized void removeChatTyper(final String playerName) { - chatTypingNotificationTimers.remove(playerName); - if (chatTypingNotificationTimers.isEmpty()) turnOffUpdates(); - setChanged(); - notifyObservers(); - } - - public synchronized LinkedMap getChatTypers() { - return new LinkedMap(chatTypingNotificationTimers); - } - - public ChatNotificationTimers() { - chatTypingNotificationTimers = new LinkedMap(); - } - } + private JFileChooser saveMacroFileChooser; + private JFileChooser saveMacroSetFileChooser; + private JFileChooser loadMacroFileChooser; + private JFileChooser loadMacroSetFileChooser; + private JFileChooser saveTableFileChooser; + private JFileChooser loadTableFileChooser; public MapToolFrame(JMenuBar menuBar) { // Set up the frame @@ -417,9 +277,11 @@ public MapToolFrame(JMenuBar menuBar) { //zoneMiniMapPanel.setSize(100, 100); zoneRendererPanel = new JPanel(new PositionalLayout(5)); + currentRenderPanel = zoneRendererPanel; + initGdx(); + //zoneRendererPanel.setBackground(Color.black); //zoneRendererPanel.add(zoneMiniMapPanel, PositionalLayout.Position.SE); - // zoneRendererPanel.add(getChatTypingLabel(), PositionalLayout.Position.NW); zoneRendererPanel.add(getChatTypingPanel(), PositionalLayout.Position.NW); zoneRendererPanel.add(getChatActionLabel(), PositionalLayout.Position.SW); @@ -428,6 +290,7 @@ public MapToolFrame(JMenuBar menuBar) { rendererBorderPanel = new JPanel(new GridLayout()); rendererBorderPanel.setBorder(BorderFactory.createLineBorder(Color.darkGray)); + //rendererBorderPanel.add(gdxPanel); rendererBorderPanel.add(zoneRendererPanel); toolbarPanel = new ToolbarPanel(toolbox); @@ -477,35 +340,52 @@ public MapToolFrame(JMenuBar menuBar) { chatTyperTimers.addObserver(chatTyperObserver); chatTimer = getChatTimer(); setChatTypingLabelColor(AppPreferences.getChatNotificationColor()); + } - // joglSwingCanvas = new JoglSwingCanvas(new Box2dLightTest(), "test", 640, 480); - // joglSwingCanvas = new JoglSwingCanvas(new MapToolGame(this), "test", 640, 480); - joglSwingCanvas = new JoglSwingCanvas(GdxRenderer.getInstance(), "test", 640, 480); - /* - Platform.runLater(()->{ - - - - SwingNode swingNode = new SwingNode(); - swingNode.setContent(joglSwingCanvas.getGLCanvas()); - javafx.scene.control.Label label = new Label("This is a jfx label"); - label.setMouseTransparent(true); - label.setStyle("-fx-font-size: 64pt; -fx-font-family: Arial; -fx-font-weight: bold; -fx-text-fill: white; -fx-opacity: 0.8;"); - - var root = new StackPane(); - //FIXME: find out why gdx doen't render without this label - root.getChildren().addAll(swingNode); + private final Animator animator = new Animator(); + final Gears gears = new Gears(); + private void initGdx() { + joglSwingCanvas = new JoglSwingCanvas(GdxRenderer.getInstance(), "test", 640, 480); + //gdxPanel = new GLJPanel(); + //gdxPanel.addGLEventListener(gears); + //animator.add(gdxPanel); + //animator.start(); - Scene scene = new Scene(root); - gdxPanel.setScene(scene); - }); */ gdxPanel = joglSwingCanvas.getGLCanvas(); - zoneRendererPanel.add(gdxPanel, PositionalLayout.Position.CENTER); gdxPanel.setVisible(false); + gdxPanel.setLayout(new PositionalLayout(5)); + } + + private static DockableFrame createDockingFrame(MTFrame mtFrame, Component component, Icon icon) { + DockableFrame frame = new DockableFrame(mtFrame.name(), icon); + frame.add(component); + frame.addDockableFrameListener(new MapToolDockListener()); + return frame; } public void addGdx() { - gdxPanel.setVisible(!gdxPanel.isVisible()); + var show = !(currentRenderPanel instanceof GLJPanel); + + JPanel nextRenderPanel; + if (show) { + nextRenderPanel = gdxPanel; + } else { + nextRenderPanel = zoneRendererPanel; + } + + var layout = (PositionalLayout) currentRenderPanel.getLayout(); + for (Component c : currentRenderPanel.getComponents()) { + nextRenderPanel.add(c, layout.getComponentConstraints(c)); + } + currentRenderPanel.setVisible(false); + nextRenderPanel.setVisible(true); + rendererBorderPanel.remove(currentRenderPanel); + + + rendererBorderPanel.add(nextRenderPanel); + currentRenderPanel = nextRenderPanel; + correctGdxSize(); + refresh(); } public ChatNotificationTimers getChatNotificationTimers() { @@ -548,46 +428,6 @@ public ImageChooserDialog getImageChooserDialog() { return imageChooserDialog; } - public enum MTFrame { - /* - * These enums should be specified using references to the properties file. However, a simple toString() method is used later to determine what to display on the various panels. So if I - * convert the propName into the value from the properties file and return it, parts of the code later on use that string to do a properties file lookup! That means that any code using MTFrame - * enums that are converted to Strings need to be checked so that when the return value is used as the NAME of an Action, the property name is retrieved instead. Ugh. :( - * - * We'll need two additional methods: getPropName() and getDisplayName(). Perhaps toString() could call getDisplayName(), but it might be much simpler to debug if toString() weren't used. In - * that case, there's no reason to use an enum either ... may as well use a class with static final objects in it. Sigh. - */ - // @formatter:off - CONNECTIONS("Connections"), - TOKEN_TREE("MapExplorer"), - DRAW_TREE("DrawExplorer"), - INITIATIVE("Initiative"), - IMAGE_EXPLORER("Library"), - CHAT("Chat"), - LOOKUP_TABLES("Tables"), - GLOBAL("Global"), - CAMPAIGN("Campaign"), - GM("Gm"), - SELECTION("Selected"), - IMPERSONATED("Impersonate"); - // @formatter:on - - private String displayName; - - MTFrame(String dispName) { - displayName = dispName; - } - - @Override - public String toString() { - return displayName; - } - - public String getPropertyName() { - return "panel." + displayName; - } - } - private void configureDocking() { initializeFrames(); @@ -707,18 +547,11 @@ private JScrollPane scrollPaneFactory(JPanel panel) { return pane; } - private static DockableFrame createDockingFrame(MTFrame mtFrame, Component component, Icon icon) { - DockableFrame frame = new DockableFrame(mtFrame.name(), icon); - frame.add(component); - frame.addDockableFrameListener(new MapToolDockListener()); - return frame; - } - /** * Updates the window title, tab title, and side title of the given frame * * @param mtFrame The frame to set the title of - * @param title The new title + * @param title The new title */ public void setFrameTitle(MTFrame mtFrame, String title) { DockableFrame frame = getFrame(mtFrame); @@ -740,7 +573,7 @@ public LookupTablePanel getLookupTablePanel() { * Shows the token properties dialog, and saves the token. * * @param token the token to edit - * @param zr the ZoneRenderer of the token + * @param zr the ZoneRenderer of the token */ public void showTokenPropertiesDialog(Token token, ZoneRenderer zr) { if (token != null && zr != null) { @@ -764,53 +597,15 @@ private EditTokenDialog getTokenPropertiesDialog() { return tokenPropertiesDialog; } - /** Repaints the current ZoneRenderer, if it is not null. */ + /** + * Repaints the current ZoneRenderer, if it is not null. + */ public void refresh() { if (getCurrentZoneRenderer() != null) { getCurrentZoneRenderer().repaint(); } } - private static class MTFileFilter extends FileFilter { - private final String extension; - private final String description; - - MTFileFilter(String exten, String desc) { - super(); - extension = exten; - description = desc; - } - - // Accept directories and files matching extension - @Override - public boolean accept(File f) { - if (f.isDirectory()) { - return true; - } - String ext = getExtension(f); - if (ext != null) { - return ext.equals(extension); - } - return false; - } - - @Override - public String getDescription() { - return description; - } - - public String getExtension(File f) { - String ext = null; - String s = f.getName(); - int i = s.lastIndexOf('.'); - - if (i > 0 && i < s.length() - 1) { - ext = s.substring(i + 1).toLowerCase(); - } - return ext; - } - } - public FileFilter getCmpgnFileFilter() { return campaignFilter; } @@ -909,10 +704,10 @@ public void showControlPanel(JPanel... panels) { } layoutPanel.setSize(layoutPanel.getPreferredSize()); - zoneRendererPanel.add(layoutPanel, PositionalLayout.Position.NE); - zoneRendererPanel.setComponentZOrder(layoutPanel, 0); - zoneRendererPanel.revalidate(); - zoneRendererPanel.repaint(); + currentRenderPanel.add(layoutPanel, PositionalLayout.Position.NE); + currentRenderPanel.setComponentZOrder(layoutPanel, 0); + currentRenderPanel.revalidate(); + currentRenderPanel.repaint(); visibleControlPanel = layoutPanel; } @@ -928,7 +723,6 @@ public GLJPanel getGdxPanel() { } - public AssetCacheStatusBar getAssetCacheStatusBar() { if (assetCacheStatusBar == null) { assetCacheStatusBar = new AssetCacheStatusBar(); @@ -967,8 +761,8 @@ public void setLastSelectedLayer(Layer lastSelectedLayer) { public void hideControlPanel() { if (visibleControlPanel != null) { - if (zoneRendererPanel != null) { - zoneRendererPanel.remove(visibleControlPanel); + if (currentRenderPanel != null) { + currentRenderPanel.remove(visibleControlPanel); } visibleControlPanel = null; refresh(); @@ -1179,12 +973,12 @@ public void mousePressed(MouseEvent e) { if (!selectedDrawSet.isEmpty()) { try { new DrawPanelPopupMenu( - selectedDrawSet, - x, - y, - getCurrentZoneRenderer(), - firstElement, - topLevelOnly) + selectedDrawSet, + x, + y, + getCurrentZoneRenderer(), + firstElement, + topLevelOnly) .showPopup(tree); } catch (IllegalComponentStateException icse) { log.info(tree.toString(), icse); @@ -1210,7 +1004,9 @@ public void updateDrawTree() { } } - /** Create the token tree panel for the map explorer */ + /** + * Create the token tree panel for the map explorer + */ private JComponent createTokenTreePanel() { final JTree tree = new JTree(); tokenPanelTreeModel = new TokenPanelTreeModel(tree); @@ -1273,11 +1069,11 @@ public void mousePressed(MouseEvent e) { try { if (firstToken.isStamp()) { new StampPopupMenu( - selectedTokenSet, x, y, getCurrentZoneRenderer(), firstToken) + selectedTokenSet, x, y, getCurrentZoneRenderer(), firstToken) .showPopup(tree); } else { new TokenPopupMenu( - selectedTokenSet, x, y, getCurrentZoneRenderer(), firstToken) + selectedTokenSet, x, y, getCurrentZoneRenderer(), firstToken) .showPopup(tree); } } catch (IllegalComponentStateException icse) { @@ -1301,7 +1097,9 @@ public void clearTokenTree() { } } - /** Update tokenPanelTreeModel and the initiativePanel. */ + /** + * Update tokenPanelTreeModel and the initiativePanel. + */ public void updateTokenTree() { if (tokenPanelTreeModel != null) { tokenPanelTreeModel.update(); @@ -1407,15 +1205,15 @@ public PointerOverlay getPointerOverlay() { return pointerOverlay; } + public String getStatusMessage() { + return statusMessage; + } + public void setStatusMessage(final String message) { statusMessage = message; SwingUtilities.invokeLater(() -> statusPanel.setStatus(" " + message)); } - public String getStatusMessage() { - return statusMessage; - } - public ActivityMonitorPanel getActivityMonitor() { return activityMonitor; } @@ -1486,56 +1284,6 @@ public ZoneRenderer getCurrentZoneRenderer() { return currentRenderer; } - /** @return the HTML Overlay Panel */ - public HTMLOverlayPanel getOverlayPanel() { - return overlayPanel; - } - - public void addZoneRenderer(ZoneRenderer renderer) { - zoneRendererList.add(renderer); - } - - /** - * Remove the ZoneRenderer. If it's the current ZoneRenderer, set a new current ZoneRenderer. - * Flush zoneMiniMapPanel. - * - * @param renderer the ZoneRenderer to remove. - */ - public void removeZoneRenderer(ZoneRenderer renderer) { - boolean isCurrent = renderer == getCurrentZoneRenderer(); - zoneRendererList.remove(renderer); - if (isCurrent) { - boolean rendererSet = false; - for (ZoneRenderer currRenderer : zoneRendererList) { - if (MapTool.getPlayer().isGM() || currRenderer.getZone().isVisible()) { - setCurrentZoneRenderer(currRenderer); - rendererSet = true; - break; - } - } - if (!rendererSet) { - setCurrentZoneRenderer(null); - } - } - zoneMiniMapPanel.flush(); - zoneMiniMapPanel.repaint(); - } - - public void clearZoneRendererList() { - zoneRendererList.clear(); - zoneMiniMapPanel.flush(); - zoneMiniMapPanel.repaint(); - } - - /** Stop the drag of the token, if any is being dragged. */ - private void stopTokenDrag() { - Tool tool = MapTool.getFrame().getToolbox().getSelectedTool(); - if (tool instanceof PointerTool) { - PointerTool pointer = (PointerTool) tool; - if (pointer.isDraggingToken()) pointer.stopTokenDrag(); - } - } - /** * Set the current ZoneRenderer * @@ -1581,11 +1329,65 @@ public void setCurrentZoneRenderer(ZoneRenderer renderer) { // Updates the VBL/MBL button. Fixes #1642. DrawTopologySelectionTool.getInstance().setMode(renderer.getZone().getTopologyMode()); } - AppActions.updateActions(); - repaint(); + AppActions.updateActions(); + repaint(); + + setTitleViaRenderer(renderer); + getZoomStatusBar().update(); + } + + /** + * @return the HTML Overlay Panel + */ + public HTMLOverlayPanel getOverlayPanel() { + return overlayPanel; + } + + public void addZoneRenderer(ZoneRenderer renderer) { + zoneRendererList.add(renderer); + } + + /** + * Remove the ZoneRenderer. If it's the current ZoneRenderer, set a new current ZoneRenderer. + * Flush zoneMiniMapPanel. + * + * @param renderer the ZoneRenderer to remove. + */ + public void removeZoneRenderer(ZoneRenderer renderer) { + boolean isCurrent = renderer == getCurrentZoneRenderer(); + zoneRendererList.remove(renderer); + if (isCurrent) { + boolean rendererSet = false; + for (ZoneRenderer currRenderer : zoneRendererList) { + if (MapTool.getPlayer().isGM() || currRenderer.getZone().isVisible()) { + setCurrentZoneRenderer(currRenderer); + rendererSet = true; + break; + } + } + if (!rendererSet) { + setCurrentZoneRenderer(null); + } + } + zoneMiniMapPanel.flush(); + zoneMiniMapPanel.repaint(); + } - setTitleViaRenderer(renderer); - getZoomStatusBar().update(); + public void clearZoneRendererList() { + zoneRendererList.clear(); + zoneMiniMapPanel.flush(); + zoneMiniMapPanel.repaint(); + } + + /** + * Stop the drag of the token, if any is being dragged. + */ + private void stopTokenDrag() { + Tool tool = MapTool.getFrame().getToolbox().getSelectedTool(); + if (tool instanceof PointerTool) { + PointerTool pointer = (PointerTool) tool; + if (pointer.isDraggingToken()) pointer.stopTokenDrag(); + } } /** @@ -1693,7 +1495,8 @@ public void showFullScreen() { Rectangle bounds = graphicsConfig.getBounds(); fullScreenFrame = new FullScreenFrame(); - fullScreenFrame.add(zoneRendererPanel); + fullScreenFrame.add(currentRenderPanel); + correctGdxSize(); // Under mac os x this does not properly hide the menu bar so adjust top and height // so menu bar does not overlay screen. @@ -1796,9 +1599,9 @@ public void hideFullScreenTools() { toolbarPanel.add(toolbarPanel.getOptionPanel(), toolbarPanel.getOptionsPanelIndex()); JToggleButton buttons[] = { - toolbarPanel.getTopologyButton(), toolbarPanel.getFogButton(), - toolbarPanel.getTemplateButton(), toolbarPanel.getDrawButton(), - toolbarPanel.getPointerGroupButton() + toolbarPanel.getTopologyButton(), toolbarPanel.getFogButton(), + toolbarPanel.getTemplateButton(), toolbarPanel.getDrawButton(), + toolbarPanel.getPointerGroupButton() }; for (var button : buttons) { @@ -1829,7 +1632,9 @@ public void showWindowed() { } hideFullScreenTools(); - rendererBorderPanel.add(zoneRendererPanel); + rendererBorderPanel.add(currentRenderPanel); + correctGdxSize(); + setJMenuBar(menuBar); menuBar.setVisible(true); this.setVisible(true); @@ -1838,9 +1643,11 @@ public void showWindowed() { fullScreenFrame = null; } - public static class FullScreenFrame extends JFrame { - public FullScreenFrame() { - setUndecorated(true); + private void correctGdxSize() { + if (currentRenderPanel == gdxPanel) { + gdxPanel.initializeBackend(false); + gdxPanel.reshape(0, 0, 0, 0); + gdxPanel.revalidate(); } } @@ -1876,7 +1683,8 @@ public void handleAppEvent(AppEvent evt) { } // WINDOW LISTENER - public void windowOpened(WindowEvent e) {} + public void windowOpened(WindowEvent e) { + } public void windowClosing(WindowEvent e) { if (!confirmClose()) { @@ -1936,13 +1744,17 @@ public void windowClosed(WindowEvent e) { System.exit(0); } - public void windowIconified(WindowEvent e) {} + public void windowIconified(WindowEvent e) { + } - public void windowDeiconified(WindowEvent e) {} + public void windowDeiconified(WindowEvent e) { + } - public void windowActivated(WindowEvent e) {} + public void windowActivated(WindowEvent e) { + } - public void windowDeactivated(WindowEvent e) {} + public void windowDeactivated(WindowEvent e) { + } // Windows OS defaults F10 to the menu bar, noooooo!! We want for macro buttons. // XXX Shouldn't this keystroke be configurable via the properties file anyway? @@ -2057,13 +1869,17 @@ public SelectionPanel getSelectionPanel() { return selectionPanel; } - /** Reset the impersonatePanel and the selectionPanel. */ + /** + * Reset the impersonatePanel and the selectionPanel. + */ public void resetTokenPanels() { impersonatePanel.reset(); selectionPanel.reset(); } - /** Reset the macro panels. Currently only used after loading a campaign. */ + /** + * Reset the macro panels. Currently only used after loading a campaign. + */ public void resetPanels() { MacroButtonHotKeyManager.clearKeyStrokes(); campaignPanel.reset(); @@ -2074,14 +1890,13 @@ public void resetPanels() { updateKeyStrokes(); } - /** @return Getter for initiativePanel */ + /** + * @return Getter for initiativePanel + */ public InitiativePanel getInitiativePanel() { return initiativePanel; } - private JFileChooser saveMacroFileChooser; - private JFileChooser saveMacroSetFileChooser; - public JFileChooser getSaveMacroFileChooser() { if (saveMacroFileChooser == null) { saveMacroFileChooser = new JFileChooser(); @@ -2104,9 +1919,6 @@ public JFileChooser getSaveMacroSetFileChooser() { return saveMacroSetFileChooser; } - private JFileChooser loadMacroFileChooser; - private JFileChooser loadMacroSetFileChooser; - public JFileChooser getLoadMacroFileChooser() { if (loadMacroFileChooser == null) { loadMacroFileChooser = new JFileChooser(); @@ -2129,11 +1941,6 @@ public JFileChooser getLoadMacroSetFileChooser() { return loadMacroSetFileChooser; } - // end of Macro import/export support - - private JFileChooser saveTableFileChooser; - private JFileChooser loadTableFileChooser; - public JFileChooser getSaveTableFileChooser() { if (saveTableFileChooser == null) { saveTableFileChooser = new JFileChooser(); @@ -2158,6 +1965,217 @@ public JFileChooser getLoadTableFileChooser() { loadTableFileChooser.setFileFilter(tableFilter); return loadTableFileChooser; } + public enum MTFrame { + /* + * These enums should be specified using references to the properties file. However, a simple toString() method is used later to determine what to display on the various panels. So if I + * convert the propName into the value from the properties file and return it, parts of the code later on use that string to do a properties file lookup! That means that any code using MTFrame + * enums that are converted to Strings need to be checked so that when the return value is used as the NAME of an Action, the property name is retrieved instead. Ugh. :( + * + * We'll need two additional methods: getPropName() and getDisplayName(). Perhaps toString() could call getDisplayName(), but it might be much simpler to debug if toString() weren't used. In + * that case, there's no reason to use an enum either ... may as well use a class with static final objects in it. Sigh. + */ + // @formatter:off + CONNECTIONS("Connections"), + TOKEN_TREE("MapExplorer"), + DRAW_TREE("DrawExplorer"), + INITIATIVE("Initiative"), + IMAGE_EXPLORER("Library"), + CHAT("Chat"), + LOOKUP_TABLES("Tables"), + GLOBAL("Global"), + CAMPAIGN("Campaign"), + GM("Gm"), + SELECTION("Selected"), + IMPERSONATED("Impersonate"); + // @formatter:on + + private String displayName; + + MTFrame(String dispName) { + displayName = dispName; + } + + @Override + public String toString() { + return displayName; + } + + public String getPropertyName() { + return "panel." + displayName; + } + } + + public static class ChatNotificationTimers extends Observable { + private final LinkedMap chatTypingNotificationTimers; + + public ChatNotificationTimers() { + chatTypingNotificationTimers = new LinkedMap(); + } + + public synchronized void setChatTyper(final String playerName) { + if (AppPreferences.getTypingNotificationDuration() == 0) { + turnOffUpdates(); + chatTypingNotificationTimers.clear(); + } else { + MapTool.getFrame().getChatTimer().start(); + MapTool.getFrame().getChatTypingPanel().setVisible(true); + chatTypingNotificationTimers.put(playerName, System.currentTimeMillis()); + setChanged(); + notifyObservers(); + } + } + + private void turnOffUpdates() { + MapTool.getFrame().getChatTimer().stop(); + MapTool.getFrame().getChatTypingPanel().setVisible(false); + } + + public synchronized void removeChatTyper(final String playerName) { + chatTypingNotificationTimers.remove(playerName); + if (chatTypingNotificationTimers.isEmpty()) turnOffUpdates(); + setChanged(); + notifyObservers(); + } + + public synchronized LinkedMap getChatTypers() { + return new LinkedMap(chatTypingNotificationTimers); + } + } + + private static class MTFileFilter extends FileFilter { + private final String extension; + private final String description; + + MTFileFilter(String exten, String desc) { + super(); + extension = exten; + description = desc; + } + + // Accept directories and files matching extension + @Override + public boolean accept(File f) { + if (f.isDirectory()) { + return true; + } + String ext = getExtension(f); + if (ext != null) { + return ext.equals(extension); + } + return false; + } + + @Override + public String getDescription() { + return description; + } + + public String getExtension(File f) { + String ext = null; + String s = f.getName(); + int i = s.lastIndexOf('.'); + + if (i > 0 && i < s.length() - 1) { + ext = s.substring(i + 1).toLowerCase(); + } + return ext; + } + } + + // end of Macro import/export support + + public static class FullScreenFrame extends JFrame { + public FullScreenFrame() { + setUndecorated(true); + } + } + + private final class KeyListenerDeleteDraw implements KeyListener { + private final JTree tree; + + private KeyListenerDeleteDraw(JTree tree) { + this.tree = tree; + } + + @Override + public void keyTyped(KeyEvent e) { + } + + @Override + public void keyReleased(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_DELETE) { + EventQueue.invokeLater( + () -> { + TreePath[] selection = tree.getSelectionPaths(); + Set selectedDrawSet = new HashSet(); + if (selection != null) { + for (TreePath path : selection) { + if (path.getLastPathComponent() instanceof DrawnElement) { + DrawnElement de = (DrawnElement) path.getLastPathComponent(); + selectedDrawSet.add(de.getDrawable().getId()); + } + } + } + if (selectedDrawSet.isEmpty()) return; + // check to see if this is the required action + if (!MapTool.confirmDrawDelete()) { + return; + } + for (GUID id : selectedDrawSet) { + MapTool.serverCommand().undoDraw(getCurrentZoneRenderer().getZone().getId(), id); + } + getCurrentZoneRenderer().repaint(); + MapTool.getFrame().updateDrawTree(); + MapTool.getFrame().refresh(); + }); + } + } + + @Override + public void keyPressed(KeyEvent e) { + } + } + + private final class KeyListenerDeleteToken implements KeyListener { + private final JTree tree; + + private KeyListenerDeleteToken(JTree tree) { + this.tree = tree; + } + + @Override + public void keyTyped(KeyEvent e) { + } + + @Override + public void keyReleased(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_DELETE) { + EventQueue.invokeLater( + () -> { + // check to see if this is the required action + if (!MapTool.confirmTokenDelete()) { + return; + } + ZoneRenderer zr = getCurrentZoneRenderer(); + AppActions.deleteTokens(zr.getZone(), zr.getSelectedTokenSet()); + }); + } + } + + @Override + public void keyPressed(KeyEvent e) { + } + } + + private class ChatTyperObserver implements Observer { + public void update(Observable o, Object arg) { + SwingUtilities.invokeLater( + () -> { + chatTypingPanel.invalidate(); + chatTypingPanel.repaint(); + }); + } + } // end of Table import/export support diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index a702cf553e..4504a63382 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -93,8 +93,8 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private final String ATLAS = "net/rptools/maptool/client/maptool.atlas"; private final String FONT_NORMAL = "normalFont.ttf"; private final String FONT_DISTANCE = "distanceFont.ttf"; - PixmapPacker packer = createPacker(); - TextureAtlas tokenAtlas = new TextureAtlas(); + PixmapPacker packer; + TextureAtlas tokenAtlas; private boolean flushFog = true; //from renderToken: private Area visibleScreenArea; @@ -128,7 +128,7 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private VfxFrameBuffer backBuffer; private Integer fogX; private Integer fogY; - private com.badlogic.gdx.assets.AssetManager manager = new com.badlogic.gdx.assets.AssetManager(); + private com.badlogic.gdx.assets.AssetManager manager; private TextureAtlas atlas; private NinePatch grayLabel; private NinePatch blueLabel; @@ -185,58 +185,28 @@ public static GdxRenderer getInstance() { @Override public void create() { - //world = new World(new Vector2(0, 0), true); - //rayHandler = new RayHandler(world); - //rayHandler.setAmbientLight(0.1f, 0.1f, 0.1f, 1f); - // rayHandler.setBlurNum(3); - // PointLight pl = new PointLight(rayHandler, 128, new Color(0.2f,1,1,1f), 10,500,200); - //PointLight pl2 = new PointLight(rayHandler, 128, new Color(1,0,1,1f), 10,500,200); - - //rayHandler.setShadows(true); -// pl.setStaticLight(false); - //pl.setSoft(true); - - Gdx.input.setInputProcessor(new InputProcessor() { - @Override - public boolean keyDown(int i) { - return false; - } - - @Override - public boolean keyUp(int i) { - return false; - } - - @Override - public boolean keyTyped(char c) { - return false; - } - - @Override - public boolean touchDown(int i, int i1, int i2, int i3) { - return false; - } - - @Override - public boolean touchUp(int i, int i1, int i2, int i3) { - return false; - } - - @Override - public boolean touchDragged(int i, int i1, int i2) { - return false; - } - - @Override - public boolean mouseMoved(int i, int i1) { - return false; - } + // with jogl create is called every time we change the parent frame of the GLJPanel + // e.g. change from fullcreen to window or the other way around. Reinit everthing in this case. + if(initialized) { + initialized = false; + dispose(); + + atlas = null; + blueLabel = null; + grayLabel = null; + darkGrayLabel = null; + normalFont = null; + distanceFont = null; + fetchedSprites.clear(); + isoSprites.clear(); + fetchedRegions.clear(); + bigSprites.clear(); + animationMap.clear(); + } - @Override - public boolean scrolled(float v, float v1) { - return false; - } - }); + tokenAtlas = new TextureAtlas(); + manager = new com.badlogic.gdx.assets.AssetManager(); + packer = createPacker(); //debugRenderer = new Box2DDebugRenderer(); var resolver = new InternalFileHandleResolver(); @@ -286,8 +256,10 @@ public void dispose() { manager.dispose(); batch.dispose(); vfxManager.dispose(); - vfxEffect.dispose(); + if(vfxEffect != null) + vfxEffect.dispose(); disposeZoneResources(); + disposeZoneTextures(); onePixel.dispose(); packer.updateTextureAtlas(atlas, Texture.TextureFilter.Linear, Texture.TextureFilter.Linear, false); packer.dispose(); @@ -3085,30 +3057,34 @@ private void disposeZoneResources() { oldPacker.dispose(); Gdx.app.postRunnable(() -> { - updateCam(); - var background = this.background; - this.background = null; - if (background != null) { - background.dispose(); - } + disposeZoneTextures(); + }); + } - var fog = this.fog; - this.fog = null; - if (fog != null) { - fog.dispose(); - } + private void disposeZoneTextures() { + updateCam(); + var background = this.background; + this.background = null; + if (background != null) { + background.dispose(); + } - for (var sprite : isoSprites.values()) { - sprite.getTexture().dispose(); - } - isoSprites.clear(); + var fog = this.fog; + this.fog = null; + if (fog != null) { + fog.dispose(); + } - for (var sprite : bigSprites.values()) { - sprite.getTexture().dispose(); - } - bigSprites.clear(); - animationMap.clear(); - }); + for (var sprite : isoSprites.values()) { + sprite.getTexture().dispose(); + } + isoSprites.clear(); + + for (var sprite : bigSprites.values()) { + sprite.getTexture().dispose(); + } + bigSprites.clear(); + animationMap.clear(); } private void initializeZoneResources(Zone newZone) { From e341a6ad8cf4bfb25a12c8e54a1116c8a59b17fd Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Wed, 18 Aug 2021 22:22:32 +0200 Subject: [PATCH 059/139] clean up --- .../net/rptools/maptool/box2d/GifDecoder.java | 1241 +++++++++-------- .../rptools/maptool/box2d/GifDecoder2.java | 291 ---- .../rptools/maptool/box2d/GifDecoder3.java | 784 ----------- .../rptools/maptool/box2d/NativeRenderer.java | 199 --- .../maptool/box2d/NativeRenderingCanvas.java | 205 --- .../maptool/client/ui/zone/GdxRenderer.java | 7 +- 6 files changed, 648 insertions(+), 2079 deletions(-) delete mode 100644 src/main/java/net/rptools/maptool/box2d/GifDecoder2.java delete mode 100644 src/main/java/net/rptools/maptool/box2d/GifDecoder3.java delete mode 100644 src/main/java/net/rptools/maptool/box2d/NativeRenderer.java delete mode 100644 src/main/java/net/rptools/maptool/box2d/NativeRenderingCanvas.java diff --git a/src/main/java/net/rptools/maptool/box2d/GifDecoder.java b/src/main/java/net/rptools/maptool/box2d/GifDecoder.java index 257ecfb95b..c086462617 100644 --- a/src/main/java/net/rptools/maptool/box2d/GifDecoder.java +++ b/src/main/java/net/rptools/maptool/box2d/GifDecoder.java @@ -1,686 +1,718 @@ package net.rptools.maptool.box2d; -import java.io.InputStream; -import java.util.Vector; - import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.Animation; import com.badlogic.gdx.graphics.g2d.TextureRegion; -import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.utils.Array; +import net.rptools.lib.image.ImageUtil; -public class GifDecoder { - /** - * File read status: No errors. - */ - public static final int STATUS_OK = 0; - /** - * File read status: Error decoding file (may be partially decoded) - */ - public static final int STATUS_FORMAT_ERROR = 1; - /** - * File read status: Unable to open source. - */ - public static final int STATUS_OPEN_ERROR = 2; - /** - * max decoder pixel stack size - */ - protected static final int MAX_STACK_SIZE = 4096; - protected InputStream in; - protected int status; - protected int width; // full image width - protected int height; // full image height - protected boolean gctFlag; // global color table used - protected int gctSize; // size of global color table - protected int loopCount = 1; // iterations; 0 = repeat forever - protected int[] gct; // global color table - protected int[] lct; // local color table - protected int[] act; // active color table - protected int bgIndex; // background color index - protected int bgColor; // background color - protected int lastBgColor; // previous bg color - protected int pixelAspect; // pixel aspect ratio - protected boolean lctFlag; // local color table flag - protected boolean interlace; // interlace flag - protected int lctSize; // local color table size - protected int ix, iy, iw, ih; // current image rectangle - protected int lrx, lry, lrw, lrh; - protected DixieMap image; // current frame - protected DixieMap lastPixmap; // previous frame - protected byte[] block = new byte[256]; // current data block - protected int blockSize = 0; // block size last graphic control extension info - protected int dispose = 0; // 0=no action; 1=leave in place; 2=restore to bg; 3=restore to prev - protected int lastDispose = 0; - protected boolean transparency = false; // use transparent color - protected int delay = 0; // delay in milliseconds - protected int transIndex; // transparent color index - // LZW decoder working arrays - protected short[] prefix; - protected byte[] suffix; - protected byte[] pixelStack; - protected byte[] pixels; - protected Vector frames; // frames read from current file - protected int frameCount; - - private static class DixieMap extends Pixmap { - DixieMap(int w, int h, Pixmap.Format f) { - super(w, h, f); - } - - DixieMap(int[] data, int w, int h, Pixmap.Format f) { - super(w, h, f); +import static java.lang.System.arraycopy; - int x, y; - - for (y = 0; y < h; y++) { - for (x = 0; x < w; x++) { - int pxl_ARGB8888 = data[x + y * w]; - int pxl_RGBA8888 = - ((pxl_ARGB8888 >> 24) & 0x000000ff) | ((pxl_ARGB8888 << 8) & 0xffffff00); - // convert ARGB8888 > RGBA8888 - drawPixel(x, y, pxl_RGBA8888); - } - } - } +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import java.awt.image.DataBufferInt; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +/* + * Copyright 2014 Dhyan Blum + * + * 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. + */ +/** + *

    + * A decoder capable of processing a GIF data stream to render the graphics + * contained in it. This implementation follows the official + * GIF + * specification. + *

    + * + *

    + * Example usage: + *

    + * + *

    + * + *

    + * final GifImage gifImage = GifDecoder.read(int[] data);
    + * final int width = gifImage.getWidth();
    + * final int height = gifImage.getHeight();
    + * final int frameCount = gifImage.getFrameCount();
    + * for (int i = 0; i < frameCount; i++) {
    + * 	final BufferedImage image = gifImage.getFrame(i);
    + * 	final int delay = gif.getDelay(i);
    + * }
    + * 
    + * + *

    + * + * @author Dhyan Blum + * @version 1.09 November 2017 + * + */ +public final class GifDecoder { + private GifImage image; + public GifDecoder(InputStream is) throws IOException { + image = read(is); + } - void getPixels(int[] pixels, int offset, int stride, int x, int y, int width, int height) { - java.nio.ByteBuffer bb = getPixels(); + public GifDecoder() { - int k, l; + } - for (k = y; k < y + height; k++) { - int _offset = offset; - for (l = x; l < x + width; l++) { - int pxl = bb.getInt(4 * (l + k * width)); + static final class BitReader { + private int bitPos; // Next bit to read + private int numBits; // Number of bits to read + private int bitMask; // Use to kill unwanted higher bits + private byte[] in; // Data array - // convert RGBA8888 > ARGB8888 - pixels[_offset++] = ((pxl >> 8) & 0x00ffffff) | ((pxl << 24) & 0xff000000); - } - offset += stride; - } + // To avoid costly bounds checks, 'in' needs 2 more 0-bytes at the end + private final void init(final byte[] in) { + this.in = in; + bitPos = 0; } - } - class GifFrame { - public GifFrame(DixieMap im, int del) { - image = im; - delay = del; + private final int read() { + // Byte indices: (bitPos / 8), (bitPos / 8) + 1, (bitPos / 8) + 2 + int i = bitPos >>> 3; // Byte = bit / 8 + // Bits we'll shift to the right, AND 7 is the same as MODULO 8 + final int rBits = bitPos & 7; + // Byte 0 to 2, AND to get their unsigned values + final int b0 = in[i++] & 0xFF, b1 = in[i++] & 0xFF, b2 = in[i] & 0xFF; + // Glue the bytes together, don't do more shifting than necessary + final int buf = ((b2 << 8 | b1) << 8 | b0) >>> rBits; + bitPos += numBits; + return buf & bitMask; // Kill the unwanted higher bits } - public DixieMap image; - public int delay; - } - - /** - * Gets display duration for specified frame. - * - * @param n int index of frame - * @return delay in milliseconds - */ - public int getDelay(int n) { - delay = -1; - if ((n >= 0) && (n < frameCount)) { - delay = frames.elementAt(n).delay; + private final void setNumBits(final int numBits) { + this.numBits = numBits; + bitMask = (1 << numBits) - 1; } - return delay; - } - - /** - * Gets the number of frames read from file. - * - * @return frame count - */ - public int getFrameCount() { - return frameCount; } - /** - * Gets the first (or only) image read. - * - * @return BufferedPixmap containing first frame, or null if none. - */ - public Pixmap getPixmap() { - return getFrame(0); + static final class CodeTable { + private final int[][] tbl; // Maps codes to lists of colors + private int initTableSize; // Number of colors +2 for CLEAR + EOI + private int initCodeSize; // Initial code size + private int initCodeLimit; // First code limit + private int codeSize; // Current code size, maximum is 12 bits + private int nextCode; // Next available code for a new entry + private int nextCodeLimit; // Increase codeSize when nextCode == limit + private BitReader br; // Notify when code sizes increases + + public CodeTable() { + tbl = new int[4096][1]; + } + + private final int add(final int[] indices) { + if (nextCode < 4096) { + if (nextCode == nextCodeLimit && codeSize < 12) { + codeSize++; // Max code size is 12 + br.setNumBits(codeSize); + nextCodeLimit = (1 << codeSize) - 1; // 2^codeSize - 1 + } + tbl[nextCode++] = indices; + } + return codeSize; + } + + private final int clear() { + codeSize = initCodeSize; + br.setNumBits(codeSize); + nextCodeLimit = initCodeLimit; + nextCode = initTableSize; // Don't recreate table, reset pointer + return codeSize; + } + + private final void init(final GifFrame fr, final int[] activeColTbl, final BitReader br) { + this.br = br; + final int numColors = activeColTbl.length; + initCodeSize = fr.firstCodeSize; + initCodeLimit = (1 << initCodeSize) - 1; // 2^initCodeSize - 1 + initTableSize = fr.endOfInfoCode + 1; + nextCode = initTableSize; + for (int c = numColors - 1; c >= 0; c--) { + tbl[c][0] = activeColTbl[c]; // Translated color + } // A gap may follow with no colors assigned if numCols < CLEAR + tbl[fr.clearCode] = new int[] { fr.clearCode }; // CLEAR + tbl[fr.endOfInfoCode] = new int[] { fr.endOfInfoCode }; // EOI + // Locate transparent color in code table and set to 0 + if (fr.transpColFlag && fr.transpColIndex < numColors) { + tbl[fr.transpColIndex][0] = 0; + } + } } - /** - * Gets the "Netscape" iteration count, if any. A count of 0 means repeat indefinitely. - * - * @return iteration count if one was specified, else 1. - */ - public int getLoopCount() { - return loopCount; + final class GifFrame { + // Graphic control extension (optional) + // Disposal: 0=NO_ACTION, 1=NO_DISPOSAL, 2=RESTORE_BG, 3=RESTORE_PREV + private int disposalMethod; // 0-3 as above, 4-7 undefined + private boolean transpColFlag; // 1 Bit + private int delay; // Unsigned, LSByte first, n * 1/100 * s + private int transpColIndex; // 1 Byte + // Image descriptor + private int x; // Position on the canvas from the left + private int y; // Position on the canvas from the top + private int w; // May be smaller than the base image + private int h; // May be smaller than the base image + private int wh; // width * height + private boolean hasLocColTbl; // Has local color table? 1 Bit + private boolean interlaceFlag; // Is an interlace image? 1 Bit + @SuppressWarnings("unused") + private boolean sortFlag; // True if local colors are sorted, 1 Bit + private int sizeOfLocColTbl; // Size of the local color table, 3 Bits + private int[] localColTbl; // Local color table (optional) + // Image data + private int firstCodeSize; // LZW minimum code size + 1 for CLEAR & EOI + private int clearCode; + private int endOfInfoCode; + private byte[] data; // Holds LZW encoded data + private BufferedImage img; // Full drawn image, not just the frame area } - /** - * Creates new frame image from current data (and previous frames as specified by their disposition codes). - */ - protected void setPixels() { - // expose destination image's pixels as int array - int[] dest = new int[width * height]; - // fill in starting image contents based on last image's dispose code - if (lastDispose > 0) { - if (lastDispose == 3) { - // use image before last - int n = frameCount - 2; - if (n > 0) { - lastPixmap = getFrame(n - 1); - } else { - lastPixmap = null; - } - } - if (lastPixmap != null) { - lastPixmap.getPixels(dest, 0, width, 0, 0, width, height); - // copy pixels - if (lastDispose == 2) { - // fill last image rect area with background color - int c = 0; - if (!transparency) { - c = lastBgColor; + public final class GifImage { + public String header; // Bytes 0-5, GIF87a or GIF89a + private int w; // Unsigned 16 Bit, least significant byte first + private int h; // Unsigned 16 Bit, least significant byte first + private int wh; // Image width * image height + public boolean hasGlobColTbl; // 1 Bit + public int colorResolution; // 3 Bits + public boolean sortFlag; // True if global colors are sorted, 1 Bit + public int sizeOfGlobColTbl; // 2^(val(3 Bits) + 1), see spec + public int bgColIndex; // Background color index, 1 Byte + public int pxAspectRatio; // Pixel aspect ratio, 1 Byte + public int[] globalColTbl; // Global color table + private final List frames = new ArrayList(64); + public String appId = ""; // 8 Bytes at in[i+3], usually "NETSCAPE" + public String appAuthCode = ""; // 3 Bytes at in[i+11], usually "2.0" + public int repetitions = 0; // 0: infinite loop, N: number of loops + private BufferedImage img = null; // Currently drawn frame + private int[] prevPx = null; // Previous frame's pixels + private final BitReader bits = new BitReader(); + private final CodeTable codes = new CodeTable(); + private Graphics2D g; + + private final int[] decode(final GifFrame fr, final int[] activeColTbl) { + codes.init(fr, activeColTbl, bits); + bits.init(fr.data); // Incoming codes + final int clearCode = fr.clearCode, endCode = fr.endOfInfoCode; + final int[] out = new int[wh]; // Target image pixel array + final int[][] tbl = codes.tbl; // Code table + int outPos = 0; // Next pixel position in the output image array + codes.clear(); // Init code table + bits.read(); // Skip leading clear code + int code = bits.read(); // Read first code + int[] pixels = tbl[code]; // Output pixel for first code + arraycopy(pixels, 0, out, outPos, pixels.length); + outPos += pixels.length; + try { + while (true) { + final int prevCode = code; + code = bits.read(); // Get next code in stream + if (code == clearCode) { // After a CLEAR table, there is + codes.clear(); // no previous code, we need to read + code = bits.read(); // a new one + pixels = tbl[code]; // Output pixels + arraycopy(pixels, 0, out, outPos, pixels.length); + outPos += pixels.length; + continue; // Back to the loop with a valid previous code + } else if (code == endCode) { + break; } - for (int i = 0; i < lrh; i++) { - int n1 = (lry + i) * width + lrx; - int n2 = n1 + lrw; - for (int k = n1; k < n2; k++) { - dest[k] = c; - } + final int[] prevVals = tbl[prevCode]; + final int[] prevValsAndK = new int[prevVals.length + 1]; + arraycopy(prevVals, 0, prevValsAndK, 0, prevVals.length); + if (code < codes.nextCode) { // Code table contains code + pixels = tbl[code]; // Output pixels + arraycopy(pixels, 0, out, outPos, pixels.length); + outPos += pixels.length; + prevValsAndK[prevVals.length] = tbl[code][0]; // K + } else { + prevValsAndK[prevVals.length] = prevVals[0]; // K + arraycopy(prevValsAndK, 0, out, outPos, prevValsAndK.length); + outPos += prevValsAndK.length; } + codes.add(prevValsAndK); // Previous indices + K } + } catch (final ArrayIndexOutOfBoundsException e) { + } + return out; + } + + private final int[] deinterlace(final int[] src, final GifFrame fr) { + final int w = fr.w, h = fr.h, wh = fr.wh; + final int[] dest = new int[src.length]; + // Interlaced images are organized in 4 sets of pixel lines + final int set2Y = (h + 7) >>> 3; // Line no. = ceil(h/8.0) + final int set3Y = set2Y + ((h + 3) >>> 3); // ceil(h-4/8.0) + final int set4Y = set3Y + ((h + 1) >>> 2); // ceil(h-2/4.0) + // Sets' start indices in source array + final int set2 = w * set2Y, set3 = w * set3Y, set4 = w * set4Y; + // Line skips in destination array + final int w2 = w << 1, w4 = w2 << 1, w8 = w4 << 1; + // Group 1 contains every 8th line starting from 0 + int from = 0, to = 0; + for (; from < set2; from += w, to += w8) { + arraycopy(src, from, dest, to, w); + } // Group 2 contains every 8th line starting from 4 + for (to = w4; from < set3; from += w, to += w8) { + arraycopy(src, from, dest, to, w); + } // Group 3 contains every 4th line starting from 2 + for (to = w2; from < set4; from += w, to += w4) { + arraycopy(src, from, dest, to, w); + } // Group 4 contains every 2nd line starting from 1 (biggest group) + for (to = w; from < wh; from += w, to += w2) { + arraycopy(src, from, dest, to, w); } + return dest; // All pixel lines have now been rearranged } - // copy each source line to the appropriate place in the destination - int pass = 1; - int inc = 8; - int iline = 0; - for (int i = 0; i < ih; i++) { - int line = i; - if (interlace) { - if (iline >= ih) { - pass++; - switch (pass) { - case 2: - iline = 4; - break; - case 3: - iline = 2; - inc = 4; - break; - case 4: - iline = 1; - inc = 2; - break; - default: - break; - } - } - line = iline; - iline += inc; + + private final void drawFrame(final GifFrame fr) { + // Determine the color table that will be active for this frame + final int[] activeColTbl = fr.hasLocColTbl ? fr.localColTbl : globalColTbl; + // Get pixels from data stream + int[] pixels = decode(fr, activeColTbl); + if (fr.interlaceFlag) { + pixels = deinterlace(pixels, fr); // Rearrange pixel lines } - line += iy; - if (line < height) { - int k = line * width; - int dx = k + ix; // start of line in dest - int dlim = dx + iw; // end of dest line - if ((k + width) < dlim) { - dlim = k + width; // past dest edge - } - int sx = i * iw; // start of line in source - while (dx < dlim) { - // map color and insert in destination - int index = ((int) pixels[sx++]) & 0xff; - int c = act[index]; - if (c != 0) { - dest[dx] = c; + // Create image of type 2=ARGB for frame area + final BufferedImage frame = new BufferedImage(fr.w, fr.h, 2); + arraycopy(pixels, 0, ((DataBufferInt) frame.getRaster().getDataBuffer()).getData(), 0, fr.wh); + // Draw frame area on top of working image + g.drawImage(frame, fr.x, fr.y, null); + + // Visualize frame boundaries during testing + // if (DEBUG_MODE) { + // if (prev != null) { + // g.setColor(Color.RED); // Previous frame color + // g.drawRect(prev.x, prev.y, prev.w - 1, prev.h - 1); + // } + // g.setColor(Color.GREEN); // New frame color + // g.drawRect(fr.x, fr.y, fr.w - 1, fr.h - 1); + // } + + // Keep one copy as "previous frame" in case we need to restore it + prevPx = new int[wh]; + arraycopy(((DataBufferInt) img.getRaster().getDataBuffer()).getData(), 0, prevPx, 0, wh); + + // Create another copy for the end user to not expose internal state + fr.img = new BufferedImage(w, h, 2); // 2 = ARGB + arraycopy(prevPx, 0, ((DataBufferInt) fr.img.getRaster().getDataBuffer()).getData(), 0, wh); + + // Handle disposal of current frame + if (fr.disposalMethod == 2) { + // Restore to background color (clear frame area only) + g.clearRect(fr.x, fr.y, fr.w, fr.h); + } else if (fr.disposalMethod == 3 && prevPx != null) { + // Restore previous frame + arraycopy(prevPx, 0, ((DataBufferInt) img.getRaster().getDataBuffer()).getData(), 0, wh); + } + } + + /** + * Returns the background color of the first frame in this GIF image. If + * the frame has a local color table, the returned color will be from + * that table. If not, the color will be from the global color table. + * Returns 0 if there is neither a local nor a global color table. + * + * Index of the current frame, 0 to N-1 + * @return 32 bit ARGB color in the form 0xAARRGGBB + */ + public final int getBackgroundColor() { + final GifFrame frame = frames.get(0); + if (frame.hasLocColTbl) { + return frame.localColTbl[bgColIndex]; + } else if (hasGlobColTbl) { + return globalColTbl[bgColIndex]; + } + return 0; + } + + /** + * If not 0, the delay specifies how many hundredths (1/100) of a second + * to wait before displaying the frame after the current frame. + * + * @param index + * Index of the current frame, 0 to N-1 + * @return Delay as number of hundredths (1/100) of a second + */ + public final int getDelay(final int index) { + return frames.get(index).delay; + } + + /** + * @param index + * Index of the frame to return as image, starting from 0. + * For incremental calls such as [0, 1, 2, ...] the method's + * run time is O(1) as only one frame is drawn per call. For + * random access calls such as [7, 12, ...] the run time is + * O(N+1) with N being the number of previous frames that + * need to be drawn before N+1 can be drawn on top. Once a + * frame has been drawn it is being cached and the run time + * is more or less O(0) to retrieve it from the list. + * @return A BufferedImage for the specified frame. + */ + public final BufferedImage getFrame(final int index) { + if (img == null) { // Init + img = new BufferedImage(w, h, 2); // 2 = ARGB + g = img.createGraphics(); + g.setBackground(new Color(0, true)); // Transparent color + } + GifFrame fr = frames.get(index); + if (fr.img == null) { + // Draw all frames until and including the requested frame + for (int i = 0; i <= index; i++) { + fr = frames.get(i); + if (fr.img == null) { + drawFrame(fr); } - dx++; } } + return fr.img; } - image = new DixieMap(dest, width, height, Pixmap.Format.RGBA8888); - //Pixmap.createPixmap(dest, width, height, Config.ARGB_4444); - } - /** - * Gets the image contents of frame n. - * - * @return BufferedPixmap representation of frame, or null if n is invalid. - */ - public DixieMap getFrame(int n) { - if (frameCount <= 0) - return null; - n = n % frameCount; - return ((GifFrame) frames.elementAt(n)).image; - } + /** + * @return The number of frames contained in this GIF image + */ + public final int getFrameCount() { + return frames.size(); + } - /** - * Reads GIF image from stream - * - * @param is containing GIF file. - * @return read status code (0 = no errors) - */ - public int read(InputStream is) { - init(); - if (is != null) { - in = is; - readHeader(); - if (!err()) { - readContents(); - if (frameCount < 0) { - status = STATUS_FORMAT_ERROR; - } - } - } else { - status = STATUS_OPEN_ERROR; + /** + * @return The height of the GIF image + */ + public final int getHeight() { + return h; } - try { - is.close(); - } catch (Exception e) { + + /** + * @return The width of the GIF image + */ + public final int getWidth() { + return w; } - return status; } + static final boolean DEBUG_MODE = false; + /** - * Decodes LZW image data into pixel array. Adapted from John Cristy's BitmapMagick. + * @param in + * Raw image data as a byte[] array + * @return A GifImage object exposing the properties of the GIF image. + * @throws IOException + * If the image violates the GIF specification or is truncated. */ - protected void decodeBitmapData() { - int nullCode = -1; - int npix = iw * ih; - int available, clear, code_mask, code_size, end_of_information, in_code, old_code, bits, code, count, i, datum, data_size, first, top, bi, pi; - if ((pixels == null) || (pixels.length < npix)) { - pixels = new byte[npix]; // allocate new pixel array - } - if (prefix == null) { - prefix = new short[MAX_STACK_SIZE]; - } - if (suffix == null) { - suffix = new byte[MAX_STACK_SIZE]; - } - if (pixelStack == null) { - pixelStack = new byte[MAX_STACK_SIZE + 1]; - } - // Initialize GIF data stream decoder. - data_size = read(); - clear = 1 << data_size; - end_of_information = clear + 1; - available = clear + 2; - old_code = nullCode; - code_size = data_size + 1; - code_mask = (1 << code_size) - 1; - for (code = 0; code < clear; code++) { - prefix[code] = 0; // XXX ArrayIndexOutOfBoundsException - suffix[code] = (byte) code; - } - // Decode GIF pixel stream. - datum = bits = count = first = top = pi = bi = 0; - for (i = 0; i < npix; ) { - if (top == 0) { - if (bits < code_size) { - // Load bytes until there are enough bits for a code. - if (count == 0) { - // Read a new data block. - count = readBlock(); - if (count <= 0) { + public static final GifImage read(final byte[] in) throws IOException { + final GifDecoder decoder = new GifDecoder(); + final GifImage img = decoder.new GifImage(); + GifFrame frame = null; // Currently open frame + int pos = readHeader(in, img); // Read header, get next byte position + pos = readLogicalScreenDescriptor(img, in, pos); + if (img.hasGlobColTbl) { + img.globalColTbl = new int[img.sizeOfGlobColTbl]; + pos = readColTbl(in, img.globalColTbl, pos); + } + while (pos < in.length) { + final int block = in[pos] & 0xFF; + switch (block) { + case 0x21: // Extension introducer + if (pos + 1 >= in.length) { + throw new IOException("Unexpected end of file."); + } + switch (in[pos + 1] & 0xFF) { + case 0xFE: // Comment extension + pos = readTextExtension(in, pos); + break; + case 0xFF: // Application extension + pos = readAppExt(img, in, pos); break; - } - bi = 0; + case 0x01: // Plain text extension + frame = null; // End of current frame + pos = readTextExtension(in, pos); + break; + case 0xF9: // Graphic control extension + if (frame == null) { + frame = decoder.new GifFrame(); + img.frames.add(frame); + } + pos = readGraphicControlExt(frame, in, pos); + break; + default: + throw new IOException("Unknown extension at " + pos); } - datum += (((int) block[bi]) & 0xff) << bits; - bits += 8; - bi++; - count--; - continue; - } - // Get the next code. - code = datum & code_mask; - datum >>= code_size; - bits -= code_size; - // Interpret the code - if ((code > available) || (code == end_of_information)) { break; - } - if (code == clear) { - // Reset decoder. - code_size = data_size + 1; - code_mask = (1 << code_size) - 1; - available = clear + 2; - old_code = nullCode; - continue; - } - if (old_code == nullCode) { - pixelStack[top++] = suffix[code]; - old_code = code; - first = code; - continue; - } - in_code = code; - if (code == available) { - pixelStack[top++] = (byte) first; - code = old_code; - } - while (code > clear) { - pixelStack[top++] = suffix[code]; - code = prefix[code]; - } - first = ((int) suffix[code]) & 0xff; - // Add a new string to the string table, - if (available >= MAX_STACK_SIZE) { + case 0x2C: // Image descriptor + if (frame == null) { + frame = decoder.new GifFrame(); + img.frames.add(frame); + } + pos = readImgDescr(frame, in, pos); + if (frame.hasLocColTbl) { + frame.localColTbl = new int[frame.sizeOfLocColTbl]; + pos = readColTbl(in, frame.localColTbl, pos); + } + pos = readImgData(frame, in, pos); + frame = null; // End of current frame break; - } - pixelStack[top++] = (byte) first; - prefix[available] = (short) old_code; - suffix[available] = (byte) first; - available++; - if (((available & code_mask) == 0) && (available < MAX_STACK_SIZE)) { - code_size++; - code_mask += available; - } - old_code = in_code; + case 0x3B: // GIF Trailer + return img; // Found trailer, finished reading. + default: + // Unknown block. The image is corrupted. Strategies: a) Skip + // and wait for a valid block. Experience: It'll get worse. b) + // Throw exception. c) Return gracefully if we are almost done + // processing. The frames we have so far should be error-free. + final double progress = 1.0 * pos / in.length; + if (progress < 0.9) { + throw new IOException("Unknown block at: " + pos); + } + pos = in.length; // Exit loop } - // Pop a pixel off the pixel stack. - top--; - pixels[pi++] = pixelStack[top]; - i++; - } - for (i = pi; i < npix; i++) { - pixels[i] = 0; // clear missing pixels } + return img; } /** - * Returns true if an error was encountered during reading/decoding + * @param is + * Image data as input stream. This method will read from the + * input stream's current position. It will not reset the + * position before reading and won't reset or close the stream + * afterwards. Call these methods before and after calling this + * method as needed. + * @return A GifImage object exposing the properties of the GIF image. + * @throws IOException + * If an I/O error occurs, the image violates the GIF + * specification or the GIF is truncated. */ - protected boolean err() { - return status != STATUS_OK; + public static final GifImage read(final InputStream is) throws IOException { + final byte[] data = new byte[is.available()]; + is.read(data, 0, data.length); + return read(data); } /** - * Initializes or re-initializes reader + * Empty application extension object + * @param in + * Raw data + * @param i + * Index of the first byte of the application extension + * @return Index of the first byte after this extension */ - protected void init() { - status = STATUS_OK; - frameCount = 0; - frames = new Vector(); - gct = null; - lct = null; + static final int readAppExt(final GifImage img, final byte[] in, int i) { + img.appId = new String(in, i + 3, 8); // should be "NETSCAPE" + img.appAuthCode = new String(in, i + 11, 3); // should be "2.0" + i += 14; // Go to sub-block size, it's value should be 3 + final int subBlockSize = in[i] & 0xFF; + // The only app extension widely used is NETSCAPE, it's got 3 data bytes + if (subBlockSize == 3) { + // in[i+1] should have value 01, in[i+5] should be block terminator + img.repetitions = in[i + 2] & 0xFF | in[i + 3] & 0xFF << 8; // Short + return i + 5; + } // Skip unknown application extensions + while ((in[i] & 0xFF) != 0) { // While sub-block size != 0 + i += (in[i] & 0xFF) + 1; // Skip to next sub-block + } + return i + 1; } /** - * Reads a single byte from the input stream. + * @param in + * Raw data + * @param colors + * Pre-initialized target array to store ARGB colors + * @param i + * Index of the color table's first byte + * @return Index of the first byte after the color table */ - protected int read() { - int curByte = 0; - try { - curByte = in.read(); - } catch (Exception e) { - status = STATUS_FORMAT_ERROR; - } - return curByte; + static final int readColTbl(final byte[] in, final int[] colors, int i) { + final int numColors = colors.length; + for (int c = 0; c < numColors; c++) { + final int a = 0xFF; // Alpha 255 (opaque) + final int r = in[i++] & 0xFF; // 1st byte is red + final int g = in[i++] & 0xFF; // 2nd byte is green + final int b = in[i++] & 0xFF; // 3rd byte is blue + colors[c] = ((a << 8 | r) << 8 | g) << 8 | b; + } + return i; } /** - * Reads next variable length block from input. - * - * @return number of bytes stored in "buffer" + * Graphic control extension object + * @param in + * Raw data + * @param i + * Index of the extension introducer + * @return Index of the first byte after this block */ - protected int readBlock() { - blockSize = read(); - int n = 0; - if (blockSize > 0) { - try { - int count = 0; - while (n < blockSize) { - count = in.read(block, n, blockSize - n); - if (count == -1) { - break; - } - n += count; - } - } catch (Exception e) { - e.printStackTrace(); - } - if (n < blockSize) { - status = STATUS_FORMAT_ERROR; - } - } - return n; + static final int readGraphicControlExt(final GifFrame fr, final byte[] in, final int i) { + fr.disposalMethod = (in[i + 3] & 0b00011100) >>> 2; // Bits 4-2 + fr.transpColFlag = (in[i + 3] & 1) == 1; // Bit 0 + fr.delay = in[i + 4] & 0xFF | (in[i + 5] & 0xFF) << 8; // 16 bit LSB + fr.transpColIndex = in[i + 6] & 0xFF; // Byte 6 + return i + 8; // Skipped byte 7 (blockTerminator), as it's always 0x00 } /** - * Reads color table as 256 RGB integer values - * - * @param ncolors int number of colors to read - * @return int array containing 256 colors (packed ARGB with full alpha) + * @param in + * Raw data + * @param img + * The GifImage object that is currently read + * @return Index of the first byte after this block + * @throws IOException + * If the GIF header/trailer is missing, incomplete or unknown */ - protected int[] readColorTable(int ncolors) { - int nbytes = 3 * ncolors; - int[] tab = null; - byte[] c = new byte[nbytes]; - int n = 0; - try { - n = in.read(c); - } catch (Exception e) { - e.printStackTrace(); + static final int readHeader(final byte[] in, final GifImage img) throws IOException { + if (in.length < 6) { // Check first 6 bytes + throw new IOException("Image is truncated."); } - if (n < nbytes) { - status = STATUS_FORMAT_ERROR; - } else { - tab = new int[256]; // max size to avoid bounds checks - int i = 0; - int j = 0; - while (i < ncolors) { - int r = ((int) c[j++]) & 0xff; - int g = ((int) c[j++]) & 0xff; - int b = ((int) c[j++]) & 0xff; - tab[i++] = 0xff000000 | (r << 16) | (g << 8) | b; - } + img.header = new String(in, 0, 6); + if (!img.header.equals("GIF87a") && !img.header.equals("GIF89a")) { + throw new IOException("Invalid GIF header."); } - return tab; + return 6; } /** - * Main file parser. Reads GIF content blocks. + * @param fr + * The GIF frame to whom this image descriptor belongs + * @param in + * Raw data + * @param i + * Index of the first byte of this block, i.e. the minCodeSize + * @return */ - protected void readContents() { - // read GIF file content blocks - boolean done = false; - while (!(done || err())) { - int code = read(); - switch (code) { - case 0x2C: // image separator - readBitmap(); - break; - case 0x21: // extension - code = read(); - switch (code) { - case 0xf9: // graphics control extension - readGraphicControlExt(); - break; - case 0xff: // application extension - readBlock(); - String app = ""; - for (int i = 0; i < 11; i++) { - app += (char) block[i]; - } - if (app.equals("NETSCAPE2.0")) { - readNetscapeExt(); - } else { - skip(); // don't care - } - break; - case 0xfe:// comment extension - skip(); - break; - case 0x01:// plain text extension - skip(); - break; - default: // uninteresting extension - skip(); - } - break; - case 0x3b: // terminator - done = true; - break; - case 0x00: // bad byte, but keep going and see what happens break; - default: - status = STATUS_FORMAT_ERROR; + static final int readImgData(final GifFrame fr, final byte[] in, int i) { + final int fileSize = in.length; + final int minCodeSize = in[i++] & 0xFF; // Read code size, go to block + final int clearCode = 1 << minCodeSize; // CLEAR = 2^minCodeSize + fr.firstCodeSize = minCodeSize + 1; // Add 1 bit for CLEAR and EOI + fr.clearCode = clearCode; + fr.endOfInfoCode = clearCode + 1; + final int imgDataSize = readImgDataSize(in, i); + final byte[] imgData = new byte[imgDataSize + 2]; + int imgDataPos = 0; + int subBlockSize = in[i] & 0xFF; + while (subBlockSize > 0) { // While block has data + try { // Next line may throw exception if sub-block size is fake + final int nextSubBlockSizePos = i + subBlockSize + 1; + final int nextSubBlockSize = in[nextSubBlockSizePos] & 0xFF; + arraycopy(in, i + 1, imgData, imgDataPos, subBlockSize); + imgDataPos += subBlockSize; // Move output data position + i = nextSubBlockSizePos; // Move to next sub-block size + subBlockSize = nextSubBlockSize; + } catch (final Exception e) { + // Sub-block exceeds file end, only use remaining bytes + subBlockSize = fileSize - i - 1; // Remaining bytes + arraycopy(in, i + 1, imgData, imgDataPos, subBlockSize); + imgDataPos += subBlockSize; // Move output data position + i += subBlockSize + 1; // Move to next sub-block size + break; } } + fr.data = imgData; // Holds LZW encoded data + i++; // Skip last sub-block size, should be 0 + return i; } - /** - * Reads Graphics Control Extension values - */ - protected void readGraphicControlExt() { - read(); // block size - int packed = read(); // packed fields - dispose = (packed & 0x1c) >> 2; // disposal method - if (dispose == 0) { - dispose = 1; // elect to keep old image if discretionary - } - transparency = (packed & 1) != 0; - delay = readShort() * 10; // delay in milliseconds - transIndex = read(); // transparent color index - read(); // block terminator - } - - /** - * Reads GIF file header information. - */ - protected void readHeader() { - String id = ""; - for (int i = 0; i < 6; i++) { - id += (char) read(); - } - if (!id.startsWith("GIF")) { - status = STATUS_FORMAT_ERROR; - return; - } - readLSD(); - if (gctFlag && !err()) { - gct = readColorTable(gctSize); - bgColor = gct[bgIndex]; - } - } - - /** - * Reads next frame image - */ - protected void readBitmap() { - ix = readShort(); // (sub)image position & size - iy = readShort(); - iw = readShort(); - ih = readShort(); - int packed = read(); - lctFlag = (packed & 0x80) != 0; // 1 - local color table flag interlace - lctSize = (int) Math.pow(2, (packed & 0x07) + 1); - // 3 - sort flag - // 4-5 - reserved lctSize = 2 << (packed & 7); // 6-8 - local color - // table size - interlace = (packed & 0x40) != 0; - if (lctFlag) { - lct = readColorTable(lctSize); // read table - act = lct; // make local table active - } else { - act = gct; // make global table active - if (bgIndex == transIndex) { - bgColor = 0; + static final int readImgDataSize(final byte[] in, int i) { + final int fileSize = in.length; + int imgDataPos = 0; + int subBlockSize = in[i] & 0xFF; + while (subBlockSize > 0) { // While block has data + try { // Next line may throw exception if sub-block size is fake + final int nextSubBlockSizePos = i + subBlockSize + 1; + final int nextSubBlockSize = in[nextSubBlockSizePos] & 0xFF; + imgDataPos += subBlockSize; // Move output data position + i = nextSubBlockSizePos; // Move to next sub-block size + subBlockSize = nextSubBlockSize; + } catch (final Exception e) { + // Sub-block exceeds file end, only use remaining bytes + subBlockSize = fileSize - i - 1; // Remaining bytes + imgDataPos += subBlockSize; // Move output data position + break; } } - int save = 0; - if (transparency) { - save = act[transIndex]; - act[transIndex] = 0; // set transparent color if specified - } - if (act == null) { - status = STATUS_FORMAT_ERROR; // no color table defined - } - if (err()) { - return; - } - decodeBitmapData(); // decode pixel data - skip(); - if (err()) { - return; - } - frameCount++; - // create new image to receive frame data - image = new DixieMap(width, height, Pixmap.Format.RGBA8888); - setPixels(); // transfer pixel data to image - frames.addElement(new GifFrame(image, delay)); // add image to frame - // list - if (transparency) { - act[transIndex] = save; - } - resetFrame(); - } - - /** - * Reads Logical Screen Descriptor - */ - protected void readLSD() { - // logical screen size - width = readShort(); - height = readShort(); - // packed fields - int packed = read(); - gctFlag = (packed & 0x80) != 0; // 1 : global color table flag - // 2-4 : color resolution - // 5 : gct sort flag - gctSize = 2 << (packed & 7); // 6-8 : gct size - bgIndex = read(); // background color index - pixelAspect = read(); // pixel aspect ratio - } - - /** - * Reads Netscape extenstion to obtain iteration count - */ - protected void readNetscapeExt() { - do { - readBlock(); - if (block[0] == 1) { - // loop count sub-block - int b1 = ((int) block[1]) & 0xff; - int b2 = ((int) block[2]) & 0xff; - loopCount = (b2 << 8) | b1; - } - } while ((blockSize > 0) && !err()); + return imgDataPos; } /** - * Reads next 16-bit value, LSB first + * @param fr + * The GIF frame to whom this image descriptor belongs + * @param in + * Raw data + * @param i + * Index of the image separator, i.e. the first block byte + * @return Index of the first byte after this block */ - protected int readShort() { - // read 16-bit value, LSB first - return read() | (read() << 8); + static final int readImgDescr(final GifFrame fr, final byte[] in, int i) { + fr.x = in[++i] & 0xFF | (in[++i] & 0xFF) << 8; // Byte 1-2: left + fr.y = in[++i] & 0xFF | (in[++i] & 0xFF) << 8; // Byte 3-4: top + fr.w = in[++i] & 0xFF | (in[++i] & 0xFF) << 8; // Byte 5-6: width + fr.h = in[++i] & 0xFF | (in[++i] & 0xFF) << 8; // Byte 7-8: height + fr.wh = fr.w * fr.h; + final byte b = in[++i]; // Byte 9 is a packed byte + fr.hasLocColTbl = (b & 0b10000000) >>> 7 == 1; // Bit 7 + fr.interlaceFlag = (b & 0b01000000) >>> 6 == 1; // Bit 6 + fr.sortFlag = (b & 0b00100000) >>> 5 == 1; // Bit 5 + final int colTblSizePower = (b & 7) + 1; // Bits 2-0 + fr.sizeOfLocColTbl = 1 << colTblSizePower; // 2^(N+1), As per the spec + return ++i; } /** - * Resets frame state for reading next image. + * @param img + * @param i + * Start index of this block. + * @return Index of the first byte after this block. */ - protected void resetFrame() { - lastDispose = dispose; - lrx = ix; - lry = iy; - lrw = iw; - lrh = ih; - lastPixmap = image; - lastBgColor = bgColor; - dispose = 0; - transparency = false; - delay = 0; - lct = null; + static final int readLogicalScreenDescriptor(final GifImage img, final byte[] in, final int i) { + img.w = in[i] & 0xFF | (in[i + 1] & 0xFF) << 8; // 16 bit, LSB 1st + img.h = in[i + 2] & 0xFF | (in[i + 3] & 0xFF) << 8; // 16 bit + img.wh = img.w * img.h; + final byte b = in[i + 4]; // Byte 4 is a packed byte + img.hasGlobColTbl = (b & 0b10000000) >>> 7 == 1; // Bit 7 + final int colResPower = ((b & 0b01110000) >>> 4) + 1; // Bits 6-4 + img.colorResolution = 1 << colResPower; // 2^(N+1), As per the spec + img.sortFlag = (b & 0b00001000) >>> 3 == 1; // Bit 3 + final int globColTblSizePower = (b & 7) + 1; // Bits 0-2 + img.sizeOfGlobColTbl = 1 << globColTblSizePower; // 2^(N+1), see spec + img.bgColIndex = in[i + 5] & 0xFF; // 1 Byte + img.pxAspectRatio = in[i + 6] & 0xFF; // 1 Byte + return i + 7; } /** - * Skips variable length blocks up to and including next zero length block. + * @param in + * Raw data + * @param pos + * Index of the extension introducer + * @return Index of the first byte after this block */ - protected void skip() { - do { - readBlock(); - } while ((blockSize > 0) && !err()); + static final int readTextExtension(final byte[] in, final int pos) { + int i = pos + 2; // Skip extension introducer and label + int subBlockSize = in[i++] & 0xFF; + while (subBlockSize != 0 && i < in.length) { + i += subBlockSize; + subBlockSize = in[i++] & 0xFF; + } + return i; } - public Animation getAnimation(Animation.PlayMode playMode) { + public Animation getAnimation(Animation.PlayMode playMode) throws IOException { int nrFrames = getFrameCount(); Pixmap frame = getFrame(0); int width = frame.getWidth(); @@ -717,15 +749,36 @@ public Animation getAnimation(Animation.PlayMode playMode) { } } float frameDuration = (float) getDelay(0); - frameDuration /= 1000; // convert milliseconds into seconds + frameDuration /= 100; // convert milliseconds into seconds Animation result = new Animation(frameDuration, texReg, playMode); return result; } + private int getDelay(int i) { + return image.getDelay(0); + } + + private Pixmap getFrame(int i) throws IOException { + var bytes = ImageUtil.imageToBytes(image.getFrame(i), "png"); + // without imageutil there seem to be some issues with tranparency for some images. + // (black background instead of tranparent) + //var bytes = AssetManager.getAsset(key).getImage(); + return new Pixmap(bytes, 0, bytes.length); + } + + + private int getFrameCount() { + return image.getFrameCount(); + } + public static Animation loadGIFAnimation(Animation.PlayMode playMode, InputStream is) { - GifDecoder gdec = new GifDecoder(); - gdec.read(is); - return gdec.getAnimation(playMode); + try { + var dec = new GifDecoder(is); + return dec.getAnimation(playMode); + + } catch (Exception e) { + return null; + } } } \ No newline at end of file diff --git a/src/main/java/net/rptools/maptool/box2d/GifDecoder2.java b/src/main/java/net/rptools/maptool/box2d/GifDecoder2.java deleted file mode 100644 index 0eb1488cb4..0000000000 --- a/src/main/java/net/rptools/maptool/box2d/GifDecoder2.java +++ /dev/null @@ -1,291 +0,0 @@ -package net.rptools.maptool.box2d; - -import com.badlogic.gdx.graphics.Pixmap; -import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.g2d.Animation; -import com.badlogic.gdx.graphics.g2d.TextureRegion; -import com.badlogic.gdx.utils.Array; -import net.rptools.lib.image.ImageUtil; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -import javax.imageio.ImageIO; -import javax.imageio.ImageReader; -import javax.imageio.metadata.IIOMetadata; -import javax.imageio.metadata.IIOMetadataNode; -import java.awt.*; -import java.awt.image.BufferedImage; -import java.awt.image.ColorModel; -import java.awt.image.WritableRaster; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; - -// from https://stackoverflow.com/questions/8933893/convert-each-animated-gif-frame-to-a-separate-bufferedimage - -public class GifDecoder2 { - public GifDecoder2(InputStream is) throws IOException { - frames = readGif(is); - } - - private ImageFrame[] readGif(InputStream stream) throws IOException { - ArrayList frames = new ArrayList(2); - - ImageReader reader = (ImageReader) ImageIO.getImageReadersByFormatName("gif").next(); - reader.setInput(ImageIO.createImageInputStream(stream)); - - int lastx = 0; - int lasty = 0; - - int width = -1; - int height = -1; - - IIOMetadata metadata = reader.getStreamMetadata(); - - Color backgroundColor = null; - - if(metadata != null) { - IIOMetadataNode globalRoot = (IIOMetadataNode) metadata.getAsTree(metadata.getNativeMetadataFormatName()); - - NodeList globalColorTable = globalRoot.getElementsByTagName("GlobalColorTable"); - NodeList globalScreeDescriptor = globalRoot.getElementsByTagName("LogicalScreenDescriptor"); - - if (globalScreeDescriptor != null && globalScreeDescriptor.getLength() > 0){ - IIOMetadataNode screenDescriptor = (IIOMetadataNode) globalScreeDescriptor.item(0); - - if (screenDescriptor != null){ - width = Integer.parseInt(screenDescriptor.getAttribute("logicalScreenWidth")); - height = Integer.parseInt(screenDescriptor.getAttribute("logicalScreenHeight")); - } - } - - if (globalColorTable != null && globalColorTable.getLength() > 0){ - IIOMetadataNode colorTable = (IIOMetadataNode) globalColorTable.item(0); - - if (colorTable != null) { - String bgIndex = colorTable.getAttribute("backgroundColorIndex"); - - IIOMetadataNode colorEntry = (IIOMetadataNode) colorTable.getFirstChild(); - while (colorEntry != null) { - if (colorEntry.getAttribute("index").equals(bgIndex)) { - int red = Integer.parseInt(colorEntry.getAttribute("red")); - int green = Integer.parseInt(colorEntry.getAttribute("green")); - int blue = Integer.parseInt(colorEntry.getAttribute("blue")); - - backgroundColor = new Color(red, green, blue); - break; - } - - colorEntry = (IIOMetadataNode) colorEntry.getNextSibling(); - } - } - } - } - - BufferedImage master = null; - boolean hasBackround = false; - - for (int frameIndex = 0;; frameIndex++) { - BufferedImage image; - try{ - image = reader.read(frameIndex); - }catch (IndexOutOfBoundsException io){ - break; - } - - if (width == -1 || height == -1){ - width = image.getWidth(); - height = image.getHeight(); - } - - IIOMetadataNode root = (IIOMetadataNode) reader.getImageMetadata(frameIndex).getAsTree("javax_imageio_gif_image_1.0"); - IIOMetadataNode gce = (IIOMetadataNode) root.getElementsByTagName("GraphicControlExtension").item(0); - NodeList children = root.getChildNodes(); - - int delay = Integer.valueOf(gce.getAttribute("delayTime")); - - String disposal = gce.getAttribute("disposalMethod"); - - if (master == null){ - master = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); - master.createGraphics().setColor(backgroundColor); - master.createGraphics().fillRect(0, 0, master.getWidth(), master.getHeight()); - - hasBackround = image.getWidth() == width && image.getHeight() == height; - - master.createGraphics().drawImage(image, 0, 0, null); - }else{ - int x = 0; - int y = 0; - - for (int nodeIndex = 0; nodeIndex < children.getLength(); nodeIndex++){ - Node nodeItem = children.item(nodeIndex); - - if (nodeItem.getNodeName().equals("ImageDescriptor")){ - NamedNodeMap map = nodeItem.getAttributes(); - - x = Integer.valueOf(map.getNamedItem("imageLeftPosition").getNodeValue()); - y = Integer.valueOf(map.getNamedItem("imageTopPosition").getNodeValue()); - } - } - - if (disposal.equals("restoreToPrevious")){ - BufferedImage from = null; - for (int i = frameIndex - 1; i >= 0; i--){ - if (!frames.get(i).getDisposal().equals("restoreToPrevious") || frameIndex == 0){ - from = frames.get(i).getImage(); - break; - } - } - - { - ColorModel model = from.getColorModel(); - boolean alpha = from.isAlphaPremultiplied(); - WritableRaster raster = from.copyData(null); - master = new BufferedImage(model, raster, alpha, null); - } - }else if (disposal.equals("restoreToBackgroundColor") && backgroundColor != null){ - if (!hasBackround || frameIndex > 1){ - master.createGraphics().fillRect(lastx, lasty, frames.get(frameIndex - 1).getWidth(), frames.get(frameIndex - 1).getHeight()); - } - } - master.createGraphics().drawImage(image, x, y, null); - - lastx = x; - lasty = y; - } - - { - BufferedImage copy; - - { - ColorModel model = master.getColorModel(); - boolean alpha = master.isAlphaPremultiplied(); - WritableRaster raster = master.copyData(null); - copy = new BufferedImage(model, raster, alpha, null); - } - frames.add(new ImageFrame(copy, delay, disposal, image.getWidth(), image.getHeight())); - } - - master.flush(); - } - reader.dispose(); - - return frames.toArray(new ImageFrame[frames.size()]); - } - - private static class ImageFrame { - private final int delay; - private final BufferedImage image; - private final String disposal; - private final int width, height; - - public ImageFrame (BufferedImage image, int delay, String disposal, int width, int height){ - this.image = image; - this.delay = delay; - this.disposal = disposal; - this.width = width; - this.height = height; - } - - public ImageFrame (BufferedImage image){ - this.image = image; - this.delay = -1; - this.disposal = null; - this.width = -1; - this.height = -1; - } - - public BufferedImage getImage() { - return image; - } - - public int getDelay() { - return delay; - } - - public String getDisposal() { - return disposal; - } - - public int getWidth() { - return width; - } - - public int getHeight() { - return height; - } - } - - public Animation getAnimation(Animation.PlayMode playMode) throws IOException { - int nrFrames = getFrameCount(); - Pixmap frame = getFrame(0); - int width = frame.getWidth(); - int height = frame.getHeight(); - int vzones = (int) Math.sqrt((double) nrFrames); - int hzones = vzones; - - while (vzones * hzones < nrFrames) vzones++; - - int v, h; - - Pixmap target = new Pixmap(width * hzones, height * vzones, Pixmap.Format.RGBA8888); - - for (h = 0; h < hzones; h++) { - for (v = 0; v < vzones; v++) { - int frameID = v + h * vzones; - if (frameID < nrFrames) { - frame = getFrame(frameID); - target.drawPixmap(frame, h * width, v * height); - } - } - } - - Texture texture = new Texture(target); - Array texReg = new Array(); - - for (h = 0; h < hzones; h++) { - for (v = 0; v < vzones; v++) { - int frameID = v + h * vzones; - if (frameID < nrFrames) { - TextureRegion tr = new TextureRegion(texture, h * width, v * height, width, height); - texReg.add(tr); - } - } - } - float frameDuration = (float) getDelay(0); - frameDuration /= 100; // convert milliseconds into seconds - Animation result = new Animation(frameDuration, texReg, playMode); - - return result; - } - - private int getDelay(int i) { - return frames[i].getDelay(); - } - - private Pixmap getFrame(int i) throws IOException { - var bytes = ImageUtil.imageToBytes(frames[i].getImage(), "png"); - // without imageutil there seem to be some issues with tranparency for some images. - // (black background instead of tranparent) - //var bytes = AssetManager.getAsset(key).getImage(); - return new Pixmap(bytes, 0, bytes.length); - } - - private ImageFrame[] frames; - - private int getFrameCount() { - return frames.length; - } - - public static Animation loadGIFAnimation(Animation.PlayMode playMode, InputStream is) { - try { - var dec = new GifDecoder2(is); - return dec.getAnimation(playMode); - - } catch (Exception e) { - return null; - } - } -} diff --git a/src/main/java/net/rptools/maptool/box2d/GifDecoder3.java b/src/main/java/net/rptools/maptool/box2d/GifDecoder3.java deleted file mode 100644 index 59f4ce6674..0000000000 --- a/src/main/java/net/rptools/maptool/box2d/GifDecoder3.java +++ /dev/null @@ -1,784 +0,0 @@ -package net.rptools.maptool.box2d; - -import com.badlogic.gdx.graphics.Pixmap; -import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.g2d.Animation; -import com.badlogic.gdx.graphics.g2d.TextureRegion; -import com.badlogic.gdx.utils.Array; -import net.rptools.lib.image.ImageUtil; - -import static java.lang.System.arraycopy; - -import java.awt.Color; -import java.awt.Graphics2D; -import java.awt.image.BufferedImage; -import java.awt.image.DataBufferInt; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; - -/* - * Copyright 2014 Dhyan Blum - * - * 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. - */ -/** - *

    - * A decoder capable of processing a GIF data stream to render the graphics - * contained in it. This implementation follows the official - * GIF - * specification. - *

    - * - *

    - * Example usage: - *

    - * - *

    - * - *

    - * final GifImage gifImage = GifDecoder.read(int[] data);
    - * final int width = gifImage.getWidth();
    - * final int height = gifImage.getHeight();
    - * final int frameCount = gifImage.getFrameCount();
    - * for (int i = 0; i < frameCount; i++) {
    - * 	final BufferedImage image = gifImage.getFrame(i);
    - * 	final int delay = gif.getDelay(i);
    - * }
    - * 
    - * - *

    - * - * @author Dhyan Blum - * @version 1.09 November 2017 - * - */ -public final class GifDecoder3 { - private GifImage image; - public GifDecoder3(InputStream is) throws IOException { - image = read(is); - } - - public GifDecoder3() { - - } - - static final class BitReader { - private int bitPos; // Next bit to read - private int numBits; // Number of bits to read - private int bitMask; // Use to kill unwanted higher bits - private byte[] in; // Data array - - // To avoid costly bounds checks, 'in' needs 2 more 0-bytes at the end - private final void init(final byte[] in) { - this.in = in; - bitPos = 0; - } - - private final int read() { - // Byte indices: (bitPos / 8), (bitPos / 8) + 1, (bitPos / 8) + 2 - int i = bitPos >>> 3; // Byte = bit / 8 - // Bits we'll shift to the right, AND 7 is the same as MODULO 8 - final int rBits = bitPos & 7; - // Byte 0 to 2, AND to get their unsigned values - final int b0 = in[i++] & 0xFF, b1 = in[i++] & 0xFF, b2 = in[i] & 0xFF; - // Glue the bytes together, don't do more shifting than necessary - final int buf = ((b2 << 8 | b1) << 8 | b0) >>> rBits; - bitPos += numBits; - return buf & bitMask; // Kill the unwanted higher bits - } - - private final void setNumBits(final int numBits) { - this.numBits = numBits; - bitMask = (1 << numBits) - 1; - } - } - - static final class CodeTable { - private final int[][] tbl; // Maps codes to lists of colors - private int initTableSize; // Number of colors +2 for CLEAR + EOI - private int initCodeSize; // Initial code size - private int initCodeLimit; // First code limit - private int codeSize; // Current code size, maximum is 12 bits - private int nextCode; // Next available code for a new entry - private int nextCodeLimit; // Increase codeSize when nextCode == limit - private BitReader br; // Notify when code sizes increases - - public CodeTable() { - tbl = new int[4096][1]; - } - - private final int add(final int[] indices) { - if (nextCode < 4096) { - if (nextCode == nextCodeLimit && codeSize < 12) { - codeSize++; // Max code size is 12 - br.setNumBits(codeSize); - nextCodeLimit = (1 << codeSize) - 1; // 2^codeSize - 1 - } - tbl[nextCode++] = indices; - } - return codeSize; - } - - private final int clear() { - codeSize = initCodeSize; - br.setNumBits(codeSize); - nextCodeLimit = initCodeLimit; - nextCode = initTableSize; // Don't recreate table, reset pointer - return codeSize; - } - - private final void init(final GifFrame fr, final int[] activeColTbl, final BitReader br) { - this.br = br; - final int numColors = activeColTbl.length; - initCodeSize = fr.firstCodeSize; - initCodeLimit = (1 << initCodeSize) - 1; // 2^initCodeSize - 1 - initTableSize = fr.endOfInfoCode + 1; - nextCode = initTableSize; - for (int c = numColors - 1; c >= 0; c--) { - tbl[c][0] = activeColTbl[c]; // Translated color - } // A gap may follow with no colors assigned if numCols < CLEAR - tbl[fr.clearCode] = new int[] { fr.clearCode }; // CLEAR - tbl[fr.endOfInfoCode] = new int[] { fr.endOfInfoCode }; // EOI - // Locate transparent color in code table and set to 0 - if (fr.transpColFlag && fr.transpColIndex < numColors) { - tbl[fr.transpColIndex][0] = 0; - } - } - } - - final class GifFrame { - // Graphic control extension (optional) - // Disposal: 0=NO_ACTION, 1=NO_DISPOSAL, 2=RESTORE_BG, 3=RESTORE_PREV - private int disposalMethod; // 0-3 as above, 4-7 undefined - private boolean transpColFlag; // 1 Bit - private int delay; // Unsigned, LSByte first, n * 1/100 * s - private int transpColIndex; // 1 Byte - // Image descriptor - private int x; // Position on the canvas from the left - private int y; // Position on the canvas from the top - private int w; // May be smaller than the base image - private int h; // May be smaller than the base image - private int wh; // width * height - private boolean hasLocColTbl; // Has local color table? 1 Bit - private boolean interlaceFlag; // Is an interlace image? 1 Bit - @SuppressWarnings("unused") - private boolean sortFlag; // True if local colors are sorted, 1 Bit - private int sizeOfLocColTbl; // Size of the local color table, 3 Bits - private int[] localColTbl; // Local color table (optional) - // Image data - private int firstCodeSize; // LZW minimum code size + 1 for CLEAR & EOI - private int clearCode; - private int endOfInfoCode; - private byte[] data; // Holds LZW encoded data - private BufferedImage img; // Full drawn image, not just the frame area - } - - public final class GifImage { - public String header; // Bytes 0-5, GIF87a or GIF89a - private int w; // Unsigned 16 Bit, least significant byte first - private int h; // Unsigned 16 Bit, least significant byte first - private int wh; // Image width * image height - public boolean hasGlobColTbl; // 1 Bit - public int colorResolution; // 3 Bits - public boolean sortFlag; // True if global colors are sorted, 1 Bit - public int sizeOfGlobColTbl; // 2^(val(3 Bits) + 1), see spec - public int bgColIndex; // Background color index, 1 Byte - public int pxAspectRatio; // Pixel aspect ratio, 1 Byte - public int[] globalColTbl; // Global color table - private final List frames = new ArrayList(64); - public String appId = ""; // 8 Bytes at in[i+3], usually "NETSCAPE" - public String appAuthCode = ""; // 3 Bytes at in[i+11], usually "2.0" - public int repetitions = 0; // 0: infinite loop, N: number of loops - private BufferedImage img = null; // Currently drawn frame - private int[] prevPx = null; // Previous frame's pixels - private final BitReader bits = new BitReader(); - private final CodeTable codes = new CodeTable(); - private Graphics2D g; - - private final int[] decode(final GifFrame fr, final int[] activeColTbl) { - codes.init(fr, activeColTbl, bits); - bits.init(fr.data); // Incoming codes - final int clearCode = fr.clearCode, endCode = fr.endOfInfoCode; - final int[] out = new int[wh]; // Target image pixel array - final int[][] tbl = codes.tbl; // Code table - int outPos = 0; // Next pixel position in the output image array - codes.clear(); // Init code table - bits.read(); // Skip leading clear code - int code = bits.read(); // Read first code - int[] pixels = tbl[code]; // Output pixel for first code - arraycopy(pixels, 0, out, outPos, pixels.length); - outPos += pixels.length; - try { - while (true) { - final int prevCode = code; - code = bits.read(); // Get next code in stream - if (code == clearCode) { // After a CLEAR table, there is - codes.clear(); // no previous code, we need to read - code = bits.read(); // a new one - pixels = tbl[code]; // Output pixels - arraycopy(pixels, 0, out, outPos, pixels.length); - outPos += pixels.length; - continue; // Back to the loop with a valid previous code - } else if (code == endCode) { - break; - } - final int[] prevVals = tbl[prevCode]; - final int[] prevValsAndK = new int[prevVals.length + 1]; - arraycopy(prevVals, 0, prevValsAndK, 0, prevVals.length); - if (code < codes.nextCode) { // Code table contains code - pixels = tbl[code]; // Output pixels - arraycopy(pixels, 0, out, outPos, pixels.length); - outPos += pixels.length; - prevValsAndK[prevVals.length] = tbl[code][0]; // K - } else { - prevValsAndK[prevVals.length] = prevVals[0]; // K - arraycopy(prevValsAndK, 0, out, outPos, prevValsAndK.length); - outPos += prevValsAndK.length; - } - codes.add(prevValsAndK); // Previous indices + K - } - } catch (final ArrayIndexOutOfBoundsException e) { - } - return out; - } - - private final int[] deinterlace(final int[] src, final GifFrame fr) { - final int w = fr.w, h = fr.h, wh = fr.wh; - final int[] dest = new int[src.length]; - // Interlaced images are organized in 4 sets of pixel lines - final int set2Y = (h + 7) >>> 3; // Line no. = ceil(h/8.0) - final int set3Y = set2Y + ((h + 3) >>> 3); // ceil(h-4/8.0) - final int set4Y = set3Y + ((h + 1) >>> 2); // ceil(h-2/4.0) - // Sets' start indices in source array - final int set2 = w * set2Y, set3 = w * set3Y, set4 = w * set4Y; - // Line skips in destination array - final int w2 = w << 1, w4 = w2 << 1, w8 = w4 << 1; - // Group 1 contains every 8th line starting from 0 - int from = 0, to = 0; - for (; from < set2; from += w, to += w8) { - arraycopy(src, from, dest, to, w); - } // Group 2 contains every 8th line starting from 4 - for (to = w4; from < set3; from += w, to += w8) { - arraycopy(src, from, dest, to, w); - } // Group 3 contains every 4th line starting from 2 - for (to = w2; from < set4; from += w, to += w4) { - arraycopy(src, from, dest, to, w); - } // Group 4 contains every 2nd line starting from 1 (biggest group) - for (to = w; from < wh; from += w, to += w2) { - arraycopy(src, from, dest, to, w); - } - return dest; // All pixel lines have now been rearranged - } - - private final void drawFrame(final GifFrame fr) { - // Determine the color table that will be active for this frame - final int[] activeColTbl = fr.hasLocColTbl ? fr.localColTbl : globalColTbl; - // Get pixels from data stream - int[] pixels = decode(fr, activeColTbl); - if (fr.interlaceFlag) { - pixels = deinterlace(pixels, fr); // Rearrange pixel lines - } - // Create image of type 2=ARGB for frame area - final BufferedImage frame = new BufferedImage(fr.w, fr.h, 2); - arraycopy(pixels, 0, ((DataBufferInt) frame.getRaster().getDataBuffer()).getData(), 0, fr.wh); - // Draw frame area on top of working image - g.drawImage(frame, fr.x, fr.y, null); - - // Visualize frame boundaries during testing - // if (DEBUG_MODE) { - // if (prev != null) { - // g.setColor(Color.RED); // Previous frame color - // g.drawRect(prev.x, prev.y, prev.w - 1, prev.h - 1); - // } - // g.setColor(Color.GREEN); // New frame color - // g.drawRect(fr.x, fr.y, fr.w - 1, fr.h - 1); - // } - - // Keep one copy as "previous frame" in case we need to restore it - prevPx = new int[wh]; - arraycopy(((DataBufferInt) img.getRaster().getDataBuffer()).getData(), 0, prevPx, 0, wh); - - // Create another copy for the end user to not expose internal state - fr.img = new BufferedImage(w, h, 2); // 2 = ARGB - arraycopy(prevPx, 0, ((DataBufferInt) fr.img.getRaster().getDataBuffer()).getData(), 0, wh); - - // Handle disposal of current frame - if (fr.disposalMethod == 2) { - // Restore to background color (clear frame area only) - g.clearRect(fr.x, fr.y, fr.w, fr.h); - } else if (fr.disposalMethod == 3 && prevPx != null) { - // Restore previous frame - arraycopy(prevPx, 0, ((DataBufferInt) img.getRaster().getDataBuffer()).getData(), 0, wh); - } - } - - /** - * Returns the background color of the first frame in this GIF image. If - * the frame has a local color table, the returned color will be from - * that table. If not, the color will be from the global color table. - * Returns 0 if there is neither a local nor a global color table. - * - * Index of the current frame, 0 to N-1 - * @return 32 bit ARGB color in the form 0xAARRGGBB - */ - public final int getBackgroundColor() { - final GifFrame frame = frames.get(0); - if (frame.hasLocColTbl) { - return frame.localColTbl[bgColIndex]; - } else if (hasGlobColTbl) { - return globalColTbl[bgColIndex]; - } - return 0; - } - - /** - * If not 0, the delay specifies how many hundredths (1/100) of a second - * to wait before displaying the frame after the current frame. - * - * @param index - * Index of the current frame, 0 to N-1 - * @return Delay as number of hundredths (1/100) of a second - */ - public final int getDelay(final int index) { - return frames.get(index).delay; - } - - /** - * @param index - * Index of the frame to return as image, starting from 0. - * For incremental calls such as [0, 1, 2, ...] the method's - * run time is O(1) as only one frame is drawn per call. For - * random access calls such as [7, 12, ...] the run time is - * O(N+1) with N being the number of previous frames that - * need to be drawn before N+1 can be drawn on top. Once a - * frame has been drawn it is being cached and the run time - * is more or less O(0) to retrieve it from the list. - * @return A BufferedImage for the specified frame. - */ - public final BufferedImage getFrame(final int index) { - if (img == null) { // Init - img = new BufferedImage(w, h, 2); // 2 = ARGB - g = img.createGraphics(); - g.setBackground(new Color(0, true)); // Transparent color - } - GifFrame fr = frames.get(index); - if (fr.img == null) { - // Draw all frames until and including the requested frame - for (int i = 0; i <= index; i++) { - fr = frames.get(i); - if (fr.img == null) { - drawFrame(fr); - } - } - } - return fr.img; - } - - /** - * @return The number of frames contained in this GIF image - */ - public final int getFrameCount() { - return frames.size(); - } - - /** - * @return The height of the GIF image - */ - public final int getHeight() { - return h; - } - - /** - * @return The width of the GIF image - */ - public final int getWidth() { - return w; - } - } - - static final boolean DEBUG_MODE = false; - - /** - * @param in - * Raw image data as a byte[] array - * @return A GifImage object exposing the properties of the GIF image. - * @throws IOException - * If the image violates the GIF specification or is truncated. - */ - public static final GifImage read(final byte[] in) throws IOException { - final GifDecoder3 decoder = new GifDecoder3(); - final GifImage img = decoder.new GifImage(); - GifFrame frame = null; // Currently open frame - int pos = readHeader(in, img); // Read header, get next byte position - pos = readLogicalScreenDescriptor(img, in, pos); - if (img.hasGlobColTbl) { - img.globalColTbl = new int[img.sizeOfGlobColTbl]; - pos = readColTbl(in, img.globalColTbl, pos); - } - while (pos < in.length) { - final int block = in[pos] & 0xFF; - switch (block) { - case 0x21: // Extension introducer - if (pos + 1 >= in.length) { - throw new IOException("Unexpected end of file."); - } - switch (in[pos + 1] & 0xFF) { - case 0xFE: // Comment extension - pos = readTextExtension(in, pos); - break; - case 0xFF: // Application extension - pos = readAppExt(img, in, pos); - break; - case 0x01: // Plain text extension - frame = null; // End of current frame - pos = readTextExtension(in, pos); - break; - case 0xF9: // Graphic control extension - if (frame == null) { - frame = decoder.new GifFrame(); - img.frames.add(frame); - } - pos = readGraphicControlExt(frame, in, pos); - break; - default: - throw new IOException("Unknown extension at " + pos); - } - break; - case 0x2C: // Image descriptor - if (frame == null) { - frame = decoder.new GifFrame(); - img.frames.add(frame); - } - pos = readImgDescr(frame, in, pos); - if (frame.hasLocColTbl) { - frame.localColTbl = new int[frame.sizeOfLocColTbl]; - pos = readColTbl(in, frame.localColTbl, pos); - } - pos = readImgData(frame, in, pos); - frame = null; // End of current frame - break; - case 0x3B: // GIF Trailer - return img; // Found trailer, finished reading. - default: - // Unknown block. The image is corrupted. Strategies: a) Skip - // and wait for a valid block. Experience: It'll get worse. b) - // Throw exception. c) Return gracefully if we are almost done - // processing. The frames we have so far should be error-free. - final double progress = 1.0 * pos / in.length; - if (progress < 0.9) { - throw new IOException("Unknown block at: " + pos); - } - pos = in.length; // Exit loop - } - } - return img; - } - - /** - * @param is - * Image data as input stream. This method will read from the - * input stream's current position. It will not reset the - * position before reading and won't reset or close the stream - * afterwards. Call these methods before and after calling this - * method as needed. - * @return A GifImage object exposing the properties of the GIF image. - * @throws IOException - * If an I/O error occurs, the image violates the GIF - * specification or the GIF is truncated. - */ - public static final GifImage read(final InputStream is) throws IOException { - final byte[] data = new byte[is.available()]; - is.read(data, 0, data.length); - return read(data); - } - - /** - * Empty application extension object - * @param in - * Raw data - * @param i - * Index of the first byte of the application extension - * @return Index of the first byte after this extension - */ - static final int readAppExt(final GifImage img, final byte[] in, int i) { - img.appId = new String(in, i + 3, 8); // should be "NETSCAPE" - img.appAuthCode = new String(in, i + 11, 3); // should be "2.0" - i += 14; // Go to sub-block size, it's value should be 3 - final int subBlockSize = in[i] & 0xFF; - // The only app extension widely used is NETSCAPE, it's got 3 data bytes - if (subBlockSize == 3) { - // in[i+1] should have value 01, in[i+5] should be block terminator - img.repetitions = in[i + 2] & 0xFF | in[i + 3] & 0xFF << 8; // Short - return i + 5; - } // Skip unknown application extensions - while ((in[i] & 0xFF) != 0) { // While sub-block size != 0 - i += (in[i] & 0xFF) + 1; // Skip to next sub-block - } - return i + 1; - } - - /** - * @param in - * Raw data - * @param colors - * Pre-initialized target array to store ARGB colors - * @param i - * Index of the color table's first byte - * @return Index of the first byte after the color table - */ - static final int readColTbl(final byte[] in, final int[] colors, int i) { - final int numColors = colors.length; - for (int c = 0; c < numColors; c++) { - final int a = 0xFF; // Alpha 255 (opaque) - final int r = in[i++] & 0xFF; // 1st byte is red - final int g = in[i++] & 0xFF; // 2nd byte is green - final int b = in[i++] & 0xFF; // 3rd byte is blue - colors[c] = ((a << 8 | r) << 8 | g) << 8 | b; - } - return i; - } - - /** - * Graphic control extension object - * @param in - * Raw data - * @param i - * Index of the extension introducer - * @return Index of the first byte after this block - */ - static final int readGraphicControlExt(final GifFrame fr, final byte[] in, final int i) { - fr.disposalMethod = (in[i + 3] & 0b00011100) >>> 2; // Bits 4-2 - fr.transpColFlag = (in[i + 3] & 1) == 1; // Bit 0 - fr.delay = in[i + 4] & 0xFF | (in[i + 5] & 0xFF) << 8; // 16 bit LSB - fr.transpColIndex = in[i + 6] & 0xFF; // Byte 6 - return i + 8; // Skipped byte 7 (blockTerminator), as it's always 0x00 - } - - /** - * @param in - * Raw data - * @param img - * The GifImage object that is currently read - * @return Index of the first byte after this block - * @throws IOException - * If the GIF header/trailer is missing, incomplete or unknown - */ - static final int readHeader(final byte[] in, final GifImage img) throws IOException { - if (in.length < 6) { // Check first 6 bytes - throw new IOException("Image is truncated."); - } - img.header = new String(in, 0, 6); - if (!img.header.equals("GIF87a") && !img.header.equals("GIF89a")) { - throw new IOException("Invalid GIF header."); - } - return 6; - } - - /** - * @param fr - * The GIF frame to whom this image descriptor belongs - * @param in - * Raw data - * @param i - * Index of the first byte of this block, i.e. the minCodeSize - * @return - */ - static final int readImgData(final GifFrame fr, final byte[] in, int i) { - final int fileSize = in.length; - final int minCodeSize = in[i++] & 0xFF; // Read code size, go to block - final int clearCode = 1 << minCodeSize; // CLEAR = 2^minCodeSize - fr.firstCodeSize = minCodeSize + 1; // Add 1 bit for CLEAR and EOI - fr.clearCode = clearCode; - fr.endOfInfoCode = clearCode + 1; - final int imgDataSize = readImgDataSize(in, i); - final byte[] imgData = new byte[imgDataSize + 2]; - int imgDataPos = 0; - int subBlockSize = in[i] & 0xFF; - while (subBlockSize > 0) { // While block has data - try { // Next line may throw exception if sub-block size is fake - final int nextSubBlockSizePos = i + subBlockSize + 1; - final int nextSubBlockSize = in[nextSubBlockSizePos] & 0xFF; - arraycopy(in, i + 1, imgData, imgDataPos, subBlockSize); - imgDataPos += subBlockSize; // Move output data position - i = nextSubBlockSizePos; // Move to next sub-block size - subBlockSize = nextSubBlockSize; - } catch (final Exception e) { - // Sub-block exceeds file end, only use remaining bytes - subBlockSize = fileSize - i - 1; // Remaining bytes - arraycopy(in, i + 1, imgData, imgDataPos, subBlockSize); - imgDataPos += subBlockSize; // Move output data position - i += subBlockSize + 1; // Move to next sub-block size - break; - } - } - fr.data = imgData; // Holds LZW encoded data - i++; // Skip last sub-block size, should be 0 - return i; - } - - static final int readImgDataSize(final byte[] in, int i) { - final int fileSize = in.length; - int imgDataPos = 0; - int subBlockSize = in[i] & 0xFF; - while (subBlockSize > 0) { // While block has data - try { // Next line may throw exception if sub-block size is fake - final int nextSubBlockSizePos = i + subBlockSize + 1; - final int nextSubBlockSize = in[nextSubBlockSizePos] & 0xFF; - imgDataPos += subBlockSize; // Move output data position - i = nextSubBlockSizePos; // Move to next sub-block size - subBlockSize = nextSubBlockSize; - } catch (final Exception e) { - // Sub-block exceeds file end, only use remaining bytes - subBlockSize = fileSize - i - 1; // Remaining bytes - imgDataPos += subBlockSize; // Move output data position - break; - } - } - return imgDataPos; - } - - /** - * @param fr - * The GIF frame to whom this image descriptor belongs - * @param in - * Raw data - * @param i - * Index of the image separator, i.e. the first block byte - * @return Index of the first byte after this block - */ - static final int readImgDescr(final GifFrame fr, final byte[] in, int i) { - fr.x = in[++i] & 0xFF | (in[++i] & 0xFF) << 8; // Byte 1-2: left - fr.y = in[++i] & 0xFF | (in[++i] & 0xFF) << 8; // Byte 3-4: top - fr.w = in[++i] & 0xFF | (in[++i] & 0xFF) << 8; // Byte 5-6: width - fr.h = in[++i] & 0xFF | (in[++i] & 0xFF) << 8; // Byte 7-8: height - fr.wh = fr.w * fr.h; - final byte b = in[++i]; // Byte 9 is a packed byte - fr.hasLocColTbl = (b & 0b10000000) >>> 7 == 1; // Bit 7 - fr.interlaceFlag = (b & 0b01000000) >>> 6 == 1; // Bit 6 - fr.sortFlag = (b & 0b00100000) >>> 5 == 1; // Bit 5 - final int colTblSizePower = (b & 7) + 1; // Bits 2-0 - fr.sizeOfLocColTbl = 1 << colTblSizePower; // 2^(N+1), As per the spec - return ++i; - } - - /** - * @param img - * @param i - * Start index of this block. - * @return Index of the first byte after this block. - */ - static final int readLogicalScreenDescriptor(final GifImage img, final byte[] in, final int i) { - img.w = in[i] & 0xFF | (in[i + 1] & 0xFF) << 8; // 16 bit, LSB 1st - img.h = in[i + 2] & 0xFF | (in[i + 3] & 0xFF) << 8; // 16 bit - img.wh = img.w * img.h; - final byte b = in[i + 4]; // Byte 4 is a packed byte - img.hasGlobColTbl = (b & 0b10000000) >>> 7 == 1; // Bit 7 - final int colResPower = ((b & 0b01110000) >>> 4) + 1; // Bits 6-4 - img.colorResolution = 1 << colResPower; // 2^(N+1), As per the spec - img.sortFlag = (b & 0b00001000) >>> 3 == 1; // Bit 3 - final int globColTblSizePower = (b & 7) + 1; // Bits 0-2 - img.sizeOfGlobColTbl = 1 << globColTblSizePower; // 2^(N+1), see spec - img.bgColIndex = in[i + 5] & 0xFF; // 1 Byte - img.pxAspectRatio = in[i + 6] & 0xFF; // 1 Byte - return i + 7; - } - - /** - * @param in - * Raw data - * @param pos - * Index of the extension introducer - * @return Index of the first byte after this block - */ - static final int readTextExtension(final byte[] in, final int pos) { - int i = pos + 2; // Skip extension introducer and label - int subBlockSize = in[i++] & 0xFF; - while (subBlockSize != 0 && i < in.length) { - i += subBlockSize; - subBlockSize = in[i++] & 0xFF; - } - return i; - } - - public Animation getAnimation(Animation.PlayMode playMode) throws IOException { - int nrFrames = getFrameCount(); - Pixmap frame = getFrame(0); - int width = frame.getWidth(); - int height = frame.getHeight(); - int vzones = (int) Math.sqrt((double) nrFrames); - int hzones = vzones; - - while (vzones * hzones < nrFrames) vzones++; - - int v, h; - - Pixmap target = new Pixmap(width * hzones, height * vzones, Pixmap.Format.RGBA8888); - - for (h = 0; h < hzones; h++) { - for (v = 0; v < vzones; v++) { - int frameID = v + h * vzones; - if (frameID < nrFrames) { - frame = getFrame(frameID); - target.drawPixmap(frame, h * width, v * height); - } - } - } - - Texture texture = new Texture(target); - Array texReg = new Array(); - - for (h = 0; h < hzones; h++) { - for (v = 0; v < vzones; v++) { - int frameID = v + h * vzones; - if (frameID < nrFrames) { - TextureRegion tr = new TextureRegion(texture, h * width, v * height, width, height); - texReg.add(tr); - } - } - } - float frameDuration = (float) getDelay(0); - frameDuration /= 100; // convert milliseconds into seconds - Animation result = new Animation(frameDuration, texReg, playMode); - - return result; - } - - private int getDelay(int i) { - return image.getDelay(0); - } - - private Pixmap getFrame(int i) throws IOException { - var bytes = ImageUtil.imageToBytes(image.getFrame(i), "png"); - // without imageutil there seem to be some issues with tranparency for some images. - // (black background instead of tranparent) - //var bytes = AssetManager.getAsset(key).getImage(); - return new Pixmap(bytes, 0, bytes.length); - } - - - private int getFrameCount() { - return image.getFrameCount(); - } - - public static Animation loadGIFAnimation(Animation.PlayMode playMode, InputStream is) { - try { - var dec = new GifDecoder3(is); - return dec.getAnimation(playMode); - - } catch (Exception e) { - return null; - } - } -} \ No newline at end of file diff --git a/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java b/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java deleted file mode 100644 index bef88f2829..0000000000 --- a/src/main/java/net/rptools/maptool/box2d/NativeRenderer.java +++ /dev/null @@ -1,199 +0,0 @@ -package net.rptools.maptool.box2d; - -import com.badlogic.gdx.InputProcessor; -import com.badlogic.gdx.backends.lwjgl.LwjglApplication; -import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; -import javafx.application.Platform; -import net.rptools.maptool.client.ui.zone.GdxRenderer; - -import javax.swing.*; -import java.awt.*; -import java.nio.ByteBuffer; - -public class NativeRenderer implements InputProcessor { - public static final int BufferCount = 2; - public static final int BytePerInt = 4; - private ByteBuffer gdxBuffer; - private RendererConfig oldConfig; - private RendererConfig newConfig; - private InputProcessor gdxInput; - private Canvas canvas; - private LwjglApplication app; - private NativeRenderingCanvas nativeCanvas; - public NativeRenderer(Canvas dummyCanvas, NativeRenderingCanvas nativeRenderingCanvas) { - canvas = dummyCanvas; - nativeCanvas = nativeRenderingCanvas; - } - - public void setGdxBuffer(ByteBuffer buffer) { - gdxBuffer = buffer; - fixColors(); - flip(); - - var bufferIndex = render(); - Platform.runLater(() -> nativeCanvas.renderUpdate(oldConfig.renderBuffer, bufferIndex, oldConfig.width, oldConfig.height)); - checkSizeChange(); - } - - private void checkSizeChange() { - if (newConfig == oldConfig) - return; - - oldConfig = newConfig; - - SwingUtilities.invokeLater(() -> canvas.setSize(oldConfig.width, oldConfig.height)); - } - - // on mac this must be called when the canvas is isDisplayable - public void init() { - if (app != null) - return; - - checkSizeChange(); - - var config = new LwjglApplicationConfiguration(); - config.allowSoftwareMode = true; - config.samples = 8; - config.forceExit = false; - LwjglApplicationConfiguration.disableAudio = true; - - var appListender = GdxRenderer.getInstance(); - appListender.setJfxRenderer(this); - //gdxInput = box; - - app = new LwjglApplication(appListender, config, canvas); - //Gdx.graphics.setContinuousRendering(false); - //Gdx.graphics.requestRendering(); - } - - public void dispose() { - app.stop(); - } - - public void createCanvas(int width, int height) { - var cfg = new RendererConfig(); - - cfg.width = width; - cfg.height = height; - cfg.currentBufferIndex = 0; - - cfg.singleBufferSize = width * height * BytePerInt; - - cfg.renderBuffer = ByteBuffer.allocate(cfg.singleBufferSize * BufferCount); - cfg.flippedBuffer = new byte[cfg.singleBufferSize]; - newConfig = cfg; - - init(); - } - - // Canvas creation and rendering: - - private void fixColors() { - //fix colors RGBA -> BGRA - if (gdxBuffer != null) { - for (int i = 0; i < gdxBuffer.capacity(); i += BytePerInt) { - var red = gdxBuffer.get(i); - gdxBuffer.put(i, gdxBuffer.get(i + 2)); - gdxBuffer.put(i + 2, red); - // set alpha to 1 - gdxBuffer.put(i+3, (byte)0xff); - } - } - } - - private void flip() { - if (oldConfig.flippedBuffer.length != gdxBuffer.capacity()) - return; - - int numBytesPerLine = oldConfig.width * BytePerInt; - for (int i = 0; i < oldConfig.height; i++) { - gdxBuffer.position((oldConfig.height - i - 1) * numBytesPerLine); - gdxBuffer.get(oldConfig.flippedBuffer, i * numBytesPerLine, numBytesPerLine); - } - } - - public int render() { - oldConfig.currentBufferIndex += 1; - if (oldConfig.currentBufferIndex >= BufferCount) oldConfig.currentBufferIndex = 0; - - if (oldConfig.flippedBuffer != null && oldConfig.renderBuffer.capacity() == oldConfig.flippedBuffer.length * BufferCount - && oldConfig.flippedBuffer.length == oldConfig.singleBufferSize) { - - oldConfig.renderBuffer.position(oldConfig.currentBufferIndex * oldConfig.singleBufferSize); - oldConfig.renderBuffer.put(oldConfig.flippedBuffer); - oldConfig.renderBuffer.rewind(); - } - - - return oldConfig.currentBufferIndex; - } - - @Override - public boolean keyDown(int keycode) { - if (gdxInput == null) - return false; - return gdxInput.keyDown(keycode); - } - - @Override - public boolean keyUp(int keycode) { - if (gdxInput == null) - return false; - return gdxInput.keyUp(keycode); - } - - @Override - public boolean keyTyped(char character) { - if (gdxInput == null) - return false; - return gdxInput.keyTyped(character); - } - - @Override - public boolean touchDown(int screenX, int screenY, int pointer, int button) { - if (gdxInput == null) - return false; - return gdxInput.touchDown(screenX, screenY, pointer, button); - } - - @Override - public boolean touchUp(int screenX, int screenY, int pointer, int button) { - if (gdxInput == null) - return false; - return gdxInput.touchUp(screenX, screenY, pointer, button); - } - - @Override - public boolean touchDragged(int screenX, int screenY, int pointer) { - if (gdxInput == null) - return false; - return gdxInput.touchDragged(screenX, screenY, pointer); - } - - @Override - public boolean mouseMoved(int screenX, int screenY) { - if (gdxInput == null) - return false; - return gdxInput.mouseMoved(screenX, screenY); - } - - @Override - public boolean scrolled(float amountX, float amountY) { - if (gdxInput == null) - return false; - return gdxInput.scrolled(amountX, amountY); - } - - public void pause() { - app.stop(); - } - - private class RendererConfig { - public int width; - public int height; - public int currentBufferIndex; - public int singleBufferSize; - public ByteBuffer renderBuffer; - byte[] flippedBuffer; - } -} \ No newline at end of file diff --git a/src/main/java/net/rptools/maptool/box2d/NativeRenderingCanvas.java b/src/main/java/net/rptools/maptool/box2d/NativeRenderingCanvas.java deleted file mode 100644 index 9d4f78e051..0000000000 --- a/src/main/java/net/rptools/maptool/box2d/NativeRenderingCanvas.java +++ /dev/null @@ -1,205 +0,0 @@ -package net.rptools.maptool.box2d; - -import java.awt.*; -import java.nio.ByteBuffer; -import java.nio.IntBuffer; -import java.util.Timer; -import java.util.TimerTask; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - -import com.badlogic.gdx.Input; -import javafx.application.Platform; -import javafx.beans.property.ObjectProperty; -import javafx.beans.property.SimpleObjectProperty; -import javafx.beans.value.ChangeListener; -import javafx.concurrent.Service; -import javafx.concurrent.Task; -import javafx.concurrent.WorkerStateEvent; -import javafx.event.EventHandler; -import javafx.geometry.Bounds; -import javafx.geometry.Rectangle2D; -import javafx.scene.Node; -import javafx.scene.image.*; -import javafx.scene.input.KeyCode; -import javafx.scene.input.KeyEvent; -import javafx.scene.layout.Pane; - - -/** - * A native rendering canvas. The assumption is that some native renderer - * produces an image provided as an IntBuffer or ByteBuffer. The PixelFormats - * must be IntArgbPre or ByteBgraPre respectively. For the API see NativeRenderer. - *

    - * This buffer is then used to create an Image which is bound to an ImageView. - * This class manages the direct display of this Image in a Pane and reacts to - * user input via mouse input or gestures on touch devices. - *

    - * TODOs: - * - Implement further user actions. - * - Handle different render scales. - * - Packaging of native part into jar file. - * - * @author Michael Paus - */ -public class NativeRenderingCanvas { - private final ObjectProperty fxImage; - private final ImageView imageView; - private final Pane canvasPane; - private final NativeRenderer nativeRenderer; - private final ChangeListener resizeListener; - - private ByteBuffer oldRawByteBuffer; - private PixelBuffer pixelBuffer; - - private int width; - private int height; - - - /** - * Create and initialize a NativeRenderingCanvas instance. - * @param dummyCanvas - */ - public NativeRenderingCanvas(Canvas dummyCanvas) { - nativeRenderer = new NativeRenderer(dummyCanvas, this); - canvasPane = new Pane(); - - fxImage = new SimpleObjectProperty<>(); - - imageView = new ImageView(); - - imageView.imageProperty().bind(fxImage); - imageView.fitWidthProperty().bind(canvasPane.widthProperty()); - imageView.fitHeightProperty().bind(canvasPane.heightProperty()); - //imageView.setPreserveRatio(true); - //imageView.setPickOnBounds(true); - - canvasPane.getChildren().add(imageView); - - - resizeListener = (v, o, n) -> { - width = (int) n.getWidth(); - height = (int) n.getHeight(); - if(width <= 0 || height <= 0) - return;; - - nativeRenderer.createCanvas(width, height); - - }; - - init(); - } - - public void keyPressed(KeyEvent e) { - int newcode = switch (e.getCode()) { - default -> e.getCode().getCode(); - case F1 -> Input.Keys.F1; - case F2 -> Input.Keys.F2; - case F3 -> Input.Keys.F3; - case F4 -> Input.Keys.F4; - case F5 -> Input.Keys.F5; - case F6 -> Input.Keys.F6; - case F7 -> Input.Keys.F7; - case F8 -> Input.Keys.F8; - case F9 -> Input.Keys.F9; - case F10 -> Input.Keys.F10; - case F11 -> Input.Keys.F11; - case F12 -> Input.Keys.F12; - }; - - if(e.getCode() == KeyCode.ESCAPE) - nativeRenderer.pause(); - - nativeRenderer.keyDown(newcode); - } - - /** - * Must be called before the NativeRenderingCanvas can be used again after dispose() has been called. - */ - public void init() { - canvasPane.boundsInLocalProperty().addListener(resizeListener); - //nativeRenderer.init(); - - imageView.setOnMouseMoved(e -> { - if (!e.isSynthesized()) { - nativeRenderer.mouseMoved((int)e.getX(), (int)e.getY()); - e.consume(); - } - }); - - imageView.setOnKeyPressed(e -> { - nativeRenderer.keyDown(e.getCode().getCode()); - e.consume(); - });; - - imageView.setOnMouseReleased(e -> { - nativeRenderer.touchUp((int)e.getX(), (int)e.getY(), 0, 0); - e.consume(); - }); - - imageView.setOnMousePressed(e -> { - nativeRenderer.touchDown((int)e.getX(), (int)e.getY(), 0, 0); - }); - - imageView.setOnMouseDragged(e -> { - nativeRenderer.touchDragged((int)e.getX(), (int)e.getY(), 0); - e.consume(); - }); - - } - - /** - * Dispose all resources and disable all actions. Init() has to be called - * before the NativeRenderingCanvas instance can be used again. - */ - public void dispose() { - - canvasPane.boundsInLocalProperty().removeListener(resizeListener); - - imageView.setOnMouseClicked(null); - imageView.setOnMousePressed(null); - imageView.setOnMouseReleased(null); - imageView.setOnMouseDragged(null); - imageView.setOnScrollStarted(null); - imageView.setOnScrollFinished(null); - imageView.setOnScroll(null); - imageView.setOnZoom(null); - imageView.setOnRotate(null); - - fxImage.set(null); - nativeRenderer.dispose(); - } - - /** - * Return the root node of the NativeRenderingCanvas which can be directly - * added to some layout-pane. - * - * @return the root node of the NativeRenderingCanvas. - */ - public Node getRoot() { - return canvasPane; - } - - // Must be called on JavaFX application thread. - public void renderUpdate(ByteBuffer renderBuffer, int bufferIndex, int width, int height) { - assert Platform.isFxApplicationThread() : "Not called on JavaFX application thread."; - - if(this.width != width || this.height != height || renderBuffer.capacity() != width * height * NativeRenderer.BufferCount * NativeRenderer.BytePerInt) - return; - - if (renderBuffer != oldRawByteBuffer) { - oldRawByteBuffer = renderBuffer; - pixelBuffer = new PixelBuffer<>(width, NativeRenderer.BufferCount * height, renderBuffer, PixelFormat.getByteBgraPreInstance()); - fxImage.set(new WritableImage(pixelBuffer)); - } - pixelBuffer.updateBuffer(pb -> { - final Rectangle2D renderedFrame = new Rectangle2D( - 0, - bufferIndex * height, - Math.min(canvasPane.getWidth(), width), - Math.min(canvasPane.getHeight(), height)); - imageView.setViewport(renderedFrame); - return renderedFrame; - }); - } -} \ No newline at end of file diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 4504a63382..279b99615f 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -1,10 +1,7 @@ package net.rptools.maptool.client.ui.zone; -import box2dLight.PointLight; -import box2dLight.RayHandler; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.*; @@ -31,7 +28,6 @@ import net.rptools.lib.swing.SwingUtil; import net.rptools.maptool.box2d.GifDecoder; import net.rptools.maptool.box2d.GifDecoder2; -import net.rptools.maptool.box2d.GifDecoder3; import net.rptools.maptool.box2d.NativeRenderer; import net.rptools.maptool.client.*; import net.rptools.maptool.client.tool.drawing.FreehandExposeTool; @@ -59,7 +55,6 @@ import javax.swing.*; import java.awt.*; -import java.awt.Polygon; import java.awt.Shape; import java.awt.geom.*; import java.io.ByteArrayInputStream; @@ -3394,7 +3389,7 @@ public void assetAvailable(MD5Key key) { Gdx.app.postRunnable(() -> { //var ass = AssetManager.getAsset(key); var is = new ByteArrayInputStream(asset.getImage()); - var animation = GifDecoder3.loadGIFAnimation(Animation.PlayMode.LOOP, is); + var animation = GifDecoder.loadGIFAnimation(Animation.PlayMode.LOOP, is); animationMap.put(key, animation); }); return; From 54f86a5266140ef13947873131ed5fbd7f4065c3 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 19 Aug 2021 18:01:26 +0200 Subject: [PATCH 060/139] clean up --- build.gradle | 1 + .../java/net/rptools/maptool/client/ui/zone/GdxRenderer.java | 1 + 2 files changed, 2 insertions(+) diff --git a/build.gradle b/build.gradle index 6d7ac6505d..44713cd415 100644 --- a/build.gradle +++ b/build.gradle @@ -383,6 +383,7 @@ dependencies { implementation 'com.github.cwisniew:NoiseLib:1.0.0-rc3' // The most recent version, 1.0.0 is build for a later java version: major version 55 is newer than 54, the highest major version supported by this compiler // implementation 'com.github.thelsing:libgdx-jogl-backend:master-SNAPSHOT' + implementation 'com.github.thelsing:gdx-video:master-SNAPSHOT' implementation 'com.github.thelsing:libgdx-jogl-backend:1.10.0' implementation "com.badlogicgames.gdx:gdx:$gdxVersion" implementation "com.badlogicgames.gdx:gdx-box2d:$gdxVersion" diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 279b99615f..06fe9daf8b 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -160,6 +160,7 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private float pointsPerBezier = 10f; private boolean showAstarDebugging = false; + // Box2D stuff // private World world; // private RayHandler rayHandler; From 9db01512627b191b5478af3f017f628d5fa2fa7a Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Wed, 8 Sep 2021 22:49:14 +0200 Subject: [PATCH 061/139] poc gdx-video --- build.gradle | 35 ++++---- .../net/rptools/maptool/client/MapTool.java | 1 - .../maptool/client/TransferableHelper.java | 4 +- .../maptool/client/ui/MapToolFrame.java | 61 -------------- .../maptool/client/ui/zone/GdxRenderer.java | 84 +++++++++++++------ .../java/net/rptools/maptool/model/Asset.java | 17 +++- 6 files changed, 92 insertions(+), 110 deletions(-) diff --git a/build.gradle b/build.gradle index a02e2bed63..cf17cc3c21 100644 --- a/build.gradle +++ b/build.gradle @@ -62,21 +62,6 @@ ext { it.commit == head } - gdxVersion = '1.10.0' - roboVMVersion = '2.3.12' - box2DLightsVersion = '1.5' - ashleyVersion = '1.7.3' - aiVersion = '1.8.2' - gdxControllersVersion = '2.1.0' - shapedrawerVersion = '2.4.0' - - // Get tag and commit info from Git to use for version numbering - def grgit = org.ajoberstar.grgit.Grgit.open(currentDir: file('.')) - def head = grgit.head() - def tags = grgit.tag.list().find { - it.commit == head - } - revision = head.abbreviatedId revisionFull = head.id @@ -110,6 +95,14 @@ ext { // vendor, tagVersion, appSemVer, and DSNs defaults are set in gradle.properties println "OS Detected: " + osdetector.os + + gdxVersion = '1.10.0' + roboVMVersion = '2.3.12' + box2DLightsVersion = '1.5' + ashleyVersion = '1.7.3' + aiVersion = '1.8.2' + gdxControllersVersion = '2.1.0' + shapedrawerVersion = '2.4.0' } spotless { @@ -308,13 +301,12 @@ repositories { maven { url "https://oss.sonatype.org/content/repositories/releases/" } } -/* + configurations.all { resolutionStrategy.cacheChangingModulesFor 0, 'seconds' resolutionStrategy.cacheDynamicVersionsFor 0, 'seconds' } - */ // In this section you declare the dependencies for your production and test code dependencies { @@ -470,9 +462,10 @@ dependencies { // HTTP End Point implementation 'javax.ws.rs:javax.ws.rs-api:2.1.1' - // implementation 'com.github.thelsing:libgdx-jogl-backend:master-SNAPSHOT' - implementation 'com.github.thelsing:gdx-video:master-SNAPSHOT' - implementation 'com.github.thelsing:libgdx-jogl-backend:1.10.0' + + // libgdx + implementation 'com.github.thelsing:libgdx-jogl-backend:master-SNAPSHOT' + // implementation 'com.github.thelsing:libgdx-jogl-backend:1.10.0' implementation "com.badlogicgames.gdx:gdx:$gdxVersion" implementation "com.badlogicgames.gdx:gdx-box2d:$gdxVersion" implementation "com.badlogicgames.box2dlights:box2dlights:$box2DLightsVersion" @@ -484,6 +477,8 @@ dependencies { implementation "space.earlygrey:shapedrawer:$shapedrawerVersion" implementation "com.badlogicgames.gdx:gdx-freetype:$gdxVersion" implementation "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop" + implementation "com.badlogicgames.gdx-video:gdx-video:1.3.2-SNAPSHOT" + implementation "com.badlogicgames.gdx-video:gdx-video-lwjgl:1.3.2-SNAPSHOT" } diff --git a/src/main/java/net/rptools/maptool/client/MapTool.java b/src/main/java/net/rptools/maptool/client/MapTool.java index d782a6e3d5..e6e9703a31 100644 --- a/src/main/java/net/rptools/maptool/client/MapTool.java +++ b/src/main/java/net/rptools/maptool/client/MapTool.java @@ -46,7 +46,6 @@ import javax.swing.*; import javax.swing.plaf.FontUIResource; -import net.rptools.clientserver.hessian.client.ClientConnection; import net.rptools.lib.BackupManager; import net.rptools.lib.DebugStream; import net.rptools.lib.EventDispatcher; diff --git a/src/main/java/net/rptools/maptool/client/TransferableHelper.java b/src/main/java/net/rptools/maptool/client/TransferableHelper.java index 29cc3c3e6d..2dc9de1da0 100644 --- a/src/main/java/net/rptools/maptool/client/TransferableHelper.java +++ b/src/main/java/net/rptools/maptool/client/TransferableHelper.java @@ -415,11 +415,11 @@ private static List handleURLList(List list) throws Exception { // Get the MediaType so we can use it when creating the Asset later MediaType mediaType = getFileMediaType(url); - if (!checkValidType(mediaType)) { + /* if (!checkValidType(mediaType)) { MapTool.showError("dragdrop.unsupportedType"); log.info("Unsupported file type: " + mediaType.toString() + " (" + url + ")"); assets.add(AssetManager.getAsset(AssetManager.BAD_ASSET_LOCATION_KEY)); - } else { + } else*/ { Asset temp = AssetManager.createAsset(url); if (temp != null) // `null' means no image available assets.add(temp); diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index 8146f248aa..6d852de981 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -51,8 +51,6 @@ import net.rptools.lib.swing.PositionalLayout; import net.rptools.lib.swing.SwingUtil; import net.rptools.lib.swing.preference.WindowPreferences; -import net.rptools.maptool.box2d.Gears; -import net.rptools.maptool.box2d.HelloWorld; import net.rptools.maptool.client.*; import net.rptools.maptool.client.AppActions.ClientAction; import net.rptools.maptool.client.swing.*; @@ -200,11 +198,8 @@ public class MapToolFrame extends DefaultDockableHolder private ChatTypingNotification chatTypingPanel; private Timer chatTimer; private long chatNotifyDuration; - private final ChatNotificationTimers chatTyperTimers; - private final ChatTyperObserver chatTyperObserver; private GUID PreRemoveRenderGUID = null; - private final GlassPane glassPane; /** Model for the token tree panel of the map explorer. */ private TokenPanelTreeModel tokenPanelTreeModel; private DrawPanelTreeModel drawPanelTreeModel; @@ -366,8 +361,6 @@ public MapToolFrame(JMenuBar menuBar) { setChatTypingLabelColor(AppPreferences.getChatNotificationColor()); } - private final Animator animator = new Animator(); - final Gears gears = new Gears(); private void initGdx() { joglSwingCanvas = new JoglSwingCanvas(GdxRenderer.getInstance(), "test", 640, 480); //gdxPanel = new GLJPanel(); @@ -1388,12 +1381,6 @@ public void removeZoneRenderer(ZoneRenderer renderer) { zoneMiniMapPanel.repaint(); } - public void clearZoneRendererList() { - zoneRendererList.clear(); - zoneMiniMapPanel.flush(); - zoneMiniMapPanel.repaint(); - } - /** Stop the drag of the token, if any is being dragged. */ private void stopTokenDrag() { Tool tool = MapTool.getFrame().getToolbox().getSelectedTool(); @@ -1455,60 +1442,12 @@ public void setCurrentZoneRenderer(ZoneRenderer renderer) { getZoomStatusBar().update(); } - /** - * @return the HTML Overlay Panel - */ - public HTMLOverlayPanel getOverlayPanel() { - return overlayPanel; - } - - public void addZoneRenderer(ZoneRenderer renderer) { - zoneRendererList.add(renderer); - } - - /** - * Remove the ZoneRenderer. If it's the current ZoneRenderer, set a new current ZoneRenderer. - * Flush zoneMiniMapPanel. - * - * @param renderer the ZoneRenderer to remove. - */ - public void removeZoneRenderer(ZoneRenderer renderer) { - boolean isCurrent = renderer == getCurrentZoneRenderer(); - zoneRendererList.remove(renderer); - if (isCurrent) { - boolean rendererSet = false; - for (ZoneRenderer currRenderer : zoneRendererList) { - if (MapTool.getPlayer().isGM() || currRenderer.getZone().isVisible()) { - setCurrentZoneRenderer(currRenderer); - rendererSet = true; - break; - } - } - if (!rendererSet) { - setCurrentZoneRenderer(null); - } - } - zoneMiniMapPanel.flush(); - zoneMiniMapPanel.repaint(); - } - public void clearZoneRendererList() { zoneRendererList.clear(); zoneMiniMapPanel.flush(); zoneMiniMapPanel.repaint(); } - /** - * Stop the drag of the token, if any is being dragged. - */ - private void stopTokenDrag() { - Tool tool = MapTool.getFrame().getToolbox().getSelectedTool(); - if (tool instanceof PointerTool) { - PointerTool pointer = (PointerTool) tool; - if (pointer.isDraggingToken()) pointer.stopTokenDrag(); - } - } - /** * Set the MapTool title bar. The title includes the name of the app, the player name, the * campaign name and the name of the specified zone. diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 06fe9daf8b..bf6b85adc4 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -3,6 +3,8 @@ import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver; +import com.badlogic.gdx.backends.lwjgl.LwjglNativesLoader; +import com.badlogic.gdx.backends.lwjgl.audio.OpenALLwjglAudio; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.*; import com.badlogic.gdx.graphics.g2d.*; @@ -16,6 +18,8 @@ import com.badlogic.gdx.utils.FloatArray; import com.badlogic.gdx.utils.GdxRuntimeException; import com.badlogic.gdx.utils.ScreenUtils; +import com.badlogic.gdx.video.VideoPlayer; +import com.badlogic.gdx.video.VideoPlayerCreator; import com.crashinvaders.vfx.VfxManager; import com.crashinvaders.vfx.effects.ChainVfxEffect; import com.crashinvaders.vfx.framebuffer.VfxFrameBuffer; @@ -27,8 +31,6 @@ import net.rptools.lib.swing.ImageBorder; import net.rptools.lib.swing.SwingUtil; import net.rptools.maptool.box2d.GifDecoder; -import net.rptools.maptool.box2d.GifDecoder2; -import net.rptools.maptool.box2d.NativeRenderer; import net.rptools.maptool.client.*; import net.rptools.maptool.client.tool.drawing.FreehandExposeTool; import net.rptools.maptool.client.tool.drawing.OvalExposeTool; @@ -38,7 +40,6 @@ import net.rptools.maptool.client.ui.Tool; import net.rptools.maptool.client.ui.token.*; import net.rptools.maptool.client.walker.ZoneWalker; -import net.rptools.maptool.client.walker.astar.AStarCellPoint; import net.rptools.maptool.model.Label; import net.rptools.maptool.model.Path; import net.rptools.maptool.model.*; @@ -58,6 +59,7 @@ import java.awt.Shape; import java.awt.geom.*; import java.io.ByteArrayInputStream; +import java.io.FileNotFoundException; import java.text.NumberFormat; import java.util.*; import java.util.List; @@ -83,6 +85,7 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private final Map fetchedRegions = new HashMap<>(); private final Map bigSprites = new HashMap<>(); private final Map> animationMap = new HashMap<>(); + private final Map videoPlayerMap = new HashMap<>(); //renderFog private final String ATLAS = "net/rptools/maptool/client/maptool.atlas"; @@ -109,7 +112,6 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, private PerspectiveCamera cam; private OrthographicCamera hudCam; private PolygonSpriteBatch batch; - private NativeRenderer jfxRenderer; private boolean initialized = false; private int width; private int height; @@ -166,7 +168,7 @@ public class GdxRenderer extends ApplicationAdapter implements AppEventListener, // private RayHandler rayHandler; // private Box2DDebugRenderer debugRenderer; private Map tokenBodies = new HashMap<>(); - + // private VideoPlayer videoPlayer; public GdxRenderer() { MapTool.getEventDispatcher().addListener(this, MapTool.ZoneEvent.Activated); @@ -200,6 +202,7 @@ public void create() { animationMap.clear(); } + //videoPlayer = VideoPlayerCreator.createVideoPlayer(); tokenAtlas = new TextureAtlas(); manager = new com.badlogic.gdx.assets.AssetManager(); packer = createPacker(); @@ -294,9 +297,12 @@ private void updateCam() { hudCam.update(); } + private boolean videostarted = false; + @Override public void render() { var delta = Gdx.graphics.getDeltaTime(); + var audio = Gdx.audio; stateTime += delta; manager.finishLoading(); packer.updateTextureAtlas(tokenAtlas, Texture.TextureFilter.Linear, Texture.TextureFilter.Linear, false); @@ -315,7 +321,15 @@ public void render() { if (normalFont == null) normalFont = manager.get(FONT_NORMAL, BitmapFont.class); - +/* + if(!videoPlayer.isPlaying()) + try { + videoPlayer.play(Gdx.files.internal("big-buck-bunny_trailer.webm")); + videostarted = true; + } catch (FileNotFoundException e) { + e.printStackTrace(); + } +*/ ensureCorrectDistanceFont(); // vfxManager.cleanUpBuffers(); @@ -329,7 +343,6 @@ public void render() { // vfxManager.endInputCapture(); // vfxManager.applyEffects(); // vfxManager.renderToScreen(); - copyFramebufferToJfx(); } @NotNull @@ -413,6 +426,10 @@ else if (MapTool.getCampaign().isBeingSerialized()) drawString(String.valueOf(Gdx.graphics.getFramesPerSecond()), 10, 10); drawString(String.valueOf(batch.renderCalls), width - 10, 10); + + // videoPlayer.update(); + // var frame = videoPlayer.getTexture(); + // if (frame != null) batch.draw(frame, 20, 20, 100, 100); batch.end(); collectTimerResults(); } @@ -434,15 +451,6 @@ private void initializeTimer() { timer.setThreshold(10); } - private void copyFramebufferToJfx() { - if (jfxRenderer != null) { - Pixmap pixmap = Pixmap.createFromFrameBuffer(0, 0, width, height); - jfxRenderer.setGdxBuffer(pixmap.getPixels()); - - pixmap.dispose(); - } - } - public void invalidateCurrentViewCache() { flushFog = true; @@ -1033,13 +1041,14 @@ private void showBlockedMoves(PlayerView view, Set mo // Show current Blocked Movement directions for A* if (walker != null && (log.isDebugEnabled() || showAstarDebugging)) { - Collection checkPoints = walker.getCheckedPoints(); + Map> blockedMovesByTarget = walker.getBlockedMoves(); // Color currentColor = g.getColor(); - for (AStarCellPoint acp : checkPoints) { - Set validMoves = acp.getValidMoves(); + for (var entry : blockedMovesByTarget.entrySet()) { + var position = entry.getKey(); + var blockedMoves = entry.getValue(); - for (Point2D point : validMoves) { - ZonePoint zp = acp.offsetZonePoint(zoneRenderer.getZone().getGrid(), point.getX(), point.getY()); + for (CellPoint point : blockedMoves) { + ZonePoint zp = point.midZonePoint(zoneRenderer.getZone().getGrid(), position); double r = (zp.x - 1) * 45; showBlockedMoves(zp, r, getSprite("block_move"), 1.0f); } @@ -2029,6 +2038,30 @@ private Sprite getSprite(MD5Key key) { if (key == null) return null; + var videoPlayer = videoPlayerMap.get(key); + if(videoPlayer != null) { + boolean skip = false; + if(!videoPlayer.isPlaying()) { + try { + var file = AssetManager.getAssetCacheFile(key); + if (file != null) { + videoPlayer.play(Gdx.files.absolute(file.getAbsolutePath())); + videoPlayer.setVolume(0); + } else skip = true; + + } catch (FileNotFoundException ex) { + log.warn(ex.toString()); + } + } + if(!skip) { + videoPlayer.update(); + var texture = videoPlayer.getTexture(); + var sprite = new Sprite(texture); + sprite.setSize(texture.getWidth(), texture.getHeight()); + return sprite; + } + } + var animation = animationMap.get(key); if(animation != null) { var currentFrame = animation.getKeyFrame(stateTime, true); @@ -3023,10 +3056,6 @@ private void highlightCell(ZonePoint zp, TextureRegion image, float size) { 1f, 1f, rotation); } - public void setJfxRenderer(NativeRenderer renderer) { - jfxRenderer = renderer; - } - private void createScreenShot(String fileName) { var handle = Gdx.files.absolute(fileName + ".png"); if (!handle.exists()) { @@ -3395,6 +3424,11 @@ public void assetAvailable(MD5Key key) { }); return; } + if(asset.getImageExtension() == "data") { + var videoPlayer = VideoPlayerCreator.createVideoPlayer(); + videoPlayerMap.put(key, videoPlayer); + return; + } var img = ImageUtil.createCompatibleImage(ImageUtil.bytesToImage(asset.getImage(), asset.getName()), null); //var img = ImageManager.getImage(key); var bytes = ImageUtil.imageToBytes(img, "png"); diff --git a/src/main/java/net/rptools/maptool/model/Asset.java b/src/main/java/net/rptools/maptool/model/Asset.java index 02e2e62f63..5ff2bd7281 100644 --- a/src/main/java/net/rptools/maptool/model/Asset.java +++ b/src/main/java/net/rptools/maptool/model/Asset.java @@ -29,6 +29,11 @@ import net.rptools.lib.image.ImageUtil; import net.rptools.maptool.client.MapTool; import net.rptools.maptool.util.ImageManager; +import org.apache.tika.config.TikaConfig; +import org.apache.tika.exception.TikaException; +import org.apache.tika.io.TikaInputStream; +import org.apache.tika.metadata.Metadata; +import org.apache.tika.mime.MediaType; /** The binary representation of an image. */ public class Asset { @@ -44,7 +49,7 @@ public class Asset { protected Asset() {} - public Asset(String name, byte[] image) { + public Asset(String name, byte[] image){ this.image = image; this.name = name; if (image != null) { @@ -54,6 +59,15 @@ public Asset(String name, byte[] image) { } } + public Asset(String name, String extension, byte[] image) { + this.image = image; + this.name = name; + this.extension = extension; + if (image != null) { + this.id = new MD5Key(image); + } + } + public Asset(String name, BufferedImage image) { try { this.image = ImageUtil.imageToBytes(image); @@ -103,6 +117,7 @@ public String getImageExtension() { reader.setInput(iis); extension = reader.getFormatName().toLowerCase(); } + // We can store more than images, eg HeroLabData in the form of a HashMap, assume this if // an image type can not be established if (extension.isEmpty()) extension = DATA_EXTENSION; From 8afbf4f9c1308f3c485d88a365ebd5abcf5d1643 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 4 Apr 2022 20:43:31 +0200 Subject: [PATCH 062/139] update gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 90234a4623..0221d0efc1 100644 --- a/.gitignore +++ b/.gitignore @@ -50,3 +50,4 @@ build-resources/rptools-keystore /report.html /output.xml /lib/jide/ +/local.properties From fa579187db3c3cca52de613b3e1004dcf71deb30 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 4 Apr 2022 20:56:44 +0200 Subject: [PATCH 063/139] spotless --- .../net/rptools/lib/swing/ImageBorder.java | 13 +- .../net/rptools/maptool/box2d/GifDecoder.java | 181 +- .../box2d/unused/Box2DSpriteAdapter.java | 72 +- .../maptool/box2d/unused/Box2dLightTest.java | 129 +- .../maptool/box2d/unused/Box2dRenderer.java | 1363 ++- .../maptool/box2d/unused/DebugPointLight.java | 106 +- .../maptool/box2d/unused/DesktopLauncher.java | 103 +- .../rptools/maptool/box2d/unused/Main.java | 30 +- .../maptool/box2d/unused/MapToolGame.java | 99 +- .../box2d/unused/MapTool_InputProcessor.java | 170 +- .../rptools/maptool/client/AppActions.java | 15 +- .../net/rptools/maptool/client/MapTool.java | 6 +- .../maptool/client/ui/MapToolFrame.java | 159 +- .../maptool/client/ui/ToolbarPanel.java | 18 +- .../maptool/client/ui/zone/GdxRenderer.java | 7724 +++++++++-------- .../maptool/client/ui/zone/ZoneRenderer.java | 55 +- .../net/rptools/maptool/model/HexGrid.java | 12 +- .../java/net/rptools/maptool/model/Token.java | 11 +- .../maptool/model/drawing/BurstTemplate.java | 5 +- .../rptools/maptool/util/ImageManager.java | 3 - 20 files changed, 5237 insertions(+), 5037 deletions(-) diff --git a/src/main/java/net/rptools/lib/swing/ImageBorder.java b/src/main/java/net/rptools/lib/swing/ImageBorder.java index a9f41861ad..7196d53c4a 100644 --- a/src/main/java/net/rptools/lib/swing/ImageBorder.java +++ b/src/main/java/net/rptools/lib/swing/ImageBorder.java @@ -23,9 +23,12 @@ /** @author trevor */ public class ImageBorder implements Border { - public static final ImageBorder GRAY = new ImageBorder("net/rptools/maptool/client/image/border/gray2"); - public static final ImageBorder RED = new ImageBorder("net/rptools/maptool/client/image/border/red"); - public static final ImageBorder BLUE = new ImageBorder("net/rptools/maptool/client/image/border/blue"); + public static final ImageBorder GRAY = + new ImageBorder("net/rptools/maptool/client/image/border/gray2"); + public static final ImageBorder RED = + new ImageBorder("net/rptools/maptool/client/image/border/red"); + public static final ImageBorder BLUE = + new ImageBorder("net/rptools/maptool/client/image/border/blue"); private BufferedImage topRight; private BufferedImage top; @@ -63,7 +66,9 @@ public ImageBorder(String imagePath) { } } - public String getImagePath() { return imagePath; } + public String getImagePath() { + return imagePath; + } public int getTopMargin() { return topMargin; diff --git a/src/main/java/net/rptools/maptool/box2d/GifDecoder.java b/src/main/java/net/rptools/maptool/box2d/GifDecoder.java index c086462617..cbbd026823 100644 --- a/src/main/java/net/rptools/maptool/box2d/GifDecoder.java +++ b/src/main/java/net/rptools/maptool/box2d/GifDecoder.java @@ -1,14 +1,26 @@ +/* + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. + * + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . + */ package net.rptools.maptool.box2d; +import static java.lang.System.arraycopy; + import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.Animation; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.utils.Array; -import net.rptools.lib.image.ImageUtil; - -import static java.lang.System.arraycopy; - import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; @@ -17,6 +29,7 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.List; +import net.rptools.lib.image.ImageUtil; /* * Copyright 2014 Dhyan Blum @@ -34,16 +47,11 @@ * limitations under the License. */ /** - *

    - * A decoder capable of processing a GIF data stream to render the graphics - * contained in it. This implementation follows the official - * GIF + * A decoder capable of processing a GIF data stream to render the graphics contained in it. This + * implementation follows the official GIF * specification. - *

    * - *

    - * Example usage: - *

    + *

    Example usage: * *

    * @@ -58,21 +66,17 @@ * } * * - *

    - * * @author Dhyan Blum * @version 1.09 November 2017 - * */ public final class GifDecoder { private GifImage image; + public GifDecoder(InputStream is) throws IOException { image = read(is); } - public GifDecoder() { - - } + public GifDecoder() {} static final class BitReader { private int bitPos; // Next bit to read @@ -149,8 +153,8 @@ private final void init(final GifFrame fr, final int[] activeColTbl, final BitRe for (int c = numColors - 1; c >= 0; c--) { tbl[c][0] = activeColTbl[c]; // Translated color } // A gap may follow with no colors assigned if numCols < CLEAR - tbl[fr.clearCode] = new int[] { fr.clearCode }; // CLEAR - tbl[fr.endOfInfoCode] = new int[] { fr.endOfInfoCode }; // EOI + tbl[fr.clearCode] = new int[] {fr.clearCode}; // CLEAR + tbl[fr.endOfInfoCode] = new int[] {fr.endOfInfoCode}; // EOI // Locate transparent color in code table and set to 0 if (fr.transpColFlag && fr.transpColIndex < numColors) { tbl[fr.transpColIndex][0] = 0; @@ -173,8 +177,10 @@ final class GifFrame { private int wh; // width * height private boolean hasLocColTbl; // Has local color table? 1 Bit private boolean interlaceFlag; // Is an interlace image? 1 Bit + @SuppressWarnings("unused") private boolean sortFlag; // True if local colors are sorted, 1 Bit + private int sizeOfLocColTbl; // Size of the local color table, 3 Bits private int[] localColTbl; // Local color table (optional) // Image data @@ -325,12 +331,12 @@ private final void drawFrame(final GifFrame fr) { } /** - * Returns the background color of the first frame in this GIF image. If - * the frame has a local color table, the returned color will be from - * that table. If not, the color will be from the global color table. - * Returns 0 if there is neither a local nor a global color table. + * Returns the background color of the first frame in this GIF image. If the frame has a local + * color table, the returned color will be from that table. If not, the color will be from the + * global color table. Returns 0 if there is neither a local nor a global color table. + * + *

    Index of the current frame, 0 to N-1 * - * Index of the current frame, 0 to N-1 * @return 32 bit ARGB color in the form 0xAARRGGBB */ public final int getBackgroundColor() { @@ -344,11 +350,10 @@ public final int getBackgroundColor() { } /** - * If not 0, the delay specifies how many hundredths (1/100) of a second - * to wait before displaying the frame after the current frame. + * If not 0, the delay specifies how many hundredths (1/100) of a second to wait before + * displaying the frame after the current frame. * - * @param index - * Index of the current frame, 0 to N-1 + * @param index Index of the current frame, 0 to N-1 * @return Delay as number of hundredths (1/100) of a second */ public final int getDelay(final int index) { @@ -356,15 +361,12 @@ public final int getDelay(final int index) { } /** - * @param index - * Index of the frame to return as image, starting from 0. - * For incremental calls such as [0, 1, 2, ...] the method's - * run time is O(1) as only one frame is drawn per call. For - * random access calls such as [7, 12, ...] the run time is - * O(N+1) with N being the number of previous frames that - * need to be drawn before N+1 can be drawn on top. Once a - * frame has been drawn it is being cached and the run time - * is more or less O(0) to retrieve it from the list. + * @param index Index of the frame to return as image, starting from 0. For incremental calls + * such as [0, 1, 2, ...] the method's run time is O(1) as only one frame is drawn per call. + * For random access calls such as [7, 12, ...] the run time is O(N+1) with N being the + * number of previous frames that need to be drawn before N+1 can be drawn on top. Once a + * frame has been drawn it is being cached and the run time is more or less O(0) to retrieve + * it from the list. * @return A BufferedImage for the specified frame. */ public final BufferedImage getFrame(final int index) { @@ -386,23 +388,17 @@ public final BufferedImage getFrame(final int index) { return fr.img; } - /** - * @return The number of frames contained in this GIF image - */ + /** @return The number of frames contained in this GIF image */ public final int getFrameCount() { return frames.size(); } - /** - * @return The height of the GIF image - */ + /** @return The height of the GIF image */ public final int getHeight() { return h; } - /** - * @return The width of the GIF image - */ + /** @return The width of the GIF image */ public final int getWidth() { return w; } @@ -411,11 +407,9 @@ public final int getWidth() { static final boolean DEBUG_MODE = false; /** - * @param in - * Raw image data as a byte[] array + * @param in Raw image data as a byte[] array * @return A GifImage object exposing the properties of the GIF image. - * @throws IOException - * If the image violates the GIF specification or is truncated. + * @throws IOException If the image violates the GIF specification or is truncated. */ public static final GifImage read(final byte[] in) throws IOException { final GifDecoder decoder = new GifDecoder(); @@ -487,16 +481,12 @@ public static final GifImage read(final byte[] in) throws IOException { } /** - * @param is - * Image data as input stream. This method will read from the - * input stream's current position. It will not reset the - * position before reading and won't reset or close the stream - * afterwards. Call these methods before and after calling this - * method as needed. + * @param is Image data as input stream. This method will read from the input stream's current + * position. It will not reset the position before reading and won't reset or close the stream + * afterwards. Call these methods before and after calling this method as needed. * @return A GifImage object exposing the properties of the GIF image. - * @throws IOException - * If an I/O error occurs, the image violates the GIF - * specification or the GIF is truncated. + * @throws IOException If an I/O error occurs, the image violates the GIF specification or the GIF + * is truncated. */ public static final GifImage read(final InputStream is) throws IOException { final byte[] data = new byte[is.available()]; @@ -505,11 +495,10 @@ public static final GifImage read(final InputStream is) throws IOException { } /** - * Empty application extension object - * @param in - * Raw data - * @param i - * Index of the first byte of the application extension + * Empty application extension object + * + * @param in Raw data + * @param i Index of the first byte of the application extension * @return Index of the first byte after this extension */ static final int readAppExt(final GifImage img, final byte[] in, int i) { @@ -530,12 +519,9 @@ static final int readAppExt(final GifImage img, final byte[] in, int i) { } /** - * @param in - * Raw data - * @param colors - * Pre-initialized target array to store ARGB colors - * @param i - * Index of the color table's first byte + * @param in Raw data + * @param colors Pre-initialized target array to store ARGB colors + * @param i Index of the color table's first byte * @return Index of the first byte after the color table */ static final int readColTbl(final byte[] in, final int[] colors, int i) { @@ -551,11 +537,10 @@ static final int readColTbl(final byte[] in, final int[] colors, int i) { } /** - * Graphic control extension object - * @param in - * Raw data - * @param i - * Index of the extension introducer + * Graphic control extension object + * + * @param in Raw data + * @param i Index of the extension introducer * @return Index of the first byte after this block */ static final int readGraphicControlExt(final GifFrame fr, final byte[] in, final int i) { @@ -567,13 +552,10 @@ static final int readGraphicControlExt(final GifFrame fr, final byte[] in, final } /** - * @param in - * Raw data - * @param img - * The GifImage object that is currently read + * @param in Raw data + * @param img The GifImage object that is currently read * @return Index of the first byte after this block - * @throws IOException - * If the GIF header/trailer is missing, incomplete or unknown + * @throws IOException If the GIF header/trailer is missing, incomplete or unknown */ static final int readHeader(final byte[] in, final GifImage img) throws IOException { if (in.length < 6) { // Check first 6 bytes @@ -587,12 +569,9 @@ static final int readHeader(final byte[] in, final GifImage img) throws IOExcept } /** - * @param fr - * The GIF frame to whom this image descriptor belongs - * @param in - * Raw data - * @param i - * Index of the first byte of this block, i.e. the minCodeSize + * @param fr The GIF frame to whom this image descriptor belongs + * @param in Raw data + * @param i Index of the first byte of this block, i.e. the minCodeSize * @return */ static final int readImgData(final GifFrame fr, final byte[] in, int i) { @@ -650,12 +629,9 @@ static final int readImgDataSize(final byte[] in, int i) { } /** - * @param fr - * The GIF frame to whom this image descriptor belongs - * @param in - * Raw data - * @param i - * Index of the image separator, i.e. the first block byte + * @param fr The GIF frame to whom this image descriptor belongs + * @param in Raw data + * @param i Index of the image separator, i.e. the first block byte * @return Index of the first byte after this block */ static final int readImgDescr(final GifFrame fr, final byte[] in, int i) { @@ -675,8 +651,7 @@ static final int readImgDescr(final GifFrame fr, final byte[] in, int i) { /** * @param img - * @param i - * Start index of this block. + * @param i Start index of this block. * @return Index of the first byte after this block. */ static final int readLogicalScreenDescriptor(final GifImage img, final byte[] in, final int i) { @@ -696,10 +671,8 @@ static final int readLogicalScreenDescriptor(final GifImage img, final byte[] in } /** - * @param in - * Raw data - * @param pos - * Index of the extension introducer + * @param in Raw data + * @param pos Index of the extension introducer * @return Index of the first byte after this block */ static final int readTextExtension(final byte[] in, final int pos) { @@ -763,16 +736,16 @@ private Pixmap getFrame(int i) throws IOException { var bytes = ImageUtil.imageToBytes(image.getFrame(i), "png"); // without imageutil there seem to be some issues with tranparency for some images. // (black background instead of tranparent) - //var bytes = AssetManager.getAsset(key).getImage(); + // var bytes = AssetManager.getAsset(key).getImage(); return new Pixmap(bytes, 0, bytes.length); } - private int getFrameCount() { return image.getFrameCount(); } - public static Animation loadGIFAnimation(Animation.PlayMode playMode, InputStream is) { + public static Animation loadGIFAnimation( + Animation.PlayMode playMode, InputStream is) { try { var dec = new GifDecoder(is); return dec.getAnimation(playMode); @@ -781,4 +754,4 @@ public static Animation loadGIFAnimation(Animation.PlayMode playM return null; } } -} \ No newline at end of file +} diff --git a/src/main/java/net/rptools/maptool/box2d/unused/Box2DSpriteAdapter.java b/src/main/java/net/rptools/maptool/box2d/unused/Box2DSpriteAdapter.java index 6cccd2450a..826fe81167 100644 --- a/src/main/java/net/rptools/maptool/box2d/unused/Box2DSpriteAdapter.java +++ b/src/main/java/net/rptools/maptool/box2d/unused/Box2DSpriteAdapter.java @@ -1,10 +1,16 @@ /* - * This software Copyright by the RPTools.net development team, and licensed under the Affero GPL Version 3 or, at your option, any later version. + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. * - * MapTool Source Code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * - * You should have received a copy of the GNU Affero General Public License * along with this source Code. If not, please visit and specifically the Affero license text - * at . + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . */ package net.rptools.maptool.box2d.unused; @@ -12,41 +18,41 @@ import com.badlogic.gdx.physics.box2d.Body; public class Box2DSpriteAdapter { - public final String TAG = this.getClass().getSimpleName(); + public final String TAG = this.getClass().getSimpleName(); - private Body body; - private Vector2 offset = new Vector2(); + private Body body; + private Vector2 offset = new Vector2(); - public Box2DSpriteAdapter(Body body, float width, float height) { - this.body = body; - offset.set(width, height); - } + public Box2DSpriteAdapter(Body body, float width, float height) { + this.body = body; + offset.set(width, height); + } - public Box2DSpriteAdapter(Body body) { - this.body = body; - } + public Box2DSpriteAdapter(Body body) { + this.body = body; + } - public Vector2 position() { - return body.getPosition(); - } + public Vector2 position() { + return body.getPosition(); + } - public float angleRad() { - return body.getAngle(); - } + public float angleRad() { + return body.getAngle(); + } - public float angleDeg() { - return 180 * body.getAngle() / ((float) Math.PI); - } + public float angleDeg() { + return 180 * body.getAngle() / ((float) Math.PI); + } - public Vector2 centreOfRotation() { - return body.getLocalCenter(); - } + public Vector2 centreOfRotation() { + return body.getLocalCenter(); + } - public Vector2 offset() { - return offset; - } + public Vector2 offset() { + return offset; + } - public void setOffset(float x, float y) { - offset.set(x, y); - } -} \ No newline at end of file + public void setOffset(float x, float y) { + offset.set(x, y); + } +} diff --git a/src/main/java/net/rptools/maptool/box2d/unused/Box2dLightTest.java b/src/main/java/net/rptools/maptool/box2d/unused/Box2dLightTest.java index b17406e8a5..1bd5177560 100644 --- a/src/main/java/net/rptools/maptool/box2d/unused/Box2dLightTest.java +++ b/src/main/java/net/rptools/maptool/box2d/unused/Box2dLightTest.java @@ -1,13 +1,22 @@ /* - * This software Copyright by the RPTools.net development team, and licensed under the Affero GPL Version 3 or, at your option, any later version. + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. * - * MapTool Source Code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * - * You should have received a copy of the GNU Affero General Public License * along with this source Code. If not, please visit and specifically the Affero license text - * at . + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . */ package net.rptools.maptool.box2d.unused; +import box2dLight.ConeLight; +import box2dLight.PointLight; +import box2dLight.RayHandler; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; @@ -24,88 +33,84 @@ import com.badlogic.gdx.physics.box2d.PolygonShape; import com.badlogic.gdx.physics.box2d.World; -import box2dLight.ConeLight; -import box2dLight.PointLight; -import box2dLight.RayHandler; - public class Box2dLightTest extends ApplicationAdapter { - OrthographicCamera camera; + OrthographicCamera camera; - float width, height; + float width, height; - FPSLogger logger; + FPSLogger logger; - World world; - Box2DDebugRenderer renderer; + World world; + Box2DDebugRenderer renderer; - Body circleBody; + Body circleBody; - RayHandler rayHandler; + RayHandler rayHandler; - @Override - public void create() { - width = Gdx.graphics.getWidth() / 5; - height = Gdx.graphics.getHeight() / 5; + @Override + public void create() { + width = Gdx.graphics.getWidth() / 5; + height = Gdx.graphics.getHeight() / 5; - camera = new OrthographicCamera(width, height); - camera.position.set(width * 0.5f, height * 0.5f, 0); - camera.update(); + camera = new OrthographicCamera(width, height); + camera.position.set(width * 0.5f, height * 0.5f, 0); + camera.update(); - world = new World(new Vector2(0, -9.8f), false); + world = new World(new Vector2(0, -9.8f), false); - renderer = new Box2DDebugRenderer(); + renderer = new Box2DDebugRenderer(); - logger = new FPSLogger(); + logger = new FPSLogger(); - BodyDef circleDef = new BodyDef(); - circleDef.type = BodyType.DynamicBody; - circleDef.position.set(width / 2f, height / 1.1f); + BodyDef circleDef = new BodyDef(); + circleDef.type = BodyType.DynamicBody; + circleDef.position.set(width / 2f, height / 1.1f); - circleBody = world.createBody(circleDef); + circleBody = world.createBody(circleDef); - CircleShape circleShape = new CircleShape(); - circleShape.setRadius(3f); + CircleShape circleShape = new CircleShape(); + circleShape.setRadius(3f); - FixtureDef circleFixture = new FixtureDef(); - circleFixture.shape = circleShape; - circleFixture.density = 0.4f; - circleFixture.friction = 0.1f; - circleFixture.restitution = 0.75f; + FixtureDef circleFixture = new FixtureDef(); + circleFixture.shape = circleShape; + circleFixture.density = 0.4f; + circleFixture.friction = 0.1f; + circleFixture.restitution = 0.75f; - circleBody.createFixture(circleFixture); + circleBody.createFixture(circleFixture); - BodyDef groundBodyDef = new BodyDef(); - groundBodyDef.position.set(0, 3); + BodyDef groundBodyDef = new BodyDef(); + groundBodyDef.position.set(0, 3); - Body groundBody = world.createBody(groundBodyDef); + Body groundBody = world.createBody(groundBodyDef); - PolygonShape groundBox = new PolygonShape(); - groundBox.setAsBox(camera.viewportWidth * 2, 3.0f); + PolygonShape groundBox = new PolygonShape(); + groundBox.setAsBox(camera.viewportWidth * 2, 3.0f); - groundBody.createFixture(groundBox, 0.0f); + groundBody.createFixture(groundBox, 0.0f); - rayHandler = new RayHandler(world); - rayHandler.setCombinedMatrix(camera); + rayHandler = new RayHandler(world); + rayHandler.setCombinedMatrix(camera); - new PointLight(rayHandler, 5000, Color.DARK_GRAY, 400, (width / 2) - 75, (height / 2) + 50); - new ConeLight(rayHandler, 5000, Color.PINK, 400, (width / 2) + 30, (height / 2) + 15, 250, 35); - } + new PointLight(rayHandler, 5000, Color.DARK_GRAY, 400, (width / 2) - 75, (height / 2) + 50); + new ConeLight(rayHandler, 5000, Color.PINK, 400, (width / 2) + 30, (height / 2) + 15, 250, 35); + } - @Override - public void dispose() { - world.dispose(); - } + @Override + public void dispose() { + world.dispose(); + } - @Override - public void render() { - Gdx.gl.glClearColor(0, 0, 0, 1); - Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT); + @Override + public void render() { + Gdx.gl.glClearColor(0, 0, 0, 1); + Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT); - renderer.render(world, camera.combined); - rayHandler.updateAndRender(); + renderer.render(world, camera.combined); + rayHandler.updateAndRender(); - world.step(1 / 60f, 6, 2); + world.step(1 / 60f, 6, 2); - logger.log(); - } -} \ No newline at end of file + logger.log(); + } +} diff --git a/src/main/java/net/rptools/maptool/box2d/unused/Box2dRenderer.java b/src/main/java/net/rptools/maptool/box2d/unused/Box2dRenderer.java index 558cff5d50..4978943140 100644 --- a/src/main/java/net/rptools/maptool/box2d/unused/Box2dRenderer.java +++ b/src/main/java/net/rptools/maptool/box2d/unused/Box2dRenderer.java @@ -1,25 +1,21 @@ /* - * This software Copyright by the RPTools.net development team, and licensed under the Affero GPL Version 3 or, at your option, any later version. + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. * - * MapTool Source Code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * - * You should have received a copy of the GNU Affero General Public License * along with this source Code. If not, please visit and specifically the Affero license text - * at . + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . */ package net.rptools.maptool.box2d.unused; -import java.awt.geom.AffineTransform; -import java.awt.geom.Area; -import java.awt.geom.PathIterator; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Random; -import java.util.Set; -import java.util.concurrent.ThreadLocalRandom; - -import org.apache.commons.lang.ArrayUtils; - +import box2dLight.PointLight; +import box2dLight.RayHandler; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Screen; import com.badlogic.gdx.graphics.Camera; @@ -27,7 +23,6 @@ import com.badlogic.gdx.graphics.GL30; import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.Texture.TextureWrap; import com.badlogic.gdx.graphics.g2d.PolygonRegion; import com.badlogic.gdx.graphics.g2d.PolygonSprite; import com.badlogic.gdx.graphics.g2d.Sprite; @@ -38,684 +33,688 @@ import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.physics.box2d.Body; import com.badlogic.gdx.physics.box2d.BodyDef; +import com.badlogic.gdx.physics.box2d.BodyDef.BodyType; import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer; import com.badlogic.gdx.physics.box2d.CircleShape; import com.badlogic.gdx.physics.box2d.FixtureDef; import com.badlogic.gdx.physics.box2d.PolygonShape; import com.badlogic.gdx.physics.box2d.World; -import com.badlogic.gdx.physics.box2d.BodyDef.BodyType; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.FloatArray; import com.badlogic.gdx.utils.ShortArray; import com.badlogic.gdx.utils.viewport.ScreenViewport; - -import box2dLight.PointLight; -import box2dLight.RayHandler; +import java.awt.geom.AffineTransform; +import java.awt.geom.Area; +import java.awt.geom.PathIterator; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Random; +import java.util.Set; +import java.util.concurrent.ThreadLocalRandom; import net.rptools.maptool.client.AppState; import net.rptools.maptool.client.ui.MapToolFrame; import net.rptools.maptool.client.ui.zone.ZoneRenderer; import net.rptools.maptool.model.Zone; -import net.rptools.maptool.util.ImageManager; +import org.apache.commons.lang.ArrayUtils; public class Box2dRenderer implements Screen { - private static final Texture DEFAULT_BACKGROUND_TEXURE = new Texture(Gdx.files.internal("net/rptools/maptool/client/image/grass.png")); - private static final Sprite SOCCER_BALL = new Sprite(new Texture("net/rptools/maptool/client/image/soccer_ball.png")); - private static final Sprite LIGHT_SOURCE = new Sprite(new Texture("net/rptools/maptool/client/image/light_ball.png")); - - private static final boolean DEBUG_BOX2D = false; - private static final boolean CREATE_RANDOM_EFFECTS = true; - private static boolean GAME_PAUSED = false; - - private static Texture backgroundTexture; - private static TextureRegion textureRegion; - private static byte[] backgroundImage; - private static Area vblArea = new Area(); - - private static Set vblBodySet = new HashSet<>(); - private static Set polySpriteSet = new HashSet<>(); - private static Set lightSet = new HashSet<>(); - - public static float frameRate = 60; - - private final MapToolGame app; - private MapToolFrame mapToolFrame; - private Stage stage; - private Box2DDebugRenderer renderer; - private RayHandler rayHandler; - private ShapeRenderer shapeRenderer; - - public Box2dRenderer(final MapToolGame app) { - this.app = app; - this.mapToolFrame = app.getMapToolFrame(); - - MapTool_InputProcessor inputProcessor = new MapTool_InputProcessor(this); - stage = new Stage(new ScreenViewport()); - Gdx.input.setInputProcessor(inputProcessor); // was stage - - app.world = new World(new Vector2(0, 0), true); // Earth gravity would be -9.7 - - if (DEBUG_BOX2D) - renderer = new Box2DDebugRenderer(); - - rayHandler = new RayHandler(app.world); - // rayHandler.setAmbientLight(new Color(.1f, .1f, .1f, .1f)); - RayHandler.useDiffuseLight(true); - rayHandler.setCombinedMatrix(app.camera); - shapeRenderer = new ShapeRenderer(); - shapeRenderer.setAutoShapeType(true); - - // For Testing purposes - if (CREATE_RANDOM_EFFECTS) { - createTop(); - createBottom(); - createLeftSide(); - createRightSide(); - - for (int i = 0; i < 20; i++) { - createRandomBody(false); - } - - // Create a couple of lights on bodies? - for (int i = 0; i < 5; i++) { - createRandomBody(true); - // createRandomLight(); - } - } - - // For VBL texture - Pixmap pix = new Pixmap(1, 1, Pixmap.Format.RGBA8888); - pix.setColor(Color.BLUE.r, Color.BLUE.g, Color.BLUE.b, 196); // 128 default alpha - pix.fill(); - Texture textureSolid = new Texture(pix); - textureRegion = new TextureRegion(textureSolid); - } - - public Camera getCamera() { - return app.camera; - } - - @Override - public void show() { - - } - - @Override - public void render(float delta) { - Gdx.gl.glClearColor(1, 0, 0, 1); - Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT); - - // Suspend all activity while window is closed - update(delta); - stage.draw(); - - Array bodies = new Array(); - app.world.getBodies(bodies); - - drawBackgroundTile(); - - if (DEBUG_BOX2D) - renderer.render(app.world, app.camera.combined); - - renderGrid(); - renderLightSources(bodies); - renderVBL(); - renderVblSprites(bodies); - - renderSoccerBalls(bodies, true); - rayHandler.updateAndRender(); - - debugLights(); - - // Drawn after rayHandler, spites always shown regardless of light then, eg always visible, can break up vbl/tokens later - // renderSoccerBalls(bodies, false); - renderFPS(); - - if (!GAME_PAUSED) - app.world.step(1 / frameRate, 6, 2); - - Gdx.graphics.setTitle(MapToolGame.TITLE + " - " + Gdx.graphics.getFramesPerSecond() + " fps"); - } - - public void update(float delta) { - stage.act(delta); - } - - @Override - public void resize(int width, int height) { - app.camera.viewportHeight = (MapToolGame.VIEWPORT_WIDTH / width) * height; - - // stage.getViewport().update(width, height, true); - // MapToolGame.SCREEN_WIDTH = width; - // MapToolGame.SCREEN_HEIGHT = height; - } - - @Override - public void pause() { - GAME_PAUSED = !GAME_PAUSED; - } - - @Override - public void resume() { - - } - - @Override - public void hide() { - - } - - @Override - public void dispose() { - shapeRenderer.dispose(); - stage.dispose(); - } - - private void renderFPS() { - app.sb.begin(); - app.font.draw(app.sb, MapToolGame.TITLE, 20, MapToolGame.SCREEN_HEIGHT - 10); - app.font.draw(app.sb, "FPS: " + Gdx.graphics.getFramesPerSecond() + " [" + frameRate + "]", 20, MapToolGame.SCREEN_HEIGHT - 35); - app.font.draw(app.sb, "Lights: " + lightSet.size(), 20, MapToolGame.SCREEN_HEIGHT - 60); - app.sb.end(); - } - - private void renderLightSources(Array bodies) { - app.sb.begin(); - for (Body body : bodies) { - if (body.getUserData() != null) { - if (body.getUserData() instanceof Sprite) { - Sprite sprite = (Sprite) body.getUserData(); - sprite.setPosition(body.getPosition().x - sprite.getWidth() / 2, body.getPosition().y - sprite.getHeight() / 2); - sprite.setRotation((float) (body.getAngle() * 180 / Math.PI % 360)); - - if (sprite == LIGHT_SOURCE) { - sprite.draw(app.sb); - } - } - - } - } - app.sb.end(); - - } - - private void renderSoccerBalls(Array bodies, boolean beforeLights) { - app.sb.begin(); - for (Body body : bodies) { - if (body.getUserData() != null) { - if (body.getUserData() instanceof Sprite) { - Sprite sprite = (Sprite) body.getUserData(); - sprite.setPosition(body.getPosition().x - sprite.getWidth() / 2, body.getPosition().y - sprite.getHeight() / 2); - sprite.setRotation((float) (body.getAngle() * 180 / Math.PI % 360)); - - if (sprite == SOCCER_BALL) { - if (beforeLights) { - sprite.draw(app.sb); - } else { - for (PointLight light : lightSet) { - if (light.contains(sprite.getX(), sprite.getY())) { - sprite.draw(app.sb); - break; - } - } - } - } - } - - } - } - app.sb.end(); - - } - - private void renderVblSprites(Array bodies) { - app.polyBatch.begin(); - for (Body body : bodies) { - if (body.getUserData() != null) { - if (body.getUserData() instanceof PolygonSprite) { - PolygonSprite sprite = (PolygonSprite) body.getUserData(); - sprite.setPosition(body.getPosition().x - sprite.getWidth() / 2, body.getPosition().y - sprite.getHeight() / 2); - sprite.setRotation((float) (body.getAngle() * 180 / Math.PI % 360)); - sprite.draw(app.polyBatch); - } - } - } - app.polyBatch.end(); - } - - private void debugLights() { - if (lightSet.isEmpty() || !DEBUG_BOX2D) - return; - - shapeRenderer.begin(); - for (DebugPointLight light : lightSet) { - // light.drawRays(shapeRenderer); - light.drawEdge(shapeRenderer); - } - shapeRenderer.end(); - } - - /* - * For POC only TODO: Check for color vs image and change to a listener vs getting images every frame - */ - private void drawBackgroundTile() { - /* Zone zone = mapToolFrame.getCurrentZoneRenderer().getZone(); - byte[] image = ImageManager.getTexture(zone.getBackgroundAsset(), mapToolFrame.getCurrentZoneRenderer()); - - if (image != null && image != backgroundImage) { - backgroundTexture = new Texture(new Pixmap(image, 0, image.length)); - backgroundImage = image; // Remember last image - System.out.println("Background image changed!"); - } - - if (backgroundTexture == null) - backgroundTexture = DEFAULT_BACKGROUND_TEXURE; - - backgroundTexture.setWrap(TextureWrap.Repeat, TextureWrap.Repeat); - app.sb.begin(); - app.sb.draw(backgroundTexture, 0, 0, 0, 0, MapToolGame.SCREEN_WIDTH, MapToolGame.SCREEN_HEIGHT); - app.sb.end();*/ - } - - /* - * TODO: Store grid shape for future frames and fix Hex/Iso offset! - */ - private void renderGrid() { - Zone zone = mapToolFrame.getCurrentZoneRenderer().getZone(); - int gridSize = (int) (zone.getGrid().getSize() * getScale()); - - if (!AppState.isShowGrid() || gridSize < ZoneRenderer.MIN_GRID_SIZE) { - return; - } - - float gridWidth = (float) zone.getGrid().getCellWidth(); - float gridHeight = (float) zone.getGrid().getCellHeight(); - - java.awt.Color gridColor = new java.awt.Color(zone.getGridColor()); - ShapeRenderer shape = new ShapeRenderer(); - - shape.begin(ShapeType.Line); - shape.setColor(gridColor.getRed(), gridColor.getGreen(), gridColor.getBlue(), 4f); - float[] gridVertices = areaToVertices(zone.getGrid().getCellShape()); - - shape.translate(1, 1, 0); - float transX = ((Gdx.graphics.getWidth() / gridWidth) + 1) * -gridWidth; - - for (int h = 0; h <= Gdx.graphics.getHeight() / gridHeight; h++) { - for (int w = 0; w <= Gdx.graphics.getWidth() / gridWidth; w++) { - shape.polygon(gridVertices); - shape.translate(gridWidth, 0, 0); - } - - shape.translate(transX, gridHeight, 0); - } - - shape.end(); - } - - private void renderVBL() { - Zone zone = mapToolFrame.getCurrentZoneRenderer().getZone(); - - if (vblArea.equals(zone.getTopology())) - return; - - System.out.println("VBL Changed!"); - vblArea = new Area(zone.getTopology()); - - for (Body body : vblBodySet) { - app.world.destroyBody(body); - } - - vblBodySet.clear(); - polySpriteSet.clear(); - - ArrayList vblAreas = parseVblAreas(vblArea); - for (float[] vertices : vblAreas) { - // Creating a Sprite to show VBL for each VBL "island" - EarClippingTriangulator triangulator = new EarClippingTriangulator(); - ShortArray triangleIndices = triangulator.computeTriangles(vertices); - PolygonRegion polyReg = new PolygonRegion(textureRegion, vertices, triangleIndices.toArray()); - - Body vblBody = createVblBody(vertices); - if (vblBody != null) { - vblBody.setUserData(new PolygonSprite(polyReg)); - vblBodySet.add(vblBody); - } - } - } - - private ArrayList parseVblAreas(Area area) { - ArrayList vblAreas = new ArrayList(); - ArrayList vertices = new ArrayList(); - float[] coords = new float[6]; - float lastX = 0, lastY = 0; - - // Flip the y axis because box2d y is down - AffineTransform at = new AffineTransform(); - at.translate(0, Gdx.graphics.getHeight()); - at.scale(1, -1); - - for (PathIterator iter = area.createTransformedArea(at).getPathIterator(null); !iter.isDone(); iter.next()) { - int type = iter.currentSegment(coords); - - switch (type) { - case PathIterator.SEG_CLOSE: - System.out.println("SEG_CLOSE"); - vblAreas.add(ArrayUtils.toPrimitive(vertices.toArray(new Float[vertices.size()]))); - break; - case PathIterator.SEG_LINETO: - System.out.println("SEG_LINETO"); - // Jamz: depending on the topology tool used, the last point == first point which is not expected for box2d polygon ear clipping - if (coords[0] == vertices.get(0) && coords[1] == vertices.get(1)) - break; - if (lastX == coords[0] && lastY == coords[1]) { - System.out.println("coords: " + Arrays.toString(coords)); - System.out.println("Skip!"); - break; - } - vertices.add(coords[0]); - vertices.add(coords[1]); - lastX = coords[0]; - lastY = coords[1]; - break; - case PathIterator.SEG_MOVETO: - System.out.println("SEG_MOVETO"); - vertices = new ArrayList(); - vertices.add(coords[0]); - vertices.add(coords[1]); - lastX = coords[0]; - lastY = coords[1]; - break; - } - } - - return vblAreas; - } - - // private void drawFilledPolygon(Polygon polygon, Color color) { - // ShapeRenderer shapeRenderer = null; - // shapeRenderer.begin(ShapeRenderer.ShapeType.Filled); - // shapeRenderer.setColor(color); - // - // float[] vertices = polygon.getTransformedVertices(); - // - // // NOTE: you probably don't want to create a new EarClippingTriangulator each frame - // ShortArray triangleIndices = new EarClippingTriangulator().computeTriangles(vertices); - // for (int i = 0; i < triangleIndices.size; i += 3) { - // shapeRenderer.triangle( - // vertices[triangleIndices.get(i) * 2], vertices[triangleIndices.get(i) * 2 + 1], - // vertices[triangleIndices.get(i + 1) * 2], vertices[triangleIndices.get(i + 1) * 2 + 1], - // vertices[triangleIndices.get(i + 2) * 2], vertices[triangleIndices.get(i + 2) * 2 + 1]); - // } - // - // shapeRenderer.end(); - // } - - private float[] areaToVertices(Area area) { - if (area.isEmpty()) - return new float[0]; - - PathIterator iterator = area.getPathIterator(null); - float[] floats = new float[60]; - float[] vertices = new float[1000]; - int count1 = 0; - - while (!iterator.isDone()) { - int type = iterator.currentSegment(floats); - - if (type != PathIterator.SEG_CLOSE) { - vertices[count1++] = floats[0]; - vertices[count1++] = floats[1]; - } - iterator.next(); - } - - float[] finalVertices = new float[count1]; - System.arraycopy(vertices, 0, finalVertices, 0, count1); - - return finalVertices; - } - - // private Body createVblBody(ShortArray triangles) { - // if (triangles.size == 0) - // return null; - // - // Body vblBody; - // - // BodyDef vblDef = new BodyDef(); - // vblDef.type = BodyType.StaticBody; - // vblBody = app.world.createBody(vblDef); - // - // System.out.println("Looks like we have an array size of: " + triangles.size); - // System.out.println("triangle: " + triangles.toString()); - // - // for (int i = 0; i < triangles.size; i = i + 6) { - // PolygonShape vblShape = new PolygonShape(); - // - // Vector2[] triangle = { new Vector2(triangles.get(i + 0), triangles.get(i + 1)), - // new Vector2(triangles.get(i + 2), triangles.get(i + 3)), - // new Vector2(triangles.get(i + 4), triangles.get(i + 5)) }; - // - // vblShape.set(triangle); - // vblBody.createFixture(vblShape, 0f); - // vblShape.dispose(); - // } - // - // return vblBody; - // } - - private Body createVblBody(float[] areaPath) { - if (areaPath.length == 0) - return null; - - Body vblBody; - - BodyDef vblDef = new BodyDef(); - vblDef.type = BodyType.StaticBody; - vblBody = app.world.createBody(vblDef); - - System.out.println("Looks like we have an array size of: " + areaPath.length); - System.out.println("areaPath : " + Arrays.toString(areaPath)); - - ShortArray triangles = new EarClippingTriangulator().computeTriangles(areaPath); - FloatArray polygon = new FloatArray(areaPath); - // FloatArray triangleOutlines = new FloatArray(triangles.size * 2); - - System.out.println("triangle size : " + triangles.size); - - for (int i = 0; i < triangles.size; i += 3) { - PolygonShape vblShape = new PolygonShape(); - FloatArray triangleOutlines = new FloatArray(); - - float ax = polygon.get(triangles.get(i) * 2); - float ay = polygon.get(triangles.get(i) * 2 + 1); - float bx = polygon.get(triangles.get(i + 1) * 2); - float by = polygon.get(triangles.get(i + 1) * 2 + 1); - float cx = polygon.get(triangles.get(i + 2) * 2); - float cy = polygon.get(triangles.get(i + 2) * 2 + 1); - - triangleOutlines.add(ax); - triangleOutlines.add(ay); - triangleOutlines.add(bx); - triangleOutlines.add(by); - triangleOutlines.add(cx); - triangleOutlines.add(cy); - - // System.out.println("triangleOutlines : " + Arrays.toString(triangleOutlines.toArray())); - vblShape.set(triangleOutlines.toArray()); - // System.out.println("Body shape created ok."); - vblBody.createFixture(vblShape, 0f); - - vblShape.dispose(); - } - - return vblBody; - } - - // private Body createVblBodyOLD(float[] vertices) { - // if (vertices.length == 0) - // return null; - // - // Body vblBody; - // - // BodyDef vblDef = new BodyDef(); - // vblDef.type = BodyType.StaticBody; - // vblBody = app.world.createBody(vblDef); - // - // PolygonShape vblShape = new PolygonShape(); - // vblShape.set(vertices); - // vblBody.createFixture(vblShape, 0f); - // - // vblShape.dispose(); - // - // return vblBody; - // } - - public double getScale() { - return mapToolFrame.getCurrentZoneRenderer().getScale(); - } - - /* - * For Testing only - */ - private void createTop() { - // Create the ground... - BodyDef groundBodyDef = new BodyDef(); - groundBodyDef.position.set(app.camera.viewportWidth * .25f, app.camera.viewportHeight * 1.25f); - Body groundBody = app.world.createBody(groundBodyDef); - - PolygonShape groundBox = new PolygonShape(); - groundBox.setAsBox(app.camera.viewportWidth * 1.5f, 3.0f); - groundBody.createFixture(groundBox, 0.0f); - } - - private void createBottom() { - // Create the ground... - BodyDef groundBodyDef = new BodyDef(); - groundBodyDef.position.set(app.camera.viewportWidth * .25f, -(app.camera.viewportHeight * .25f)); - Body groundBody = app.world.createBody(groundBodyDef); - - PolygonShape groundBox = new PolygonShape(); - groundBox.setAsBox(app.camera.viewportWidth * 1.5f, 3.0f); - groundBody.createFixture(groundBox, 0.0f); - } - - private void createLeftSide() { - // Create the ground... - BodyDef groundBodyDef = new BodyDef(); - groundBodyDef.position.set(1, 0); - Body groundBody = app.world.createBody(groundBodyDef); - - PolygonShape groundBox = new PolygonShape(); - groundBox.setAsBox(3.0f, app.camera.viewportHeight * 2); - groundBody.createFixture(groundBox, 0.0f); - } - - private void createRightSide() { - // Create the ground... - BodyDef groundBodyDef = new BodyDef(); - groundBodyDef.position.set((app.camera.viewportWidth) - 1, 0); - Body groundBody = app.world.createBody(groundBodyDef); - - PolygonShape groundBox = new PolygonShape(); - groundBox.setAsBox(3.0f, app.camera.viewportHeight * 2); - groundBody.createFixture(groundBox, 0.0f); - } - - private DebugPointLight createLight(Color color, float distance, float x, float y) { - return new DebugPointLight(rayHandler, 500, color, distance, x, y); - // new ConeLight(rayHandler, 2000, Color.GOLDENROD, 600, (MapToolGame.V_WIDTH / 2) + 30, (MapToolGame.V_HEIGHT / 2) + 15, 250, 35); - // new PointLight(rayHandler, 2000, Color.DARK_GRAY, 1500, (MapToolGame.V_WIDTH / 3), (MapToolGame.V_HEIGHT / 2) + 50); - } - - private DebugPointLight createRandomLight() { - Random rand = new Random(); - - float x = rand.nextFloat() * MapToolGame.SCREEN_WIDTH; - float y = rand.nextFloat() * MapToolGame.SCREEN_HEIGHT * 1.25f; - - float r = rand.nextFloat(); - float g = rand.nextFloat(); - float b = rand.nextFloat(); - - // float distance = (rand.nextFloat() * 500) + 400; - float distance = 20 * MapToolGame.F2M * MapToolGame.PPM; // 20 feet? - - // Color randomColor = new Color(0f, 0f, 0f, 255f); - Color randomColor = new Color(r, g, b, 255); - - DebugPointLight light = createLight(randomColor, distance, x, y); - light.setSoftnessLength(128f); // how far light travels through body... - - return light; - } - - public void clearLights() { - System.out.println("Removing " + lightSet.size() + " lights."); - - for (DebugPointLight light : lightSet) { - light.remove(true); - app.world.destroyBody(light.getBody()); - } - - lightSet.clear(); - } - - public void createBody(boolean attachLight, float x, float y) { - Body circleBody; - - BodyDef circleDef = new BodyDef(); - circleDef.type = BodyType.DynamicBody; - circleDef.position.set(x, y); - - circleBody = app.world.createBody(circleDef); - - CircleShape circleShape = new CircleShape(); - if (attachLight) - circleShape.setRadius(24f); - else - circleShape.setRadius(32f); - - FixtureDef circleFixture = new FixtureDef(); - circleFixture.shape = circleShape; - circleFixture.density = random(1, 100f); - circleFixture.friction = random(.25f, 1f); - circleFixture.restitution = random(.25f, 1f); - - circleBody.createFixture(circleFixture); - // circleBody.setAngularVelocity(random(-5f, 5f)); - circleBody.setLinearVelocity(new Vector2(random(-250, 250), random(-250, 250))); - - // Attach the sprite - Sprite bodySprite; - if (attachLight) - bodySprite = LIGHT_SOURCE; - else - bodySprite = SOCCER_BALL; - - bodySprite.setOriginCenter(); - bodySprite.setPosition(x, y); - // sprite.scale(r); - circleBody.setUserData(bodySprite); - - if (attachLight) { - DebugPointLight pointLight = createRandomLight(); - lightSet.add(pointLight); - pointLight.attachToBody(circleBody); - } - - // Dispose of stuff - circleShape.dispose(); - } - - private void createRandomBody(boolean attachLight) { - float x = random(64, MapToolGame.SCREEN_WIDTH); - float y = random(MapToolGame.SCREEN_HEIGHT / 2, MapToolGame.SCREEN_HEIGHT); - - createBody(attachLight, x, y); - } - - private float random(float min, float max) { - return (float) ThreadLocalRandom.current().nextDouble(min, max + 1); - } -} \ No newline at end of file + private static final Texture DEFAULT_BACKGROUND_TEXURE = + new Texture(Gdx.files.internal("net/rptools/maptool/client/image/grass.png")); + private static final Sprite SOCCER_BALL = + new Sprite(new Texture("net/rptools/maptool/client/image/soccer_ball.png")); + private static final Sprite LIGHT_SOURCE = + new Sprite(new Texture("net/rptools/maptool/client/image/light_ball.png")); + + private static final boolean DEBUG_BOX2D = false; + private static final boolean CREATE_RANDOM_EFFECTS = true; + private static boolean GAME_PAUSED = false; + + private static Texture backgroundTexture; + private static TextureRegion textureRegion; + private static byte[] backgroundImage; + private static Area vblArea = new Area(); + + private static Set vblBodySet = new HashSet<>(); + private static Set polySpriteSet = new HashSet<>(); + private static Set lightSet = new HashSet<>(); + + public static float frameRate = 60; + + private final MapToolGame app; + private MapToolFrame mapToolFrame; + private Stage stage; + private Box2DDebugRenderer renderer; + private RayHandler rayHandler; + private ShapeRenderer shapeRenderer; + + public Box2dRenderer(final MapToolGame app) { + this.app = app; + this.mapToolFrame = app.getMapToolFrame(); + + MapTool_InputProcessor inputProcessor = new MapTool_InputProcessor(this); + stage = new Stage(new ScreenViewport()); + Gdx.input.setInputProcessor(inputProcessor); // was stage + + app.world = new World(new Vector2(0, 0), true); // Earth gravity would be -9.7 + + if (DEBUG_BOX2D) renderer = new Box2DDebugRenderer(); + + rayHandler = new RayHandler(app.world); + // rayHandler.setAmbientLight(new Color(.1f, .1f, .1f, .1f)); + RayHandler.useDiffuseLight(true); + rayHandler.setCombinedMatrix(app.camera); + shapeRenderer = new ShapeRenderer(); + shapeRenderer.setAutoShapeType(true); + + // For Testing purposes + if (CREATE_RANDOM_EFFECTS) { + createTop(); + createBottom(); + createLeftSide(); + createRightSide(); + + for (int i = 0; i < 20; i++) { + createRandomBody(false); + } + + // Create a couple of lights on bodies? + for (int i = 0; i < 5; i++) { + createRandomBody(true); + // createRandomLight(); + } + } + + // For VBL texture + Pixmap pix = new Pixmap(1, 1, Pixmap.Format.RGBA8888); + pix.setColor(Color.BLUE.r, Color.BLUE.g, Color.BLUE.b, 196); // 128 default alpha + pix.fill(); + Texture textureSolid = new Texture(pix); + textureRegion = new TextureRegion(textureSolid); + } + + public Camera getCamera() { + return app.camera; + } + + @Override + public void show() {} + + @Override + public void render(float delta) { + Gdx.gl.glClearColor(1, 0, 0, 1); + Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT); + + // Suspend all activity while window is closed + update(delta); + stage.draw(); + + Array bodies = new Array(); + app.world.getBodies(bodies); + + drawBackgroundTile(); + + if (DEBUG_BOX2D) renderer.render(app.world, app.camera.combined); + + renderGrid(); + renderLightSources(bodies); + renderVBL(); + renderVblSprites(bodies); + + renderSoccerBalls(bodies, true); + rayHandler.updateAndRender(); + + debugLights(); + + // Drawn after rayHandler, spites always shown regardless of light then, eg always visible, can + // break up vbl/tokens later + // renderSoccerBalls(bodies, false); + renderFPS(); + + if (!GAME_PAUSED) app.world.step(1 / frameRate, 6, 2); + + Gdx.graphics.setTitle(MapToolGame.TITLE + " - " + Gdx.graphics.getFramesPerSecond() + " fps"); + } + + public void update(float delta) { + stage.act(delta); + } + + @Override + public void resize(int width, int height) { + app.camera.viewportHeight = (MapToolGame.VIEWPORT_WIDTH / width) * height; + + // stage.getViewport().update(width, height, true); + // MapToolGame.SCREEN_WIDTH = width; + // MapToolGame.SCREEN_HEIGHT = height; + } + + @Override + public void pause() { + GAME_PAUSED = !GAME_PAUSED; + } + + @Override + public void resume() {} + + @Override + public void hide() {} + + @Override + public void dispose() { + shapeRenderer.dispose(); + stage.dispose(); + } + + private void renderFPS() { + app.sb.begin(); + app.font.draw(app.sb, MapToolGame.TITLE, 20, MapToolGame.SCREEN_HEIGHT - 10); + app.font.draw( + app.sb, + "FPS: " + Gdx.graphics.getFramesPerSecond() + " [" + frameRate + "]", + 20, + MapToolGame.SCREEN_HEIGHT - 35); + app.font.draw(app.sb, "Lights: " + lightSet.size(), 20, MapToolGame.SCREEN_HEIGHT - 60); + app.sb.end(); + } + + private void renderLightSources(Array bodies) { + app.sb.begin(); + for (Body body : bodies) { + if (body.getUserData() != null) { + if (body.getUserData() instanceof Sprite) { + Sprite sprite = (Sprite) body.getUserData(); + sprite.setPosition( + body.getPosition().x - sprite.getWidth() / 2, + body.getPosition().y - sprite.getHeight() / 2); + sprite.setRotation((float) (body.getAngle() * 180 / Math.PI % 360)); + + if (sprite == LIGHT_SOURCE) { + sprite.draw(app.sb); + } + } + } + } + app.sb.end(); + } + + private void renderSoccerBalls(Array bodies, boolean beforeLights) { + app.sb.begin(); + for (Body body : bodies) { + if (body.getUserData() != null) { + if (body.getUserData() instanceof Sprite) { + Sprite sprite = (Sprite) body.getUserData(); + sprite.setPosition( + body.getPosition().x - sprite.getWidth() / 2, + body.getPosition().y - sprite.getHeight() / 2); + sprite.setRotation((float) (body.getAngle() * 180 / Math.PI % 360)); + + if (sprite == SOCCER_BALL) { + if (beforeLights) { + sprite.draw(app.sb); + } else { + for (PointLight light : lightSet) { + if (light.contains(sprite.getX(), sprite.getY())) { + sprite.draw(app.sb); + break; + } + } + } + } + } + } + } + app.sb.end(); + } + + private void renderVblSprites(Array bodies) { + app.polyBatch.begin(); + for (Body body : bodies) { + if (body.getUserData() != null) { + if (body.getUserData() instanceof PolygonSprite) { + PolygonSprite sprite = (PolygonSprite) body.getUserData(); + sprite.setPosition( + body.getPosition().x - sprite.getWidth() / 2, + body.getPosition().y - sprite.getHeight() / 2); + sprite.setRotation((float) (body.getAngle() * 180 / Math.PI % 360)); + sprite.draw(app.polyBatch); + } + } + } + app.polyBatch.end(); + } + + private void debugLights() { + if (lightSet.isEmpty() || !DEBUG_BOX2D) return; + + shapeRenderer.begin(); + for (DebugPointLight light : lightSet) { + // light.drawRays(shapeRenderer); + light.drawEdge(shapeRenderer); + } + shapeRenderer.end(); + } + + /* + * For POC only TODO: Check for color vs image and change to a listener vs getting images every frame + */ + private void drawBackgroundTile() { + /* Zone zone = mapToolFrame.getCurrentZoneRenderer().getZone(); + byte[] image = ImageManager.getTexture(zone.getBackgroundAsset(), mapToolFrame.getCurrentZoneRenderer()); + + if (image != null && image != backgroundImage) { + backgroundTexture = new Texture(new Pixmap(image, 0, image.length)); + backgroundImage = image; // Remember last image + System.out.println("Background image changed!"); + } + + if (backgroundTexture == null) + backgroundTexture = DEFAULT_BACKGROUND_TEXURE; + + backgroundTexture.setWrap(TextureWrap.Repeat, TextureWrap.Repeat); + app.sb.begin(); + app.sb.draw(backgroundTexture, 0, 0, 0, 0, MapToolGame.SCREEN_WIDTH, MapToolGame.SCREEN_HEIGHT); + app.sb.end();*/ + } + + /* + * TODO: Store grid shape for future frames and fix Hex/Iso offset! + */ + private void renderGrid() { + Zone zone = mapToolFrame.getCurrentZoneRenderer().getZone(); + int gridSize = (int) (zone.getGrid().getSize() * getScale()); + + if (!AppState.isShowGrid() || gridSize < ZoneRenderer.MIN_GRID_SIZE) { + return; + } + + float gridWidth = (float) zone.getGrid().getCellWidth(); + float gridHeight = (float) zone.getGrid().getCellHeight(); + + java.awt.Color gridColor = new java.awt.Color(zone.getGridColor()); + ShapeRenderer shape = new ShapeRenderer(); + + shape.begin(ShapeType.Line); + shape.setColor(gridColor.getRed(), gridColor.getGreen(), gridColor.getBlue(), 4f); + float[] gridVertices = areaToVertices(zone.getGrid().getCellShape()); + + shape.translate(1, 1, 0); + float transX = ((Gdx.graphics.getWidth() / gridWidth) + 1) * -gridWidth; + + for (int h = 0; h <= Gdx.graphics.getHeight() / gridHeight; h++) { + for (int w = 0; w <= Gdx.graphics.getWidth() / gridWidth; w++) { + shape.polygon(gridVertices); + shape.translate(gridWidth, 0, 0); + } + + shape.translate(transX, gridHeight, 0); + } + + shape.end(); + } + + private void renderVBL() { + Zone zone = mapToolFrame.getCurrentZoneRenderer().getZone(); + + if (vblArea.equals(zone.getTopology())) return; + + System.out.println("VBL Changed!"); + vblArea = new Area(zone.getTopology()); + + for (Body body : vblBodySet) { + app.world.destroyBody(body); + } + + vblBodySet.clear(); + polySpriteSet.clear(); + + ArrayList vblAreas = parseVblAreas(vblArea); + for (float[] vertices : vblAreas) { + // Creating a Sprite to show VBL for each VBL "island" + EarClippingTriangulator triangulator = new EarClippingTriangulator(); + ShortArray triangleIndices = triangulator.computeTriangles(vertices); + PolygonRegion polyReg = new PolygonRegion(textureRegion, vertices, triangleIndices.toArray()); + + Body vblBody = createVblBody(vertices); + if (vblBody != null) { + vblBody.setUserData(new PolygonSprite(polyReg)); + vblBodySet.add(vblBody); + } + } + } + + private ArrayList parseVblAreas(Area area) { + ArrayList vblAreas = new ArrayList(); + ArrayList vertices = new ArrayList(); + float[] coords = new float[6]; + float lastX = 0, lastY = 0; + + // Flip the y axis because box2d y is down + AffineTransform at = new AffineTransform(); + at.translate(0, Gdx.graphics.getHeight()); + at.scale(1, -1); + + for (PathIterator iter = area.createTransformedArea(at).getPathIterator(null); + !iter.isDone(); + iter.next()) { + int type = iter.currentSegment(coords); + + switch (type) { + case PathIterator.SEG_CLOSE: + System.out.println("SEG_CLOSE"); + vblAreas.add(ArrayUtils.toPrimitive(vertices.toArray(new Float[vertices.size()]))); + break; + case PathIterator.SEG_LINETO: + System.out.println("SEG_LINETO"); + // Jamz: depending on the topology tool used, the last point == first point which is not + // expected for box2d polygon ear clipping + if (coords[0] == vertices.get(0) && coords[1] == vertices.get(1)) break; + if (lastX == coords[0] && lastY == coords[1]) { + System.out.println("coords: " + Arrays.toString(coords)); + System.out.println("Skip!"); + break; + } + vertices.add(coords[0]); + vertices.add(coords[1]); + lastX = coords[0]; + lastY = coords[1]; + break; + case PathIterator.SEG_MOVETO: + System.out.println("SEG_MOVETO"); + vertices = new ArrayList(); + vertices.add(coords[0]); + vertices.add(coords[1]); + lastX = coords[0]; + lastY = coords[1]; + break; + } + } + + return vblAreas; + } + + // private void drawFilledPolygon(Polygon polygon, Color color) { + // ShapeRenderer shapeRenderer = null; + // shapeRenderer.begin(ShapeRenderer.ShapeType.Filled); + // shapeRenderer.setColor(color); + // + // float[] vertices = polygon.getTransformedVertices(); + // + // // NOTE: you probably don't want to create a new EarClippingTriangulator each frame + // ShortArray triangleIndices = new EarClippingTriangulator().computeTriangles(vertices); + // for (int i = 0; i < triangleIndices.size; i += 3) { + // shapeRenderer.triangle( + // vertices[triangleIndices.get(i) * 2], vertices[triangleIndices.get(i) * 2 + 1], + // vertices[triangleIndices.get(i + 1) * 2], vertices[triangleIndices.get(i + 1) * 2 + 1], + // vertices[triangleIndices.get(i + 2) * 2], vertices[triangleIndices.get(i + 2) * 2 + 1]); + // } + // + // shapeRenderer.end(); + // } + + private float[] areaToVertices(Area area) { + if (area.isEmpty()) return new float[0]; + + PathIterator iterator = area.getPathIterator(null); + float[] floats = new float[60]; + float[] vertices = new float[1000]; + int count1 = 0; + + while (!iterator.isDone()) { + int type = iterator.currentSegment(floats); + + if (type != PathIterator.SEG_CLOSE) { + vertices[count1++] = floats[0]; + vertices[count1++] = floats[1]; + } + iterator.next(); + } + + float[] finalVertices = new float[count1]; + System.arraycopy(vertices, 0, finalVertices, 0, count1); + + return finalVertices; + } + + // private Body createVblBody(ShortArray triangles) { + // if (triangles.size == 0) + // return null; + // + // Body vblBody; + // + // BodyDef vblDef = new BodyDef(); + // vblDef.type = BodyType.StaticBody; + // vblBody = app.world.createBody(vblDef); + // + // System.out.println("Looks like we have an array size of: " + triangles.size); + // System.out.println("triangle: " + triangles.toString()); + // + // for (int i = 0; i < triangles.size; i = i + 6) { + // PolygonShape vblShape = new PolygonShape(); + // + // Vector2[] triangle = { new Vector2(triangles.get(i + 0), triangles.get(i + 1)), + // new Vector2(triangles.get(i + 2), triangles.get(i + 3)), + // new Vector2(triangles.get(i + 4), triangles.get(i + 5)) }; + // + // vblShape.set(triangle); + // vblBody.createFixture(vblShape, 0f); + // vblShape.dispose(); + // } + // + // return vblBody; + // } + + private Body createVblBody(float[] areaPath) { + if (areaPath.length == 0) return null; + + Body vblBody; + + BodyDef vblDef = new BodyDef(); + vblDef.type = BodyType.StaticBody; + vblBody = app.world.createBody(vblDef); + + System.out.println("Looks like we have an array size of: " + areaPath.length); + System.out.println("areaPath : " + Arrays.toString(areaPath)); + + ShortArray triangles = new EarClippingTriangulator().computeTriangles(areaPath); + FloatArray polygon = new FloatArray(areaPath); + // FloatArray triangleOutlines = new FloatArray(triangles.size * 2); + + System.out.println("triangle size : " + triangles.size); + + for (int i = 0; i < triangles.size; i += 3) { + PolygonShape vblShape = new PolygonShape(); + FloatArray triangleOutlines = new FloatArray(); + + float ax = polygon.get(triangles.get(i) * 2); + float ay = polygon.get(triangles.get(i) * 2 + 1); + float bx = polygon.get(triangles.get(i + 1) * 2); + float by = polygon.get(triangles.get(i + 1) * 2 + 1); + float cx = polygon.get(triangles.get(i + 2) * 2); + float cy = polygon.get(triangles.get(i + 2) * 2 + 1); + + triangleOutlines.add(ax); + triangleOutlines.add(ay); + triangleOutlines.add(bx); + triangleOutlines.add(by); + triangleOutlines.add(cx); + triangleOutlines.add(cy); + + // System.out.println("triangleOutlines : " + Arrays.toString(triangleOutlines.toArray())); + vblShape.set(triangleOutlines.toArray()); + // System.out.println("Body shape created ok."); + vblBody.createFixture(vblShape, 0f); + + vblShape.dispose(); + } + + return vblBody; + } + + // private Body createVblBodyOLD(float[] vertices) { + // if (vertices.length == 0) + // return null; + // + // Body vblBody; + // + // BodyDef vblDef = new BodyDef(); + // vblDef.type = BodyType.StaticBody; + // vblBody = app.world.createBody(vblDef); + // + // PolygonShape vblShape = new PolygonShape(); + // vblShape.set(vertices); + // vblBody.createFixture(vblShape, 0f); + // + // vblShape.dispose(); + // + // return vblBody; + // } + + public double getScale() { + return mapToolFrame.getCurrentZoneRenderer().getScale(); + } + + /* + * For Testing only + */ + private void createTop() { + // Create the ground... + BodyDef groundBodyDef = new BodyDef(); + groundBodyDef.position.set(app.camera.viewportWidth * .25f, app.camera.viewportHeight * 1.25f); + Body groundBody = app.world.createBody(groundBodyDef); + + PolygonShape groundBox = new PolygonShape(); + groundBox.setAsBox(app.camera.viewportWidth * 1.5f, 3.0f); + groundBody.createFixture(groundBox, 0.0f); + } + + private void createBottom() { + // Create the ground... + BodyDef groundBodyDef = new BodyDef(); + groundBodyDef.position.set( + app.camera.viewportWidth * .25f, -(app.camera.viewportHeight * .25f)); + Body groundBody = app.world.createBody(groundBodyDef); + + PolygonShape groundBox = new PolygonShape(); + groundBox.setAsBox(app.camera.viewportWidth * 1.5f, 3.0f); + groundBody.createFixture(groundBox, 0.0f); + } + + private void createLeftSide() { + // Create the ground... + BodyDef groundBodyDef = new BodyDef(); + groundBodyDef.position.set(1, 0); + Body groundBody = app.world.createBody(groundBodyDef); + + PolygonShape groundBox = new PolygonShape(); + groundBox.setAsBox(3.0f, app.camera.viewportHeight * 2); + groundBody.createFixture(groundBox, 0.0f); + } + + private void createRightSide() { + // Create the ground... + BodyDef groundBodyDef = new BodyDef(); + groundBodyDef.position.set((app.camera.viewportWidth) - 1, 0); + Body groundBody = app.world.createBody(groundBodyDef); + + PolygonShape groundBox = new PolygonShape(); + groundBox.setAsBox(3.0f, app.camera.viewportHeight * 2); + groundBody.createFixture(groundBox, 0.0f); + } + + private DebugPointLight createLight(Color color, float distance, float x, float y) { + return new DebugPointLight(rayHandler, 500, color, distance, x, y); + // new ConeLight(rayHandler, 2000, Color.GOLDENROD, 600, (MapToolGame.V_WIDTH / 2) + 30, + // (MapToolGame.V_HEIGHT / 2) + 15, 250, 35); + // new PointLight(rayHandler, 2000, Color.DARK_GRAY, 1500, (MapToolGame.V_WIDTH / 3), + // (MapToolGame.V_HEIGHT / 2) + 50); + } + + private DebugPointLight createRandomLight() { + Random rand = new Random(); + + float x = rand.nextFloat() * MapToolGame.SCREEN_WIDTH; + float y = rand.nextFloat() * MapToolGame.SCREEN_HEIGHT * 1.25f; + + float r = rand.nextFloat(); + float g = rand.nextFloat(); + float b = rand.nextFloat(); + + // float distance = (rand.nextFloat() * 500) + 400; + float distance = 20 * MapToolGame.F2M * MapToolGame.PPM; // 20 feet? + + // Color randomColor = new Color(0f, 0f, 0f, 255f); + Color randomColor = new Color(r, g, b, 255); + + DebugPointLight light = createLight(randomColor, distance, x, y); + light.setSoftnessLength(128f); // how far light travels through body... + + return light; + } + + public void clearLights() { + System.out.println("Removing " + lightSet.size() + " lights."); + + for (DebugPointLight light : lightSet) { + light.remove(true); + app.world.destroyBody(light.getBody()); + } + + lightSet.clear(); + } + + public void createBody(boolean attachLight, float x, float y) { + Body circleBody; + + BodyDef circleDef = new BodyDef(); + circleDef.type = BodyType.DynamicBody; + circleDef.position.set(x, y); + + circleBody = app.world.createBody(circleDef); + + CircleShape circleShape = new CircleShape(); + if (attachLight) circleShape.setRadius(24f); + else circleShape.setRadius(32f); + + FixtureDef circleFixture = new FixtureDef(); + circleFixture.shape = circleShape; + circleFixture.density = random(1, 100f); + circleFixture.friction = random(.25f, 1f); + circleFixture.restitution = random(.25f, 1f); + + circleBody.createFixture(circleFixture); + // circleBody.setAngularVelocity(random(-5f, 5f)); + circleBody.setLinearVelocity(new Vector2(random(-250, 250), random(-250, 250))); + + // Attach the sprite + Sprite bodySprite; + if (attachLight) bodySprite = LIGHT_SOURCE; + else bodySprite = SOCCER_BALL; + + bodySprite.setOriginCenter(); + bodySprite.setPosition(x, y); + // sprite.scale(r); + circleBody.setUserData(bodySprite); + + if (attachLight) { + DebugPointLight pointLight = createRandomLight(); + lightSet.add(pointLight); + pointLight.attachToBody(circleBody); + } + + // Dispose of stuff + circleShape.dispose(); + } + + private void createRandomBody(boolean attachLight) { + float x = random(64, MapToolGame.SCREEN_WIDTH); + float y = random(MapToolGame.SCREEN_HEIGHT / 2, MapToolGame.SCREEN_HEIGHT); + + createBody(attachLight, x, y); + } + + private float random(float min, float max) { + return (float) ThreadLocalRandom.current().nextDouble(min, max + 1); + } +} diff --git a/src/main/java/net/rptools/maptool/box2d/unused/DebugPointLight.java b/src/main/java/net/rptools/maptool/box2d/unused/DebugPointLight.java index 19a6e636ee..703e561482 100644 --- a/src/main/java/net/rptools/maptool/box2d/unused/DebugPointLight.java +++ b/src/main/java/net/rptools/maptool/box2d/unused/DebugPointLight.java @@ -1,62 +1,68 @@ /* - * This software Copyright by the RPTools.net development team, and licensed under the Affero GPL Version 3 or, at your option, any later version. + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. * - * MapTool Source Code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * - * You should have received a copy of the GNU Affero General Public License * along with this source Code. If not, please visit and specifically the Affero license text - * at . + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . */ package net.rptools.maptool.box2d.unused; -import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.glutils.ShapeRenderer; - import box2dLight.PointLight; import box2dLight.RayHandler; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; public class DebugPointLight extends PointLight { - public DebugPointLight(RayHandler rayHandler, int rays, Color color, float distance, float x, float y) { - super(rayHandler, rays, color, distance, x, y); - } + public DebugPointLight( + RayHandler rayHandler, int rays, Color color, float distance, float x, float y) { + super(rayHandler, rays, color, distance, x, y); + } - public void drawEdge(ShapeRenderer renderer) { - if (isSoft()) { - int numVertices = softShadowMesh.getNumVertices(); - // default mesh edge - renderer.setColor(Color.CYAN); - for (int i = 0; i < numVertices * 4 - 8; i += 8) { - renderer.line(segments[i], segments[i + 1], segments[i + 8], segments[i + 9]); - } - renderer.setColor(Color.RED); - // soft mesh edge - for (int i = 0; i < numVertices * 4 - 8; i += 8) { - renderer.line(segments[i + 4], segments[i + 5], segments[i + 12], segments[i + 13]); - } - } else { - int numVertices = lightMesh.getNumVertices(); - renderer.setColor(Color.CYAN); - for (int i = 4; i < numVertices * 4 - 4; i += 4) { - renderer.line(segments[i], segments[i + 1], segments[i + 4], segments[i + 5]); - } - } - } + public void drawEdge(ShapeRenderer renderer) { + if (isSoft()) { + int numVertices = softShadowMesh.getNumVertices(); + // default mesh edge + renderer.setColor(Color.CYAN); + for (int i = 0; i < numVertices * 4 - 8; i += 8) { + renderer.line(segments[i], segments[i + 1], segments[i + 8], segments[i + 9]); + } + renderer.setColor(Color.RED); + // soft mesh edge + for (int i = 0; i < numVertices * 4 - 8; i += 8) { + renderer.line(segments[i + 4], segments[i + 5], segments[i + 12], segments[i + 13]); + } + } else { + int numVertices = lightMesh.getNumVertices(); + renderer.setColor(Color.CYAN); + for (int i = 4; i < numVertices * 4 - 4; i += 4) { + renderer.line(segments[i], segments[i + 1], segments[i + 4], segments[i + 5]); + } + } + } - public void drawRays(ShapeRenderer renderer) { - float sx = getX(); - float sy = getY(); - if (isSoft()) { - int numVertices = softShadowMesh.getNumVertices(); - renderer.setColor(Color.PURPLE); - for (int i = 0; i < numVertices * 4 - 8; i += 8) { - renderer.line(sx, sy, segments[i + 4], segments[i + 5]); - } - } else { - // rays - renderer.setColor(Color.YELLOW); - int numVertices = lightMesh.getNumVertices(); - for (int i = 4; i < numVertices * 4; i += 4) { - renderer.line(sx, sy, segments[i], segments[i + 1]); - } - } - } -} \ No newline at end of file + public void drawRays(ShapeRenderer renderer) { + float sx = getX(); + float sy = getY(); + if (isSoft()) { + int numVertices = softShadowMesh.getNumVertices(); + renderer.setColor(Color.PURPLE); + for (int i = 0; i < numVertices * 4 - 8; i += 8) { + renderer.line(sx, sy, segments[i + 4], segments[i + 5]); + } + } else { + // rays + renderer.setColor(Color.YELLOW); + int numVertices = lightMesh.getNumVertices(); + for (int i = 4; i < numVertices * 4; i += 4) { + renderer.line(sx, sy, segments[i], segments[i + 1]); + } + } + } +} diff --git a/src/main/java/net/rptools/maptool/box2d/unused/DesktopLauncher.java b/src/main/java/net/rptools/maptool/box2d/unused/DesktopLauncher.java index a61ba543cd..5009679e5f 100644 --- a/src/main/java/net/rptools/maptool/box2d/unused/DesktopLauncher.java +++ b/src/main/java/net/rptools/maptool/box2d/unused/DesktopLauncher.java @@ -1,61 +1,66 @@ /* - * This software Copyright by the RPTools.net development team, and licensed under the Affero GPL Version 3 or, at your option, any later version. + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. * - * MapTool Source Code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * - * You should have received a copy of the GNU Affero General Public License * along with this source Code. If not, please visit and specifically the Affero license text - * at . + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . */ package net.rptools.maptool.box2d.unused; -import javax.swing.JFrame; -import javax.swing.SwingUtilities; - import com.badlogic.gdx.backends.lwjgl.LwjglAWTCanvas; import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; - +import javax.swing.JFrame; +import javax.swing.SwingUtilities; import net.rptools.maptool.client.ui.MapToolFrame; public class DesktopLauncher extends JFrame { - private static final long serialVersionUID = 2536172952937398744L; - private LwjglAWTCanvas canvas; - private LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration(); - private MapToolFrame mapToolFrame; - - public DesktopLauncher(MapToolFrame clientFrame) { - cfg.title = MapToolGame.TITLE; - cfg.width = MapToolGame.SCREEN_WIDTH; - cfg.height = MapToolGame.SCREEN_HEIGHT; - cfg.useGL30 = true; - cfg.useHDPI = true; - cfg.allowSoftwareMode = true; - cfg.resizable = true; - - mapToolFrame = clientFrame; - - // setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); - -// canvas = new LwjglAWTCanvas(new MapToolGame(mapToolFrame, this), cfg); - canvas.getCanvas().setSize(MapToolGame.SCREEN_WIDTH, MapToolGame.SCREEN_HEIGHT); - add(canvas.getCanvas()); - - pack(); - setVisible(true); - } - - public static void main(String[] arg) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - new DesktopLauncher(null); - } - }); - } - - @Override - public void dispose() { - canvas.stop(); - - super.dispose(); - } -} \ No newline at end of file + private static final long serialVersionUID = 2536172952937398744L; + private LwjglAWTCanvas canvas; + private LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration(); + private MapToolFrame mapToolFrame; + + public DesktopLauncher(MapToolFrame clientFrame) { + cfg.title = MapToolGame.TITLE; + cfg.width = MapToolGame.SCREEN_WIDTH; + cfg.height = MapToolGame.SCREEN_HEIGHT; + cfg.useGL30 = true; + cfg.useHDPI = true; + cfg.allowSoftwareMode = true; + cfg.resizable = true; + + mapToolFrame = clientFrame; + + // setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + + // canvas = new LwjglAWTCanvas(new MapToolGame(mapToolFrame, this), cfg); + canvas.getCanvas().setSize(MapToolGame.SCREEN_WIDTH, MapToolGame.SCREEN_HEIGHT); + add(canvas.getCanvas()); + + pack(); + setVisible(true); + } + + public static void main(String[] arg) { + SwingUtilities.invokeLater( + new Runnable() { + public void run() { + new DesktopLauncher(null); + } + }); + } + + @Override + public void dispose() { + canvas.stop(); + + super.dispose(); + } +} diff --git a/src/main/java/net/rptools/maptool/box2d/unused/Main.java b/src/main/java/net/rptools/maptool/box2d/unused/Main.java index fdaa545e47..0e63a3c2ec 100644 --- a/src/main/java/net/rptools/maptool/box2d/unused/Main.java +++ b/src/main/java/net/rptools/maptool/box2d/unused/Main.java @@ -1,10 +1,16 @@ /* - * This software Copyright by the RPTools.net development team, and licensed under the Affero GPL Version 3 or, at your option, any later version. + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. * - * MapTool Source Code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * - * You should have received a copy of the GNU Affero General Public License * along with this source Code. If not, please visit and specifically the Affero license text - * at . + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . */ package net.rptools.maptool.box2d.unused; @@ -12,12 +18,12 @@ import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; public class Main { - public static void main(String[] args) { - LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration(); - cfg.title = "MapTool libgdx Test!"; - cfg.width = 1280; - cfg.height = 720; + public static void main(String[] args) { + LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration(); + cfg.title = "MapTool libgdx Test!"; + cfg.width = 1280; + cfg.height = 720; - new LwjglApplication(new Box2dLightTest(), cfg); - } -} \ No newline at end of file + new LwjglApplication(new Box2dLightTest(), cfg); + } +} diff --git a/src/main/java/net/rptools/maptool/box2d/unused/MapToolGame.java b/src/main/java/net/rptools/maptool/box2d/unused/MapToolGame.java index 343ccd8c28..b12477b9fc 100644 --- a/src/main/java/net/rptools/maptool/box2d/unused/MapToolGame.java +++ b/src/main/java/net/rptools/maptool/box2d/unused/MapToolGame.java @@ -1,10 +1,16 @@ /* - * This software Copyright by the RPTools.net development team, and licensed under the Affero GPL Version 3 or, at your option, any later version. + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. * - * MapTool Source Code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * - * You should have received a copy of the GNU Affero General Public License * along with this source Code. If not, please visit and specifically the Affero license text - * at . + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . */ package net.rptools.maptool.box2d.unused; @@ -14,60 +20,55 @@ import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.physics.box2d.World; - -import net.rptools.maptool.box2d.unused.Box2dRenderer; -import net.rptools.maptool.box2d.unused.DesktopLauncher; -import net.rptools.maptool.client.MapTool; import net.rptools.maptool.client.ui.MapToolFrame; public class MapToolGame extends Game { - public static final String TITLE = "MapTool Box2D Lights Test"; - public static int SCREEN_WIDTH = 1900; - public static int SCREEN_HEIGHT = 1100; - public static int VIEWPORT_WIDTH = 25; - public static int VIEWPORT_HEIGHT = 14; - public static final float PPM = 76.2f; // Pixels Per Meter, gives us 50 pixels per 5 feet - public static final float F2M = .3048f; // Feet to Meters - - public OrthographicCamera camera; - public SpriteBatch sb; - public PolygonSpriteBatch polyBatch; - public World world; - public BitmapFont font; + public static final String TITLE = "MapTool Box2D Lights Test"; + public static int SCREEN_WIDTH = 1900; + public static int SCREEN_HEIGHT = 1100; + public static int VIEWPORT_WIDTH = 25; + public static int VIEWPORT_HEIGHT = 14; + public static final float PPM = 76.2f; // Pixels Per Meter, gives us 50 pixels per 5 feet + public static final float F2M = .3048f; // Feet to Meters - private MapToolFrame mapToolFrame; + public OrthographicCamera camera; + public SpriteBatch sb; + public PolygonSpriteBatch polyBatch; + public World world; + public BitmapFont font; + private MapToolFrame mapToolFrame; - public MapToolGame(MapToolFrame parentFrame) { - mapToolFrame = parentFrame; - } + public MapToolGame(MapToolFrame parentFrame) { + mapToolFrame = parentFrame; + } - @Override - public void create() { - camera = new OrthographicCamera(VIEWPORT_WIDTH, VIEWPORT_HEIGHT); - camera.position.set(VIEWPORT_WIDTH / 2, VIEWPORT_HEIGHT / 2, 0); - camera.setToOrtho(false); - camera.update(); + @Override + public void create() { + camera = new OrthographicCamera(VIEWPORT_WIDTH, VIEWPORT_HEIGHT); + camera.position.set(VIEWPORT_WIDTH / 2, VIEWPORT_HEIGHT / 2, 0); + camera.setToOrtho(false); + camera.update(); - sb = new SpriteBatch(); - polyBatch = new PolygonSpriteBatch(); - polyBatch.setProjectionMatrix(camera.combined); - font = new BitmapFont(); + sb = new SpriteBatch(); + polyBatch = new PolygonSpriteBatch(); + polyBatch.setProjectionMatrix(camera.combined); + font = new BitmapFont(); - this.setScreen(new Box2dRenderer(this)); - } + this.setScreen(new Box2dRenderer(this)); + } - @Override - public void render() { - super.render(); - } + @Override + public void render() { + super.render(); + } - @Override - public void dispose() { - sb.dispose(); - } + @Override + public void dispose() { + sb.dispose(); + } - public MapToolFrame getMapToolFrame() { - return this.mapToolFrame; - } -} \ No newline at end of file + public MapToolFrame getMapToolFrame() { + return this.mapToolFrame; + } +} diff --git a/src/main/java/net/rptools/maptool/box2d/unused/MapTool_InputProcessor.java b/src/main/java/net/rptools/maptool/box2d/unused/MapTool_InputProcessor.java index 98a30b3986..7ec2f6ce78 100644 --- a/src/main/java/net/rptools/maptool/box2d/unused/MapTool_InputProcessor.java +++ b/src/main/java/net/rptools/maptool/box2d/unused/MapTool_InputProcessor.java @@ -1,10 +1,16 @@ /* - * This software Copyright by the RPTools.net development team, and licensed under the Affero GPL Version 3 or, at your option, any later version. + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. * - * MapTool Source Code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * - * You should have received a copy of the GNU Affero General Public License * along with this source Code. If not, please visit and specifically the Affero license text - * at . + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . */ package net.rptools.maptool.box2d.unused; @@ -13,84 +19,84 @@ import com.badlogic.gdx.Input.Keys; import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.math.Vector3; -import net.rptools.maptool.box2d.unused.Box2dRenderer; public class MapTool_InputProcessor implements InputProcessor { - Box2dRenderer renderer; - - public MapTool_InputProcessor(Box2dRenderer renderer) { - this.renderer = renderer; - } - - @Override - public boolean keyDown(int keycode) { - return false; - } - - @Override - public boolean keyUp(int keycode) { - switch (keycode) { - case Keys.SPACE: - renderer.pause(); - break; - - case Keys.UP: - Box2dRenderer.frameRate += 1; - break; - - case Keys.DOWN: - Box2dRenderer.frameRate -= 1; - break; - - default: - break; - } - - return false; - } - - @Override - public boolean keyTyped(char character) { - return false; - } - - @Override - public boolean touchDown(int screenX, int screenY, int pointer, int button) { - // System.out.println("pointer, button: " + pointer + ", " + button); - return false; - } - - @Override - public boolean touchUp(int screenX, int screenY, int pointer, int button) { - if (button == Buttons.LEFT) { - Vector3 input = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0); - renderer.getCamera().unproject(input); - - // Now you can use input.x and input.y, as opposed to Gdx.input.getX() and Gdx.input.getY(), to draw the circle - // System.out.println("x, y: " + input.x + ", " + input.y); - renderer.createBody(true, input.x, input.y); - } else if (button == Buttons.RIGHT) { - renderer.clearLights(); - } - - return false; - } - - @Override - public boolean touchDragged(int screenX, int screenY, int pointer) { - // TODO Auto-generated method stub - return false; - } - - @Override - public boolean mouseMoved(int screenX, int screenY) { - // System.out.println("mouse moved: " + screenX + ", " + screenY); - return false; - } - - @Override - public boolean scrolled(float amountX, float amountY) { - System.out.println("Scrolled " + amountX + ", " + amountY); - return false; - } + Box2dRenderer renderer; + + public MapTool_InputProcessor(Box2dRenderer renderer) { + this.renderer = renderer; + } + + @Override + public boolean keyDown(int keycode) { + return false; + } + + @Override + public boolean keyUp(int keycode) { + switch (keycode) { + case Keys.SPACE: + renderer.pause(); + break; + + case Keys.UP: + Box2dRenderer.frameRate += 1; + break; + + case Keys.DOWN: + Box2dRenderer.frameRate -= 1; + break; + + default: + break; + } + + return false; + } + + @Override + public boolean keyTyped(char character) { + return false; + } + + @Override + public boolean touchDown(int screenX, int screenY, int pointer, int button) { + // System.out.println("pointer, button: " + pointer + ", " + button); + return false; + } + + @Override + public boolean touchUp(int screenX, int screenY, int pointer, int button) { + if (button == Buttons.LEFT) { + Vector3 input = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0); + renderer.getCamera().unproject(input); + + // Now you can use input.x and input.y, as opposed to Gdx.input.getX() and Gdx.input.getY(), + // to draw the circle + // System.out.println("x, y: " + input.x + ", " + input.y); + renderer.createBody(true, input.x, input.y); + } else if (button == Buttons.RIGHT) { + renderer.clearLights(); + } + + return false; + } + + @Override + public boolean touchDragged(int screenX, int screenY, int pointer) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean mouseMoved(int screenX, int screenY) { + // System.out.println("mouse moved: " + screenX + ", " + screenY); + return false; + } + + @Override + public boolean scrolled(float amountX, float amountY) { + System.out.println("Scrolled " + amountX + ", " + amountY); + return false; + } } diff --git a/src/main/java/net/rptools/maptool/client/AppActions.java b/src/main/java/net/rptools/maptool/client/AppActions.java index a97ebd693d..d58fe6172a 100644 --- a/src/main/java/net/rptools/maptool/client/AppActions.java +++ b/src/main/java/net/rptools/maptool/client/AppActions.java @@ -63,7 +63,6 @@ import net.rptools.lib.FileUtil; import net.rptools.lib.MD5Key; import net.rptools.lib.image.ImageUtil; -import net.rptools.lib.swing.PositionalLayout; import net.rptools.maptool.client.tool.BoardTool; import net.rptools.maptool.client.tool.GridTool; import net.rptools.maptool.client.ui.AddResourceDialog; @@ -2076,20 +2075,20 @@ protected void executeAction() { } }; - public static final DefaultClientAction SHOW_BOX2D_TEST = - new DefaultClientAction() { + public static final DefaultClientAction SHOW_BOX2D_TEST = + new DefaultClientAction() { { - init("Show jfx"); - //init("Show Box2D Test"); + init("Show jfx"); + // init("Show Box2D Test"); } @Override public void executeAction() { - MapTool.getFrame().addGdx(); - //MapTool.loadBox2dTest(); + MapTool.getFrame().addGdx(); + // MapTool.loadBox2dTest(); } - }; + }; public static final DefaultClientAction ZOOM_RESET = new DefaultClientAction() { diff --git a/src/main/java/net/rptools/maptool/client/MapTool.java b/src/main/java/net/rptools/maptool/client/MapTool.java index d9b07cc21b..1e11cf7253 100644 --- a/src/main/java/net/rptools/maptool/client/MapTool.java +++ b/src/main/java/net/rptools/maptool/client/MapTool.java @@ -25,7 +25,6 @@ import io.sentry.SentryClientFactory; import io.sentry.event.BreadcrumbBuilder; import io.sentry.event.UserBuilder; - import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; @@ -39,13 +38,12 @@ import java.security.spec.InvalidKeySpecException; import java.text.MessageFormat; import java.util.*; -import java.util.concurrent.ExecutionException; import java.util.List; +import java.util.concurrent.ExecutionException; import javax.imageio.ImageIO; import javax.imageio.spi.IIORegistry; import javax.swing.*; import javax.swing.plaf.FontUIResource; - import net.rptools.lib.BackupManager; import net.rptools.lib.DebugStream; import net.rptools.lib.EventDispatcher; @@ -55,7 +53,6 @@ import net.rptools.lib.net.RPTURLStreamHandlerFactory; import net.rptools.lib.sound.SoundManager; import net.rptools.lib.swing.SwingUtil; -import net.rptools.maptool.box2d.unused.DesktopLauncher; import net.rptools.maptool.client.functions.UserDefinedMacroFunctions; import net.rptools.maptool.client.script.javascript.JSScriptEngine; import net.rptools.maptool.client.swing.MapToolEventQueue; @@ -1598,7 +1595,6 @@ public static void main(String[] args) { cmdOptions.addOption("r", "reset", false, "reset startup options to defaults"); cmdOptions.addOption("F", "file", true, "load campaign on startup"); - CommandLineParser cmdParser = new DefaultParser(); CommandLine cmd = null; boolean listMacros = false; diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index a6eea25091..f61f0aac42 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -17,7 +17,9 @@ import com.badlogic.gdx.backends.jogamp.JoglSwingCanvas; import com.jidesoft.docking.DefaultDockableHolder; import com.jidesoft.docking.DockableFrame; +import com.jogamp.opengl.awt.GLJPanel; import java.awt.*; +import java.awt.Rectangle; import java.awt.event.*; import java.awt.image.BufferedImage; import java.io.File; @@ -38,9 +40,6 @@ import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; import javax.xml.parsers.ParserConfigurationException; -import com.jogamp.opengl.awt.GLJPanel; -import com.jogamp.opengl.util.Animator; -import com.jogamp.opengl.util.awt.AWTGLPixelBuffer; import net.rptools.lib.AppEvent; import net.rptools.lib.AppEventListener; import net.rptools.lib.FileUtil; @@ -53,9 +52,8 @@ import net.rptools.lib.swing.preference.WindowPreferences; import net.rptools.maptool.client.*; import net.rptools.maptool.client.AppActions.ClientAction; -import net.rptools.maptool.client.swing.*; -import net.rptools.maptool.client.tool.DrawTopologySelectionTool; import net.rptools.maptool.client.MapTool.ZoneEvent; +import net.rptools.maptool.client.swing.*; import net.rptools.maptool.client.swing.AppHomeDiskSpaceStatusBar; import net.rptools.maptool.client.swing.AssetCacheStatusBar; import net.rptools.maptool.client.swing.CoordinateStatusBar; @@ -90,9 +88,9 @@ import net.rptools.maptool.language.I18N; import net.rptools.maptool.model.*; import net.rptools.maptool.model.Zone.Layer; -import net.rptools.maptool.model.drawing.*; import net.rptools.maptool.model.ZoneFactory; import net.rptools.maptool.model.ZonePoint; +import net.rptools.maptool.model.drawing.*; import net.rptools.maptool.model.drawing.DrawableColorPaint; import net.rptools.maptool.model.drawing.DrawablePaint; import net.rptools.maptool.model.drawing.DrawableTexturePaint; @@ -105,27 +103,7 @@ import org.apache.logging.log4j.Logger; import org.xml.sax.SAXException; -import javax.swing.Timer; -import javax.swing.*; -import javax.swing.border.BevelBorder; -import javax.swing.filechooser.FileFilter; -import javax.swing.tree.TreePath; -import javax.swing.tree.TreeSelectionModel; -import javax.xml.parsers.ParserConfigurationException; -import java.awt.Rectangle; -import java.awt.*; -import java.awt.event.*; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.util.List; -import java.util.*; -import java.util.concurrent.CopyOnWriteArrayList; - -/** - * - */ +/** */ public class MapToolFrame extends DefaultDockableHolder implements WindowListener, AppEventListener { private static final Logger log = LogManager.getLogger(MapToolFrame.class); @@ -145,10 +123,9 @@ public class MapToolFrame extends DefaultDockableHolder // Components private final AssetPanel assetPanel; private final ClientConnectionPanel connectionPanel; - /** - * The panel showing the initiative order. - */ + /** The panel showing the initiative order. */ private final InitiativePanel initiativePanel; + private final PointerOverlay pointerOverlay; private final CommandPanel commandPanel; private final AboutDialog aboutDialog; @@ -156,14 +133,11 @@ public class MapToolFrame extends DefaultDockableHolder private final Toolbox toolbox; private final ToolbarPanel toolbarPanel; private final ZoneMiniMapPanel zoneMiniMapPanel; - /** - * Contains the zoneRenderer, as well as all overlays. - */ + /** Contains the zoneRenderer, as well as all overlays. */ private final JPanel zoneRendererPanel; + private JPanel currentRenderPanel; - /** - * Contains the overlays that should be displayed in front of everything else. - */ + /** Contains the overlays that should be displayed in front of everything else. */ private final PointerToolOverlay pointerToolOverlay; private JPanel visibleControlPanel; @@ -201,16 +175,14 @@ public class MapToolFrame extends DefaultDockableHolder private final ImpersonatePanel impersonatePanel = new ImpersonatePanel(); private final DragImageGlassPane dragImageGlassPane = new DragImageGlassPane(); private JoglSwingCanvas joglSwingCanvas; - /** - * Are the drawing measurements being painted? - */ + /** Are the drawing measurements being painted? */ private boolean paintDrawingMeasurement = true; + private ImageChooserDialog imageChooserDialog; private ZoneRenderer currentRenderer; - /** - * The HTML pane showing the map overlay. - */ + /** The HTML pane showing the map overlay. */ private HTMLOverlayPanel overlayPanel; + private JPanel visibleControlPanel; private FullScreenFrame fullScreenFrame; private JPanel fullScreenToolPanel; @@ -230,6 +202,7 @@ public class MapToolFrame extends DefaultDockableHolder /** Model for the token tree panel of the map explorer. */ private TokenPanelTreeModel tokenPanelTreeModel; + private DrawPanelTreeModel drawPanelTreeModel; private DrawablesPanel drawablesPanel; private LookupTablePanel lookupTablePanel; @@ -241,10 +214,9 @@ public class MapToolFrame extends DefaultDockableHolder private JFileChooser saveFileChooser; private JFileChooser saveMapFileChooser; private JFileChooser saveTokenFileChooser; - /** - * Remember the last layer selected - */ + /** Remember the last layer selected */ private Layer lastSelectedLayer = Zone.Layer.TOKEN; + private EditTokenDialog tokenPropertiesDialog; private GLJPanel gdxPanel; private JFileChooser saveMacroFileChooser; @@ -321,14 +293,14 @@ public MapToolFrame(JMenuBar menuBar) { statusPanel.addPanel(new SpacerStatusBar(25)); zoneMiniMapPanel = new ZoneMiniMapPanel(); - //zoneMiniMapPanel.setSize(100, 100); + // zoneMiniMapPanel.setSize(100, 100); zoneRendererPanel = new JPanel(new PositionalLayout(5)); currentRenderPanel = zoneRendererPanel; initGdx(); - //zoneRendererPanel.setBackground(Color.black); - //zoneRendererPanel.add(zoneMiniMapPanel, PositionalLayout.Position.SE); + // zoneRendererPanel.setBackground(Color.black); + // zoneRendererPanel.add(zoneMiniMapPanel, PositionalLayout.Position.SE); zoneRendererPanel.add(getChatTypingPanel(), PositionalLayout.Position.NW); zoneRendererPanel.add(getChatActionLabel(), PositionalLayout.Position.SW); @@ -337,7 +309,7 @@ public MapToolFrame(JMenuBar menuBar) { rendererBorderPanel = new JPanel(new GridLayout()); rendererBorderPanel.setBorder(BorderFactory.createLineBorder(Color.darkGray)); - //rendererBorderPanel.add(gdxPanel); + // rendererBorderPanel.add(gdxPanel); rendererBorderPanel.add(zoneRendererPanel); toolbarPanel = new ToolbarPanel(toolbox); @@ -347,7 +319,6 @@ public MapToolFrame(JMenuBar menuBar) { pointerToolOverlay = new PointerToolOverlay(); zoneRendererPanel.add(pointerToolOverlay, PositionalLayout.Position.CENTER, 0); - // Put it all together setJMenuBar(menuBar); add(BorderLayout.NORTH, toolbarPanel); @@ -395,10 +366,10 @@ public MapToolFrame(JMenuBar menuBar) { private void initGdx() { joglSwingCanvas = new JoglSwingCanvas(GdxRenderer.getInstance(), "test", 640, 480); - //gdxPanel = new GLJPanel(); - //gdxPanel.addGLEventListener(gears); - //animator.add(gdxPanel); - //animator.start(); + // gdxPanel = new GLJPanel(); + // gdxPanel.addGLEventListener(gears); + // animator.add(gdxPanel); + // animator.start(); gdxPanel = joglSwingCanvas.getGLCanvas(); gdxPanel.setVisible(false); @@ -430,7 +401,6 @@ public void addGdx() { nextRenderPanel.setVisible(true); rendererBorderPanel.remove(currentRenderPanel); - rendererBorderPanel.add(nextRenderPanel); currentRenderPanel = nextRenderPanel; correctGdxSize(); @@ -632,7 +602,7 @@ private JScrollPane scrollPaneFactory(JPanel panel) { * Updates the window title, tab title, and side title of the given frame * * @param mtFrame The frame to set the title of - * @param title The new title + * @param title The new title */ public void setFrameTitle(MTFrame mtFrame, String title) { DockableFrame frame = getFrame(mtFrame); @@ -654,7 +624,7 @@ public LookupTablePanel getLookupTablePanel() { * Shows the token properties dialog, and saves the token. * * @param token the token to edit - * @param zr the ZoneRenderer of the token + * @param zr the ZoneRenderer of the token */ public void showTokenPropertiesDialog(Token token, ZoneRenderer zr) { if (token != null && zr != null) { @@ -678,9 +648,7 @@ private EditTokenDialog getTokenPropertiesDialog() { return tokenPropertiesDialog; } - /** - * Repaints the current ZoneRenderer, if it is not null. - */ + /** Repaints the current ZoneRenderer, if it is not null. */ public void refresh() { if (getCurrentZoneRenderer() != null) { getCurrentZoneRenderer().repaint(); @@ -803,7 +771,6 @@ public GLJPanel getGdxPanel() { return gdxPanel; } - public AssetCacheStatusBar getAssetCacheStatusBar() { if (assetCacheStatusBar == null) { assetCacheStatusBar = new AssetCacheStatusBar(); @@ -1054,12 +1021,12 @@ public void mousePressed(MouseEvent e) { if (!selectedDrawSet.isEmpty()) { try { new DrawPanelPopupMenu( - selectedDrawSet, - x, - y, - getCurrentZoneRenderer(), - firstElement, - topLevelOnly) + selectedDrawSet, + x, + y, + getCurrentZoneRenderer(), + firstElement, + topLevelOnly) .showPopup(tree); } catch (IllegalComponentStateException icse) { log.info(tree.toString(), icse); @@ -1085,9 +1052,7 @@ public void updateDrawTree() { } } - /** - * Create the token tree panel for the map explorer - */ + /** Create the token tree panel for the map explorer */ private JComponent createTokenTreePanel() { final JTree tree = new JTree(); tokenPanelTreeModel = new TokenPanelTreeModel(tree); @@ -1150,11 +1115,11 @@ public void mousePressed(MouseEvent e) { try { if (firstToken.isStamp()) { new StampPopupMenu( - selectedTokenSet, x, y, getCurrentZoneRenderer(), firstToken) + selectedTokenSet, x, y, getCurrentZoneRenderer(), firstToken) .showPopup(tree); } else { new TokenPopupMenu( - selectedTokenSet, x, y, getCurrentZoneRenderer(), firstToken) + selectedTokenSet, x, y, getCurrentZoneRenderer(), firstToken) .showPopup(tree); } } catch (IllegalComponentStateException icse) { @@ -1178,9 +1143,7 @@ public void clearTokenTree() { } } - /** - * Update tokenPanelTreeModel and the initiativePanel. - */ + /** Update tokenPanelTreeModel and the initiativePanel. */ public void updateTokenTree() { if (tokenPanelTreeModel != null) { tokenPanelTreeModel.update(); @@ -1702,9 +1665,9 @@ public void hideFullScreenTools() { toolbarPanel.add(toolbarPanel.getOptionPanel(), toolbarPanel.getOptionsPanelIndex()); JToggleButton buttons[] = { - toolbarPanel.getTopologyButton(), toolbarPanel.getFogButton(), - toolbarPanel.getTemplateButton(), toolbarPanel.getDrawButton(), - toolbarPanel.getPointerGroupButton() + toolbarPanel.getTopologyButton(), toolbarPanel.getFogButton(), + toolbarPanel.getTemplateButton(), toolbarPanel.getDrawButton(), + toolbarPanel.getPointerGroupButton() }; for (var button : buttons) { @@ -1786,8 +1749,7 @@ public void handleAppEvent(AppEvent evt) { } // WINDOW LISTENER - public void windowOpened(WindowEvent e) { - } + public void windowOpened(WindowEvent e) {} public void windowClosing(WindowEvent e) { if (!confirmClose()) { @@ -1863,17 +1825,13 @@ public void windowClosed(WindowEvent e) { System.exit(0); } - public void windowIconified(WindowEvent e) { - } + public void windowIconified(WindowEvent e) {} - public void windowDeiconified(WindowEvent e) { - } + public void windowDeiconified(WindowEvent e) {} - public void windowActivated(WindowEvent e) { - } + public void windowActivated(WindowEvent e) {} - public void windowDeactivated(WindowEvent e) { - } + public void windowDeactivated(WindowEvent e) {} // Windows OS defaults F10 to the menu bar, noooooo!! We want for macro buttons. // XXX Shouldn't this keystroke be configurable via the properties file anyway? @@ -1980,17 +1938,13 @@ public SelectionPanel getSelectionPanel() { return selectionPanel; } - /** - * Reset the impersonatePanel and the selectionPanel. - */ + /** Reset the impersonatePanel and the selectionPanel. */ public void resetTokenPanels() { impersonatePanel.reset(); selectionPanel.reset(); } - /** - * Reset the macro panels. Currently only used after loading a campaign. - */ + /** Reset the macro panels. Currently only used after loading a campaign. */ public void resetPanels() { MacroButtonHotKeyManager.clearKeyStrokes(); campaignPanel.reset(); @@ -2001,9 +1955,7 @@ public void resetPanels() { updateKeyStrokes(); } - /** - * @return Getter for initiativePanel - */ + /** @return Getter for initiativePanel */ public InitiativePanel getInitiativePanel() { return initiativePanel; } @@ -2076,6 +2028,7 @@ public JFileChooser getLoadTableFileChooser() { loadTableFileChooser.setFileFilter(tableFilter); return loadTableFileChooser; } + public enum MTFrame { /* * These enums should be specified using references to the properties file. However, a simple toString() method is used later to determine what to display on the various panels. So if I @@ -2209,8 +2162,7 @@ private KeyListenerDeleteDraw(JTree tree) { } @Override - public void keyTyped(KeyEvent e) { - } + public void keyTyped(KeyEvent e) {} @Override public void keyReleased(KeyEvent e) { @@ -2243,8 +2195,7 @@ public void keyReleased(KeyEvent e) { } @Override - public void keyPressed(KeyEvent e) { - } + public void keyPressed(KeyEvent e) {} } private final class KeyListenerDeleteToken implements KeyListener { @@ -2255,8 +2206,7 @@ private KeyListenerDeleteToken(JTree tree) { } @Override - public void keyTyped(KeyEvent e) { - } + public void keyTyped(KeyEvent e) {} @Override public void keyReleased(KeyEvent e) { @@ -2274,8 +2224,7 @@ public void keyReleased(KeyEvent e) { } @Override - public void keyPressed(KeyEvent e) { - } + public void keyPressed(KeyEvent e) {} } private class ChatTyperObserver implements Observer { diff --git a/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java b/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java index 5d354dab1c..1e4ae85328 100644 --- a/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java +++ b/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java @@ -179,10 +179,10 @@ public ToolbarPanel(Toolbox tbox) { // Jamz: End panel add( - createJfxButton( - "net/rptools/maptool/client/image/javafx.png", - I18N.getText("tools.mute.tooltip"), - I18N.getText("tools.unmute.tooltip"))); + createJfxButton( + "net/rptools/maptool/client/image/javafx.png", + I18N.getText("tools.mute.tooltip"), + I18N.getText("tools.unmute.tooltip"))); // the "Select Map" button mapselect = createZoneSelectionButton(); @@ -412,17 +412,17 @@ private JToggleButton createMuteButton( } private JToggleButton createJfxButton( - final String icon, String mutetooltip, String unmutetooltip) { + final String icon, String mutetooltip, String unmutetooltip) { final JToggleButton button = new JToggleButton(); button.setToolTipText(mutetooltip); button.addActionListener( - e -> { - MapTool.getFrame().addGdx(); - }); + e -> { + MapTool.getFrame().addGdx(); + }); try { button.setIcon(createIcon(icon, 25, 25)); - //button.setSelectedIcon(createIcon(icon, 25, 25)); + // button.setSelectedIcon(createIcon(icon, 25, 25)); } catch (IOException ioe) { ioe.printStackTrace(); } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index bf6b85adc4..363a0e46f1 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -1,18 +1,32 @@ +/* + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. + * + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . + */ package net.rptools.maptool.client.ui.zone; +import static java.util.zip.Deflater.DEFAULT_COMPRESSION; + import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver; -import com.badlogic.gdx.backends.lwjgl.LwjglNativesLoader; -import com.badlogic.gdx.backends.lwjgl.audio.OpenALLwjglAudio; -import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.*; +import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.*; import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator; import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGeneratorLoader; import com.badlogic.gdx.graphics.g2d.freetype.FreetypeFontLoader; -import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.*; +import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.physics.box2d.*; import com.badlogic.gdx.scenes.scene2d.utils.TiledDrawable; import com.badlogic.gdx.utils.FloatArray; @@ -23,6 +37,15 @@ import com.crashinvaders.vfx.VfxManager; import com.crashinvaders.vfx.effects.ChainVfxEffect; import com.crashinvaders.vfx.framebuffer.VfxFrameBuffer; +import java.awt.*; +import java.awt.Shape; +import java.awt.geom.*; +import java.io.ByteArrayInputStream; +import java.io.FileNotFoundException; +import java.text.NumberFormat; +import java.util.*; +import java.util.List; +import javax.swing.*; import net.rptools.lib.AppEvent; import net.rptools.lib.AppEventListener; import net.rptools.lib.CodeTimer; @@ -40,9 +63,9 @@ import net.rptools.maptool.client.ui.Tool; import net.rptools.maptool.client.ui.token.*; import net.rptools.maptool.client.walker.ZoneWalker; +import net.rptools.maptool.model.*; import net.rptools.maptool.model.Label; import net.rptools.maptool.model.Path; -import net.rptools.maptool.model.*; import net.rptools.maptool.model.drawing.*; import net.rptools.maptool.util.FunctionUtil; import net.rptools.maptool.util.GraphicsUtil; @@ -54,4126 +77,4351 @@ import space.earlygrey.shapedrawer.JoinType; import space.earlygrey.shapedrawer.ShapeDrawer; -import javax.swing.*; -import java.awt.*; -import java.awt.Shape; -import java.awt.geom.*; -import java.io.ByteArrayInputStream; -import java.io.FileNotFoundException; -import java.text.NumberFormat; -import java.util.*; -import java.util.List; - -import static java.util.zip.Deflater.DEFAULT_COMPRESSION; - /** - * The coordinates in the model are y-down, x-left. - * The world coordinates are y-up, x-left. I moved the world to the 4th quadrant of the - * coordinate system. So if you would draw a token t awt at (x,y) you have to draw it at (x, -y - t.width) + * The coordinates in the model are y-down, x-left. The world coordinates are y-up, x-left. I moved + * the world to the 4th quadrant of the coordinate system. So if you would draw a token t awt at + * (x,y) you have to draw it at (x, -y - t.width) + * *

    */ - - -public class GdxRenderer extends ApplicationAdapter implements AppEventListener, ModelChangeListener, AssetAvailableListener { - - private static final Logger log = LogManager.getLogger(GdxRenderer.class); - - private static GdxRenderer _instance; - //private final Map sprites = new HashMap<>(); - private final Map fetchedSprites = new HashMap<>(); - private final Map isoSprites = new HashMap<>(); - private final Map fetchedRegions = new HashMap<>(); - private final Map bigSprites = new HashMap<>(); - private final Map> animationMap = new HashMap<>(); - private final Map videoPlayerMap = new HashMap<>(); - - //renderFog - private final String ATLAS = "net/rptools/maptool/client/maptool.atlas"; - private final String FONT_NORMAL = "normalFont.ttf"; - private final String FONT_DISTANCE = "distanceFont.ttf"; - PixmapPacker packer; - TextureAtlas tokenAtlas; - private boolean flushFog = true; - //from renderToken: - private Area visibleScreenArea; - private Area exposedFogArea; - private PlayerView lastView; - private List itemRenderList = new LinkedList<>(); - // zone specific resources - private Zone zone; - private ZoneRenderer zoneRenderer; - //private MD5Key mapAssetId; - private int offsetX = 0; - private int offsetY = 0; - private float zoom = 1.0f; - private float stateTime = 0f; - private boolean renderZone = false; - // general resources - private PerspectiveCamera cam; - private OrthographicCamera hudCam; - private PolygonSpriteBatch batch; - private boolean initialized = false; - private int width; - private int height; - private BitmapFont normalFont; - private BitmapFont distanceFont; - private float distanceFontScale = 0; - private GlyphLayout glyphLayout = new GlyphLayout(); - private CodeTimer timer = new CodeTimer("GdxRenderer.renderZone"); - private VfxManager vfxManager; - private ChainVfxEffect vfxEffect; - private VfxFrameBuffer backBuffer; - private Integer fogX; - private Integer fogY; - private com.badlogic.gdx.assets.AssetManager manager; - private TextureAtlas atlas; - private NinePatch grayLabel; - private NinePatch blueLabel; - private NinePatch darkGrayLabel; - private Texture onePixel; - private Texture fog; - private Texture background; - private ShapeDrawer drawer; - private final LineTemplateDrawer lineTemplateDrawer = new LineTemplateDrawer(); - private final LineCellTemplateDrawer lineCellTemplateDrawer = new LineCellTemplateDrawer(); - private final RadiusTemplateDrawer radiusTemplateDrawer = new RadiusTemplateDrawer(); - private final BurstTemplateDrawer burstTemplateDrawer = new BurstTemplateDrawer(); - private final ConeTemplateDrawer coneTemplateDrawer = new ConeTemplateDrawer(); - private final BlastTemplateDrawer blastTemplateDrawer = new BlastTemplateDrawer(); - private final RadiusCellTemplateDrawer radiusCellTemplateDrawer = new RadiusCellTemplateDrawer(); - private final ShapeDrawableDrawer shapeDrawableDrawer = new ShapeDrawableDrawer(); - - //temorary objects. Stored here to avoid garbage collection; - private Vector3 tmpWorldCoord = new Vector3(); - private Vector3 tmpScreenCoord = new Vector3(); - private Color tmpColor = new Color(); - private float[] floatsFromArea = new float[6]; - private FloatArray tmpFloat = new FloatArray(); - private FloatArray tmpFloat1 = new FloatArray(); - private Vector2 tmpVector = new Vector2(); - private Vector2 tmpVectorOut = new Vector2(); - private Vector2 tmpVector0 = new Vector2(); - private Vector2 tmpVector1 = new Vector2(); - private Vector2 tmpVector2 = new Vector2(); - private Vector2 tmpVector3 = new Vector2(); - private Matrix4 tmpMatrix = new Matrix4(); - private Area tmpArea = new Area(); - private TiledDrawable tmpTile = new TiledDrawable(); - private float pointsPerBezier = 10f; - private boolean showAstarDebugging = false; - - - // Box2D stuff - // private World world; - // private RayHandler rayHandler; -// private Box2DDebugRenderer debugRenderer; - private Map tokenBodies = new HashMap<>(); - // private VideoPlayer videoPlayer; - - public GdxRenderer() { - MapTool.getEventDispatcher().addListener(this, MapTool.ZoneEvent.Activated); - Box2D.init(); +public class GdxRenderer extends ApplicationAdapter + implements AppEventListener, ModelChangeListener, AssetAvailableListener { + + private static final Logger log = LogManager.getLogger(GdxRenderer.class); + + private static GdxRenderer _instance; + // private final Map sprites = new HashMap<>(); + private final Map fetchedSprites = new HashMap<>(); + private final Map isoSprites = new HashMap<>(); + private final Map fetchedRegions = new HashMap<>(); + private final Map bigSprites = new HashMap<>(); + private final Map> animationMap = new HashMap<>(); + private final Map videoPlayerMap = new HashMap<>(); + + // renderFog + private final String ATLAS = "net/rptools/maptool/client/maptool.atlas"; + private final String FONT_NORMAL = "normalFont.ttf"; + private final String FONT_DISTANCE = "distanceFont.ttf"; + PixmapPacker packer; + TextureAtlas tokenAtlas; + private boolean flushFog = true; + // from renderToken: + private Area visibleScreenArea; + private Area exposedFogArea; + private PlayerView lastView; + private List itemRenderList = new LinkedList<>(); + // zone specific resources + private Zone zone; + private ZoneRenderer zoneRenderer; + // private MD5Key mapAssetId; + private int offsetX = 0; + private int offsetY = 0; + private float zoom = 1.0f; + private float stateTime = 0f; + private boolean renderZone = false; + // general resources + private PerspectiveCamera cam; + private OrthographicCamera hudCam; + private PolygonSpriteBatch batch; + private boolean initialized = false; + private int width; + private int height; + private BitmapFont normalFont; + private BitmapFont distanceFont; + private float distanceFontScale = 0; + private GlyphLayout glyphLayout = new GlyphLayout(); + private CodeTimer timer = new CodeTimer("GdxRenderer.renderZone"); + private VfxManager vfxManager; + private ChainVfxEffect vfxEffect; + private VfxFrameBuffer backBuffer; + private Integer fogX; + private Integer fogY; + private com.badlogic.gdx.assets.AssetManager manager; + private TextureAtlas atlas; + private NinePatch grayLabel; + private NinePatch blueLabel; + private NinePatch darkGrayLabel; + private Texture onePixel; + private Texture fog; + private Texture background; + private ShapeDrawer drawer; + private final LineTemplateDrawer lineTemplateDrawer = new LineTemplateDrawer(); + private final LineCellTemplateDrawer lineCellTemplateDrawer = new LineCellTemplateDrawer(); + private final RadiusTemplateDrawer radiusTemplateDrawer = new RadiusTemplateDrawer(); + private final BurstTemplateDrawer burstTemplateDrawer = new BurstTemplateDrawer(); + private final ConeTemplateDrawer coneTemplateDrawer = new ConeTemplateDrawer(); + private final BlastTemplateDrawer blastTemplateDrawer = new BlastTemplateDrawer(); + private final RadiusCellTemplateDrawer radiusCellTemplateDrawer = new RadiusCellTemplateDrawer(); + private final ShapeDrawableDrawer shapeDrawableDrawer = new ShapeDrawableDrawer(); + + // temorary objects. Stored here to avoid garbage collection; + private Vector3 tmpWorldCoord = new Vector3(); + private Vector3 tmpScreenCoord = new Vector3(); + private Color tmpColor = new Color(); + private float[] floatsFromArea = new float[6]; + private FloatArray tmpFloat = new FloatArray(); + private FloatArray tmpFloat1 = new FloatArray(); + private Vector2 tmpVector = new Vector2(); + private Vector2 tmpVectorOut = new Vector2(); + private Vector2 tmpVector0 = new Vector2(); + private Vector2 tmpVector1 = new Vector2(); + private Vector2 tmpVector2 = new Vector2(); + private Vector2 tmpVector3 = new Vector2(); + private Matrix4 tmpMatrix = new Matrix4(); + private Area tmpArea = new Area(); + private TiledDrawable tmpTile = new TiledDrawable(); + private float pointsPerBezier = 10f; + private boolean showAstarDebugging = false; + + // Box2D stuff + // private World world; + // private RayHandler rayHandler; + // private Box2DDebugRenderer debugRenderer; + private Map tokenBodies = new HashMap<>(); + // private VideoPlayer videoPlayer; + + public GdxRenderer() { + MapTool.getEventDispatcher().addListener(this, MapTool.ZoneEvent.Activated); + Box2D.init(); + } + + public static GdxRenderer getInstance() { + if (_instance == null) _instance = new GdxRenderer(); + return _instance; + } + + @Override + public void create() { + // with jogl create is called every time we change the parent frame of the GLJPanel + // e.g. change from fullcreen to window or the other way around. Reinit everthing in this case. + if (initialized) { + initialized = false; + dispose(); + + atlas = null; + blueLabel = null; + grayLabel = null; + darkGrayLabel = null; + normalFont = null; + distanceFont = null; + fetchedSprites.clear(); + isoSprites.clear(); + fetchedRegions.clear(); + bigSprites.clear(); + animationMap.clear(); } - public static GdxRenderer getInstance() { - if (_instance == null) - _instance = new GdxRenderer(); - return _instance; - } + // videoPlayer = VideoPlayerCreator.createVideoPlayer(); + tokenAtlas = new TextureAtlas(); + manager = new com.badlogic.gdx.assets.AssetManager(); + packer = createPacker(); + + // debugRenderer = new Box2DDebugRenderer(); + var resolver = new InternalFileHandleResolver(); + manager.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver)); + manager.setLoader(BitmapFont.class, ".ttf", new FreetypeFontLoader(resolver)); + + width = Gdx.graphics.getWidth(); + height = Gdx.graphics.getHeight(); + + cam = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + cam.lookAt(0, 0, 0); + + // cam.setToOrtho(false); + + hudCam = new OrthographicCamera(); + hudCam.setToOrtho(false); + + updateCam(); + + batch = new PolygonSpriteBatch(); + + backBuffer = new VfxFrameBuffer(Pixmap.Format.RGBA8888); + backBuffer.initialize(width, height); + + // TODO: Add it to the texture atlas + Pixmap pixmap = new Pixmap(1, 1, Pixmap.Format.RGBA8888); + pixmap.setColor(Color.WHITE); + pixmap.drawPixel(0, 0); + onePixel = new Texture(pixmap); + pixmap.dispose(); + TextureRegion region = new TextureRegion(onePixel, 0, 0, 1, 1); + drawer = new ShapeDrawer(batch, region); + + vfxManager = new VfxManager(Pixmap.Format.RGBA8888); + // vfxEffect = new FxaaEffect(); + // vfxManager.addEffect(vfxEffect); + + backBuffer.addRenderer(new VfxFrameBuffer.BatchRendererAdapter(batch)); + initialized = true; + + loadAssets(); + initializeZoneResources(zone); + } + + @Override + public void dispose() { + manager.dispose(); + batch.dispose(); + vfxManager.dispose(); + if (vfxEffect != null) vfxEffect.dispose(); + disposeZoneResources(); + disposeZoneTextures(); + onePixel.dispose(); + packer.updateTextureAtlas( + atlas, Texture.TextureFilter.Linear, Texture.TextureFilter.Linear, false); + packer.dispose(); + tokenAtlas.dispose(); + } + + @Override + public void resize(int width, int height) { + this.width = width; + this.height = height; + vfxManager.resize(width, height); + backBuffer.initialize(width, height); + + updateCam(); + } + + private void updateCam() { + cam.viewportWidth = width; + cam.viewportHeight = height; + cam.near = 0.1f; + ; + cam.position.x = zoom * (width / 2f + offsetX); + cam.position.y = zoom * (height / 2f * -1 + offsetY); + cam.position.z = + (zoom * height) / (2f * (float) Math.tan(Math.toRadians(cam.fieldOfView / 2f))); + cam.far = cam.position.z + 0.1f; + + // cam.zoom = zoom; + cam.update(); + + hudCam.viewportWidth = width; + hudCam.viewportHeight = height; + hudCam.position.x = width / 2f; + hudCam.position.y = height / 2f; + hudCam.update(); + } + + private boolean videostarted = false; + + @Override + public void render() { + var delta = Gdx.graphics.getDeltaTime(); + var audio = Gdx.audio; + stateTime += delta; + manager.finishLoading(); + packer.updateTextureAtlas( + tokenAtlas, Texture.TextureFilter.Linear, Texture.TextureFilter.Linear, false); + + if (atlas == null) atlas = manager.get(ATLAS, TextureAtlas.class); + + if (blueLabel == null) blueLabel = atlas.createPatch("blueLabelbox"); + + if (grayLabel == null) grayLabel = atlas.createPatch("grayLabelbox"); + + if (darkGrayLabel == null) darkGrayLabel = atlas.createPatch("darkGreyLabelbox"); + + if (normalFont == null) normalFont = manager.get(FONT_NORMAL, BitmapFont.class); + /* + if(!videoPlayer.isPlaying()) + try { + videoPlayer.play(Gdx.files.internal("big-buck-bunny_trailer.webm")); + videostarted = true; + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + */ + ensureCorrectDistanceFont(); + + // vfxManager.cleanUpBuffers(); + // vfxManager.beginInputCapture(); + ScreenUtils.clear(Color.BLACK); + doRendering(); + // rayHandler.setCombinedMatrix(cam.combined, cam.position.x, cam.position.y, + // cam.viewportWidth, cam.viewportHeight); + // rayHandler.updateAndRender(); + // debugRenderer.render(world, cam.combined); + // world.step(1/60f, 6, 2); + // vfxManager.endInputCapture(); + // vfxManager.applyEffects(); + // vfxManager.renderToScreen(); + } - @Override - public void create() { - // with jogl create is called every time we change the parent frame of the GLJPanel - // e.g. change from fullcreen to window or the other way around. Reinit everthing in this case. - if(initialized) { - initialized = false; - dispose(); - - atlas = null; - blueLabel = null; - grayLabel = null; - darkGrayLabel = null; - normalFont = null; - distanceFont = null; - fetchedSprites.clear(); - isoSprites.clear(); - fetchedRegions.clear(); - bigSprites.clear(); - animationMap.clear(); - } + @NotNull + private PixmapPacker createPacker() { + return new PixmapPacker(2048, 2048, Pixmap.Format.RGBA8888, 2, false); + } - //videoPlayer = VideoPlayerCreator.createVideoPlayer(); - tokenAtlas = new TextureAtlas(); - manager = new com.badlogic.gdx.assets.AssetManager(); - packer = createPacker(); + private void ensureCorrectDistanceFont() { + if (zone == null) return; - //debugRenderer = new Box2DDebugRenderer(); - var resolver = new InternalFileHandleResolver(); - manager.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver)); - manager.setLoader(BitmapFont.class, ".ttf", new FreetypeFontLoader(resolver)); + var fontScale = + (float) zone.getGrid().getSize() / 50; // Font size of 12 at grid size 50 is default - width = Gdx.graphics.getWidth(); - height = Gdx.graphics.getHeight(); + if (fontScale == this.distanceFontScale && distanceFont != null) return; - cam = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); - cam.lookAt(0,0,0); + if (distanceFont != null) manager.unload(FONT_DISTANCE); - //cam.setToOrtho(false); + var fontParams = new FreetypeFontLoader.FreeTypeFontLoaderParameter(); + fontParams.fontFileName = "net/rptools/maptool/client/fonts/OpenSans-Bold.ttf"; + fontParams.fontParameters.size = (int) (12 * fontScale); + manager.load(FONT_DISTANCE, BitmapFont.class, fontParams); + manager.finishLoading(); + distanceFont = manager.get(FONT_DISTANCE, BitmapFont.class); + distanceFontScale = fontScale; + } - hudCam = new OrthographicCamera(); - hudCam.setToOrtho(false); + private void loadAssets() { + manager.load(ATLAS, TextureAtlas.class); - updateCam(); + var mySmallFont = new FreetypeFontLoader.FreeTypeFontLoaderParameter(); + mySmallFont.fontFileName = "net/rptools/maptool/client/fonts/OpenSans-Regular.ttf"; + mySmallFont.fontParameters.size = 12; + manager.load(FONT_NORMAL, BitmapFont.class, mySmallFont); + } - batch = new PolygonSpriteBatch(); + private void doRendering() { + batch.enableBlending(); + batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); - backBuffer = new VfxFrameBuffer(Pixmap.Format.RGBA8888); - backBuffer.initialize(width, height); + // this happens sometimes when starting with ide (non-debug) + if (batch.isDrawing()) batch.end(); + batch.begin(); - //TODO: Add it to the texture atlas - Pixmap pixmap = new Pixmap(1, 1, Pixmap.Format.RGBA8888); - pixmap.setColor(Color.WHITE); - pixmap.drawPixel(0, 0); - onePixel = new Texture(pixmap); - pixmap.dispose(); - TextureRegion region = new TextureRegion(onePixel, 0, 0, 1, 1); - drawer = new ShapeDrawer(batch, region); + if (zone == null || !renderZone) return; - vfxManager = new VfxManager(Pixmap.Format.RGBA8888); - //vfxEffect = new FxaaEffect(); - //vfxManager.addEffect(vfxEffect); + initializeTimer(); + if (zoneRenderer == null) return; - backBuffer.addRenderer(new VfxFrameBuffer.BatchRendererAdapter(batch)); - initialized = true; + setScale(zoneRenderer.getZoneScale()); - loadAssets(); - initializeZoneResources(zone); - } + timer.start("paintComponent:createView"); + PlayerView playerView = zoneRenderer.getPlayerView(); + timer.stop("paintComponent:createView"); - @Override - public void dispose() { - manager.dispose(); - batch.dispose(); - vfxManager.dispose(); - if(vfxEffect != null) - vfxEffect.dispose(); - disposeZoneResources(); - disposeZoneTextures(); - onePixel.dispose(); - packer.updateTextureAtlas(atlas, Texture.TextureFilter.Linear, Texture.TextureFilter.Linear, false); - packer.dispose(); - tokenAtlas.dispose(); - } + setProjectionMatrix(cam.combined); - @Override - public void resize(int width, int height) { - this.width = width; - this.height = height; - vfxManager.resize(width, height); - backBuffer.initialize(width, height); + renderZone(playerView); + setProjectionMatrix(hudCam.combined); - updateCam(); + if (zoneRenderer.isLoading()) + drawBoxedString(zoneRenderer.getLoadingProgress(), width / 2f, height / 2f); + else if (MapTool.getCampaign().isBeingSerialized()) + drawBoxedString(" Please Wait ", width / 2f, height / 2f); + int noteVPos = 20; + if (!zone.isVisible() && playerView.isGMView()) { + drawBoxedString("Map not visible to players", width / 2f, height - noteVPos); + noteVPos += 20; } - - private void updateCam() { - cam.viewportWidth = width; - cam.viewportHeight = height; - cam.near = 0.1f;; - cam.position.x = zoom * (width / 2f + offsetX); - cam.position.y = zoom * (height / 2f * -1 + offsetY); - cam.position.z = (zoom * height) / (2f * (float)Math.tan(Math.toRadians(cam.fieldOfView/2f))); - cam.far = cam.position.z + 0.1f; - - - //cam.zoom = zoom; - cam.update(); - - hudCam.viewportWidth = width; - hudCam.viewportHeight = height; - hudCam.position.x = width / 2f; - hudCam.position.y = height / 2f; - hudCam.update(); + if (AppState.isShowAsPlayer()) { + drawBoxedString("Player View", width / 2, height - noteVPos); } - private boolean videostarted = false; + drawString(String.valueOf(Gdx.graphics.getFramesPerSecond()), 10, 10); + drawString(String.valueOf(batch.renderCalls), width - 10, 10); + + // videoPlayer.update(); + // var frame = videoPlayer.getTexture(); + // if (frame != null) batch.draw(frame, 20, 20, 100, 100); + batch.end(); + collectTimerResults(); + } + + private void collectTimerResults() { + if (timer.isEnabled()) { + String results = timer.toString(); + MapTool.getProfilingNoteFrame().addText(results); + if (log.isDebugEnabled()) { + log.debug(results); + } + timer.clear(); + } + } - @Override - public void render() { - var delta = Gdx.graphics.getDeltaTime(); - var audio = Gdx.audio; - stateTime += delta; - manager.finishLoading(); - packer.updateTextureAtlas(tokenAtlas, Texture.TextureFilter.Linear, Texture.TextureFilter.Linear, false); + private void initializeTimer() { + timer.setEnabled(AppState.isCollectProfilingData() || log.isDebugEnabled()); + timer.clear(); + timer.setThreshold(10); + } - if (atlas == null) - atlas = manager.get(ATLAS, TextureAtlas.class); + public void invalidateCurrentViewCache() { + flushFog = true; - if (blueLabel == null) - blueLabel = atlas.createPatch("blueLabelbox"); + updateVisibleArea(); + lastView = null; - if (grayLabel == null) - grayLabel = atlas.createPatch("grayLabelbox"); + var zoneView = zoneRenderer.getZoneView(); + if (zoneView != null) { + zoneView.flush(); + } + } - if (darkGrayLabel == null) - darkGrayLabel = atlas.createPatch("darkGreyLabelbox"); + private void renderZone(PlayerView view) { + if (zoneRenderer.isLoading() || MapTool.getCampaign().isBeingSerialized()) return; - if (normalFont == null) - normalFont = manager.get(FONT_NORMAL, BitmapFont.class); -/* - if(!videoPlayer.isPlaying()) - try { - videoPlayer.play(Gdx.files.internal("big-buck-bunny_trailer.webm")); - videostarted = true; - } catch (FileNotFoundException e) { - e.printStackTrace(); - } -*/ - ensureCorrectDistanceFont(); - - // vfxManager.cleanUpBuffers(); - // vfxManager.beginInputCapture(); - ScreenUtils.clear(Color.BLACK); - doRendering(); - // rayHandler.setCombinedMatrix(cam.combined, cam.position.x, cam.position.y, cam.viewportWidth, cam.viewportHeight); - // rayHandler.updateAndRender(); - // debugRenderer.render(world, cam.combined); - // world.step(1/60f, 6, 2); - // vfxManager.endInputCapture(); - // vfxManager.applyEffects(); - // vfxManager.renderToScreen(); + if (lastView != null && !lastView.equals(view)) { + invalidateCurrentViewCache(); } + lastView = view; + itemRenderList.clear(); - @NotNull - private PixmapPacker createPacker() { - return new PixmapPacker(2048, 2048, Pixmap.Format.RGBA8888, 2, false); - } + // Calculations + timer.start("calcs-1"); + updateVisibleArea(); - private void ensureCorrectDistanceFont() { - if (zone == null) - return; + timer.stop("calcs-1"); + timer.start("calcs-2"); + exposedFogArea = new Area(zone.getExposedArea()); + timer.stop("calcs-2"); - var fontScale = (float) zone.getGrid().getSize() / 50; // Font size of 12 at grid size 50 is default + renderBoard(); - if (fontScale == this.distanceFontScale && distanceFont != null) - return; + if (Zone.Layer.BACKGROUND.isEnabled()) { + List drawables = zone.getBackgroundDrawnElements(); - if (distanceFont != null) - manager.unload(FONT_DISTANCE); + timer.start("drawableBackground"); + renderDrawableOverlay(view, drawables); + timer.stop("drawableBackground"); - var fontParams = new FreetypeFontLoader.FreeTypeFontLoaderParameter(); - fontParams.fontFileName = "net/rptools/maptool/client/fonts/OpenSans-Bold.ttf"; - fontParams.fontParameters.size = (int) (12 * fontScale); - manager.load(FONT_DISTANCE, BitmapFont.class, fontParams); - manager.finishLoading(); - distanceFont = manager.get(FONT_DISTANCE, BitmapFont.class); - distanceFontScale = fontScale; + List background = zone.getBackgroundStamps(false); + if (!background.isEmpty()) { + timer.start("tokensBackground"); + renderTokens(background, view, false); + timer.stop("tokensBackground"); + } } - - - private void loadAssets() { - manager.load(ATLAS, TextureAtlas.class); - - var mySmallFont = new FreetypeFontLoader.FreeTypeFontLoaderParameter(); - mySmallFont.fontFileName = "net/rptools/maptool/client/fonts/OpenSans-Regular.ttf"; - mySmallFont.fontParameters.size = 12; - manager.load(FONT_NORMAL, BitmapFont.class, mySmallFont); + if (Zone.Layer.OBJECT.isEnabled()) { + // Drawables on the object layer are always below the grid, and... + List drawables = zone.getObjectDrawnElements(); + // if (!drawables.isEmpty()) { + timer.start("drawableObjects"); + renderDrawableOverlay(view, drawables); + timer.stop("drawableObjects"); + // } } + timer.start("grid"); - private void doRendering() { - batch.enableBlending(); - batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + renderGrid(view); - //this happens sometimes when starting with ide (non-debug) - if (batch.isDrawing()) - batch.end(); - batch.begin(); + timer.stop("grid"); - if (zone == null || !renderZone) - return; - - initializeTimer(); - if (zoneRenderer == null) - return; + if (Zone.Layer.OBJECT.isEnabled()) { + // ... Images on the object layer are always ABOVE the grid. + List stamps = zone.getStampTokens(false); + if (!stamps.isEmpty()) { + timer.start("tokensStamp"); + renderTokens(stamps, view, false); + timer.stop("tokensStamp"); + } + } + if (Zone.Layer.TOKEN.isEnabled()) { + timer.start("lights"); + renderLights(view); + timer.stop("lights"); + + timer.start("auras"); + renderAuras(view); + timer.stop("auras"); + } - setScale(zoneRenderer.getZoneScale()); + /* + * The following sections used to handle rendering of the Hidden (i.e. "GM") layer followed by + * the Token layer. The problem was that we want all drawables to appear below all tokens, and + * the old configuration performed the rendering in the following order: + * + *

      + *
    1. Render Hidden-layer tokens + *
    2. Render Hidden-layer drawables + *
    3. Render Token-layer drawables + *
    4. Render Token-layer tokens + *
    + * + * That's fine for players, but clearly wrong if the view is for the GM. We now use: + * + *
      + *
    1. Render Token-layer drawables // Player-drawn images shouldn't obscure GM's images? + *
    2. Render Hidden-layer drawables // GM could always use "View As Player" if needed? + *
    3. Render Hidden-layer tokens + *
    4. Render Token-layer tokens + *
    + */ + if (Zone.Layer.TOKEN.isEnabled()) { + List drawables = zone.getDrawnElements(); + // if (!drawables.isEmpty()) { + timer.start("drawableTokens"); + renderDrawableOverlay(view, drawables); + timer.stop("drawableTokens"); + // } + + if (view.isGMView() && Zone.Layer.GM.isEnabled()) { + drawables = zone.getGMDrawnElements(); + // if (!drawables.isEmpty()) { + timer.start("drawableGM"); + renderDrawableOverlay(view, drawables); + timer.stop("drawableGM"); + // } + List stamps = zone.getGMStamps(false); + if (!stamps.isEmpty()) { + timer.start("tokensGM"); + renderTokens(stamps, view, false); + timer.stop("tokensGM"); + } + } + List tokens = zone.getTokens(false); + if (!tokens.isEmpty()) { + timer.start("tokens"); + renderTokens(tokens, view, false); + timer.stop("tokens"); + } + timer.start("unowned movement"); + showBlockedMoves(view, zoneRenderer.getUnOwnedMovementSet(view)); + timer.stop("unowned movement"); + } - timer.start("paintComponent:createView"); - PlayerView playerView = zoneRenderer.getPlayerView(); - timer.stop("paintComponent:createView"); + /* + * FJE It's probably not appropriate for labels to be above everything, including tokens. Above + * drawables, yes. Above tokens, no. (Although in that case labels could be completely obscured. + * Hm.) + */ + // Drawing labels is slooooow. :( + // Perhaps we should draw the fog first and use hard fog to determine whether labels need to be + // drawn? + // (This method has it's own 'timer' calls) + if (AppState.getShowTextLabels()) { + renderLabels(view); + } - setProjectionMatrix(cam.combined); + // (This method has it's own 'timer' calls) + if (zone.hasFog()) { + renderFog(view); + } - renderZone(playerView); + if (Zone.Layer.TOKEN.isEnabled()) { + // Jamz: If there is fog or vision we may need to re-render vision-blocking type tokens + // For example. this allows a "door" stamp to block vision but still allow you to see the + // door. + List vblTokens = zone.getTokensAlwaysVisible(); + if (!vblTokens.isEmpty()) { + timer.start("tokens - always visible"); + renderTokens(vblTokens, view, true); + timer.stop("tokens - always visible"); + } + + // if there is fog or vision we may need to re-render figure type tokens + // and figure tokens need sorting via alternative logic. + List tokens = zone.getFigureTokens(); + List sortedTokens = new ArrayList<>(tokens); + sortedTokens.sort(zone.getFigureZOrderComparator()); + if (!tokens.isEmpty()) { + timer.start("tokens - figures"); + renderTokens(sortedTokens, view, true); + timer.stop("tokens - figures"); + } + + timer.start("owned movement"); + showBlockedMoves(view, zoneRenderer.getOwnedMovementSet(view)); + timer.stop("owned movement"); + + // Text associated with tokens being moved is added to a list to be drawn after, i.e. on top + // of, the tokens + // themselves. + // So if one moving token is on top of another moving token, at least the textual identifiers + // will be + // visible. + + setProjectionMatrix(hudCam.combined); + timer.start("token name/labels"); + renderRenderables(); + timer.stop("token name/labels"); + setProjectionMatrix(cam.combined); + } + // if (zone.visionType ...) + if (view.isGMView()) { + timer.start("visionOverlayGM"); + renderGMVisionOverlay(view); + timer.stop("visionOverlayGM"); + } else { + timer.start("visionOverlayPlayer"); + renderPlayerVisionOverlay(view); + timer.stop("visionOverlayPlayer"); + } + } + + private void updateVisibleArea() { + // if (zoneRenderer.getZoneView().isUsingVision()) { + timer.start("ZoneRenderer-getVisibleArea"); + visibleScreenArea = zoneRenderer.getZoneView().getVisibleArea(zoneRenderer.getPlayerView()); + timer.stop("ZoneRenderer-getVisibleArea"); + // } + } + + private void renderPlayerVisionOverlay(PlayerView view) { + /* // This doesn't seem to have any effect ?? + if (zone.hasFog()) { + Area clip = new Area(new Rectangle(getSize().width, getSize().height)); + + Area viewArea = new Area(exposedFogArea); + List tokens = view.getTokens(); + if (tokens != null && !tokens.isEmpty()) { + for (Token tok : tokens) { + ExposedAreaMetaData exposedMeta = zone.getExposedAreaMetaData(tok.getExposedAreaGUID()); + viewArea.add(exposedMeta.getExposedAreaHistory()); + } + } + if (!viewArea.isEmpty()) { + clip.intersect(new Area(viewArea.getBounds2D())); + } + // Note: the viewArea doesn't need to be transform()'d because exposedFogArea has been + // already. + g2.setClip(clip); + }*/ + renderVisionOverlay(view); + } + + private void renderGMVisionOverlay(PlayerView view) { + renderVisionOverlay(view); + } + + private void renderVisionOverlay(PlayerView view) { + var tokenUnderMouse = zoneRenderer.getTokenUnderMouse(); + Area currentTokenVisionArea = zoneRenderer.getVisibleArea(tokenUnderMouse); + if (currentTokenVisionArea == null) { + return; + } + Area combined = new Area(currentTokenVisionArea); + ExposedAreaMetaData meta = zone.getExposedAreaMetaData(tokenUnderMouse.getExposedAreaGUID()); + + Area tmpArea = new Area(meta.getExposedAreaHistory()); + tmpArea.add(zone.getExposedArea()); + if (zone.hasFog()) { + if (tmpArea.isEmpty()) { + return; + } + combined.intersect(tmpArea); + } + boolean isOwner = AppUtil.playerOwns(tokenUnderMouse); + boolean tokenIsPC = tokenUnderMouse.getType() == Token.Type.PC; + boolean strictOwnership = + MapTool.getServerPolicy() != null && MapTool.getServerPolicy().useStrictTokenManagement(); + boolean showVisionAndHalo = isOwner || view.isGMView() || (tokenIsPC && !strictOwnership); + // String player = MapTool.getPlayer().getName(); + // System.err.print("tokenUnderMouse.ownedBy(" + player + "): " + isOwner); + // System.err.print(", tokenIsPC: " + tokenIsPC); + // System.err.print(", isGMView(): " + view.isGMView()); + // System.err.println(", strictOwnership: " + strictOwnership); + + /* + * The vision arc and optional halo-filled visible area shouldn't be shown to everyone. If we are in GM view, or if we are the owner of the token in question, or if the token is a PC and + * strict token ownership is off... then the vision arc should be displayed. + */ + if (showVisionAndHalo) { + drawer.setColor(Color.WHITE); + drawArea(combined); + renderHaloArea(combined); + } + } + + private void renderHaloArea(Area visible) { + var tokenUnderMouse = zoneRenderer.getTokenUnderMouse(); + if (tokenUnderMouse == null) return; + + boolean useHaloColor = + tokenUnderMouse.getHaloColor() != null && AppPreferences.getUseHaloColorOnVisionOverlay(); + if (tokenUnderMouse.getVisionOverlayColor() != null || useHaloColor) { + java.awt.Color visionColor = + useHaloColor ? tokenUnderMouse.getHaloColor() : tokenUnderMouse.getVisionOverlayColor(); + + drawer.setColor( + visionColor.getRed() / 255f, + visionColor.getGreen() / 255f, + visionColor.getBlue() / 255f, + AppPreferences.getHaloOverlayOpacity() / 255f); + fillArea(visible); + } + } - setProjectionMatrix(hudCam.combined); + private void renderRenderables() { + for (ItemRenderer renderer : itemRenderList) { + renderer.render(); + } + } - if (zoneRenderer.isLoading()) - drawBoxedString(zoneRenderer.getLoadingProgress(), width / 2f, height / 2f); - else if (MapTool.getCampaign().isBeingSerialized()) - drawBoxedString(" Please Wait ", width / 2f, height / 2f); + private void renderFog(PlayerView view) { + Area combined = null; - int noteVPos = 20; - if (!zone.isVisible() && playerView.isGMView()) { - drawBoxedString("Map not visible to players", width / 2f, height - noteVPos); - noteVPos += 20; + if (!flushFog + && fogX != null + && fogY != null + && (fogX != zoneRenderer.getViewOffsetX() || fogY != zoneRenderer.getViewOffsetY())) { + flushFog = true; + } + boolean cacheNotValid = + (backBuffer.getTexture().getWidth() != width + || backBuffer.getTexture().getHeight() != height); + timer.start("renderFog"); + // if (flushFog || cacheNotValid) + { + backBuffer.begin(); + ScreenUtils.clear(Color.CLEAR); + batch.setBlendFunction(GL20.GL_ONE, GL20.GL_NONE); + setProjectionMatrix(cam.combined); + + timer.start("renderFog-allocateBufferedImage"); + timer.stop("renderFog-allocateBufferedImage"); + fogX = zoneRenderer.getViewOffsetX(); + fogY = zoneRenderer.getViewOffsetY(); + + timer.start("renderFog-fill"); + + // Fill + batch.setColor(Color.WHITE); + var paint = zone.getFogPaint(); + if (paint instanceof DrawableColorPaint) { + Color.argb8888ToColor(tmpColor, ((DrawableColorPaint) paint).getColor()); + tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, view.isGMView() ? .6f : 1f); + drawer.setColor(tmpColor); + drawer.filledRectangle( + cam.position.x - width * zoom / 2f, + cam.position.y - height * zoom / 2f, + width * zoom, + height * zoom); + } else { + if (fog == null) { + var texturePaint = (DrawableTexturePaint) paint; + var image = texturePaint.getAsset().getImage(); + var pix = new Pixmap(image, 0, image.length); + fog = new Texture(pix); + fog.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat); + pix.dispose(); } - if (AppState.isShowAsPlayer()) { - drawBoxedString("Player View", width / 2, height - noteVPos); + fillViewportWith(fog); + } + + timer.start("renderFog-visibleArea"); + Area visibleArea = zoneRenderer.getZoneView().getVisibleArea(view); + timer.stop("renderFog-visibleArea"); + + String msg = null; + if (timer.isEnabled()) { + List list = view.getTokens(); + msg = "renderFog-combined(" + (list == null ? 0 : list.size()) + ")"; + } + timer.start(msg); + combined = zone.getExposedArea(view); + timer.stop(msg); + + timer.start("renderFogArea"); + Area exposedArea = null; + Area tempArea = new Area(); + boolean combinedView = + !zoneRenderer.getZoneView().isUsingVision() + || MapTool.isPersonalServer() + || !MapTool.getServerPolicy().isUseIndividualFOW() + || view.isGMView(); + + drawer.setColor(Color.CLEAR); + + if (view.getTokens() != null) { + // if there are tokens selected combine the areas, then, if individual FOW is enabled + // we pass the combined exposed area to build the soft FOW and visible area. + for (Token tok : view.getTokens()) { + ExposedAreaMetaData meta = zone.getExposedAreaMetaData(tok.getExposedAreaGUID()); + exposedArea = meta.getExposedAreaHistory(); + tempArea.add(new Area(exposedArea)); } + if (combinedView) { + fillArea(combined); + renderFogArea(combined, visibleArea); + renderFogOutline(); + } else { + // 'combined' already includes the area encompassed by 'tempArea', so just + // use 'combined' instead in this block of code? + tempArea.add(combined); - drawString(String.valueOf(Gdx.graphics.getFramesPerSecond()), 10, 10); - drawString(String.valueOf(batch.renderCalls), width - 10, 10); - - // videoPlayer.update(); - // var frame = videoPlayer.getTexture(); - // if (frame != null) batch.draw(frame, 20, 20, 100, 100); - batch.end(); - collectTimerResults(); - } - - private void collectTimerResults() { - if (timer.isEnabled()) { - String results = timer.toString(); - MapTool.getProfilingNoteFrame().addText(results); - if (log.isDebugEnabled()) { - log.debug(results); + fillArea(tempArea); + renderFogArea(tempArea, visibleArea); + renderFogOutline(); + } + } else { + // No tokens selected, so if we are using Individual FOW, we build up all the owned tokens + // exposed area's to build the soft FOW. + if (combinedView) { + if (combined.isEmpty()) { + combined = zone.getExposedArea(); + } + fillArea(combined); + renderFogArea(combined, visibleArea); + renderFogOutline(); + } else { + Area myCombined = new Area(); + List myToks = zone.getTokens(); + for (Token tok : myToks) { + if (!AppUtil.playerOwns( + tok)) { // Only here if !isGMview() so should the tokens already be in + // PlayerView.getTokens()? + continue; } - timer.clear(); + ExposedAreaMetaData meta = zone.getExposedAreaMetaData(tok.getExposedAreaGUID()); + exposedArea = meta.getExposedAreaHistory(); + myCombined.add(new Area(exposedArea)); + } + fillArea(myCombined); + renderFogArea(myCombined, visibleArea); + renderFogOutline(); } - } + } + timer.stop("renderFogArea"); - private void initializeTimer() { - timer.setEnabled(AppState.isCollectProfilingData() || log.isDebugEnabled()); - timer.clear(); - timer.setThreshold(10); + flushFog = false; + // createScreenShot("fog"); + batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + backBuffer.end(); } - public void invalidateCurrentViewCache() { - flushFog = true; - - updateVisibleArea(); - lastView = null; - - var zoneView = zoneRenderer.getZoneView(); - if (zoneView != null) { - zoneView.flush(); - } - } + setProjectionMatrix(hudCam.combined); + batch.setColor(Color.WHITE); + batch.draw(backBuffer.getTexture(), 0, 0, width, height, 0, 0, width, height, false, true); - private void renderZone(PlayerView view) { - if (zoneRenderer.isLoading() || MapTool.getCampaign().isBeingSerialized()) - return; + setProjectionMatrix(cam.combined); + timer.stop("renderFog"); + } - if (lastView != null && !lastView.equals(view)) { - invalidateCurrentViewCache(); - } - lastView = view; - itemRenderList.clear(); + private void setProjectionMatrix(Matrix4 matrix) { + batch.setProjectionMatrix(matrix); + drawer.update(); + } - // Calculations - timer.start("calcs-1"); - updateVisibleArea(); + private void renderFogArea(Area softFog, Area visibleArea) { + if (zoneRenderer.getZoneView().isUsingVision()) { + if (visibleArea != null && !visibleArea.isEmpty()) { + drawer.setColor(0, 0, 0, AppPreferences.getFogOverlayOpacity() / 255.0f); - timer.stop("calcs-1"); - timer.start("calcs-2"); - exposedFogArea = new Area(zone.getExposedArea()); - timer.stop("calcs-2"); + // Fill in the exposed area + fillArea(softFog); - renderBoard(); + // batch.setColor(Color.CLEAR); + drawer.setColor(Color.CLEAR); - if (Zone.Layer.BACKGROUND.isEnabled()) { - List drawables = zone.getBackgroundDrawnElements(); + fillArea(visibleArea); + } else { + drawer.setColor(0, 0, 0, 80 / 255.0f); + fillArea(softFog); + drawer.setColor(Color.WHITE); + } + } else { + fillArea(softFog); + } + } + + private void renderFogOutline() { + if (visibleScreenArea == null) return; + + drawer.setColor(Color.BLACK); + drawArea(visibleScreenArea); + } + + private void renderLabels(PlayerView view) { + timer.start("labels-1"); + + for (Label label : zone.getLabels()) { + timer.start("labels-1.1"); + Color.argb8888ToColor(tmpColor, label.getForegroundColor().getRGB()); + if (label.isShowBackground()) { + drawBoxedString( + label.getLabel(), + label.getX(), + -label.getY(), + SwingUtilities.CENTER, + grayLabel, + tmpColor); + } else { + drawString(label.getLabel(), label.getX(), -label.getY(), tmpColor); + } + timer.stop("labels-1.1"); + } + timer.stop("labels-1"); + } - timer.start("drawableBackground"); - renderDrawableOverlay(view, drawables); - timer.stop("drawableBackground"); + private void showBlockedMoves(PlayerView view, Set movementSet) { + var selectionSetMap = zoneRenderer.getSelectionSetMap(); + if (selectionSetMap.isEmpty()) { + return; + } - List background = zone.getBackgroundStamps(false); - if (!background.isEmpty()) { - timer.start("tokensBackground"); - renderTokens(background, view, false); - timer.stop("tokensBackground"); - } - } - if (Zone.Layer.OBJECT.isEnabled()) { - // Drawables on the object layer are always below the grid, and... - List drawables = zone.getObjectDrawnElements(); - // if (!drawables.isEmpty()) { - timer.start("drawableObjects"); - renderDrawableOverlay(view, drawables); - timer.stop("drawableObjects"); - // } + boolean clipInstalled = false; + for (ZoneRenderer.SelectionSet set : movementSet) { + Token keyToken = zone.getToken(set.getKeyToken()); + if (keyToken == null) { + // It was removed ? + selectionSetMap.remove(set.getKeyToken()); + continue; + } + // Hide the hidden layer + if (keyToken.getLayer() == Zone.Layer.GM && !view.isGMView()) { + continue; + } + ZoneWalker walker = set.getWalker(); + + for (GUID tokenGUID : set.getTokens()) { + Token token = zone.getToken(tokenGUID); + + // Perhaps deleted? + if (token == null) { + continue; } - timer.start("grid"); - renderGrid(view); - - timer.stop("grid"); - - if (Zone.Layer.OBJECT.isEnabled()) { - // ... Images on the object layer are always ABOVE the grid. - List stamps = zone.getStampTokens(false); - if (!stamps.isEmpty()) { - timer.start("tokensStamp"); - renderTokens(stamps, view, false); - timer.stop("tokensStamp"); - } - } - if (Zone.Layer.TOKEN.isEnabled()) { - timer.start("lights"); - renderLights(view); - timer.stop("lights"); - - timer.start("auras"); - renderAuras(view); - timer.stop("auras"); + // Don't bother if it's not visible + if (!token.isVisible() && !view.isGMView()) { + continue; } - /* - * The following sections used to handle rendering of the Hidden (i.e. "GM") layer followed by - * the Token layer. The problem was that we want all drawables to appear below all tokens, and - * the old configuration performed the rendering in the following order: - * - *
      - *
    1. Render Hidden-layer tokens - *
    2. Render Hidden-layer drawables - *
    3. Render Token-layer drawables - *
    4. Render Token-layer tokens - *
    - * - * That's fine for players, but clearly wrong if the view is for the GM. We now use: - * - *
      - *
    1. Render Token-layer drawables // Player-drawn images shouldn't obscure GM's images? - *
    2. Render Hidden-layer drawables // GM could always use "View As Player" if needed? - *
    3. Render Hidden-layer tokens - *
    4. Render Token-layer tokens - *
    - */ - if (Zone.Layer.TOKEN.isEnabled()) { - List drawables = zone.getDrawnElements(); - // if (!drawables.isEmpty()) { - timer.start("drawableTokens"); - renderDrawableOverlay(view, drawables); - timer.stop("drawableTokens"); - // } - - if (view.isGMView() && Zone.Layer.GM.isEnabled()) { - drawables = zone.getGMDrawnElements(); - // if (!drawables.isEmpty()) { - timer.start("drawableGM"); - renderDrawableOverlay(view, drawables); - timer.stop("drawableGM"); - // } - List stamps = zone.getGMStamps(false); - if (!stamps.isEmpty()) { - timer.start("tokensGM"); - renderTokens(stamps, view, false); - timer.stop("tokensGM"); - } - } - List tokens = zone.getTokens(false); - if (!tokens.isEmpty()) { - timer.start("tokens"); - renderTokens(tokens, view, false); - timer.stop("tokens"); - } - timer.start("unowned movement"); - showBlockedMoves(view, zoneRenderer.getUnOwnedMovementSet(view)); - timer.stop("unowned movement"); + // ... or if it's visible only to the owner and that's not us! + if (token.isVisibleOnlyToOwner() && !AppUtil.playerOwns(token)) { + continue; } - /* - * FJE It's probably not appropriate for labels to be above everything, including tokens. Above - * drawables, yes. Above tokens, no. (Although in that case labels could be completely obscured. - * Hm.) - */ - // Drawing labels is slooooow. :( - // Perhaps we should draw the fog first and use hard fog to determine whether labels need to be - // drawn? - // (This method has it's own 'timer' calls) - if (AppState.getShowTextLabels()) { - renderLabels(view); + // ... or there are no lights/visibleScreen and you are not the owner or gm and there is fow + // or vision + if (!view.isGMView() + && !AppUtil.playerOwns(token) + && visibleScreenArea == null + && zone.hasFog() + && zoneRenderer.getZoneView().isUsingVision()) { + continue; } - // (This method has it's own 'timer' calls) - if (zone.hasFog()) { - renderFog(view); + // ... or if it doesn't have an image to display. (Hm, should still show *something*?) + Asset asset = AssetManager.getAsset(token.getImageAssetId()); + if (asset == null) { + continue; } - if (Zone.Layer.TOKEN.isEnabled()) { - // Jamz: If there is fog or vision we may need to re-render vision-blocking type tokens - // For example. this allows a "door" stamp to block vision but still allow you to see the - // door. - List vblTokens = zone.getTokensAlwaysVisible(); - if (!vblTokens.isEmpty()) { - timer.start("tokens - always visible"); - renderTokens(vblTokens, view, true); - timer.stop("tokens - always visible"); - } + // OPTIMIZE: combine this with the code in renderTokens() + java.awt.Rectangle footprintBounds = token.getBounds(zone); + + // get token image, using image table if present + Sprite image = getSprite(token.getImageAssetId()); + if (image == null) continue; + + // Vision visibility + boolean isOwner = view.isGMView() || AppUtil.playerOwns(token); // || + // set.getPlayerId().equals(MapTool.getPlayer().getName()); + if (!view.isGMView() && visibleScreenArea != null && !isOwner) { + // FJE Um, why not just assign the clipping area at the top of the routine? + // TODO: Path clipping + if (!clipInstalled) { + // Only show the part of the path that is visible + // Area visibleArea = new Area(g.getClipBounds()); + // visibleArea.intersect(visibleScreenArea); + + // g = (Graphics2D) g.create(); + // g.setClip(new GeneralPath(visibleArea)); + + clipInstalled = true; + // System.out.println("Adding Clip: " + MapTool.getPlayer().getName()); + } + } + // Show path only on the key token on token layer that are visible to the owner or gm while + // fow and vision is on + if (token == keyToken && !token.isStamp()) { + renderPath( + walker != null ? walker.getPath() : set.getGridlessPath(), + token.getFootprint(zone.getGrid())); + } - // if there is fog or vision we may need to re-render figure type tokens - // and figure tokens need sorting via alternative logic. - List tokens = zone.getFigureTokens(); - List sortedTokens = new ArrayList<>(tokens); - sortedTokens.sort(zone.getFigureZOrderComparator()); - if (!tokens.isEmpty()) { - timer.start("tokens - figures"); - renderTokens(sortedTokens, view, true); - timer.stop("tokens - figures"); + // Show current Blocked Movement directions for A* + if (walker != null && (log.isDebugEnabled() || showAstarDebugging)) { + Map> blockedMovesByTarget = walker.getBlockedMoves(); + // Color currentColor = g.getColor(); + for (var entry : blockedMovesByTarget.entrySet()) { + var position = entry.getKey(); + var blockedMoves = entry.getValue(); + + for (CellPoint point : blockedMoves) { + ZonePoint zp = point.midZonePoint(zoneRenderer.getZone().getGrid(), position); + double r = (zp.x - 1) * 45; + showBlockedMoves(zp, r, getSprite("block_move"), 1.0f); } - - timer.start("owned movement"); - showBlockedMoves(view, zoneRenderer.getOwnedMovementSet(view)); - timer.stop("owned movement"); - - // Text associated with tokens being moved is added to a list to be drawn after, i.e. on top - // of, the tokens - // themselves. - // So if one moving token is on top of another moving token, at least the textual identifiers - // will be - // visible. - - setProjectionMatrix(hudCam.combined); - timer.start("token name/labels"); - renderRenderables(); - timer.stop("token name/labels"); - setProjectionMatrix(cam.combined); + } } - // if (zone.visionType ...) - if (view.isGMView()) { - timer.start("visionOverlayGM"); - renderGMVisionOverlay(view); - timer.stop("visionOverlayGM"); - } else { - timer.start("visionOverlayPlayer"); - renderPlayerVisionOverlay(view); - timer.stop("visionOverlayPlayer"); - } - } + footprintBounds.x += set.getOffsetX(); + footprintBounds.y += set.getOffsetY(); - private void updateVisibleArea() { - // if (zoneRenderer.getZoneView().isUsingVision()) { - timer.start("ZoneRenderer-getVisibleArea"); - visibleScreenArea = zoneRenderer.getZoneView().getVisibleArea(zoneRenderer.getPlayerView()); - timer.stop("ZoneRenderer-getVisibleArea"); - // } - } + prepareTokenSprite(image, token, footprintBounds); + image.draw(batch); - private void renderPlayerVisionOverlay(PlayerView view) { - /* // This doesn't seem to have any effect ?? - if (zone.hasFog()) { - Area clip = new Area(new Rectangle(getSize().width, getSize().height)); - - Area viewArea = new Area(exposedFogArea); - List tokens = view.getTokens(); - if (tokens != null && !tokens.isEmpty()) { - for (Token tok : tokens) { - ExposedAreaMetaData exposedMeta = zone.getExposedAreaMetaData(tok.getExposedAreaGUID()); - viewArea.add(exposedMeta.getExposedAreaHistory()); + // Other details + if (token == keyToken) { + var x = footprintBounds.x; + var y = footprintBounds.y; + var w = footprintBounds.width; + var h = footprintBounds.height; + + Grid grid = zone.getGrid(); + boolean checkForFog = + MapTool.getServerPolicy().isUseIndividualFOW() + && zoneRenderer.getZoneView().isUsingVision(); + boolean showLabels = isOwner; + if (checkForFog) { + Path path = + set.getWalker() != null ? set.getWalker().getPath() : set.getGridlessPath(); + List thePoints = path.getCellPath(); + + // now that we have the last point, we can check to see if it's gridless or not. If not + // gridless, get the last point the token was at and see if the token's footprint is + // inside + // the visible area to show the label. + + if (thePoints.isEmpty()) { + showLabels = false; + } else { + AbstractPoint lastPoint = thePoints.get(thePoints.size() - 1); + + java.awt.Rectangle tokenRectangle = null; + if (lastPoint instanceof CellPoint) { + tokenRectangle = token.getFootprint(grid).getBounds(grid, (CellPoint) lastPoint); + } else { + java.awt.Rectangle tokBounds = token.getBounds(zone); + tokenRectangle = new java.awt.Rectangle(); + tokenRectangle.setBounds( + lastPoint.x, + lastPoint.y, + (int) tokBounds.getWidth(), + (int) tokBounds.getHeight()); + } + showLabels = + showLabels + || zoneRenderer.getZoneView().getVisibleArea(view).intersects(tokenRectangle); + } + } else { + boolean hasFog = zone.hasFog(); + boolean fogIntersects = exposedFogArea.intersects(footprintBounds); + showLabels = showLabels || (visibleScreenArea == null && !hasFog); // no vision - fog + showLabels = + showLabels + || (visibleScreenArea == null && hasFog && fogIntersects); // no vision + fog + showLabels = + showLabels + || (visibleScreenArea != null + && visibleScreenArea.intersects(footprintBounds) + && fogIntersects); // vision + } + if (showLabels) { + + y += 10 + h; + x += w / 2; + + if (!token.isStamp() && AppState.getShowMovementMeasurements()) { + String distance = ""; + if (walker != null) { // This wouldn't be true unless token.isSnapToGrid() && + // grid.isPathingSupported() + double distanceTraveled = walker.getDistance(); + if (distanceTraveled >= 0) { + distance = NumberFormat.getInstance().format(distanceTraveled); + } + } else { + double c = 0; + ZonePoint lastPoint = null; + for (ZonePoint zp : set.getGridlessPath().getCellPath()) { + if (lastPoint == null) { + lastPoint = zp; + continue; + } + int a = lastPoint.x - zp.x; + int b = lastPoint.y - zp.y; + c += Math.hypot(a, b); + lastPoint = zp; } + c /= zone.getGrid().getSize(); // Number of "cells" + c *= zone.getUnitsPerCell(); // "actual" distance traveled + distance = NumberFormat.getInstance().format(c); + } + if (!distance.isEmpty()) { + itemRenderList.add(new LabelRenderer(distance, x, -y)); + y += 20; + } } - if (!viewArea.isEmpty()) { - clip.intersect(new Area(viewArea.getBounds2D())); + if (set.getPlayerId() != null && set.getPlayerId().length() >= 1) { + itemRenderList.add(new LabelRenderer(set.getPlayerId(), x, -y)); } - // Note: the viewArea doesn't need to be transform()'d because exposedFogArea has been - // already. - g2.setClip(clip); - }*/ - renderVisionOverlay(view); + } // showLabels + } // token == keyToken + } } - - private void renderGMVisionOverlay(PlayerView view) { - renderVisionOverlay(view); + } + + private void showBlockedMoves(ZonePoint zp, double angle, Sprite image, float size) { + // Resize image to size of 1/4 size of grid + var resizeWidth = (float) zone.getGrid().getCellWidth() / image.getWidth() * .25f; + var resizeHeight = (float) zone.getGrid().getCellHeight() / image.getHeight() * .25f; + + var w = image.getWidth() * resizeWidth * size; + var h = image.getHeight() * resizeHeight * size; + + image.setSize(w, h); + image.setPosition(zp.x - w / 2f, -(zp.y - h / 2f)); + image.draw(batch); + } + + private void renderAuras(PlayerView view) { + var alpha = AppPreferences.getAuraOverlayOpacity() / 255.0f; + + timer.start("auras-4"); + + for (DrawableLight light : zoneRenderer.getZoneView().getLights(LightSource.Type.AURA)) { + var paint = light.getPaint(); + if (paint != null && paint instanceof DrawableColorPaint) { + var colorPaint = (DrawableColorPaint) paint; + Color.argb8888ToColor(tmpColor, colorPaint.getColor()); + tmpColor.a = alpha; + } else { + tmpColor.set(1, 1, 1, 0.59f); + } + drawer.setColor(tmpColor); + fillArea(light.getArea()); } - private void renderVisionOverlay(PlayerView view) { - var tokenUnderMouse = zoneRenderer.getTokenUnderMouse(); - Area currentTokenVisionArea = zoneRenderer.getVisibleArea(tokenUnderMouse); - if (currentTokenVisionArea == null) { - return; - } - Area combined = new Area(currentTokenVisionArea); - ExposedAreaMetaData meta = zone.getExposedAreaMetaData(tokenUnderMouse.getExposedAreaGUID()); + timer.stop("auras-4"); + } - Area tmpArea = new Area(meta.getExposedAreaHistory()); - tmpArea.add(zone.getExposedArea()); - if (zone.hasFog()) { - if (tmpArea.isEmpty()) { - return; - } - combined.intersect(tmpArea); - } - boolean isOwner = AppUtil.playerOwns(tokenUnderMouse); - boolean tokenIsPC = tokenUnderMouse.getType() == Token.Type.PC; - boolean strictOwnership = - MapTool.getServerPolicy() != null && MapTool.getServerPolicy().useStrictTokenManagement(); - boolean showVisionAndHalo = isOwner || view.isGMView() || (tokenIsPC && !strictOwnership); - // String player = MapTool.getPlayer().getName(); - // System.err.print("tokenUnderMouse.ownedBy(" + player + "): " + isOwner); - // System.err.print(", tokenIsPC: " + tokenIsPC); - // System.err.print(", isGMView(): " + view.isGMView()); - // System.err.println(", strictOwnership: " + strictOwnership); - - /* - * The vision arc and optional halo-filled visible area shouldn't be shown to everyone. If we are in GM view, or if we are the owner of the token in question, or if the token is a PC and - * strict token ownership is off... then the vision arc should be displayed. - */ - if (showVisionAndHalo) { - drawer.setColor(Color.WHITE); - drawArea(combined); - renderHaloArea(combined); - } - } + private void renderLights(PlayerView view) { + if (zone.getVisionType() != Zone.VisionType.NIGHT) return; - private void renderHaloArea(Area visible) { - var tokenUnderMouse = zoneRenderer.getTokenUnderMouse(); - if (tokenUnderMouse == null) - return; + backBuffer.begin(); + ScreenUtils.clear(Color.CLEAR); + setProjectionMatrix(cam.combined); + batch.setBlendFunction(GL20.GL_ONE, GL20.GL_NONE); + drawer.update(); - boolean useHaloColor = - tokenUnderMouse.getHaloColor() != null && AppPreferences.getUseHaloColorOnVisionOverlay(); - if (tokenUnderMouse.getVisionOverlayColor() != null || useHaloColor) { - java.awt.Color visionColor = - useHaloColor ? tokenUnderMouse.getHaloColor() : tokenUnderMouse.getVisionOverlayColor(); + timer.start("lights-2"); + var alpha = AppPreferences.getLightOverlayOpacity() / 255.0f; + timer.stop("lights-2"); - drawer.setColor(visionColor.getRed() / 255f, visionColor.getGreen() / 255f, - visionColor.getBlue() / 255f, AppPreferences.getHaloOverlayOpacity() / 255f); - fillArea(visible); - } + timer.start("lights-3"); + for (DrawableLight light : zoneRenderer.getZoneView().getDrawableLights(view)) { + var drawablePaint = light.getPaint(); + + if (light.getType() != LightSource.Type.NORMAL || drawablePaint == null) continue; + + var paint = drawablePaint.getPaint(); + + if (paint instanceof DrawableColorPaint) { + var colorPaint = (DrawableColorPaint) paint; + Color.argb8888ToColor(tmpColor, colorPaint.getColor()); + + } else if (paint instanceof java.awt.Color) { + Color.argb8888ToColor(tmpColor, ((java.awt.Color) paint).getRGB()); + } else { + System.out.println("unexpected color type"); + continue; + } + tmpColor.a = alpha; + drawer.setColor(tmpColor); + fillArea(light.getArea()); } + timer.stop("lights-3"); - private void renderRenderables() { - for (ItemRenderer renderer : itemRenderList) { - renderer.render(); - } + // clear the bright areas + timer.start("lights-4"); + for (Area brightArea : zoneRenderer.getZoneView().getBrightLights(view)) { + drawer.setColor(Color.CLEAR); + fillArea(brightArea); } + timer.stop("lights-4"); + // createScreenShot("light"); + batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + backBuffer.end(); - private void renderFog(PlayerView view) { - Area combined = null; + setProjectionMatrix(hudCam.combined); + batch.draw(backBuffer.getTexture(), 0, 0, width, height, 0, 0, width, height, false, true); - if (!flushFog - && fogX != null - && fogY != null - && (fogX != zoneRenderer.getViewOffsetX() || fogY != zoneRenderer.getViewOffsetY())) { - flushFog = true; - } - boolean cacheNotValid = - (backBuffer.getTexture().getWidth() != width - || backBuffer.getTexture().getHeight() != height); - timer.start("renderFog"); - // if (flushFog || cacheNotValid) - { - backBuffer.begin(); - ScreenUtils.clear(Color.CLEAR); - batch.setBlendFunction(GL20.GL_ONE, GL20.GL_NONE); - setProjectionMatrix(cam.combined); - - timer.start("renderFog-allocateBufferedImage"); - timer.stop("renderFog-allocateBufferedImage"); - fogX = zoneRenderer.getViewOffsetX(); - fogY = zoneRenderer.getViewOffsetY(); - - timer.start("renderFog-fill"); - - - // Fill - batch.setColor(Color.WHITE); - var paint = zone.getFogPaint(); - if(paint instanceof DrawableColorPaint) { - Color.argb8888ToColor(tmpColor, ((DrawableColorPaint)paint).getColor()); - tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, view.isGMView() ? .6f : 1f); - drawer.setColor(tmpColor); - drawer.filledRectangle(cam.position.x - width * zoom / 2f, cam.position.y - height * zoom / 2f, - width * zoom, height * zoom); - } else { - if(fog == null) { - var texturePaint = (DrawableTexturePaint)paint; - var image = texturePaint.getAsset().getImage(); - var pix = new Pixmap(image, 0, image.length); - fog = new Texture(pix); - fog.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat); - pix.dispose(); - } - fillViewportWith(fog); - } + setProjectionMatrix(cam.combined); + } - timer.start("renderFog-visibleArea"); - Area visibleArea = zoneRenderer.getZoneView().getVisibleArea(view); - timer.stop("renderFog-visibleArea"); + private void renderGrid(PlayerView view) { + var grid = zone.getGrid(); + var scale = (float) zoneRenderer.getScale(); + int gridSize = (int) (grid.getSize() * scale); - String msg = null; - if (timer.isEnabled()) { - List list = view.getTokens(); - msg = "renderFog-combined(" + (list == null ? 0 : list.size()) + ")"; - } - timer.start(msg); - combined = zone.getExposedArea(view); - timer.stop(msg); - - timer.start("renderFogArea"); - Area exposedArea = null; - Area tempArea = new Area(); - boolean combinedView = - !zoneRenderer.getZoneView().isUsingVision() - || MapTool.isPersonalServer() - || !MapTool.getServerPolicy().isUseIndividualFOW() - || view.isGMView(); - - drawer.setColor(Color.CLEAR); - - if (view.getTokens() != null) { - // if there are tokens selected combine the areas, then, if individual FOW is enabled - // we pass the combined exposed area to build the soft FOW and visible area. - for (Token tok : view.getTokens()) { - ExposedAreaMetaData meta = zone.getExposedAreaMetaData(tok.getExposedAreaGUID()); - exposedArea = meta.getExposedAreaHistory(); - tempArea.add(new Area(exposedArea)); - } - if (combinedView) { - fillArea(combined); - renderFogArea(combined, visibleArea); - renderFogOutline(); - } else { - // 'combined' already includes the area encompassed by 'tempArea', so just - // use 'combined' instead in this block of code? - tempArea.add(combined); - - fillArea(tempArea); - renderFogArea(tempArea, visibleArea); - renderFogOutline(); - } - } else { - // No tokens selected, so if we are using Individual FOW, we build up all the owned tokens - // exposed area's to build the soft FOW. - if (combinedView) { - if (combined.isEmpty()) { - combined = zone.getExposedArea(); - } - fillArea(combined); - renderFogArea(combined, visibleArea); - renderFogOutline(); - } else { - Area myCombined = new Area(); - List myToks = zone.getTokens(); - for (Token tok : myToks) { - if (!AppUtil.playerOwns( - tok)) { // Only here if !isGMview() so should the tokens already be in - // PlayerView.getTokens()? - continue; - } - ExposedAreaMetaData meta = zone.getExposedAreaMetaData(tok.getExposedAreaGUID()); - exposedArea = meta.getExposedAreaHistory(); - myCombined.add(new Area(exposedArea)); - } - fillArea(myCombined); - renderFogArea(myCombined, visibleArea); - renderFogOutline(); - } - } - timer.stop("renderFogArea"); + if (!AppState.isShowGrid() || gridSize < ZoneRenderer.MIN_GRID_SIZE) { + return; + } - flushFog = false; - //createScreenShot("fog"); - batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); - backBuffer.end(); + setProjectionMatrix(hudCam.combined); + if (grid instanceof GridlessGrid) { + // do nothing + } else if (grid instanceof HexGrid) { + renderGrid((HexGrid) grid); + } else if (grid instanceof SquareGrid) { + renderGrid((SquareGrid) grid); + } else if (grid instanceof IsometricGrid) { + renderGrid((IsometricGrid) grid); + } + setProjectionMatrix(cam.combined); + } + + private void renderGrid(HexGrid grid) { + + Color.argb8888ToColor(tmpColor, zone.getGridColor()); + + drawer.setColor(tmpColor); + var path = grid.createShape(zoneRenderer.getScale()); + pathToFloatArray(path.getPathIterator(null)); + + int offU = grid.getOffU(zoneRenderer); + int offV = grid.getOffV(zoneRenderer); + + int count = 0; + + var lineWidth = AppState.getGridSize(); + + for (double v = offV % (grid.getScaledMinorRadius() * 2) - (grid.getScaledMinorRadius() * 2); + v < grid.getRendererSizeV(zoneRenderer); + v += grid.getScaledMinorRadius()) { + double offsetU = + (int) + ((count & 1) == 0 + ? 0 + : -(grid.getScaledEdgeProjection() + grid.getScaledEdgeLength())); + count++; + + double start = + offU % (2 * grid.getScaledEdgeLength() + 2 * grid.getScaledEdgeProjection()) + - (2 * grid.getScaledEdgeLength() + 2 * grid.getScaledEdgeProjection()); + double end = + grid.getRendererSizeU(zoneRenderer) + + 2 * grid.getScaledEdgeLength() + + 2 * grid.getScaledEdgeProjection(); + double incr = 2 * grid.getScaledEdgeLength() + 2 * grid.getScaledEdgeProjection(); + for (double u = start; u < end; u += incr) { + float transX = 0; + float transY = 0; + if (grid instanceof HexGridVertical) { + transX = (float) (u + offsetU); + transY = height - (float) v; + } else { + transX = (float) v; + transY = (float) (-u - offsetU) + height; } - setProjectionMatrix(hudCam.combined); - batch.setColor(Color.WHITE); - batch.draw(backBuffer.getTexture(), 0, 0, width, height, 0, 0, - width, height, false, true); - - setProjectionMatrix(cam.combined); - timer.stop("renderFog"); - } + tmpMatrix.translate(transX, transY, 0); + batch.setTransformMatrix(tmpMatrix); + drawer.update(); - private void setProjectionMatrix(Matrix4 matrix) { - batch.setProjectionMatrix(matrix); + drawer.path(tmpFloat.toArray(), lineWidth, JoinType.SMOOTH, true); + tmpMatrix.idt(); + batch.setTransformMatrix(tmpMatrix); drawer.update(); + } } + } - private void renderFogArea(Area softFog, Area visibleArea) { - if (zoneRenderer.getZoneView().isUsingVision()) { - if (visibleArea != null && !visibleArea.isEmpty()) { - drawer.setColor(0, 0, 0, AppPreferences.getFogOverlayOpacity() / 255.0f); + private void renderGrid(IsometricGrid grid) { + var scale = (float) zoneRenderer.getScale(); + int gridSize = (int) (grid.getSize() * scale); - // Fill in the exposed area - fillArea(softFog); + Color.argb8888ToColor(tmpColor, zone.getGridColor()); - //batch.setColor(Color.CLEAR); - drawer.setColor(Color.CLEAR); + drawer.setColor(tmpColor); - fillArea(visibleArea); - } else { - drawer.setColor(0, 0, 0, 80 / 255.0f); - fillArea(softFog); - drawer.setColor(Color.WHITE); - } - } else { - fillArea(softFog); - } - } + var x = hudCam.position.x - hudCam.viewportWidth / 2; + var y = hudCam.position.y - hudCam.viewportHeight / 2; + var w = hudCam.viewportWidth; + var h = hudCam.viewportHeight; + + double isoHeight = grid.getSize() * scale; + double isoWidth = grid.getSize() * 2 * scale; - private void renderFogOutline() { - if (visibleScreenArea == null) - return; + int offX = (int) (zoneRenderer.getViewOffsetX() % isoWidth + grid.getOffsetX() * scale) + 1; + int offY = (int) (zoneRenderer.getViewOffsetY() % gridSize + grid.getOffsetY() * scale) + 1; - drawer.setColor(Color.BLACK); - drawArea(visibleScreenArea); + int startCol = (int) ((int) (x / isoWidth) * isoWidth); + int startRow = (int) ((int) (y / gridSize) * gridSize); + + for (double row = startRow; row < y + h + gridSize; row += gridSize) { + for (double col = startCol; col < x + w + isoWidth; col += isoWidth) { + drawHatch(grid, (int) (col + offX), h - (int) (row + offY)); + } } - private void renderLabels(PlayerView view) { - timer.start("labels-1"); - - for (Label label : zone.getLabels()) { - timer.start("labels-1.1"); - Color.argb8888ToColor(tmpColor, label.getForegroundColor().getRGB()); - if (label.isShowBackground()) { - drawBoxedString( - label.getLabel(), - label.getX(), - -label.getY(), - SwingUtilities.CENTER, - grayLabel, - tmpColor); - } else { - drawString(label.getLabel(), label.getX(), -label.getY(), tmpColor); - } - timer.stop("labels-1.1"); - } - timer.stop("labels-1"); + for (double row = startRow - (isoHeight / 2); row < y + h + gridSize; row += gridSize) { + for (double col = startCol - (isoWidth / 2); col < x + w + isoWidth; col += isoWidth) { + drawHatch(grid, (int) (col + offX), h - (int) (row + offY)); + } } + } - private void showBlockedMoves(PlayerView view, Set movementSet) { - var selectionSetMap = zoneRenderer.getSelectionSetMap(); - if (selectionSetMap.isEmpty()) { - return; - } + private void drawHatch(IsometricGrid grid, float x, float y) { + double isoWidth = grid.getSize() * zoneRenderer.getScale(); + int hatchSize = isoWidth > 10 ? (int) isoWidth / 8 : 2; - boolean clipInstalled = false; - for (ZoneRenderer.SelectionSet set : movementSet) { - Token keyToken = zone.getToken(set.getKeyToken()); - if (keyToken == null) { - // It was removed ? - selectionSetMap.remove(set.getKeyToken()); - continue; - } - // Hide the hidden layer - if (keyToken.getLayer() == Zone.Layer.GM && !view.isGMView()) { - continue; - } - ZoneWalker walker = set.getWalker(); + var lineWidth = AppState.getGridSize(); - for (GUID tokenGUID : set.getTokens()) { - Token token = zone.getToken(tokenGUID); + drawer.line(x - (hatchSize * 2), y - hatchSize, x + (hatchSize * 2), y + hatchSize, lineWidth); + drawer.line(x - (hatchSize * 2), y + hatchSize, x + (hatchSize * 2), y - hatchSize, lineWidth); + } - // Perhaps deleted? - if (token == null) { - continue; - } + private void renderGrid(SquareGrid grid) { + var scale = (float) zoneRenderer.getScale(); + float gridSize = (grid.getSize() * scale); + Color.argb8888ToColor(tmpColor, zone.getGridColor()); - // Don't bother if it's not visible - if (!token.isVisible() && !view.isGMView()) { - continue; - } + drawer.setColor(tmpColor); - // ... or if it's visible only to the owner and that's not us! - if (token.isVisibleOnlyToOwner() && !AppUtil.playerOwns(token)) { - continue; - } + var x = hudCam.position.x - hudCam.viewportWidth / 2; + var y = hudCam.position.y - hudCam.viewportHeight / 2; + var w = hudCam.viewportWidth; + var h = hudCam.viewportHeight; - // ... or there are no lights/visibleScreen and you are not the owner or gm and there is fow - // or vision - if (!view.isGMView() - && !AppUtil.playerOwns(token) - && visibleScreenArea == null - && zone.hasFog() - && zoneRenderer.getZoneView().isUsingVision()) { - continue; - } + var offX = Math.round(zoneRenderer.getViewOffsetX() % gridSize + grid.getOffsetX() * scale); + var offY = Math.round(zoneRenderer.getViewOffsetY() % gridSize + grid.getOffsetY() * scale); - // ... or if it doesn't have an image to display. (Hm, should still show *something*?) - Asset asset = AssetManager.getAsset(token.getImageAssetId()); - if (asset == null) { - continue; - } + var startCol = ((int) (x / gridSize) * gridSize); + var startRow = ((int) (y / gridSize) * gridSize); - // OPTIMIZE: combine this with the code in renderTokens() - java.awt.Rectangle footprintBounds = token.getBounds(zone); + var lineWidth = AppState.getGridSize(); + for (float row = startRow; row < y + h + gridSize; row += gridSize) + drawer.line(x, Math.round(h - (row + offY)), x + w, Math.round(h - (row + offY)), lineWidth); - // get token image, using image table if present - Sprite image = getSprite(token.getImageAssetId()); - if (image == null) - continue; + for (float col = startCol; col < x + w + gridSize; col += gridSize) + drawer.line(Math.round(col + offX), y, Math.round(col + offX), y + h, lineWidth); + } - // Vision visibility - boolean isOwner = view.isGMView() || AppUtil.playerOwns(token); // || - // set.getPlayerId().equals(MapTool.getPlayer().getName()); - if (!view.isGMView() && visibleScreenArea != null && !isOwner) { - // FJE Um, why not just assign the clipping area at the top of the routine? - //TODO: Path clipping - if (!clipInstalled) { - // Only show the part of the path that is visible - // Area visibleArea = new Area(g.getClipBounds()); - // visibleArea.intersect(visibleScreenArea); - - // g = (Graphics2D) g.create(); - // g.setClip(new GeneralPath(visibleArea)); - - clipInstalled = true; - // System.out.println("Adding Clip: " + MapTool.getPlayer().getName()); - } - } - // Show path only on the key token on token layer that are visible to the owner or gm while - // fow and vision is on - if (token == keyToken && !token.isStamp()) { - renderPath( - walker != null ? walker.getPath() : set.getGridlessPath(), - token.getFootprint(zone.getGrid())); - } + private FloatArray pathToVertices(GeneralPath path) { + PathIterator iterator = path.getPathIterator(null); - // Show current Blocked Movement directions for A* - if (walker != null && (log.isDebugEnabled() || showAstarDebugging)) { - Map> blockedMovesByTarget = walker.getBlockedMoves(); - // Color currentColor = g.getColor(); - for (var entry : blockedMovesByTarget.entrySet()) { - var position = entry.getKey(); - var blockedMoves = entry.getValue(); - - for (CellPoint point : blockedMoves) { - ZonePoint zp = point.midZonePoint(zoneRenderer.getZone().getGrid(), position); - double r = (zp.x - 1) * 45; - showBlockedMoves(zp, r, getSprite("block_move"), 1.0f); - } - } - } + tmpFloat.clear(); - footprintBounds.x += set.getOffsetX(); - footprintBounds.y += set.getOffsetY(); - - prepareTokenSprite(image, token, footprintBounds); - image.draw(batch); - - - // Other details - if (token == keyToken) { - var x = footprintBounds.x; - var y = footprintBounds.y; - var w = footprintBounds.width; - var h = footprintBounds.height; - - - Grid grid = zone.getGrid(); - boolean checkForFog = - MapTool.getServerPolicy().isUseIndividualFOW() && zoneRenderer.getZoneView().isUsingVision(); - boolean showLabels = isOwner; - if (checkForFog) { - Path path = - set.getWalker() != null ? set.getWalker().getPath() : set.getGridlessPath(); - List thePoints = path.getCellPath(); - - // now that we have the last point, we can check to see if it's gridless or not. If not - // gridless, get the last point the token was at and see if the token's footprint is inside - // the visible area to show the label. - - if (thePoints.isEmpty()) { - showLabels = false; - } else { - AbstractPoint lastPoint = thePoints.get(thePoints.size() - 1); - - java.awt.Rectangle tokenRectangle = null; - if (lastPoint instanceof CellPoint) { - tokenRectangle = token.getFootprint(grid).getBounds(grid, (CellPoint) lastPoint); - } else { - java.awt.Rectangle tokBounds = token.getBounds(zone); - tokenRectangle = new java.awt.Rectangle(); - tokenRectangle.setBounds( - lastPoint.x, - lastPoint.y, - (int) tokBounds.getWidth(), - (int) tokBounds.getHeight()); - } - showLabels = showLabels || zoneRenderer.getZoneView().getVisibleArea(view).intersects(tokenRectangle); - } - } else { - boolean hasFog = zone.hasFog(); - boolean fogIntersects = exposedFogArea.intersects(footprintBounds); - showLabels = showLabels || (visibleScreenArea == null && !hasFog); // no vision - fog - showLabels = - showLabels - || (visibleScreenArea == null && hasFog && fogIntersects); // no vision + fog - showLabels = - showLabels - || (visibleScreenArea != null - && visibleScreenArea.intersects(footprintBounds) - && fogIntersects); // vision - } - if (showLabels) { - - y += 10 + h; - x += w / 2; - - if (!token.isStamp() && AppState.getShowMovementMeasurements()) { - String distance = ""; - if (walker != null) { // This wouldn't be true unless token.isSnapToGrid() && - // grid.isPathingSupported() - double distanceTraveled = walker.getDistance(); - if (distanceTraveled >= 0) { - distance = NumberFormat.getInstance().format(distanceTraveled); - } - } else { - double c = 0; - ZonePoint lastPoint = null; - for (ZonePoint zp : set.getGridlessPath().getCellPath()) { - if (lastPoint == null) { - lastPoint = zp; - continue; - } - int a = lastPoint.x - zp.x; - int b = lastPoint.y - zp.y; - c += Math.hypot(a, b); - lastPoint = zp; - } - c /= zone.getGrid().getSize(); // Number of "cells" - c *= zone.getUnitsPerCell(); // "actual" distance traveled - distance = NumberFormat.getInstance().format(c); - } - if (!distance.isEmpty()) { - itemRenderList.add(new LabelRenderer(distance, x, -y)); - y += 20; - } - } - if (set.getPlayerId() != null && set.getPlayerId().length() >= 1) { - itemRenderList.add(new LabelRenderer(set.getPlayerId(), x, -y)); - } - } // showLabels - } // token == keyToken - } - } + while (!iterator.isDone()) { + int type = iterator.currentSegment(floatsFromArea); + + if (type != PathIterator.SEG_CLOSE) { + tmpFloat.add(floatsFromArea[0], floatsFromArea[1]); + } + iterator.next(); } - private void showBlockedMoves(ZonePoint zp, double angle, Sprite image, float size) { - // Resize image to size of 1/4 size of grid - var resizeWidth = (float)zone.getGrid().getCellWidth() / image.getWidth() * .25f; - var resizeHeight = (float)zone.getGrid().getCellHeight() / image.getHeight() * .25f; + return tmpFloat; + } + + private void renderDrawableOverlay(PlayerView view, List drawables) { + for (var drawable : drawables.toArray()) renderDrawable((DrawnElement) drawable); + } + + private void renderDrawable(DrawnElement element) { + var pen = element.getPen(); + var drawable = element.getDrawable(); + + if (drawable instanceof ShapeDrawable) shapeDrawableDrawer.draw(drawable, pen); + else if (drawable instanceof DrawablesGroup) + for (var groupElement : ((DrawablesGroup) drawable).getDrawableList()) + renderDrawable(groupElement); + else if (drawable instanceof RadiusCellTemplate) radiusCellTemplateDrawer.draw(drawable, pen); + else if (drawable instanceof LineCellTemplate) lineCellTemplateDrawer.draw(drawable, pen); + else if (drawable instanceof BlastTemplate) blastTemplateDrawer.draw(drawable, pen); + else if (drawable instanceof ConeTemplate) coneTemplateDrawer.draw(drawable, pen); + else if (drawable instanceof BurstTemplate) burstTemplateDrawer.draw(drawable, pen); + else if (drawable instanceof RadiusTemplate) radiusTemplateDrawer.draw(drawable, pen); + else if (drawable instanceof LineTemplate) lineTemplateDrawer.draw(drawable, pen); + } + + public void drawString(String text, float centerX, float centerY, Color foreground) { + drawBoxedString(text, centerX, centerY, SwingUtilities.CENTER, null, foreground); + } + + public void drawString(String text, float centerX, float centerY) { + drawBoxedString(text, centerX, centerY, SwingUtilities.CENTER, null, Color.WHITE); + } + + public void drawBoxedString(String text, float centerX, float centerY) { + drawBoxedString(text, centerX, centerY, SwingUtilities.CENTER); + } + + public void drawBoxedString(String text, float x, float y, int justification) { + drawBoxedString(text, x, y, justification, grayLabel, Color.BLACK); + } + + private void drawBoxedString( + String text, float x, float y, int justification, NinePatch background, Color foreground) { + final int BOX_PADDINGX = 10; + final int BOX_PADDINGY = 2; + + if (text == null) text = ""; + + glyphLayout.setText(normalFont, text); + var strWidth = glyphLayout.width; + + var fontHeight = normalFont.getLineHeight(); + + var width = strWidth + BOX_PADDINGX * 2; + var height = fontHeight + BOX_PADDINGY * 2; + + y = y - fontHeight / 2 - BOX_PADDINGY; + + switch (justification) { + case SwingUtilities.CENTER: + x = x - strWidth / 2 - BOX_PADDINGX; + break; + case SwingUtilities.RIGHT: + x = x - strWidth - BOX_PADDINGX; + break; + case SwingUtilities.LEFT: + break; + } - var w = image.getWidth() * resizeWidth * size; - var h = image.getHeight() * resizeHeight * size; + // Box + if (background != null) { + background.draw(batch, x, y, width, height); + } - image.setSize(w, h); - image.setPosition(zp.x - w / 2f, -(zp.y - h / 2f)); - image.draw(batch); + // Renderer message + + var textX = x + BOX_PADDINGX; + var textY = y + height - BOX_PADDINGY - normalFont.getAscent(); + + normalFont.setColor(foreground); + normalFont.draw(batch, text, textX, textY); + } + + private void renderBoard() { + if (!zone.drawBoard()) return; + + var paint = zone.getBackgroundPaint(); + if (paint instanceof DrawableColorPaint) { + Color.argb8888ToColor(tmpColor, ((DrawableColorPaint) paint).getColor()); + drawer.setColor(tmpColor); + drawer.filledRectangle( + cam.position.x - width * zoom / 2f, + cam.position.y - height * zoom / 2f, + width * zoom, + height * zoom); + } else { + if (background == null) { + var texturePaint = (DrawableTexturePaint) paint; + var image = texturePaint.getAsset().getImage(); + var pix = new Pixmap(image, 0, image.length); + background = new Texture(pix); + background.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat); + pix.dispose(); + } + fillViewportWith(background); } - private void renderAuras(PlayerView view) { - var alpha = AppPreferences.getAuraOverlayOpacity() / 255.0f; + var map = getSprite(zone.getMapAssetId()); + if (map != null) { + map.setPosition(zone.getBoardX(), zone.getBoardY() - map.getHeight()); + map.draw(batch); + } + } - timer.start("auras-4"); + private void fillViewportWith(Texture texture) { + var w = ((int) (cam.viewportWidth * zoom / texture.getWidth()) + 4) * texture.getWidth(); + var h = ((int) (cam.viewportHeight * zoom / texture.getHeight()) + 4) * texture.getHeight(); - for (DrawableLight light : zoneRenderer.getZoneView().getLights(LightSource.Type.AURA)) { - var paint = light.getPaint(); - if (paint != null && paint instanceof DrawableColorPaint) { - var colorPaint = (DrawableColorPaint) paint; - Color.argb8888ToColor(tmpColor, colorPaint.getColor()); - tmpColor.a = alpha; - } else { - tmpColor.set(1, 1, 1, 0.59f); - } - drawer.setColor(tmpColor); - fillArea(light.getArea()); - } + var startX = (cam.position.x - cam.viewportWidth * zoom / 2); + startX = (((int) startX) / texture.getWidth()) * texture.getWidth() - texture.getWidth(); - timer.stop("auras-4"); - } + var startY = (cam.position.y - cam.viewportHeight * zoom / 2); + startY = (((int) startY) / texture.getHeight()) * texture.getHeight() - texture.getHeight(); - private void renderLights(PlayerView view) { - if (zone.getVisionType() != Zone.VisionType.NIGHT) - return; + batch.draw(texture, startX, startY, 0, 0, w, h); + } - backBuffer.begin(); - ScreenUtils.clear(Color.CLEAR); - setProjectionMatrix(cam.combined); - batch.setBlendFunction(GL20.GL_ONE, GL20.GL_NONE); - drawer.update(); + private void renderTokens(List tokenList, PlayerView view, boolean figuresOnly) { + boolean isGMView = view.isGMView(); // speed things up + + if (visibleScreenArea == null) return; + + for (Token token : tokenList) { + if (token.getShape() != Token.TokenShape.FIGURE && figuresOnly && !token.isAlwaysVisible()) { + continue; + } + + timer.start("tokenlist-1"); + try { + if (token.isStamp() && zoneRenderer.isTokenMoving(token)) { + continue; + } + // Don't bother if it's not visible + // NOTE: Not going to use zone.isTokenVisible as it is very slow. In fact, it's faster + // to just draw the tokens and let them be clipped + if ((!token.isVisible() || token.isGMStamp()) && !isGMView) { + continue; + } + if (token.isVisibleOnlyToOwner() && !AppUtil.playerOwns(token)) { + continue; + } + } finally { + // This ensures that the timer is always stopped + timer.stop("tokenlist-1"); + } + + java.awt.Rectangle footprintBounds = token.getBounds(zone); + java.awt.Rectangle origBounds = (java.awt.Rectangle) footprintBounds.clone(); + Area tokenBounds = new Area(footprintBounds); + + timer.start("tokenlist-1d"); + if (token.hasFacing() && token.getShape() == Token.TokenShape.TOP_DOWN) { + double sx = footprintBounds.width / 2f + footprintBounds.x - (token.getAnchor().x); + double sy = footprintBounds.height / 2f + footprintBounds.y - (token.getAnchor().y); + tokenBounds.transform( + AffineTransform.getRotateInstance( + Math.toRadians(-token.getFacing() - 90), sx, sy)); // facing + // defaults to down, or -90 degrees + } + timer.stop("tokenlist-1d"); + + timer.start("tokenlist-1e"); + try { + + // Vision visibility + if (!isGMView && token.isToken() && zoneRenderer.getZoneView().isUsingVision()) { + if (!GraphicsUtil.intersects(visibleScreenArea, tokenBounds)) { + continue; + } + } + } finally { + // This ensures that the timer is always stopped + timer.stop("tokenlist-1e"); + } + + // Previous path + timer.start("renderTokens:ShowPath"); + if (zoneRenderer.getShowPathList().contains(token) && token.getLastPath() != null) { + renderPath(token.getLastPath(), token.getFootprint(zone.getGrid())); + } + timer.stop("renderTokens:ShowPath"); + + // get token image sprite, using image table if present + var imageKey = token.getTokenImageAssetId(); + Sprite image = getSprite(imageKey); + + prepareTokenSprite(image, token, footprintBounds); + + // Render Halo + if (token.hasHalo()) { + drawer.setDefaultLineWidth(AppPreferences.getHaloLineWidth()); + Color.argb8888ToColor(tmpColor, token.getHaloColor().getRGB()); + drawer.setColor(tmpColor); + drawArea(zone.getGrid().getTokenCellArea(tokenBounds)); + } + + // Calculate alpha Transparency from token and use opacity for indicating that token is moving + float opacity = token.getTokenOpacity(); + if (zoneRenderer.isTokenMoving(token)) opacity = opacity / 2.0f; + + Area tokenCellArea = zone.getGrid().getTokenCellArea(tokenBounds); + Area cellArea = new Area(visibleScreenArea); + cellArea.intersect(tokenCellArea); + + // Finally render the token image + timer.start("tokenlist-7"); + image.setColor(1, 1, 1, opacity); + if (!isGMView + && zoneRenderer.getZoneView().isUsingVision() + && (token.getShape() == Token.TokenShape.FIGURE)) { + if (zone.getGrid().checkCenterRegion(tokenCellArea.getBounds(), visibleScreenArea)) { + // if we can see the centre, draw the whole token + image.draw(batch); + } else { + // else draw the clipped token + paintClipped(image, tokenCellArea, cellArea); + } + } else if (!isGMView + && zoneRenderer.getZoneView().isUsingVision() + && token.isAlwaysVisible()) { + // Jamz: Always Visible tokens will get rendered again here to place on top of FoW + if (GraphicsUtil.intersects(visibleScreenArea, tokenCellArea)) { + // if we can see a portion of the stamp/token, draw the whole thing, defaults to 2/9ths + if (zone.getGrid() + .checkRegion( + tokenCellArea.getBounds(), + visibleScreenArea, + token.getAlwaysVisibleTolerance())) { + + image.draw(batch); + + } else { + // else draw the clipped stamp/token + // This will only show the part of the token that does not have VBL on it + // as any VBL on the token will block LOS, affecting the clipping. + paintClipped(image, tokenCellArea, cellArea); + } + } + } else { + // fallthrough normal token rendered against visible area + + if (zoneRenderer.isTokenInNeedOfClipping(token, tokenCellArea, isGMView)) { + paintClipped(image, tokenCellArea, cellArea); + } else image.draw(batch); + } + image.setColor(Color.WHITE); + timer.stop("tokenlist-7"); + + timer.start("tokenlist-8"); + + // Facing + if (token.hasFacing()) { + Token.TokenShape tokenType = token.getShape(); + switch (tokenType) { + case FIGURE: + if (token.getHasImageTable() + && token.hasFacing() + && AppPreferences.getForceFacingArrow() == false) { + break; + } + java.awt.Shape arrow = + getFigureFacingArrow(token.getFacing(), footprintBounds.width / 2); - timer.start("lights-2"); - var alpha = AppPreferences.getLightOverlayOpacity() / 255.0f; - timer.stop("lights-2"); + if (!zone.getGrid().isIsometric()) { + arrow = getCircleFacingArrow(token.getFacing(), footprintBounds.width / 2); + } + + float fx = origBounds.x + origBounds.width / zoom / 2f; + float fy = origBounds.y + origBounds.height / zoom / 2f; - timer.start("lights-3"); - for (DrawableLight light : zoneRenderer.getZoneView().getDrawableLights(view)) { - var drawablePaint = light.getPaint(); + tmpMatrix.idt(); + tmpMatrix.translate(fx, -fy, 0); + batch.setTransformMatrix(tmpMatrix); + drawer.update(); - if (light.getType() != LightSource.Type.NORMAL || drawablePaint == null) - continue; + if (token.getFacing() < 0) drawer.setColor(Color.YELLOW); + else drawer.setColor(1, 1, 0, 0.5f); - var paint = drawablePaint.getPaint(); + var arrowArea = new Area(arrow); + fillArea(arrowArea); - if (paint instanceof DrawableColorPaint) { - var colorPaint = (DrawableColorPaint) paint; - Color.argb8888ToColor(tmpColor, colorPaint.getColor()); + drawer.setColor(Color.DARK_GRAY); + drawArea(arrowArea); - } else if (paint instanceof java.awt.Color) { - Color.argb8888ToColor(tmpColor, ((java.awt.Color) paint).getRGB()); + break; + case TOP_DOWN: + if (AppPreferences.getForceFacingArrow() == false) { + break; + } + case CIRCLE: + arrow = getCircleFacingArrow(token.getFacing(), footprintBounds.width / 2); + if (zone.getGrid().isIsometric()) { + arrow = getFigureFacingArrow(token.getFacing(), footprintBounds.width / 2); + } + arrowArea = new Area(arrow); + + float cx = origBounds.x + origBounds.width / 2f; + float cy = origBounds.y + origBounds.height / 2f; + + tmpMatrix.idt(); + tmpMatrix.translate(cx, -cy, 0); + batch.setTransformMatrix(tmpMatrix); + drawer.update(); + drawer.setColor(Color.YELLOW); + + fillArea(arrowArea); + drawer.setColor(Color.DARK_GRAY); + drawer.setDefaultLineWidth(1); + + drawArea(arrowArea); + tmpMatrix.idt(); + batch.setTransformMatrix(tmpMatrix); + drawer.update(); + break; + case SQUARE: + if (zone.getGrid().isIsometric()) { + arrow = getFigureFacingArrow(token.getFacing(), footprintBounds.width / 2); + cx = origBounds.x + origBounds.width / 2f; + cy = origBounds.y + origBounds.height / 2f; } else { - System.out.println("unexpected color type"); - continue; + int facing = token.getFacing(); + arrow = getSquareFacingArrow(facing, footprintBounds.width / 2); + + cx = origBounds.x + origBounds.width / 2f; + cy = origBounds.y + origBounds.height / 2f; + + // Find the edge of the image + double xp = origBounds.getWidth() / 2; + double yp = origBounds.getHeight() / 2; + if (facing >= 45 && facing <= 135 || facing >= 225 && facing <= 315) { + xp = (int) (yp / Math.tan(Math.toRadians(facing))); + if (facing > 180) { + xp = -xp; + yp = -yp; + } + } else { + yp = (int) (xp * Math.tan(Math.toRadians(facing))); + if (facing > 90 && facing < 270) { + xp = -xp; + yp = -yp; + } + } + cx += xp; + cy -= yp; } - tmpColor.a = alpha; - drawer.setColor(tmpColor); - fillArea(light.getArea()); - } - timer.stop("lights-3"); - //clear the bright areas - timer.start("lights-4"); - for (Area brightArea : zoneRenderer.getZoneView().getBrightLights(view)) { - drawer.setColor(Color.CLEAR); - fillArea(brightArea); - } - timer.stop("lights-4"); - //createScreenShot("light"); - batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); - backBuffer.end(); + arrowArea = new Area(arrow); - setProjectionMatrix(hudCam.combined); - batch.draw(backBuffer.getTexture(), 0, 0, width, height, 0, 0, - width, height, false, true); + tmpMatrix.translate(cx, -cy, 0); + batch.setTransformMatrix(tmpMatrix); + drawer.update(); + drawer.setColor(Color.YELLOW); - setProjectionMatrix(cam.combined); - } + fillArea(arrowArea); + drawer.setColor(Color.DARK_GRAY); + drawArea(arrowArea); + batch.setTransformMatrix(tmpMatrix.idt()); + drawer.update(); + break; + } + } + timer.stop("tokenlist-8"); - private void renderGrid(PlayerView view) { - var grid = zone.getGrid(); - var scale = (float) zoneRenderer.getScale(); - int gridSize = (int) (grid.getSize() * scale); + timer.start("tokenlist-9"); - if (!AppState.isShowGrid() || gridSize < ZoneRenderer.MIN_GRID_SIZE) { - return; + // Check each of the set values + for (String state : MapTool.getCampaign().getTokenStatesMap().keySet()) { + Object stateValue = token.getState(state); + AbstractTokenOverlay overlay = MapTool.getCampaign().getTokenStatesMap().get(state); + if (stateValue instanceof AbstractTokenOverlay) { + overlay = (AbstractTokenOverlay) stateValue; + } + if (overlay == null + || overlay.isMouseover() && token != zoneRenderer.getTokenUnderMouse() + || !overlay.showPlayer(token, MapTool.getPlayer())) { + continue; + } + renderTokenOverlay(overlay, token, stateValue); + } + timer.stop("tokenlist-9"); + + timer.start("tokenlist-10"); + + for (String bar : MapTool.getCampaign().getTokenBarsMap().keySet()) { + Object barValue = token.getState(bar); + BarTokenOverlay overlay = MapTool.getCampaign().getTokenBarsMap().get(bar); + if (overlay == null + || overlay.isMouseover() && token != zoneRenderer.getTokenUnderMouse() + || !overlay.showPlayer(token, MapTool.getPlayer())) { + continue; + } + renderTokenOverlay(overlay, token, barValue); + } // endfor + timer.stop("tokenlist-10"); + + timer.start("tokenlist-11"); + // Keep track of which tokens have been drawn so we can perform post-processing on them later + // (such as selection borders and names/labels) + if (!zoneRenderer.getActiveLayer().equals(token.getLayer())) continue; + + timer.stop("tokenlist-11"); + timer.start("tokenlist-12"); + + boolean useIF = MapTool.getServerPolicy().isUseIndividualFOW(); + + // Selection and labels + + var tokenRectangle = token.getBounds(zone); + var gdxTokenRectangle = + new Rectangle( + tokenRectangle.x, + -tokenRectangle.y - tokenRectangle.height, + tokenRectangle.width, + tokenRectangle.height); + boolean isSelected = zoneRenderer.getSelectedTokenSet().contains(token.getId()); + if (isSelected) { + ImageBorder selectedBorder = + token.isStamp() ? AppStyle.selectedStampBorder : AppStyle.selectedBorder; + if (zoneRenderer.getHighlightCommonMacros().contains(token)) { + selectedBorder = AppStyle.commonMacroBorder; + } + if (!AppUtil.playerOwns(token)) { + selectedBorder = AppStyle.selectedUnownedBorder; + } + if (useIF && !token.isStamp() && zoneRenderer.getZoneView().isUsingVision()) { + Tool tool = MapTool.getFrame().getToolbox().getSelectedTool(); + if (tool + instanceof + RectangleExposeTool // XXX Change to use marker interface such as ExposeTool? + || tool instanceof OvalExposeTool + || tool instanceof FreehandExposeTool + || tool instanceof PolygonExposeTool) { + selectedBorder = AppConstants.FOW_TOOLS_BORDER; + } } setProjectionMatrix(hudCam.combined); + tmpWorldCoord.set(gdxTokenRectangle.x, gdxTokenRectangle.y, 0); + cam.project(tmpWorldCoord); + gdxTokenRectangle.set( + tmpWorldCoord.x, + tmpWorldCoord.y, + gdxTokenRectangle.width / zoom, + gdxTokenRectangle.height / zoom); + + if (token.hasFacing() + && (token.getShape() == Token.TokenShape.TOP_DOWN || token.isStamp())) { + + var transX = gdxTokenRectangle.width / 2f - token.getAnchor().x / zoom; + var transY = gdxTokenRectangle.height / 2f + token.getAnchor().y / zoom; + + tmpMatrix.idt(); + tmpMatrix.translate(tmpWorldCoord.x + transX, tmpWorldCoord.y + transY, 0); + tmpMatrix.rotate(0, 0, 1, token.getFacing() + 90); + tmpMatrix.translate(-transX, -transY, 0); + gdxTokenRectangle.x = 0; + gdxTokenRectangle.y = 0; + batch.setTransformMatrix(tmpMatrix); + renderImageBorderAround(selectedBorder, gdxTokenRectangle); + tmpMatrix.idt(); + batch.setTransformMatrix(tmpMatrix); - if (grid instanceof GridlessGrid) { - // do nothing - } else if (grid instanceof HexGrid) { - renderGrid((HexGrid) grid); - } else if (grid instanceof SquareGrid) { - renderGrid((SquareGrid) grid); - } else if (grid instanceof IsometricGrid) { - renderGrid((IsometricGrid) grid); + } else { + renderImageBorderAround(selectedBorder, gdxTokenRectangle); } + setProjectionMatrix(cam.combined); + } + + // Token names and labels + boolean showCurrentTokenLabel = + AppState.isShowTokenNames() || token == zoneRenderer.getTokenUnderMouse(); + + // if policy does not auto-reveal FoW, check if fog covers the token (slow) + if (showCurrentTokenLabel + && !isGMView + && (!zoneRenderer.getZoneView().isUsingVision() + || !MapTool.getServerPolicy().isAutoRevealOnMovement()) + && !zone.isTokenVisible(token)) { + showCurrentTokenLabel = false; + } + if (showCurrentTokenLabel) { + itemRenderList.add(new TokenLabelRenderer(token, isGMView)); + } + timer.stop("tokenlist-12"); } - private void renderGrid(HexGrid grid) { - - Color.argb8888ToColor(tmpColor, zone.getGridColor()); - - drawer.setColor(tmpColor); - var path = grid.createShape(zoneRenderer.getScale()); - pathToFloatArray(path.getPathIterator(null)); - - int offU = grid.getOffU(zoneRenderer); - int offV = grid.getOffV(zoneRenderer); - - int count = 0; - - var lineWidth = AppState.getGridSize(); - - for (double v = offV % (grid.getScaledMinorRadius() * 2) - (grid.getScaledMinorRadius() * 2); - v < grid.getRendererSizeV(zoneRenderer); - v += grid.getScaledMinorRadius()) { - double offsetU = (int) ((count & 1) == 0 ? 0 : -(grid.getScaledEdgeProjection() + grid.getScaledEdgeLength())); - count++; - - double start = - offU % (2 * grid.getScaledEdgeLength() + 2 * grid.getScaledEdgeProjection()) - - (2 * grid.getScaledEdgeLength() + 2 * grid.getScaledEdgeProjection()); - double end = grid.getRendererSizeU(zoneRenderer) + 2 * grid.getScaledEdgeLength() + 2 * grid.getScaledEdgeProjection(); - double incr = 2 * grid.getScaledEdgeLength() + 2 * grid.getScaledEdgeProjection(); - for (double u = start; u < end; u += incr) { - float transX = 0; - float transY = 0; - if (grid instanceof HexGridVertical) { - transX = (float) (u + offsetU); - transY = height - (float) v; - } else { - transX = (float) v; - transY = (float) (-u - offsetU) + height; - } - - tmpMatrix.translate(transX, transY, 0); - batch.setTransformMatrix(tmpMatrix); - drawer.update(); - - drawer.path(tmpFloat.toArray(), lineWidth, JoinType.SMOOTH, true); - tmpMatrix.idt(); - batch.setTransformMatrix(tmpMatrix); - drawer.update(); - } + timer.start("tokenlist-13"); + + var tokenStackMap = zoneRenderer.getTokenStackMap(); + + // Stacks + if (!tokenList.isEmpty() + && !tokenList.get(0).isStamp()) { // TODO: find a cleaner way to indicate token layer + if (tokenStackMap != null) { // FIXME Needed to prevent NPE but how can it be null? + for (Token token : tokenStackMap.keySet()) { + var tokenRectangle = token.getBounds(zone); + var stackImage = fetch("stack"); + batch.draw( + stackImage, + tokenRectangle.x + tokenRectangle.width - stackImage.getRegionWidth() + 2, + -tokenRectangle.y - stackImage.getRegionHeight() + 2); } + } } + timer.stop("tokenlist-13"); + } - private void renderGrid(IsometricGrid grid) { - var scale = (float) zoneRenderer.getScale(); - int gridSize = (int) (grid.getSize() * scale); - - Color.argb8888ToColor(tmpColor, zone.getGridColor()); - - drawer.setColor(tmpColor); - - var x = hudCam.position.x - hudCam.viewportWidth / 2; - var y = hudCam.position.y - hudCam.viewportHeight / 2; - var w = hudCam.viewportWidth; - var h = hudCam.viewportHeight; + private void prepareTokenSprite(Sprite image, Token token, java.awt.Rectangle footprintBounds) { + image.setRotation(0); - double isoHeight = grid.getSize() * scale; - double isoWidth = grid.getSize() * 2 * scale; + // Tokens are centered on the image center point + float x = footprintBounds.x; + float y = footprintBounds.y; - int offX = (int) (zoneRenderer.getViewOffsetX() % isoWidth + grid.getOffsetX() * scale) + 1; - int offY = (int) (zoneRenderer.getViewOffsetY() % gridSize + grid.getOffsetY() * scale) + 1; + timer.start("tokenlist-5"); - int startCol = (int) ((int) (x / isoWidth) * isoWidth); - int startRow = (int) ((int) (y / gridSize) * gridSize); + // handle flipping + image.setFlip(token.isFlippedX(), token.isFlippedY()); + timer.stop("tokenlist-5"); - for (double row = startRow; row < y + h + gridSize; row += gridSize) { - for (double col = startCol; col < x + w + isoWidth; col += isoWidth) { - drawHatch(grid, (int) (col + offX), h - (int) (row + offY)); - } - } + image.setOriginCenter(); - for (double row = startRow - (isoHeight / 2); - row < y + h + gridSize; - row += gridSize) { - for (double col = startCol - (isoWidth / 2); - col < x + w + isoWidth; - col += isoWidth) { - drawHatch(grid, (int) (col + offX), h - (int) (row + offY)); - } + timer.start("tokenlist-5a"); + if (token.isFlippedIso()) { + var assetId = token.getImageAssetId(); + if (!isoSprites.containsKey(assetId)) { + var workImage = IsometricGrid.isoImage(ImageManager.getImage(assetId)); + try { + var bytes = ImageUtil.imageToBytes(workImage, "png"); + var pix = new Pixmap(bytes, 0, bytes.length); + image = new Sprite(new Texture(pix)); + pix.dispose(); + } catch (Exception e) { } + isoSprites.put(assetId, image); + } else { + image = isoSprites.get(assetId); + } + token.setHeight((int) image.getHeight()); + token.setWidth((int) image.getWidth()); + footprintBounds = token.getBounds(zone); + } + timer.stop("tokenlist-5a"); + + timer.start("tokenlist-6"); + // Position + // For Isometric Grid we alter the height offset + float iso_ho = 0; + java.awt.Dimension imgSize = + new java.awt.Dimension((int) image.getWidth(), (int) image.getHeight()); + if (token.getShape() == Token.TokenShape.FIGURE) { + float th = token.getHeight() * (float) footprintBounds.width / token.getWidth(); + iso_ho = footprintBounds.height - th; + footprintBounds = + new java.awt.Rectangle( + footprintBounds.x, footprintBounds.y - (int) iso_ho, footprintBounds.width, (int) th); } + SwingUtil.constrainTo(imgSize, footprintBounds.width, footprintBounds.height); + + int offsetx = 0; + int offsety = 0; + if (token.isSnapToScale()) { + offsetx = + (int) + (imgSize.width < footprintBounds.width + ? (footprintBounds.width - imgSize.width) / 2 + : 0); + offsety = + (int) + (imgSize.height < footprintBounds.height + ? (footprintBounds.height - imgSize.height) / 2 + : 0); + } + float tx = x + offsetx; + float ty = y + offsety + iso_ho; + + // Snap + var scaleX = 1f; + var scaleY = 1f; + if (token.isSnapToScale()) { + scaleX = imgSize.width / image.getWidth(); + scaleY = imgSize.height / image.getHeight(); + } else { + if (token.getShape() == Token.TokenShape.FIGURE) { + scaleX = footprintBounds.width / image.getHeight(); + scaleY = footprintBounds.width / image.getWidth(); + } else { + scaleX = footprintBounds.width / image.getWidth(); + scaleY = footprintBounds.height / image.getHeight(); + } + } + image.setSize(scaleX * image.getWidth(), scaleY * image.getHeight()); - private void drawHatch(IsometricGrid grid, float x, float y) { - double isoWidth = grid.getSize() * zoneRenderer.getScale(); - int hatchSize = isoWidth > 10 ? (int) isoWidth / 8 : 2; + image.setPosition(tx, -image.getHeight() - ty); - var lineWidth = AppState.getGridSize(); + image.setOriginCenter(); - drawer.line(x - (hatchSize * 2), y - hatchSize, x + (hatchSize * 2), y + hatchSize, lineWidth); - drawer.line(x - (hatchSize * 2), y + hatchSize, x + (hatchSize * 2), y - hatchSize, lineWidth); + // Rotated + if (token.hasFacing() && token.getShape() == Token.TokenShape.TOP_DOWN) { + var originX = image.getWidth() / 2 - token.getAnchorX(); + var originY = image.getHeight() / 2 + token.getAnchorY(); + image.setOrigin(originX, originY); + image.setRotation(token.getFacing() + 90); } - private void renderGrid(SquareGrid grid) { - var scale = (float) zoneRenderer.getScale(); - float gridSize = (grid.getSize() * scale); - Color.argb8888ToColor(tmpColor, zone.getGridColor()); - - drawer.setColor(tmpColor); + timer.stop("tokenlist-6"); + } - var x = hudCam.position.x - hudCam.viewportWidth / 2; - var y = hudCam.position.y - hudCam.viewportHeight / 2; - var w = hudCam.viewportWidth; - var h = hudCam.viewportHeight; + private Sprite getSprite(MD5Key key) { + if (key == null) return null; - var offX = Math.round(zoneRenderer.getViewOffsetX() % gridSize + grid.getOffsetX() * scale); - var offY = Math.round(zoneRenderer.getViewOffsetY() % gridSize + grid.getOffsetY() * scale); + var videoPlayer = videoPlayerMap.get(key); + if (videoPlayer != null) { + boolean skip = false; + if (!videoPlayer.isPlaying()) { + try { + var file = AssetManager.getAssetCacheFile(key); + if (file != null) { + videoPlayer.play(Gdx.files.absolute(file.getAbsolutePath())); + videoPlayer.setVolume(0); + } else skip = true; + + } catch (FileNotFoundException ex) { + log.warn(ex.toString()); + } + } + if (!skip) { + videoPlayer.update(); + var texture = videoPlayer.getTexture(); + var sprite = new Sprite(texture); + sprite.setSize(texture.getWidth(), texture.getHeight()); + return sprite; + } + } - var startCol = ((int) (x / gridSize) * gridSize); - var startRow = ((int) (y / gridSize) * gridSize); + var animation = animationMap.get(key); + if (animation != null) { + var currentFrame = animation.getKeyFrame(stateTime, true); + var sprite = new Sprite(currentFrame); + sprite.setSize(currentFrame.getRegionWidth(), currentFrame.getRegionHeight()); + return sprite; + } - var lineWidth = AppState.getGridSize(); + var sprite = bigSprites.get(key); + if (sprite != null) { + sprite.setSize(sprite.getTexture().getWidth(), sprite.getTexture().getHeight()); + return sprite; + } - for (float row = startRow; row < y + h + gridSize; row += gridSize) - drawer.line(x, Math.round(h - (row + offY)), x + w, Math.round(h - (row + offY)), lineWidth); + return getSprite(key.toString()); + } - for (float col = startCol; col < x + w + gridSize; col += gridSize) - drawer.line(Math.round(col + offX), y, Math.round(col + offX), y + h, lineWidth); + private Sprite getSprite(String name) { + var sprite = fetchedSprites.get(name); + if (sprite != null) { + var region = fetchedRegions.get(name); + sprite.setSize(region.getRegionWidth(), region.getRegionHeight()); + return sprite; } - private FloatArray pathToVertices(GeneralPath path) { - PathIterator iterator = path.getPathIterator(null); - - tmpFloat.clear(); + var region = fetch(name); - while (!iterator.isDone()) { - int type = iterator.currentSegment(floatsFromArea); + if (name != "unknown" && region == null) { + AssetManager.getAssetAsynchronously(new MD5Key(name), this); + return getSprite("unknown"); + } - if (type != PathIterator.SEG_CLOSE) { - tmpFloat.add(floatsFromArea[0], floatsFromArea[1]); - } - iterator.next(); - } + sprite = new Sprite(region); + sprite.setSize(region.getRegionWidth(), region.getRegionHeight()); + + fetchedSprites.put(name, sprite); + return sprite; + } + + private TextureRegion fetch(String regionName) { + var region = fetchedRegions.get(regionName); + if (region != null) return region; + + region = tokenAtlas.findRegion(regionName); + if (region == null) region = atlas.findRegion(regionName); + + fetchedRegions.put(regionName, region); + return region; + } + + private void renderImageBorderAround(ImageBorder border, Rectangle bounds) { + var imagePath = border.getImagePath(); + var index = imagePath.indexOf("border/"); + var bordername = imagePath.substring(index); + + var topRight = fetch(bordername + "/tr"); + var top = fetch(bordername + "/top"); + var topLeft = fetch(bordername + "/tl"); + var left = fetch(bordername + "/left"); + var bottomLeft = fetch(bordername + "/bl"); + var bottom = fetch(bordername + "/bottom"); + var bottomRight = fetch(bordername + "/br"); + var right = fetch(bordername + "/right"); + + // x,y is bottom left of the rectangle + var leftMargin = border.getLeftMargin(); + var rightMargin = border.getRightMargin(); + var topMargin = border.getTopMargin(); + var bottomMargin = border.getBottomMargin(); + + var x = bounds.x - leftMargin; + var y = bounds.y - bottomMargin; + + var width = bounds.width + leftMargin + rightMargin; + var height = bounds.height + topMargin + bottomMargin; + + // Draw Corners + + batch.draw( + bottomLeft, + x + leftMargin - bottomLeft.getRegionWidth(), + y + topMargin - bottomLeft.getRegionHeight()); + batch.draw(bottomRight, x + width - rightMargin, y + topMargin - bottomRight.getRegionHeight()); + batch.draw(topLeft, x + leftMargin - topLeft.getRegionWidth(), y + height - bottomMargin); + batch.draw(topRight, x + width - rightMargin, y + height - bottomMargin); + + tmpTile.setRegion(top); + tmpTile.draw( + batch, + x + leftMargin, + y + height - bottomMargin, + width - leftMargin - rightMargin, + top.getRegionHeight()); + + tmpTile.setRegion(bottom); + tmpTile.draw( + batch, + x + leftMargin, + y + topMargin - bottom.getRegionHeight(), + width - leftMargin - rightMargin, + bottom.getRegionHeight()); + + tmpTile.setRegion(left); + tmpTile.draw( + batch, + x + leftMargin - left.getRegionWidth(), + y + topMargin, + left.getRegionWidth(), + height - topMargin - bottomMargin); + + tmpTile.setRegion(right); + tmpTile.draw( + batch, + x + width - rightMargin, + y + topMargin, + right.getRegionWidth(), + height - topMargin - bottomMargin); + } + + private void renderTokenOverlay(AbstractTokenOverlay overlay, Token token, Object value) { + if (overlay instanceof BarTokenOverlay) + renderTokenOverlay((BarTokenOverlay) overlay, token, value); + else if (overlay instanceof BooleanTokenOverlay) + renderTokenOverlay((BooleanTokenOverlay) overlay, token, value); + } + + private void renderTokenOverlay(BarTokenOverlay overlay, Token token, Object value) { + if (value == null) return; + double val = 0; + if (value instanceof Number) { + val = ((Number) value).doubleValue(); + } else { + try { + val = Double.parseDouble(value.toString()); + } catch (NumberFormatException e) { + return; // Bad value so don't paint. + } // endtry + } // endif + if (val < 0) val = 0; + if (val > 1) val = 1; + + if (overlay instanceof MultipleImageBarTokenOverlay) + renderTokenOverlay((MultipleImageBarTokenOverlay) overlay, token, val); + else if (overlay instanceof SingleImageBarTokenOverlay) + renderTokenOverlay((SingleImageBarTokenOverlay) overlay, token, val); + else if (overlay instanceof TwoToneBarTokenOverlay) + renderTokenOverlay((TwoToneBarTokenOverlay) overlay, token, val); + else if (overlay instanceof DrawnBarTokenOverlay) + renderTokenOverlay((DrawnBarTokenOverlay) overlay, token, val); + else if (overlay instanceof TwoImageBarTokenOverlay) + renderTokenOverlay((TwoImageBarTokenOverlay) overlay, token, val); + } + + private void renderTokenOverlay( + MultipleImageBarTokenOverlay overlay, Token token, double barValue) { + int incr = overlay.findIncrement(barValue); + + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + + // Get the images + var image = getSprite(overlay.getAssetIds()[incr]); + + Dimension d = bounds.getSize(); + Dimension size = new Dimension((int) image.getWidth(), (int) image.getHeight()); + SwingUtil.constrainTo(size, d.width, d.height); + + // Find the position of the image according to the size and side where they are placed + switch (overlay.getSide()) { + case LEFT: + y += d.height - size.height; + break; + case RIGHT: + x += d.width - size.width; + y += d.height - size.height; + break; + case TOP: + y += d.height - size.height; + break; + } - return tmpFloat; + image.setPosition(x, y); + image.setSize(size.width, size.height); + image.draw(batch, overlay.getOpacity() / 100f); + } + + private void renderTokenOverlay( + SingleImageBarTokenOverlay overlay, Token token, double barValue) { + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + + // Get the images + var image = getSprite(overlay.getAssetId()); + + Dimension d = bounds.getSize(); + Dimension size = new Dimension((int) image.getWidth(), (int) image.getHeight()); + SwingUtil.constrainTo(size, d.width, d.height); + + var side = overlay.getSide(); + // Find the position of the images according to the size and side where they are placed + switch (side) { + case LEFT: + y += d.height - size.height; + break; + case RIGHT: + x += d.width - size.width; + y += d.height - size.height; + break; + case TOP: + y += d.height - size.height; + break; } - private void renderDrawableOverlay(PlayerView view, List drawables) { - for(var drawable: drawables.toArray()) - renderDrawable((DrawnElement)drawable); + int width = + (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) + ? overlay.calcBarSize((int) image.getWidth(), barValue) + : (int) image.getWidth(); + int height = + (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) + ? overlay.calcBarSize((int) image.getHeight(), barValue) + : (int) image.getHeight(); + + int screenWidth = + (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) + ? overlay.calcBarSize(size.width, barValue) + : size.width; + int screenHeight = + (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) + ? overlay.calcBarSize(size.height, barValue) + : size.height; + + image.setPosition(x + size.width - screenWidth, y + size.height - screenHeight); + image.setSize(screenWidth, screenHeight); + + var u = image.getU(); + var v = image.getV(); + var u2 = image.getU2(); + var v2 = image.getV2(); + + var wfactor = screenWidth * 1.0f / size.width; + var uDiff = (u2 - u) * wfactor; + image.setU(u2 - uDiff); + + var vfactor = screenHeight * 1.0f / size.height; + var vDiff = (v2 - v) * vfactor; + image.setV(v2 - vDiff); + + image.draw(batch, overlay.getOpacity() / 100f); + + image.setU(u); + image.setV(v); + } + + private void renderTokenOverlay(DrawnBarTokenOverlay overlay, Token token, double barValue) { + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + var side = overlay.getSide(); + var thickness = overlay.getThickness(); + + int width = + (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) ? w : thickness; + int height = + (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) ? h : thickness; + + switch (side) { + case LEFT: + y += h - height; + break; + case RIGHT: + x += w - width; + y += h - height; + break; + case TOP: + y += h - height; + break; } - private void renderDrawable(DrawnElement element) { - var pen = element.getPen(); - var drawable = element.getDrawable(); - - if(drawable instanceof ShapeDrawable) - shapeDrawableDrawer.draw(drawable, pen); - else if(drawable instanceof DrawablesGroup) - for(var groupElement: ((DrawablesGroup)drawable).getDrawableList()) - renderDrawable(groupElement); - else if(drawable instanceof RadiusCellTemplate) - radiusCellTemplateDrawer.draw(drawable, pen); - else if(drawable instanceof LineCellTemplate) - lineCellTemplateDrawer.draw(drawable, pen); - else if(drawable instanceof BlastTemplate) - blastTemplateDrawer.draw(drawable, pen); - else if(drawable instanceof ConeTemplate) - coneTemplateDrawer.draw(drawable, pen); - else if(drawable instanceof BurstTemplate) - burstTemplateDrawer.draw(drawable, pen); - else if(drawable instanceof RadiusTemplate) - radiusTemplateDrawer.draw(drawable, pen); - else if(drawable instanceof LineTemplate) - lineTemplateDrawer.draw(drawable, pen); + if (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) { + width = overlay.calcBarSize(width, barValue); + } else { + height = overlay.calcBarSize(height, barValue); + y += bounds.height - height; } - public void drawString(String text, float centerX, float centerY, Color foreground) { - drawBoxedString(text, centerX, centerY, SwingUtilities.CENTER, null, foreground); + var barColor = overlay.getBarColor(); + tmpColor.set( + barColor.getRed() / 255f, + barColor.getGreen() / 255f, + barColor.getBlue() / 255f, + barColor.getAlpha() / 255f); + drawer.filledRectangle(x, y, width, height, tmpColor); + } + + private void renderTokenOverlay(TwoToneBarTokenOverlay overlay, Token token, double barValue) { + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + var side = overlay.getSide(); + var thickness = overlay.getThickness(); + + int width = + (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) ? w : thickness; + int height = + (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) ? h : thickness; + + switch (side) { + case LEFT: + y += h - height; + break; + case RIGHT: + x += w - width; + y += h - height; + break; + case TOP: + y += h - height; + break; } - public void drawString(String text, float centerX, float centerY) { - drawBoxedString(text, centerX, centerY, SwingUtilities.CENTER, null, Color.WHITE); + var color = overlay.getBgColor(); + tmpColor.set( + color.getRed() / 255f, + color.getGreen() / 255f, + color.getBlue() / 255f, + color.getAlpha() / 255f); + drawer.filledRectangle(x, y, width, height, tmpColor); + + // Draw the bar + int borderSize = thickness > 5 ? 2 : 1; + x += borderSize; + y += borderSize; + width -= borderSize * 2; + height -= borderSize * 2; + if (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) { + width = overlay.calcBarSize(width, barValue); + } else { + height = overlay.calcBarSize(height, barValue); } - public void drawBoxedString(String text, float centerX, float centerY) { - drawBoxedString(text, centerX, centerY, SwingUtilities.CENTER); + color = overlay.getBarColor(); + tmpColor.set( + color.getRed() / 255f, + color.getGreen() / 255f, + color.getBlue() / 255f, + color.getAlpha() / 255f); + drawer.filledRectangle(x, y, width, height, tmpColor); + } + + private void renderTokenOverlay(TwoImageBarTokenOverlay overlay, Token token, double barValue) { + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + + // Get the images + var topImage = getSprite(overlay.getTopAssetId()); + var bottomImage = getSprite(overlay.getBottomAssetId()); + + Dimension d = bounds.getSize(); + Dimension size = new Dimension((int) topImage.getWidth(), (int) topImage.getHeight()); + SwingUtil.constrainTo(size, d.width, d.height); + + var side = overlay.getSide(); + // Find the position of the images according to the size and side where they are placed + switch (side) { + case LEFT: + y += d.height - size.height; + break; + case RIGHT: + x += d.width - size.width; + y += d.height - size.height; + break; + case TOP: + y += d.height - size.height; + break; } - public void drawBoxedString(String text, float x, float y, int justification) { - drawBoxedString(text, x, y, justification, grayLabel, Color.BLACK); + var width = + (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) + ? overlay.calcBarSize((int) topImage.getWidth(), barValue) + : topImage.getWidth(); + var height = + (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) + ? overlay.calcBarSize((int) topImage.getHeight(), barValue) + : topImage.getHeight(); + + var screenWidth = + (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) + ? overlay.calcBarSize(size.width, barValue) + : size.width; + var screenHeight = + (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) + ? overlay.calcBarSize(size.height, barValue) + : size.height; + + bottomImage.setPosition(x, y); + bottomImage.setSize(size.width, size.height); + bottomImage.draw(batch, overlay.getOpacity() / 100f); + + var u = topImage.getU(); + var v = topImage.getV(); + var u2 = topImage.getU2(); + var v2 = topImage.getV2(); + + var wFactor = screenWidth * 1.0f / size.width; + var uDiff = (u2 - u) * wFactor; + + var vFactor = screenHeight * 1.0f / size.height; + var vDiff = (v2 - v) * vFactor; + + topImage.setPosition(x, y); + topImage.setSize(screenWidth, screenHeight); + + if (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) { + topImage.setU(u2 - uDiff); + topImage.setV(v2 - vDiff); + } else { + + topImage.setU2(u + uDiff); + topImage.setV2(v + vDiff); + } + topImage.draw(batch, overlay.getOpacity() / 100f); + + topImage.setU(u); + topImage.setV(v); + topImage.setU2(u2); + topImage.setV2(v2); + } + + private void renderTokenOverlay(BooleanTokenOverlay overlay, Token token, Object value) { + if (!FunctionUtil.getBooleanValue(value)) return; + + if (overlay instanceof ImageTokenOverlay) + renderTokenOverlay((ImageTokenOverlay) overlay, token); + else if (overlay instanceof FlowColorDotTokenOverlay) + renderTokenOverlay((FlowColorDotTokenOverlay) overlay, token); + else if (overlay instanceof YieldTokenOverlay) + renderTokenOverlay((YieldTokenOverlay) overlay, token); + else if (overlay instanceof OTokenOverlay) renderTokenOverlay((OTokenOverlay) overlay, token); + else if (overlay instanceof ColorDotTokenOverlay) + renderTokenOverlay((ColorDotTokenOverlay) overlay, token); + else if (overlay instanceof DiamondTokenOverlay) + renderTokenOverlay((DiamondTokenOverlay) overlay, token); + else if (overlay instanceof TriangleTokenOverlay) + renderTokenOverlay((TriangleTokenOverlay) overlay, token); + else if (overlay instanceof CrossTokenOverlay) + renderTokenOverlay((CrossTokenOverlay) overlay, token); + else if (overlay instanceof XTokenOverlay) renderTokenOverlay((XTokenOverlay) overlay, token); + else if (overlay instanceof ShadedTokenOverlay) + renderTokenOverlay((ShadedTokenOverlay) overlay, token); + } + + private void renderTokenOverlay(ShadedTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + tmpColor.set(1, 1, 1, overlay.getOpacity() / 100); + // FIXME: this should change the transparency of the token. Test this when tokendrawing is moved + // to backbuffer + drawer.setColor(tmpColor); + drawer.filledRectangle(x, y, w, h); + drawer.setColor(Color.WHITE); + } + + private void renderTokenOverlay(ImageTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y; + + // Get the image + java.awt.Rectangle iBounds = overlay.getImageBounds(bounds, token); + Dimension d = iBounds.getSize(); + + var image = getSprite(overlay.getAssetId()); + + Dimension size = new Dimension((int) image.getWidth(), (int) image.getHeight()); + SwingUtil.constrainTo(size, d.width, d.height); + + // Paint it at the right location + int width = size.width; + int height = size.height; + + if (overlay instanceof CornerImageTokenOverlay) { + x += iBounds.x + (d.width - width) / 2; + y -= iBounds.y + (d.height - height) / 2 + iBounds.height; + } else { + x = iBounds.x + (d.width - width) / 2; + y = -(iBounds.y + (d.height - height) / 2) - iBounds.height; } - private void drawBoxedString(String text, float x, float y, int justification, NinePatch background, Color foreground) { - final int BOX_PADDINGX = 10; - final int BOX_PADDINGY = 2; + image.setPosition(x, y); + image.setSize(size.width, size.height); + image.draw(batch, overlay.getOpacity() / 100f); + } + + private void renderTokenOverlay(XTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + var color = overlay.getColor(); + Color.argb8888ToColor(tmpColor, color.getRGB()); + tmpColor.set( + color.getRed() / 255f, + color.getGreen() / 255f, + color.getBlue() / 255f, + overlay.getOpacity() / 100); + + var stroke = overlay.getStroke(); + + drawer.setColor(tmpColor); + drawer.line(x, y, x + w, y + h, stroke.getLineWidth()); + drawer.line(x, y + h, x + w, y, stroke.getLineWidth()); + drawer.setColor(Color.WHITE); + } + + private void renderTokenOverlay(FlowColorDotTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + var color = overlay.getColor(); + Color.argb8888ToColor(tmpColor, color.getRGB()); + tmpColor.set( + color.getRed() / 255f, + color.getGreen() / 255f, + color.getBlue() / 255f, + overlay.getOpacity() / 100); + drawer.setColor(tmpColor); + Shape s = overlay.getShape(bounds, token); + fillArea(new Area(s)); + drawer.setColor(Color.WHITE); + } + + private void renderTokenOverlay(YieldTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + var color = overlay.getColor(); + Color.argb8888ToColor(tmpColor, color.getRGB()); + tmpColor.set( + color.getRed() / 255f, + color.getGreen() / 255f, + color.getBlue() / 255f, + overlay.getOpacity() / 100); + + var stroke = overlay.getStroke(); + var hc = w / 2f; + var vc = h * (1 - 0.134f); + + var floats = + new float[] { + x, y + vc, x + w, y + vc, x + hc, y, + }; - if (text == null) text = ""; + drawer.setColor(tmpColor); + drawer.path(floats, stroke.getLineWidth(), JoinType.POINTY, false); + drawer.setColor(Color.WHITE); + } + + private void renderTokenOverlay(OTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + var color = overlay.getColor(); + Color.argb8888ToColor(tmpColor, color.getRGB()); + tmpColor.set( + color.getRed() / 255f, + color.getGreen() / 255f, + color.getBlue() / 255f, + overlay.getOpacity() / 100); + + var stroke = overlay.getStroke(); + var lineWidth = stroke.getLineWidth(); + + var centerX = x + w / 2f; + var centerY = y + h / 2f; + var radiusX = w / 2f - lineWidth / 2f; + var radiusY = h / 2f - lineWidth / 2f; + + drawer.setColor(tmpColor); + drawer.ellipse(centerX, centerY, radiusX, radiusY, 0, lineWidth); + drawer.setColor(Color.WHITE); + } + + private void renderTokenOverlay(ColorDotTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + + var color = overlay.getColor(); + Color.argb8888ToColor(tmpColor, color.getRGB()); + tmpColor.set( + color.getRed() / 255f, + color.getGreen() / 255f, + color.getBlue() / 255f, + overlay.getOpacity() / 100); + + var size = w * 0.1f; + var offset = w * 0.8f; + + var posX = x + size; + var posY = y + size; + + switch (overlay.getCorner()) { + case SOUTH_EAST: + posX += offset; + break; + case SOUTH_WEST: + break; + case NORTH_EAST: + posX += offset; + posY += offset; + break; + case NORTH_WEST: + posY += offset; + break; + } + drawer.setColor(tmpColor); + drawer.filledEllipse(posX, posY, size, size); + drawer.setColor(Color.WHITE); + } + + private void renderTokenOverlay(DiamondTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + var color = overlay.getColor(); + Color.argb8888ToColor(tmpColor, color.getRGB()); + tmpColor.set( + color.getRed() / 255f, + color.getGreen() / 255f, + color.getBlue() / 255f, + overlay.getOpacity() / 100); + var stroke = overlay.getStroke(); + + var hc = w / 2f; + var vc = h / 2f; + + var floats = + new float[] { + x, y + vc, x + hc, y, x + w, y + vc, x + hc, y + h, + }; - glyphLayout.setText(normalFont, text); - var strWidth = glyphLayout.width; - - var fontHeight = normalFont.getLineHeight(); - - var width = strWidth + BOX_PADDINGX * 2; - var height = fontHeight + BOX_PADDINGY * 2; - - y = y - fontHeight / 2 - BOX_PADDINGY; - - switch (justification) { - case SwingUtilities.CENTER: - x = x - strWidth / 2 - BOX_PADDINGX; - break; - case SwingUtilities.RIGHT: - x = x - strWidth - BOX_PADDINGX; - break; - case SwingUtilities.LEFT: - break; - } - - // Box - if (background != null) { - background.draw(batch, x, y, width, height); - } - - // Renderer message - - var textX = x + BOX_PADDINGX; - var textY = y + height - BOX_PADDINGY - normalFont.getAscent(); - - normalFont.setColor(foreground); - normalFont.draw(batch, text, textX, textY); - } - - private void renderBoard() { - if (!zone.drawBoard()) - return; - - var paint = zone.getBackgroundPaint(); - if(paint instanceof DrawableColorPaint) { - Color.argb8888ToColor(tmpColor, ((DrawableColorPaint)paint).getColor()); - drawer.setColor(tmpColor); - drawer.filledRectangle(cam.position.x - width * zoom / 2f, cam.position.y - height * zoom / 2f, - width * zoom, height * zoom); - } else { - if(background == null) { - var texturePaint = (DrawableTexturePaint)paint; - var image = texturePaint.getAsset().getImage(); - var pix = new Pixmap(image, 0, image.length); - background = new Texture(pix); - background.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat); - pix.dispose(); - } - fillViewportWith(background); - } - - var map = getSprite(zone.getMapAssetId()); - if (map != null) { - map.setPosition(zone.getBoardX(), zone.getBoardY() - map.getHeight()); - map.draw(batch); - } - } - - private void fillViewportWith(Texture texture) { - var w = ((int)(cam.viewportWidth * zoom / texture.getWidth()) + 4) * texture.getWidth(); - var h = ((int)(cam.viewportHeight * zoom / texture.getHeight()) + 4 ) * texture.getHeight(); - - var startX = (cam.position.x - cam.viewportWidth * zoom / 2); - startX = (((int)startX) / texture.getWidth()) * texture.getWidth() - texture.getWidth(); - - var startY = (cam.position.y - cam.viewportHeight * zoom / 2); - startY = (((int)startY) / texture.getHeight()) * texture.getHeight() - texture.getHeight(); + drawer.setColor(tmpColor); + drawer.path(floats, stroke.getLineWidth(), JoinType.POINTY, false); + drawer.setColor(Color.WHITE); + } + + private void renderTokenOverlay(TriangleTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + var color = overlay.getColor(); + Color.argb8888ToColor(tmpColor, color.getRGB()); + tmpColor.set( + color.getRed() / 255f, + color.getGreen() / 255f, + color.getBlue() / 255f, + overlay.getOpacity() / 100); + var stroke = overlay.getStroke(); + + var hc = w / 2f; + var vc = h * (1 - 0.866f); + + var floats = + new float[] { + x, y + vc, x + w, y + vc, x + hc, y + h, + }; - batch.draw(texture, startX, startY, 0, 0, w, h); + drawer.setColor(tmpColor); + drawer.path(floats, stroke.getLineWidth(), JoinType.POINTY, false); + drawer.setColor(Color.WHITE); + } + + private void renderTokenOverlay(CrossTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zone); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + var color = overlay.getColor(); + Color.argb8888ToColor(tmpColor, color.getRGB()); + tmpColor.set( + color.getRed() / 255f, + color.getGreen() / 255f, + color.getBlue() / 255f, + overlay.getOpacity() / 100); + var stroke = overlay.getStroke(); + + drawer.setColor(tmpColor); + drawer.line(x, y + h / 2f, x + w, y + h / 2f, stroke.getLineWidth()); + drawer.line(x + w / 2f, y, x + w / 2f, y + h, stroke.getLineWidth()); + drawer.setColor(Color.WHITE); + } + + // FIXME: I don't like this hardwiring + protected java.awt.Shape getFigureFacingArrow(int angle, int size) { + int base = (int) (size * .75); + int width = (int) (size * .35); + + var facingArrow = new GeneralPath(); + facingArrow.moveTo(base, -width); + facingArrow.lineTo(size, 0); + facingArrow.lineTo(base, width); + facingArrow.lineTo(base, -width); + + return facingArrow.createTransformedShape( + AffineTransform.getRotateInstance(-Math.toRadians(angle))); + } + + // FIXME: I don't like this hardwiring + protected java.awt.Shape getCircleFacingArrow(int angle, int size) { + int base = (int) (size * .75); + int width = (int) (size * .35); + + var facingArrow = new GeneralPath(); + facingArrow.moveTo(base, -width); + facingArrow.lineTo(size, 0); + facingArrow.lineTo(base, width); + facingArrow.lineTo(base, -width); + + return facingArrow.createTransformedShape( + AffineTransform.getRotateInstance(-Math.toRadians(angle))); + } + + // FIXME: I don't like this hardwiring + protected java.awt.Shape getSquareFacingArrow(int angle, int size) { + int base = (int) (size * .75); + int width = (int) (size * .35); + + var facingArrow = new GeneralPath(); + facingArrow.moveTo(0, 0); + facingArrow.lineTo(-(size - base), -width); + facingArrow.lineTo(-(size - base), width); + facingArrow.lineTo(0, 0); + + return facingArrow.createTransformedShape( + AffineTransform.getRotateInstance(-Math.toRadians(angle))); + } + + private void paintClipped(Sprite image, Area bounds, Area clip) { + + backBuffer.begin(); + ScreenUtils.clear(Color.CLEAR); + + setProjectionMatrix(cam.combined); + + image.draw(batch); + + drawer.setColor(Color.CLEAR); + + tmpArea.reset(); + tmpArea.add(bounds); + tmpArea.subtract(clip); + fillArea(tmpArea); + + backBuffer.end(); + + tmpWorldCoord.x = image.getX(); + tmpWorldCoord.y = image.getY(); + tmpWorldCoord.z = 0; + tmpScreenCoord = cam.project(tmpWorldCoord); + + var x = image.getX(); + var y = image.getY(); + var w = image.getWidth(); + var h = image.getHeight(); + var wsrc = image.getWidth() / zoom; + var hsrc = image.getHeight() / zoom; + + batch.draw( + backBuffer.getTexture(), + x, + y, + w, + h, + (int) tmpScreenCoord.x, + (int) tmpScreenCoord.y, + (int) wsrc, + (int) hsrc, + false, + true); + } + + private void renderPath(Path path, TokenFootprint footprint) { + if (path == null) { + return; } - private void renderTokens(List tokenList, PlayerView view, boolean figuresOnly) { - boolean isGMView = view.isGMView(); // speed things up - - if (visibleScreenArea == null) - return; - - for (Token token : tokenList) { - if (token.getShape() != Token.TokenShape.FIGURE && figuresOnly && !token.isAlwaysVisible()) { - continue; - } - - timer.start("tokenlist-1"); - try { - if (token.isStamp() && zoneRenderer.isTokenMoving(token)) { - continue; - } - // Don't bother if it's not visible - // NOTE: Not going to use zone.isTokenVisible as it is very slow. In fact, it's faster - // to just draw the tokens and let them be clipped - if ((!token.isVisible() || token.isGMStamp()) && !isGMView) { - continue; - } - if (token.isVisibleOnlyToOwner() && !AppUtil.playerOwns(token)) { - continue; - } - } finally { - // This ensures that the timer is always stopped - timer.stop("tokenlist-1"); - } - - java.awt.Rectangle footprintBounds = token.getBounds(zone); - java.awt.Rectangle origBounds = (java.awt.Rectangle) footprintBounds.clone(); - Area tokenBounds = new Area(footprintBounds); - - timer.start("tokenlist-1d"); - if (token.hasFacing() && token.getShape() == Token.TokenShape.TOP_DOWN) { - double sx = footprintBounds.width / 2f + footprintBounds.x - (token.getAnchor().x); - double sy = footprintBounds.height / 2f + footprintBounds.y - (token.getAnchor().y); - tokenBounds.transform( - AffineTransform.getRotateInstance( - Math.toRadians(-token.getFacing() - 90), sx, sy)); // facing - // defaults to down, or -90 degrees - } - timer.stop("tokenlist-1d"); - - timer.start("tokenlist-1e"); - try { - - // Vision visibility - if (!isGMView && token.isToken() && zoneRenderer.getZoneView().isUsingVision()) { - if (!GraphicsUtil.intersects(visibleScreenArea, tokenBounds)) { - continue; - } - } - } finally { - // This ensures that the timer is always stopped - timer.stop("tokenlist-1e"); - } - - // Previous path - timer.start("renderTokens:ShowPath"); - if (zoneRenderer.getShowPathList().contains(token) && token.getLastPath() != null) { - renderPath(token.getLastPath(), token.getFootprint(zone.getGrid())); - } - timer.stop("renderTokens:ShowPath"); - - // get token image sprite, using image table if present - var imageKey = token.getTokenImageAssetId(); - Sprite image = getSprite(imageKey); - - prepareTokenSprite(image, token, footprintBounds); - - // Render Halo - if (token.hasHalo()) { - drawer.setDefaultLineWidth(AppPreferences.getHaloLineWidth()); - Color.argb8888ToColor(tmpColor, token.getHaloColor().getRGB()); - drawer.setColor(tmpColor); - drawArea(zone.getGrid().getTokenCellArea(tokenBounds)); - } - - // Calculate alpha Transparency from token and use opacity for indicating that token is moving - float opacity = token.getTokenOpacity(); - if (zoneRenderer.isTokenMoving(token)) opacity = opacity / 2.0f; - - Area tokenCellArea = zone.getGrid().getTokenCellArea(tokenBounds); - Area cellArea = new Area(visibleScreenArea); - cellArea.intersect(tokenCellArea); - - // Finally render the token image - timer.start("tokenlist-7"); - image.setColor(1, 1, 1, opacity); - if (!isGMView && zoneRenderer.getZoneView().isUsingVision() && (token.getShape() == Token.TokenShape.FIGURE)) { - if (zone.getGrid().checkCenterRegion(tokenCellArea.getBounds(), visibleScreenArea)) { - // if we can see the centre, draw the whole token - image.draw(batch); - } else { - // else draw the clipped token - paintClipped(image, tokenCellArea, cellArea); - } - } else if (!isGMView && zoneRenderer.getZoneView().isUsingVision() && token.isAlwaysVisible()) { - // Jamz: Always Visible tokens will get rendered again here to place on top of FoW - if (GraphicsUtil.intersects(visibleScreenArea, tokenCellArea)) { - // if we can see a portion of the stamp/token, draw the whole thing, defaults to 2/9ths - if (zone.getGrid() - .checkRegion(tokenCellArea.getBounds(), visibleScreenArea, token.getAlwaysVisibleTolerance())) { - - image.draw(batch); - - } else { - // else draw the clipped stamp/token - // This will only show the part of the token that does not have VBL on it - // as any VBL on the token will block LOS, affecting the clipping. - paintClipped(image, tokenCellArea, cellArea); - } - } - } else { - // fallthrough normal token rendered against visible area - - if (zoneRenderer.isTokenInNeedOfClipping(token, tokenCellArea, isGMView)) { - paintClipped(image, tokenCellArea, cellArea); - } else - image.draw(batch); - } - image.setColor(Color.WHITE); - timer.stop("tokenlist-7"); - - timer.start("tokenlist-8"); - - // Facing - if (token.hasFacing()) { - Token.TokenShape tokenType = token.getShape(); - switch (tokenType) { - case FIGURE: - if (token.getHasImageTable() - && token.hasFacing() - && AppPreferences.getForceFacingArrow() == false) { - break; - } - java.awt.Shape arrow = getFigureFacingArrow(token.getFacing(), footprintBounds.width / 2); - - if (!zone.getGrid().isIsometric()) { - arrow = getCircleFacingArrow(token.getFacing(), footprintBounds.width / 2); - } - - float fx = origBounds.x + origBounds.width / zoom / 2f; - float fy = origBounds.y + origBounds.height / zoom / 2f; - - - tmpMatrix.idt(); - tmpMatrix.translate(fx, -fy, 0); - batch.setTransformMatrix(tmpMatrix); - drawer.update(); - - - if (token.getFacing() < 0) - drawer.setColor(Color.YELLOW); - else - drawer.setColor(1, 1, 0, 0.5f); - - var arrowArea = new Area(arrow); - fillArea(arrowArea); - - drawer.setColor(Color.DARK_GRAY); - drawArea(arrowArea); - - - break; - case TOP_DOWN: - if (AppPreferences.getForceFacingArrow() == false) { - break; - } - case CIRCLE: - arrow = getCircleFacingArrow(token.getFacing(), footprintBounds.width / 2); - if (zone.getGrid().isIsometric()) { - arrow = getFigureFacingArrow(token.getFacing(), footprintBounds.width / 2); - } - arrowArea = new Area(arrow); - - float cx = origBounds.x + origBounds.width / 2f; - float cy = origBounds.y + origBounds.height / 2f; - - tmpMatrix.idt(); - tmpMatrix.translate(cx, -cy, 0); - batch.setTransformMatrix(tmpMatrix); - drawer.update(); - drawer.setColor(Color.YELLOW); - - fillArea(arrowArea); - drawer.setColor(Color.DARK_GRAY); - drawer.setDefaultLineWidth(1); - - drawArea(arrowArea); - tmpMatrix.idt(); - batch.setTransformMatrix(tmpMatrix); - drawer.update(); - break; - case SQUARE: - if (zone.getGrid().isIsometric()) { - arrow = getFigureFacingArrow(token.getFacing(), footprintBounds.width / 2); - cx = origBounds.x + origBounds.width / 2f; - cy = origBounds.y + origBounds.height / 2f; - } else { - int facing = token.getFacing(); - arrow = getSquareFacingArrow(facing, footprintBounds.width / 2); - - cx = origBounds.x + origBounds.width / 2f; - cy = origBounds.y + origBounds.height / 2f; - - // Find the edge of the image - double xp = origBounds.getWidth() / 2; - double yp = origBounds.getHeight() / 2; - if (facing >= 45 && facing <= 135 || facing >= 225 && facing <= 315) { - xp = (int) (yp / Math.tan(Math.toRadians(facing))); - if (facing > 180) { - xp = -xp; - yp = -yp; - } - } else { - yp = (int) (xp * Math.tan(Math.toRadians(facing))); - if (facing > 90 && facing < 270) { - xp = -xp; - yp = -yp; - } - } - cx += xp; - cy -= yp; - } - - arrowArea = new Area(arrow); - - tmpMatrix.translate(cx, -cy, 0); - batch.setTransformMatrix(tmpMatrix); - drawer.update(); - drawer.setColor(Color.YELLOW); - - fillArea(arrowArea); - drawer.setColor(Color.DARK_GRAY); - drawArea(arrowArea); - batch.setTransformMatrix(tmpMatrix.idt()); - drawer.update(); - break; - - } - } - timer.stop("tokenlist-8"); - - timer.start("tokenlist-9"); - - // Check each of the set values - for (String state : MapTool.getCampaign().getTokenStatesMap().keySet()) { - Object stateValue = token.getState(state); - AbstractTokenOverlay overlay = MapTool.getCampaign().getTokenStatesMap().get(state); - if (stateValue instanceof AbstractTokenOverlay) { - overlay = (AbstractTokenOverlay) stateValue; - } - if (overlay == null - || overlay.isMouseover() && token != zoneRenderer.getTokenUnderMouse() - || !overlay.showPlayer(token, MapTool.getPlayer())) { - continue; - } - renderTokenOverlay(overlay, token, stateValue); - } - timer.stop("tokenlist-9"); - - timer.start("tokenlist-10"); - - for (String bar : MapTool.getCampaign().getTokenBarsMap().keySet()) { - Object barValue = token.getState(bar); - BarTokenOverlay overlay = MapTool.getCampaign().getTokenBarsMap().get(bar); - if (overlay == null - || overlay.isMouseover() && token != zoneRenderer.getTokenUnderMouse() - || !overlay.showPlayer(token, MapTool.getPlayer())) { - continue; - } - renderTokenOverlay(overlay, token, barValue); - } // endfor - timer.stop("tokenlist-10"); - - timer.start("tokenlist-11"); - // Keep track of which tokens have been drawn so we can perform post-processing on them later - // (such as selection borders and names/labels) - if (!zoneRenderer.getActiveLayer().equals(token.getLayer())) - continue; - - timer.stop("tokenlist-11"); - timer.start("tokenlist-12"); - - boolean useIF = MapTool.getServerPolicy().isUseIndividualFOW(); - - // Selection and labels - - var tokenRectangle = token.getBounds(zone); - var gdxTokenRectangle = new Rectangle(tokenRectangle.x, - -tokenRectangle.y - tokenRectangle.height, - tokenRectangle.width, - tokenRectangle.height); - boolean isSelected = zoneRenderer.getSelectedTokenSet().contains(token.getId()); - if (isSelected) { - ImageBorder selectedBorder = - token.isStamp() ? AppStyle.selectedStampBorder : AppStyle.selectedBorder; - if (zoneRenderer.getHighlightCommonMacros().contains(token)) { - selectedBorder = AppStyle.commonMacroBorder; - } - if (!AppUtil.playerOwns(token)) { - selectedBorder = AppStyle.selectedUnownedBorder; - } - if (useIF && !token.isStamp() && zoneRenderer.getZoneView().isUsingVision()) { - Tool tool = MapTool.getFrame().getToolbox().getSelectedTool(); - if (tool - instanceof - RectangleExposeTool // XXX Change to use marker interface such as ExposeTool? - || tool instanceof OvalExposeTool - || tool instanceof FreehandExposeTool - || tool instanceof PolygonExposeTool) { - selectedBorder = AppConstants.FOW_TOOLS_BORDER; - } - } - - setProjectionMatrix(hudCam.combined); - tmpWorldCoord.set(gdxTokenRectangle.x, gdxTokenRectangle.y, 0); - cam.project(tmpWorldCoord); - gdxTokenRectangle.set(tmpWorldCoord.x, tmpWorldCoord.y, gdxTokenRectangle.width/zoom, gdxTokenRectangle.height/zoom); - - if (token.hasFacing() - && (token.getShape() == Token.TokenShape.TOP_DOWN || token.isStamp())) { - - var transX = gdxTokenRectangle.width/2f - token.getAnchor().x/zoom; - var transY = gdxTokenRectangle.height/2f + token.getAnchor().y/zoom; - - tmpMatrix.idt(); - tmpMatrix.translate(tmpWorldCoord.x + transX, tmpWorldCoord.y + transY, 0); - tmpMatrix.rotate(0, 0,1, token.getFacing() + 90); - tmpMatrix.translate(-transX, -transY, 0); - gdxTokenRectangle.x = 0; - gdxTokenRectangle.y = 0; - batch.setTransformMatrix(tmpMatrix); - renderImageBorderAround(selectedBorder, gdxTokenRectangle); - tmpMatrix.idt(); - batch.setTransformMatrix(tmpMatrix); - - } else { - renderImageBorderAround(selectedBorder, gdxTokenRectangle); - } - - setProjectionMatrix(cam.combined); - } - - // Token names and labels - boolean showCurrentTokenLabel = AppState.isShowTokenNames() || token == zoneRenderer.getTokenUnderMouse(); - - // if policy does not auto-reveal FoW, check if fog covers the token (slow) - if (showCurrentTokenLabel - && !isGMView - && (!zoneRenderer.getZoneView().isUsingVision() || !MapTool.getServerPolicy().isAutoRevealOnMovement()) - && !zone.isTokenVisible(token)) { - showCurrentTokenLabel = false; - } - if (showCurrentTokenLabel) { - itemRenderList.add(new TokenLabelRenderer(token, isGMView)); - } - timer.stop("tokenlist-12"); - } - - timer.start("tokenlist-13"); - - var tokenStackMap = zoneRenderer.getTokenStackMap(); - - // Stacks - if (!tokenList.isEmpty() - && !tokenList.get(0).isStamp()) { // TODO: find a cleaner way to indicate token layer - if (tokenStackMap != null) { // FIXME Needed to prevent NPE but how can it be null? - for (Token token : tokenStackMap.keySet()) { - var tokenRectangle = token.getBounds(zone); - var stackImage = fetch("stack"); - batch.draw( - stackImage, - tokenRectangle.x + tokenRectangle.width - stackImage.getRegionWidth() + 2, - -tokenRectangle.y - stackImage.getRegionHeight() + 2); - } - } - } - timer.stop("tokenlist-13"); + if (path.getCellPath().isEmpty()) { + return; } + Grid grid = zone.getGrid(); - private void prepareTokenSprite(Sprite image, Token token, java.awt.Rectangle footprintBounds) { - image.setRotation(0); + // log.info("Rendering path..." + System.currentTimeMillis()); - // Tokens are centered on the image center point - float x = footprintBounds.x; - float y = footprintBounds.y; + java.awt.Rectangle footprintBounds = footprint.getBounds(grid); + if (path.getCellPath().get(0) instanceof CellPoint) { + timer.start("renderPath-1"); + CellPoint previousPoint = null; + Point previousHalfPoint = null; - timer.start("tokenlist-5"); + Path pathCP = (Path) path; + List cellPath = pathCP.getCellPath(); - // handle flipping - image.setFlip(token.isFlippedX(), token.isFlippedY()); - timer.stop("tokenlist-5"); + Set pathSet = new HashSet(); + List waypointList = new LinkedList(); + for (CellPoint p : cellPath) { + pathSet.addAll(footprint.getOccupiedCells(p)); - image.setOriginCenter(); - - timer.start("tokenlist-5a"); - if (token.isFlippedIso()) { - var assetId = token.getImageAssetId(); - if (!isoSprites.containsKey(assetId)) { - var workImage = IsometricGrid.isoImage(ImageManager.getImage(assetId)); - try { - var bytes = ImageUtil.imageToBytes(workImage, "png"); - var pix = new Pixmap(bytes, 0, bytes.length); - image = new Sprite(new Texture(pix)); - pix.dispose(); - } catch (Exception e) { - } - isoSprites.put(assetId, image); - } else { - image = isoSprites.get(assetId); - } - token.setHeight((int) image.getHeight()); - token.setWidth((int) image.getWidth()); - footprintBounds = token.getBounds(zone); - } - timer.stop("tokenlist-5a"); - - timer.start("tokenlist-6"); - // Position - // For Isometric Grid we alter the height offset - float iso_ho = 0; - java.awt.Dimension imgSize = new java.awt.Dimension((int) image.getWidth(), (int) image.getHeight()); - if (token.getShape() == Token.TokenShape.FIGURE) { - float th = token.getHeight() * (float) footprintBounds.width / token.getWidth(); - iso_ho = footprintBounds.height - th; - footprintBounds = - new java.awt.Rectangle( - footprintBounds.x, - footprintBounds.y - (int) iso_ho, - footprintBounds.width, - (int) th); + if (pathCP.isWaypoint(p) && previousPoint != null) { + ZonePoint zp = grid.convert(p); + zp.x += footprintBounds.width / 2; + zp.y += footprintBounds.height / 2; + waypointList.add(zp); } - SwingUtil.constrainTo(imgSize, footprintBounds.width, footprintBounds.height); - - int offsetx = 0; - int offsety = 0; - if (token.isSnapToScale()) { - offsetx = - (int) - (imgSize.width < footprintBounds.width - ? (footprintBounds.width - imgSize.width) / 2 - : 0); - offsety = - (int) - (imgSize.height < footprintBounds.height - ? (footprintBounds.height - imgSize.height) / 2 - : 0); - - + previousPoint = p; + } + + // Don't show the final path point as a waypoint, it's redundant, and ugly + if (waypointList.size() > 0) { + waypointList.remove(waypointList.size() - 1); + } + timer.stop("renderPath-1"); + // log.info("pathSet size: " + pathSet.size()); + + timer.start("renderPath-2"); + Dimension cellOffset = zone.getGrid().getCellOffset(); + for (CellPoint p : pathSet) { + ZonePoint zp = grid.convert(p); + zp.x += grid.getCellWidth() / 2 + cellOffset.width; + zp.y += grid.getCellHeight() / 2 + cellOffset.height; + highlightCell(zp, getCellHighlight(), 1.0f); + } + if (AppState.getShowMovementMeasurements()) { + double cellAdj = grid.isHex() ? 2.5 : 2; + for (CellPoint p : cellPath) { + ZonePoint zp = grid.convert(p); + zp.x += grid.getCellWidth() / cellAdj + cellOffset.width; + zp.y += grid.getCellHeight() / cellAdj + cellOffset.height; + addDistanceText( + zp, + 1.0f, + (float) p.getDistanceTraveled(zone), + (float) p.getDistanceTraveledWithoutTerrain()); } - float tx = x + offsetx; - float ty = y + offsety + iso_ho; - - // Snap - var scaleX = 1f; - var scaleY = 1f; - if (token.isSnapToScale()) { - scaleX = imgSize.width / image.getWidth(); - scaleY = imgSize.height / image.getHeight(); + } + int w = 0; + for (ZonePoint p : waypointList) { + ZonePoint zp = new ZonePoint(p.x + cellOffset.width, p.y + cellOffset.height); + highlightCell(zp, fetch("redDot"), .333f); + } + + // Line path + if (grid.getCapabilities().isPathLineSupported()) { + ZonePoint lineOffset; + if (grid.isHex()) { + lineOffset = new ZonePoint(0, 0); } else { - if (token.getShape() == Token.TokenShape.FIGURE) { - scaleX = footprintBounds.width / image.getHeight(); - scaleY = footprintBounds.width / image.getWidth(); - } else { - scaleX = footprintBounds.width / image.getWidth(); - scaleY = footprintBounds.height / image.getHeight(); - } + lineOffset = + new ZonePoint( + footprintBounds.x + footprintBounds.width / 2 - grid.getOffsetX(), + footprintBounds.y + footprintBounds.height / 2 - grid.getOffsetY()); } - image.setSize(scaleX * image.getWidth(), scaleY * image.getHeight()); - image.setPosition(tx, -image.getHeight() - ty); + int xOffset = (int) (lineOffset.x); + int yOffset = (int) (lineOffset.y); - image.setOriginCenter(); + drawer.setColor(Color.BLUE); - // Rotated - if (token.hasFacing() && token.getShape() == Token.TokenShape.TOP_DOWN) { - var originX = image.getWidth() / 2 - token.getAnchorX(); - var originY = image.getHeight() / 2 + token.getAnchorY(); - image.setOrigin(originX, originY); - image.setRotation(token.getFacing() + 90); - } - - timer.stop("tokenlist-6"); - } - - private Sprite getSprite(MD5Key key) { - if (key == null) - return null; - - var videoPlayer = videoPlayerMap.get(key); - if(videoPlayer != null) { - boolean skip = false; - if(!videoPlayer.isPlaying()) { - try { - var file = AssetManager.getAssetCacheFile(key); - if (file != null) { - videoPlayer.play(Gdx.files.absolute(file.getAbsolutePath())); - videoPlayer.setVolume(0); - } else skip = true; - - } catch (FileNotFoundException ex) { - log.warn(ex.toString()); - } - } - if(!skip) { - videoPlayer.update(); - var texture = videoPlayer.getTexture(); - var sprite = new Sprite(texture); - sprite.setSize(texture.getWidth(), texture.getHeight()); - return sprite; + previousPoint = null; + tmpFloat.clear(); + for (CellPoint p : cellPath) { + if (previousPoint != null) { + ZonePoint ozp = grid.convert(previousPoint); + int ox = ozp.x; + int oy = ozp.y; + + ZonePoint dzp = grid.convert(p); + int dx = dzp.x; + int dy = dzp.y; + + int halfx = ((ox + dx) / 2); + int halfy = ((oy + dy) / 2); + Point halfPoint = new Point(halfx, halfy); + + if (previousHalfPoint != null) { + int x1 = previousHalfPoint.x + xOffset; + int y1 = previousHalfPoint.y + yOffset; + + int x2 = ox + xOffset; + int y2 = oy + yOffset; + + int xh = halfPoint.x + xOffset; + int yh = halfPoint.y + yOffset; + + tmpVector0.set(x1, -y1); + tmpVector1.set(x2, -y2); + tmpVector2.set(xh, -yh); + + for (var i = 1; i <= pointsPerBezier; i++) { + Bezier.quadratic( + tmpVectorOut, + i / pointsPerBezier, + tmpVector0, + tmpVector1, + tmpVector2, + tmpVector); + tmpFloat.add(tmpVectorOut.x, tmpVectorOut.y); + } } + previousHalfPoint = halfPoint; + } + previousPoint = p; } - - var animation = animationMap.get(key); - if(animation != null) { - var currentFrame = animation.getKeyFrame(stateTime, true); - var sprite = new Sprite(currentFrame); - sprite.setSize(currentFrame.getRegionWidth(), currentFrame.getRegionHeight()); - return sprite; + drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.SMOOTH, true); + } + drawer.setColor(Color.WHITE); + timer.stop("renderPath-2"); + } else { + timer.start("renderPath-3"); + // Zone point/gridless path + + // Line + var highlight = tmpColor; + highlight.set(1, 1, 1, 80 / 255f); + var highlightStroke = 9f; + + ScreenPoint lastPoint = null; + + Path pathZP = (Path) path; + List pathList = pathZP.getCellPath(); + for (ZonePoint zp : pathList) { + if (lastPoint == null) { + lastPoint = + ScreenPoint.fromZonePointRnd( + zoneRenderer, + zp.x + (footprintBounds.width / 2) * footprint.getScale(), + zp.y + (footprintBounds.height / 2) * footprint.getScale()); + continue; } - - var sprite = bigSprites.get(key); - if (sprite != null) { - sprite.setSize(sprite.getTexture().getWidth(), sprite.getTexture().getHeight()); - return sprite; + ScreenPoint nextPoint = + ScreenPoint.fromZonePoint( + zoneRenderer, + zp.x + (footprintBounds.width / 2) * footprint.getScale(), + zp.y + (footprintBounds.height / 2) * footprint.getScale()); + + drawer.line( + (float) lastPoint.x, + -(float) lastPoint.y, + (float) nextPoint.x, + -(float) nextPoint.y, + highlight, + highlightStroke); + + drawer.line( + (float) lastPoint.x, + -(float) lastPoint.y, + (float) nextPoint.x, + -(float) nextPoint.y, + Color.BLUE, + drawer.getDefaultLineWidth()); + lastPoint = nextPoint; + } + + // Waypoints + boolean originPoint = true; + for (ZonePoint p : pathList) { + // Skip the first point (it's the path origin) + if (originPoint) { + originPoint = false; + continue; } - - return getSprite(key.toString()); - } - - - private Sprite getSprite(String name) { - var sprite = fetchedSprites.get(name); - if (sprite != null) { - var region = fetchedRegions.get(name); - sprite.setSize(region.getRegionWidth(), region.getRegionHeight()); - return sprite; + // Skip the final point + if (p == pathList.get(pathList.size() - 1)) { + continue; } + p = + new ZonePoint( + (p.x + (footprintBounds.width / 2)), (p.y + (footprintBounds.height / 2))); + highlightCell(p, fetch("redDot"), .333f); + } + timer.stop("renderPath-3"); + } + } - var region = fetch(name); - - if (name != "unknown" && region == null) { - AssetManager.getAssetAsynchronously(new MD5Key(name), this); - return getSprite("unknown"); - } + private TextureRegion getCellHighlight() { + if (zone.getGrid() instanceof SquareGrid) return fetch("whiteBorder"); + if (zone.getGrid() instanceof HexGrid) return fetch("hexBorder"); + if (zone.getGrid() instanceof IsometricGrid) return fetch("isoBorder"); + return null; + } - sprite = new Sprite(region); - sprite.setSize(region.getRegionWidth(), region.getRegionHeight()); + private void addDistanceText( + ZonePoint point, float size, float distance, float distanceWithoutTerrain) { + if (distance == 0) return; - fetchedSprites.put(name, sprite); - return sprite; - } + Grid grid = zone.getGrid(); + float cwidth = (float) grid.getCellWidth(); + float cheight = (float) grid.getCellHeight(); + float iwidth = cwidth * size; + float iheight = cheight * size; - private TextureRegion fetch(String regionName) { - var region = fetchedRegions.get(regionName); - if (region != null) - return region; + var cellX = (point.x - iwidth / 2); + var cellY = (-point.y + iheight / 2) + distanceFont.getLineHeight(); - region = tokenAtlas.findRegion(regionName); - if (region == null) - region = atlas.findRegion(regionName); + // Draw distance for each cell + var textOffset = 7 * distanceFontScale; // 7 pixels at 100% zoom & grid size of 50 - fetchedRegions.put(regionName, region); - return region; + String distanceText = NumberFormat.getInstance().format(distance); + if (log.isDebugEnabled() || showAstarDebugging) { + distanceText += " (" + NumberFormat.getInstance().format(distanceWithoutTerrain) + ")"; + // fontSize = (int) (fontSize * 0.75); } + glyphLayout.setText(distanceFont, distanceText); - private void renderImageBorderAround(ImageBorder border, Rectangle bounds) { - var imagePath = border.getImagePath(); - var index = imagePath.indexOf("border/"); - var bordername = imagePath.substring(index); + var textWidth = glyphLayout.width; - var topRight = fetch(bordername + "/tr"); - var top = fetch(bordername + "/top"); - var topLeft = fetch(bordername + "/tl"); - var left = fetch(bordername + "/left"); - var bottomLeft = fetch(bordername + "/bl"); - var bottom = fetch(bordername + "/bottom"); - var bottomRight = fetch(bordername + "/br"); - var right = fetch(bordername + "/right"); + distanceFont.setColor(Color.BLACK); - //x,y is bottom left of the rectangle - var leftMargin = border.getLeftMargin(); - var rightMargin = border.getRightMargin(); - var topMargin = border.getTopMargin(); - var bottomMargin = border.getBottomMargin(); + // log.info("Text: [" + distanceText + "], width: " + textWidth + ", font size: " + fontSize + + // ", offset: " + textOffset + ", fontScale: " + fontScale+ ", getScale(): " + getScale()); - var x = bounds.x - leftMargin; - var y = bounds.y - bottomMargin; + distanceFont.draw( + batch, + distanceText, + cellX + cwidth - textWidth - textOffset, + cellY - cheight /*- textOffset*/); + } - var width = bounds.width + leftMargin + rightMargin; - var height = bounds.height + topMargin + bottomMargin; + private void highlightCell(ZonePoint zp, TextureRegion image, float size) { + Grid grid = zone.getGrid(); + float cwidth = (float) grid.getCellWidth() * size; + float cheight = (float) grid.getCellHeight() * size; - // Draw Corners + float rotation = 0; + if (zone.getGrid() instanceof HexGridHorizontal) rotation = 90; - batch.draw(bottomLeft, x + leftMargin - bottomLeft.getRegionWidth(), y + topMargin - bottomLeft.getRegionHeight()); - batch.draw(bottomRight, x + width - rightMargin, y + topMargin - bottomRight.getRegionHeight()); - batch.draw(topLeft, x + leftMargin - topLeft.getRegionWidth(), y + height - bottomMargin); - batch.draw(topRight, x + width - rightMargin, y + height - bottomMargin); + batch.draw( + image, zp.x - cwidth / 2, -zp.y - cheight / 2, 0, 0, cwidth, cheight, 1f, 1f, rotation); + } - tmpTile.setRegion(top); - tmpTile.draw(batch, x + leftMargin, y + height - bottomMargin, width - leftMargin - rightMargin, top.getRegionHeight()); - - tmpTile.setRegion(bottom); - tmpTile.draw(batch, x + leftMargin, y + topMargin - bottom.getRegionHeight(), width - leftMargin - rightMargin, bottom.getRegionHeight()); - - tmpTile.setRegion(left); - tmpTile.draw(batch, x + leftMargin - left.getRegionWidth(), y + topMargin, left.getRegionWidth(), height - topMargin - bottomMargin); - - tmpTile.setRegion(right); - tmpTile.draw(batch, x + width - rightMargin, y + topMargin, right.getRegionWidth(), height - topMargin - bottomMargin); + private void createScreenShot(String fileName) { + var handle = Gdx.files.absolute(fileName + ".png"); + if (!handle.exists()) { + batch.flush(); + var pix = Pixmap.createFromFrameBuffer(0, 0, width, height); + PixmapIO.writePNG(handle, pix, DEFAULT_COMPRESSION, true); + pix.dispose(); } - - private void renderTokenOverlay(AbstractTokenOverlay overlay, Token token, Object value) { - if (overlay instanceof BarTokenOverlay) - renderTokenOverlay((BarTokenOverlay) overlay, token, value); - else if (overlay instanceof BooleanTokenOverlay) - renderTokenOverlay((BooleanTokenOverlay) overlay, token, value); + } + + private void disposeZoneResources() { + if (!initialized) return; + + // cam.zoom = 1.0f; + offsetX = 0; + offsetY = 0; + fogX = null; + fogY = null; + fetchedRegions.clear(); + fetchedSprites.clear(); + var oldPacker = packer; + packer = createPacker(); + oldPacker.dispose(); + + Gdx.app.postRunnable( + () -> { + disposeZoneTextures(); + }); + } + + private void disposeZoneTextures() { + updateCam(); + var background = this.background; + this.background = null; + if (background != null) { + background.dispose(); } - private void renderTokenOverlay(BarTokenOverlay overlay, Token token, Object value) { - if (value == null) return; - double val = 0; - if (value instanceof Number) { - val = ((Number) value).doubleValue(); - } else { - try { - val = Double.parseDouble(value.toString()); - } catch (NumberFormatException e) { - return; // Bad value so don't paint. - } // endtry - } // endif - if (val < 0) val = 0; - if (val > 1) val = 1; - - if (overlay instanceof MultipleImageBarTokenOverlay) - renderTokenOverlay((MultipleImageBarTokenOverlay) overlay, token, val); - else if (overlay instanceof SingleImageBarTokenOverlay) - renderTokenOverlay((SingleImageBarTokenOverlay) overlay, token, val); - else if (overlay instanceof TwoToneBarTokenOverlay) - renderTokenOverlay((TwoToneBarTokenOverlay) overlay, token, val); - else if (overlay instanceof DrawnBarTokenOverlay) - renderTokenOverlay((DrawnBarTokenOverlay) overlay, token, val); - else if (overlay instanceof TwoImageBarTokenOverlay) - renderTokenOverlay((TwoImageBarTokenOverlay) overlay, token, val); + var fog = this.fog; + this.fog = null; + if (fog != null) { + fog.dispose(); } - private void renderTokenOverlay(MultipleImageBarTokenOverlay overlay, Token token, double barValue) { - int incr = overlay.findIncrement(barValue); - - var bounds = token.getBounds(zone); - var x = bounds.x; - var y = -bounds.y - bounds.height; - - // Get the images - var image = getSprite(overlay.getAssetIds()[incr]); - - Dimension d = bounds.getSize(); - Dimension size = new Dimension((int) image.getWidth(), (int) image.getHeight()); - SwingUtil.constrainTo(size, d.width, d.height); - - // Find the position of the image according to the size and side where they are placed - switch (overlay.getSide()) { - case LEFT: - y += d.height - size.height; - break; - case RIGHT: - x += d.width - size.width; - y += d.height - size.height; - break; - case TOP: - y += d.height - size.height; - break; - } - - image.setPosition(x, y); - image.setSize(size.width, size.height); - image.draw(batch, overlay.getOpacity() / 100f); + for (var sprite : isoSprites.values()) { + sprite.getTexture().dispose(); } + isoSprites.clear(); - private void renderTokenOverlay(SingleImageBarTokenOverlay overlay, Token token, double barValue) { - var bounds = token.getBounds(zone); - var x = bounds.x; - var y = -bounds.y - bounds.height; - - // Get the images - var image = getSprite(overlay.getAssetId()); - - Dimension d = bounds.getSize(); - Dimension size = new Dimension((int) image.getWidth(), (int) image.getHeight()); - SwingUtil.constrainTo(size, d.width, d.height); - - var side = overlay.getSide(); - // Find the position of the images according to the size and side where they are placed - switch (side) { - case LEFT: - y += d.height - size.height; - break; - case RIGHT: - x += d.width - size.width; - y += d.height - size.height; - break; - case TOP: - y += d.height - size.height; - break; - } - - int width = - (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) - ? overlay.calcBarSize((int) image.getWidth(), barValue) - : (int) image.getWidth(); - int height = - (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) - ? overlay.calcBarSize((int) image.getHeight(), barValue) - : (int) image.getHeight(); - - int screenWidth = - (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) - ? overlay.calcBarSize(size.width, barValue) - : size.width; - int screenHeight = - (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) - ? overlay.calcBarSize(size.height, barValue) - : size.height; - - image.setPosition(x + size.width - screenWidth, y + size.height - screenHeight); - image.setSize(screenWidth, screenHeight); - - var u = image.getU(); - var v = image.getV(); - var u2 = image.getU2(); - var v2 = image.getV2(); - - var wfactor = screenWidth * 1.0f / size.width; - var uDiff = (u2 - u) * wfactor; - image.setU(u2 - uDiff); - - var vfactor = screenHeight * 1.0f / size.height; - var vDiff = (v2 - v) * vfactor; - image.setV(v2 - vDiff); - - image.draw(batch, overlay.getOpacity() / 100f); - - image.setU(u); - image.setV(v); + for (var sprite : bigSprites.values()) { + sprite.getTexture().dispose(); } + bigSprites.clear(); + animationMap.clear(); + } - private void renderTokenOverlay(DrawnBarTokenOverlay overlay, Token token, double barValue) { - var bounds = token.getBounds(zone); - var x = bounds.x; - var y = -bounds.y - bounds.height; - var w = bounds.width; - var h = bounds.height; - - var side = overlay.getSide(); - var thickness = overlay.getThickness(); - - int width = (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) ? w : thickness; - int height = (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) ? h : thickness; - - switch (side) { - case LEFT: - y += h - height; - break; - case RIGHT: - x += w - width; - y += h - height; - break; - case TOP: - y += h - height; - break; - } + private void initializeZoneResources(Zone newZone) { + if (newZone == null || !initialized) return; - if (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) { - width = overlay.calcBarSize(width, barValue); - } else { - height = overlay.calcBarSize(height, barValue); - y += bounds.height - height; - } + zoneRenderer = MapTool.getFrame().getZoneRenderer(newZone); + updateVisibleArea(); - var barColor = overlay.getBarColor(); - tmpColor.set(barColor.getRed() / 255f, barColor.getGreen() / 255f, barColor.getBlue() / 255f, barColor.getAlpha() / 255f); - drawer.filledRectangle(x, y, width, height, tmpColor); + for (var assetId : newZone.getAllAssetIds()) { + AssetManager.getAssetAsynchronously(assetId, this); } - - private void renderTokenOverlay(TwoToneBarTokenOverlay overlay, Token token, double barValue) { - var bounds = token.getBounds(zone); - var x = bounds.x; - var y = -bounds.y - bounds.height; - var w = bounds.width; - var h = bounds.height; - - var side = overlay.getSide(); - var thickness = overlay.getThickness(); - - int width = (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) ? w : thickness; - int height = (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) ? h : thickness; - - switch (side) { - case LEFT: - y += h - height; - break; - case RIGHT: - x += w - width; - y += h - height; - break; - case TOP: - y += h - height; - break; - } - - var color = overlay.getBgColor(); - tmpColor.set(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f); - drawer.filledRectangle(x, y, width, height, tmpColor); - - // Draw the bar - int borderSize = thickness > 5 ? 2 : 1; - x += borderSize; - y += borderSize; - width -= borderSize * 2; - height -= borderSize * 2; - if (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) { - width = overlay.calcBarSize(width, barValue); - } else { - height = overlay.calcBarSize(height, barValue); - } - - color = overlay.getBarColor(); - tmpColor.set(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f); - drawer.filledRectangle(x, y, width, height, tmpColor); + zone = newZone; + } + + private Texture paintToTexture(DrawablePaint paint) { + if (paint instanceof DrawableTexturePaint) { + var texturePaint = (DrawableTexturePaint) paint; + var image = texturePaint.getAsset().getImage(); + var pix = new Pixmap(image, 0, image.length); + var texture = new Texture(pix); + pix.dispose(); + return texture; } - - private void renderTokenOverlay(TwoImageBarTokenOverlay overlay, Token token, double barValue) { - var bounds = token.getBounds(zone); - var x = bounds.x; - var y = -bounds.y - bounds.height; - - // Get the images - var topImage = getSprite(overlay.getTopAssetId()); - var bottomImage = getSprite(overlay.getBottomAssetId()); - - - Dimension d = bounds.getSize(); - Dimension size = new Dimension((int) topImage.getWidth(), (int) topImage.getHeight()); - SwingUtil.constrainTo(size, d.width, d.height); - - var side = overlay.getSide(); - // Find the position of the images according to the size and side where they are placed - switch (side) { - case LEFT: - y += d.height - size.height; - break; - case RIGHT: - x += d.width - size.width; - y += d.height - size.height; - break; - case TOP: - y += d.height - size.height; - break; - } - - var width = - (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) - ? overlay.calcBarSize((int) topImage.getWidth(), barValue) - : topImage.getWidth(); - var height = - (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) - ? overlay.calcBarSize((int) topImage.getHeight(), barValue) - : topImage.getHeight(); - - var screenWidth = - (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) - ? overlay.calcBarSize(size.width, barValue) - : size.width; - var screenHeight = - (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) - ? overlay.calcBarSize(size.height, barValue) - : size.height; - - bottomImage.setPosition(x, y); - bottomImage.setSize(size.width, size.height); - bottomImage.draw(batch, overlay.getOpacity() / 100f); - - var u = topImage.getU(); - var v = topImage.getV(); - var u2 = topImage.getU2(); - var v2 = topImage.getV2(); - - var wFactor = screenWidth * 1.0f / size.width; - var uDiff = (u2 - u) * wFactor; - - var vFactor = screenHeight * 1.0f / size.height; - var vDiff = (v2 - v) * vFactor; - - topImage.setPosition(x, y); - topImage.setSize(screenWidth, screenHeight); - - if (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) { - topImage.setU(u2 - uDiff); - topImage.setV(v2 - vDiff); - } else { - - topImage.setU2(u + uDiff); - topImage.setV2(v + vDiff); - } - topImage.draw(batch, overlay.getOpacity() / 100f); - - topImage.setU(u); - topImage.setV(v); - topImage.setU2(u2); - topImage.setV2(v2); + if (paint instanceof DrawableColorPaint) { + var colorPaint = (DrawableColorPaint) paint; + var colorValue = colorPaint.getColor(); + var color = new Color(); + Color.argb8888ToColor(color, colorValue); + var pix = new Pixmap(1, 1, Pixmap.Format.RGBA8888); + + pix.setColor(color); + pix.fill(); + var texture = new Texture(pix); + pix.dispose(); + return texture; } - - private void renderTokenOverlay(BooleanTokenOverlay overlay, Token token, Object value) { - if (!FunctionUtil.getBooleanValue(value)) - return; - - if (overlay instanceof ImageTokenOverlay) - renderTokenOverlay((ImageTokenOverlay) overlay, token); - else if (overlay instanceof FlowColorDotTokenOverlay) - renderTokenOverlay((FlowColorDotTokenOverlay) overlay, token); - else if (overlay instanceof YieldTokenOverlay) - renderTokenOverlay((YieldTokenOverlay) overlay, token); - else if (overlay instanceof OTokenOverlay) - renderTokenOverlay((OTokenOverlay) overlay, token); - else if (overlay instanceof ColorDotTokenOverlay) - renderTokenOverlay((ColorDotTokenOverlay) overlay, token); - else if (overlay instanceof DiamondTokenOverlay) - renderTokenOverlay((DiamondTokenOverlay) overlay, token); - else if (overlay instanceof TriangleTokenOverlay) - renderTokenOverlay((TriangleTokenOverlay) overlay, token); - else if (overlay instanceof CrossTokenOverlay) - renderTokenOverlay((CrossTokenOverlay) overlay, token); - else if (overlay instanceof XTokenOverlay) - renderTokenOverlay((XTokenOverlay) overlay, token); - else if (overlay instanceof ShadedTokenOverlay) - renderTokenOverlay((ShadedTokenOverlay) overlay, token); + return null; + } + + private Sprite paintToSprite(DrawablePaint paint) { + if (paint instanceof DrawableTexturePaint) { + var texturePaint = (DrawableTexturePaint) paint; + var image = texturePaint.getAsset().getImage(); + var pix = new Pixmap(image, 0, image.length); + var sprite = new Sprite(new Texture(pix)); + sprite.setSize(pix.getWidth(), pix.getHeight()); + sprite.setPosition(0, -1 * sprite.getHeight()); + pix.dispose(); + return sprite; } - - private void renderTokenOverlay(ShadedTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zone); - var x = bounds.x; - var y = -bounds.y - bounds.height; - var w = bounds.width; - var h = bounds.height; - - tmpColor.set(1, 1, 1, overlay.getOpacity() / 100); - //FIXME: this should change the transparency of the token. Test this when tokendrawing is moved to backbuffer - drawer.setColor(tmpColor); - drawer.filledRectangle(x, y, w, h); - drawer.setColor(Color.WHITE); + if (paint instanceof DrawableColorPaint) { + var colorPaint = (DrawableColorPaint) paint; + var colorValue = colorPaint.getColor(); + var color = new Color(); + Color.argb8888ToColor(color, colorValue); + var pix = new Pixmap(64, 64, Pixmap.Format.RGBA8888); + + pix.setColor(color); + pix.fill(); + var sprite = new Sprite(new Texture(pix)); + sprite.setSize(pix.getWidth(), pix.getHeight()); + sprite.setPosition(0, -1 * sprite.getHeight()); + pix.dispose(); + return sprite; } + return null; + } - private void renderTokenOverlay(ImageTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zone); - var x = bounds.x; - var y = -bounds.y; + private void fillArea(Area area) { + if (area == null || area.isEmpty()) return; - // Get the image - java.awt.Rectangle iBounds = overlay.getImageBounds(bounds, token); - Dimension d = iBounds.getSize(); + paintArea(area, true); + } - var image = getSprite(overlay.getAssetId()); + private void drawArea(Area area) { + if (area == null || area.isEmpty()) return; - Dimension size = new Dimension((int) image.getWidth(), (int) image.getHeight()); - SwingUtil.constrainTo(size, d.width, d.height); + paintArea(area, false); + } - // Paint it at the right location - int width = size.width; - int height = size.height; + private void paintArea(Area area, boolean fill) { + pathToFloatArray(area.getPathIterator(null)); - if (overlay instanceof CornerImageTokenOverlay) { - x += iBounds.x + (d.width - width) / 2; - y -= iBounds.y + (d.height - height) / 2 + iBounds.height; - } else { - x = iBounds.x + (d.width - width) / 2; - y = -(iBounds.y + (d.height - height) / 2) - iBounds.height; - } + if (fill) { + var lastX = tmpFloat.get(tmpFloat.size - 2); + var lastY = tmpFloat.get(tmpFloat.size - 1); + if (lastX != tmpFloat.get(0) && lastY != tmpFloat.get(1)) + tmpFloat.add(tmpFloat.get(0), tmpFloat.get(1)); - image.setPosition(x, y); - image.setSize(size.width, size.height); - image.draw(batch, overlay.getOpacity() / 100f); - } + drawer.filledPolygon(tmpFloat.toArray()); + } else { + if (tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) + && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { + tmpFloat.pop(); + tmpFloat.pop(); + } - private void renderTokenOverlay(XTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zone); - var x = bounds.x; - var y = -bounds.y - bounds.height; - var w = bounds.width; - var h = bounds.height; - - var color = overlay.getColor(); - Color.argb8888ToColor(tmpColor, color.getRGB()); - tmpColor.set(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, overlay.getOpacity() / 100); - - var stroke = overlay.getStroke(); - - drawer.setColor(tmpColor); - drawer.line(x, y, x + w, y + h, stroke.getLineWidth()); - drawer.line(x, y + h, x + w, y, stroke.getLineWidth()); - drawer.setColor(Color.WHITE); + drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.SMOOTH, false); } - - private void renderTokenOverlay(FlowColorDotTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zone); - var x = bounds.x; - var y = -bounds.y - bounds.height; - var w = bounds.width; - var h = bounds.height; - - var color = overlay.getColor(); - Color.argb8888ToColor(tmpColor, color.getRGB()); - tmpColor.set(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, overlay.getOpacity() / 100); - drawer.setColor(tmpColor); - Shape s = overlay.getShape(bounds, token); - fillArea(new Area(s)); - drawer.setColor(Color.WHITE); - } - - private void renderTokenOverlay(YieldTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zone); - var x = bounds.x; - var y = -bounds.y - bounds.height; - var w = bounds.width; - var h = bounds.height; - - var color = overlay.getColor(); - Color.argb8888ToColor(tmpColor, color.getRGB()); - tmpColor.set(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, overlay.getOpacity() / 100); - - var stroke = overlay.getStroke(); - var hc = w / 2f; - var vc = h * (1 - 0.134f); - - var floats = new float[]{ - x, y + vc, - x + w, y + vc, - x + hc, y, - }; - - drawer.setColor(tmpColor); - drawer.path(floats, stroke.getLineWidth(), JoinType.POINTY, false); - drawer.setColor(Color.WHITE); + } + + private void pathToFloatArray(PathIterator it) { + tmpFloat.clear(); + + for (; !it.isDone(); it.next()) { + int type = it.currentSegment(floatsFromArea); + + switch (type) { + case PathIterator.SEG_MOVETO: + // System.out.println("Move to: ( " + floatsFromArea[0] + ", " + + // floatsFromArea[1] + ")"); + tmpFloat.add(floatsFromArea[0], -floatsFromArea[1]); + + break; + case PathIterator.SEG_CLOSE: + // System.out.println("Close"); + + return; + case PathIterator.SEG_LINETO: + // System.out.println("Line to: ( " + floatsFromArea[0] + ", " + + // floatsFromArea[1] + ")"); + tmpFloat.add(floatsFromArea[0], -floatsFromArea[1]); + break; + case PathIterator.SEG_QUADTO: + // System.out.println("quadratic bezier with: ( " + floatsFromArea[0] + + // ", " + floatsFromArea[1] + + // "), (" + floatsFromArea[2] + ", " + floatsFromArea[3] + ")"); + + tmpVector0.set(tmpFloat.get(tmpFloat.size - 2), tmpFloat.get(tmpFloat.size - 1)); + tmpVector1.set(floatsFromArea[0], -floatsFromArea[1]); + tmpVector2.set(floatsFromArea[2], -floatsFromArea[3]); + for (var i = 1; i <= pointsPerBezier; i++) { + Bezier.quadratic( + tmpVectorOut, i / pointsPerBezier, tmpVector0, tmpVector1, tmpVector2, tmpVector); + tmpFloat.add(tmpVectorOut.x, tmpVectorOut.y); + } + break; + case PathIterator.SEG_CUBICTO: + // System.out.println("cubic bezier with: ( " + floatsFromArea[0] + ", + // " + floatsFromArea[1] + + // "), (" + floatsFromArea[2] + ", " + floatsFromArea[3] + + // "), (" + floatsFromArea[4] + ", " + floatsFromArea[5] + + // ")"); + + tmpVector0.set(tmpFloat.get(tmpFloat.size - 2), tmpFloat.get(tmpFloat.size - 1)); + tmpVector1.set(floatsFromArea[0], -floatsFromArea[1]); + tmpVector2.set(floatsFromArea[2], -floatsFromArea[3]); + tmpVector3.set(floatsFromArea[4], -floatsFromArea[5]); + for (var i = 1; i <= pointsPerBezier; i++) { + Bezier.cubic( + tmpVectorOut, + i / pointsPerBezier, + tmpVector0, + tmpVector1, + tmpVector2, + tmpVector3, + tmpVector); + tmpFloat.add(tmpVectorOut.x, tmpVectorOut.y); + } + break; + default: + System.out.println("Type: " + type); + } } + } - private void renderTokenOverlay(OTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zone); - var x = bounds.x; - var y = -bounds.y - bounds.height; - var w = bounds.width; - var h = bounds.height; + @Override + public void handleAppEvent(AppEvent event) { + System.out.println("AppEvent:" + event.getId()); - var color = overlay.getColor(); - Color.argb8888ToColor(tmpColor, color.getRGB()); - tmpColor.set(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, overlay.getOpacity() / 100); + if (event.getId() != MapTool.ZoneEvent.Activated) return; - var stroke = overlay.getStroke(); - var lineWidth = stroke.getLineWidth(); + var oldZone = zone; + // first disable rendering during intitialisation; + renderZone = false; - var centerX = x + w / 2f; - var centerY = y + h / 2f; - var radiusX = w / 2f - lineWidth / 2f; - var radiusY = h / 2f - lineWidth / 2f; - - drawer.setColor(tmpColor); - drawer.ellipse(centerX, centerY, radiusX, radiusY, 0, lineWidth); - drawer.setColor(Color.WHITE); + if (oldZone != null) { + disposeZoneResources(); + oldZone.removeModelChangeListener(this); } - private void renderTokenOverlay(ColorDotTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zone); - var x = bounds.x; - var y = -bounds.y - bounds.height; - var w = bounds.width; - - var color = overlay.getColor(); - Color.argb8888ToColor(tmpColor, color.getRGB()); - tmpColor.set(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, overlay.getOpacity() / 100); - - var size = w * 0.1f; - var offset = w * 0.8f; - - var posX = x + size; - var posY = y + size; - - switch (overlay.getCorner()) { - case SOUTH_EAST: - posX += offset; - break; - case SOUTH_WEST: - break; - case NORTH_EAST: - posX += offset; - posY += offset; - break; - case NORTH_WEST: - posY += offset; - break; + var newZone = (Zone) event.getNewValue(); + newZone.addModelChangeListener(this); + initializeZoneResources(newZone); + // just in case we are running before create was called and hence initializeZoneResources does + // nothing + zone = newZone; + renderZone = true; + } + + @Override + public void modelChanged(ModelChangeEvent event) { + Object evt = event.getEvent(); + System.out.println("ModelChangend: " + evt); + if (!(evt instanceof Zone.Event)) return; + var eventType = (Zone.Event) evt; + switch (eventType) { + case TOPOLOGY_CHANGED: + flushFog(); + // flushLight(); + break; + case FOG_CHANGED: + flushFog = true; + break; + case TOKEN_CHANGED: + { + updateVisibleArea(); + var token = (Token) event.getArg(); + updateBodyFor(token); + break; + } + case TOKEN_ADDED: + { + var token = (Token) event.getArg(); + addBodyFor(token); + System.out.println(); + break; } - - drawer.setColor(tmpColor); - drawer.filledEllipse(posX, posY, size, size); - drawer.setColor(Color.WHITE); - } - - private void renderTokenOverlay(DiamondTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zone); - var x = bounds.x; - var y = -bounds.y - bounds.height; - var w = bounds.width; - var h = bounds.height; - - var color = overlay.getColor(); - Color.argb8888ToColor(tmpColor, color.getRGB()); - tmpColor.set(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, overlay.getOpacity() / 100); - var stroke = overlay.getStroke(); - - var hc = w / 2f; - var vc = h / 2f; - - var floats = new float[]{ - x, y + vc, - x + hc, y, - x + w, y + vc, - x + hc, y + h, - }; - - drawer.setColor(tmpColor); - drawer.path(floats, stroke.getLineWidth(), JoinType.POINTY, false); - drawer.setColor(Color.WHITE); - } - - private void renderTokenOverlay(TriangleTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zone); - var x = bounds.x; - var y = -bounds.y - bounds.height; - var w = bounds.width; - var h = bounds.height; - - var color = overlay.getColor(); - Color.argb8888ToColor(tmpColor, color.getRGB()); - tmpColor.set(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, overlay.getOpacity() / 100); - var stroke = overlay.getStroke(); - - var hc = w / 2f; - var vc = h * (1 - 0.866f); - - var floats = new float[]{ - x, y + vc, - x + w, y + vc, - x + hc, y + h, - }; - - drawer.setColor(tmpColor); - drawer.path(floats, stroke.getLineWidth(), JoinType.POINTY, false); - drawer.setColor(Color.WHITE); - } - - private void renderTokenOverlay(CrossTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zone); - var x = bounds.x; - var y = -bounds.y - bounds.height; - var w = bounds.width; - var h = bounds.height; - - var color = overlay.getColor(); - Color.argb8888ToColor(tmpColor, color.getRGB()); - tmpColor.set(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, overlay.getOpacity() / 100); - var stroke = overlay.getStroke(); - - drawer.setColor(tmpColor); - drawer.line(x, y + h / 2f, x + w, y + h / 2f, stroke.getLineWidth()); - drawer.line(x + w / 2f, y, x + w / 2f, y + h, stroke.getLineWidth()); - drawer.setColor(Color.WHITE); } - // FIXME: I don't like this hardwiring - protected java.awt.Shape getFigureFacingArrow(int angle, int size) { - int base = (int) (size * .75); - int width = (int) (size * .35); - - var facingArrow = new GeneralPath(); - facingArrow.moveTo(base, -width); - facingArrow.lineTo(size, 0); - facingArrow.lineTo(base, width); - facingArrow.lineTo(base, -width); + /* + if (evt == Zone.Event.TOKEN_CHANGED + || evt == Zone.Event.TOKEN_REMOVED + || evt == Zone.Event.TOKEN_ADDED) { + if (event.getArg() instanceof List) { + @SuppressWarnings("unchecked") + List list = (List) (event.getArg()); + for (Token token : list) { + zoneRenderer.flush(token); + } + } else { + zoneRenderer.flush((Token) event.getArg()); + } + }*/ + /* + var currentZone = zone; + + // for now quick and dirty + disposeZoneResources(); + initializeZoneResources(currentZone); + */ + } + + private void addBodyFor(Token token) { + /* + var body = tokenBodies.get(token); + if(body != null) + return; - return facingArrow.createTransformedShape( - AffineTransform.getRotateInstance(-Math.toRadians(angle))); + // First we create a body definition + BodyDef bodyDef = new BodyDef(); + // We set our body to dynamic, for something like ground which doesn't move we would set it to StaticBody + bodyDef.type = BodyDef.BodyType.DynamicBody; + // Set our body's starting position in the world + // bodyDef.position.set(0, 0); + + // Create our body in the world using our body definition + body = world.createBody(bodyDef); + + // Create a circle shape and set its radius to 6 + CircleShape circle = new CircleShape(); + circle.setRadius(6f); + + // Create a fixture definition to apply our shape to + FixtureDef fixtureDef = new FixtureDef(); + fixtureDef.shape = circle; + fixtureDef.density = 0.5f; + fixtureDef.friction = 0.4f; + fixtureDef.restitution = 0.6f; // Make it bounce a little bit + + // Create our fixture and attach it to the body + Fixture fixture = body.createFixture(fixtureDef); + + // Remember to dispose of any shapes after you're done with them! + // BodyDef and FixtureDef don't need disposing, but shapes do. + circle.dispose(); + + tokenBodies.put(token, body); + updateBodyFor(token); + */ + } + + void updateBodyFor(Token token) { + /* + var body = tokenBodies.get(token); + if(body == null) + return; + + var bounds = token.getBounds(zone); + + + float x = token.getX() + bounds.width/2 + token.getAnchorX(); + float y = -(token.getY() + bounds.height/2 + token.getAnchorY()); + + body.setTransform(x, y, (float)Math.toRadians(token.getFacingInDegrees())); + */ + } + + public void setScale(Scale scale) { + offsetX = scale.getOffsetX() * -1; + offsetY = scale.getOffsetY(); + zoom = (float) (1f / scale.getScale()); + updateCam(); + } + + public void flushFog() { + flushFog = true; + updateVisibleArea(); + } + + @Override + public void assetAvailable(MD5Key key) { + try { + var asset = AssetManager.getAsset(key); + if (asset.getImageExtension() == "gif") { + + Gdx.app.postRunnable( + () -> { + // var ass = AssetManager.getAsset(key); + var is = new ByteArrayInputStream(asset.getImage()); + var animation = GifDecoder.loadGIFAnimation(Animation.PlayMode.LOOP, is); + animationMap.put(key, animation); + }); + return; + } + if (asset.getImageExtension() == "data") { + var videoPlayer = VideoPlayerCreator.createVideoPlayer(); + videoPlayerMap.put(key, videoPlayer); + return; + } + var img = + ImageUtil.createCompatibleImage( + ImageUtil.bytesToImage(asset.getImage(), asset.getName()), null); + // var img = ImageManager.getImage(key); + var bytes = ImageUtil.imageToBytes(img, "png"); + // without imageutil there seem to be some issues with tranparency for some images. + // (black background instead of tranparent) + // var bytes = AssetManager.getAsset(key).getImage(); + var pix = new Pixmap(bytes, 0, bytes.length); + + try { + var name = key.toString(); + synchronized (packer) { + if (packer.getRect(name) == null) packer.pack(name, pix); + + pix.dispose(); + } + } catch (GdxRuntimeException x) { + // this means that the pixmap is to big for the atlas. + Gdx.app.postRunnable( + () -> { + synchronized (bigSprites) { + if (!bigSprites.containsKey(key)) bigSprites.put(key, new Sprite(new Texture(pix))); + } + pix.dispose(); + }); + } + } catch (Exception e) { } + } - // FIXME: I don't like this hardwiring - protected java.awt.Shape getCircleFacingArrow(int angle, int size) { - int base = (int) (size * .75); - int width = (int) (size * .35); + private interface ItemRenderer { + void render(); + } - var facingArrow = new GeneralPath(); - facingArrow.moveTo(base, -width); - facingArrow.lineTo(size, 0); - facingArrow.lineTo(base, width); - facingArrow.lineTo(base, -width); + private class LabelRenderer implements ItemRenderer { + private float x; + private float y; + private String text; - return facingArrow.createTransformedShape( - AffineTransform.getRotateInstance(-Math.toRadians(angle))); + public LabelRenderer(String text, float x, float y) { + this.x = x; + this.y = y; + this.text = text; } - // FIXME: I don't like this hardwiring - protected java.awt.Shape getSquareFacingArrow(int angle, int size) { - int base = (int) (size * .75); - int width = (int) (size * .35); - - var facingArrow = new GeneralPath(); - facingArrow.moveTo(0, 0); - facingArrow.lineTo(-(size - base), -width); - facingArrow.lineTo(-(size - base), width); - facingArrow.lineTo(0, 0); + @Override + public void render() { + tmpWorldCoord.x = x; + tmpWorldCoord.y = y; + tmpWorldCoord.z = 0; + tmpScreenCoord = cam.project(tmpWorldCoord); - return facingArrow.createTransformedShape( - AffineTransform.getRotateInstance(-Math.toRadians(angle))); + drawBoxedString( + text, tmpScreenCoord.x, tmpScreenCoord.y, SwingUtilities.CENTER, grayLabel, Color.BLACK); } + } - private void paintClipped(Sprite image, Area bounds, Area clip) { - - backBuffer.begin(); - ScreenUtils.clear(Color.CLEAR); + private class TokenLabelRenderer implements ItemRenderer { + private final boolean isGMView; + private Token token; - setProjectionMatrix(cam.combined); - - image.draw(batch); - - drawer.setColor(Color.CLEAR); - - tmpArea.reset(); - tmpArea.add(bounds); - tmpArea.subtract(clip); - fillArea(tmpArea); - - backBuffer.end(); - - tmpWorldCoord.x = image.getX(); - tmpWorldCoord.y = image.getY(); - tmpWorldCoord.z = 0; - tmpScreenCoord = cam.project(tmpWorldCoord); - - - var x = image.getX(); - var y = image.getY(); - var w = image.getWidth(); - var h = image.getHeight(); - var wsrc = image.getWidth() / zoom; - var hsrc = image.getHeight() / zoom; - - batch.draw(backBuffer.getTexture(), x, y, w, h, (int) tmpScreenCoord.x, (int) tmpScreenCoord.y, (int) wsrc, (int) hsrc, false, true); + public TokenLabelRenderer(Token token, boolean isGMView) { + this.token = token; + this.isGMView = isGMView; } - private void renderPath(Path path, TokenFootprint footprint) { - if (path == null) { - return; - } - - - if (path.getCellPath().isEmpty()) { - return; - } - Grid grid = zone.getGrid(); - - // log.info("Rendering path..." + System.currentTimeMillis()); - - java.awt.Rectangle footprintBounds = footprint.getBounds(grid); - if (path.getCellPath().get(0) instanceof CellPoint) { - timer.start("renderPath-1"); - CellPoint previousPoint = null; - Point previousHalfPoint = null; - - Path pathCP = (Path) path; - List cellPath = pathCP.getCellPath(); - - Set pathSet = new HashSet(); - List waypointList = new LinkedList(); - for (CellPoint p : cellPath) { - pathSet.addAll(footprint.getOccupiedCells(p)); - - if (pathCP.isWaypoint(p) && previousPoint != null) { - ZonePoint zp = grid.convert(p); - zp.x += footprintBounds.width / 2; - zp.y += footprintBounds.height / 2; - waypointList.add(zp); - } - previousPoint = p; - } - - // Don't show the final path point as a waypoint, it's redundant, and ugly - if (waypointList.size() > 0) { - waypointList.remove(waypointList.size() - 1); - } - timer.stop("renderPath-1"); - // log.info("pathSet size: " + pathSet.size()); - - timer.start("renderPath-2"); - Dimension cellOffset = zone.getGrid().getCellOffset(); - for (CellPoint p : pathSet) { - ZonePoint zp = grid.convert(p); - zp.x += grid.getCellWidth() / 2 + cellOffset.width; - zp.y += grid.getCellHeight() / 2 + cellOffset.height; - highlightCell(zp, getCellHighlight(), 1.0f); - } - if (AppState.getShowMovementMeasurements()) { - double cellAdj = grid.isHex() ? 2.5 : 2; - for (CellPoint p : cellPath) { - ZonePoint zp = grid.convert(p); - zp.x += grid.getCellWidth() / cellAdj + cellOffset.width; - zp.y += grid.getCellHeight() / cellAdj + cellOffset.height; - addDistanceText( - zp, 1.0f, (float) p.getDistanceTraveled(zone), (float) p.getDistanceTraveledWithoutTerrain()); - } - } - int w = 0; - for (ZonePoint p : waypointList) { - ZonePoint zp = new ZonePoint(p.x + cellOffset.width, p.y + cellOffset.height); - highlightCell(zp, fetch("redDot"), .333f); - } - - // Line path - if (grid.getCapabilities().isPathLineSupported()) { - ZonePoint lineOffset; - if (grid.isHex()) { - lineOffset = new ZonePoint(0, 0); - } else { - lineOffset = - new ZonePoint( - footprintBounds.x + footprintBounds.width / 2 - grid.getOffsetX(), - footprintBounds.y + footprintBounds.height / 2 - grid.getOffsetY()); - } - - int xOffset = (int) (lineOffset.x); - int yOffset = (int) (lineOffset.y); - - drawer.setColor(Color.BLUE); - - previousPoint = null; - tmpFloat.clear(); - for (CellPoint p : cellPath) { - if (previousPoint != null) { - ZonePoint ozp = grid.convert(previousPoint); - int ox = ozp.x; - int oy = ozp.y; - - ZonePoint dzp = grid.convert(p); - int dx = dzp.x; - int dy = dzp.y; - - - int halfx = ((ox + dx) / 2); - int halfy = ((oy + dy) / 2); - Point halfPoint = new Point(halfx, halfy); - - if (previousHalfPoint != null) { - int x1 = previousHalfPoint.x + xOffset; - int y1 = previousHalfPoint.y + yOffset; - - int x2 = ox + xOffset; - int y2 = oy + yOffset; - - int xh = halfPoint.x + xOffset; - int yh = halfPoint.y + yOffset; - - tmpVector0.set(x1, -y1); - tmpVector1.set(x2, -y2); - tmpVector2.set(xh, -yh); - - - for (var i = 1; i <= pointsPerBezier; i++) { - Bezier.quadratic(tmpVectorOut, i / pointsPerBezier, tmpVector0, tmpVector1, tmpVector2, tmpVector); - tmpFloat.add(tmpVectorOut.x, tmpVectorOut.y); - } - } - previousHalfPoint = halfPoint; - } - previousPoint = p; - } - drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.SMOOTH, true); - } - drawer.setColor(Color.WHITE); - timer.stop("renderPath-2"); + @Override + public void render() { + int offset = 3; // Keep it from tramping on the token border. + NinePatch background; + Color foreground; + + if (token.isVisible()) { + if (token.getType() == Token.Type.NPC) { + background = blueLabel; + foreground = Color.WHITE; } else { - timer.start("renderPath-3"); - // Zone point/gridless path - - // Line - var highlight = tmpColor; - highlight.set(1, 1, 1, 80 / 255f); - var highlightStroke = 9f; - - ScreenPoint lastPoint = null; - - Path pathZP = (Path) path; - List pathList = pathZP.getCellPath(); - for (ZonePoint zp : pathList) { - if (lastPoint == null) { - lastPoint = - ScreenPoint.fromZonePointRnd( - zoneRenderer, - zp.x + (footprintBounds.width / 2) * footprint.getScale(), - zp.y + (footprintBounds.height / 2) * footprint.getScale()); - continue; - } - ScreenPoint nextPoint = - ScreenPoint.fromZonePoint( - zoneRenderer, - zp.x + (footprintBounds.width / 2) * footprint.getScale(), - zp.y + (footprintBounds.height / 2) * footprint.getScale()); - - - drawer.line((float) lastPoint.x, -(float) lastPoint.y, - (float) nextPoint.x, -(float) nextPoint.y, highlight, highlightStroke); - - drawer.line((float) lastPoint.x, -(float) lastPoint.y, - (float) nextPoint.x, -(float) nextPoint.y, Color.BLUE, drawer.getDefaultLineWidth()); - lastPoint = nextPoint; - } - - // Waypoints - boolean originPoint = true; - for (ZonePoint p : pathList) { - // Skip the first point (it's the path origin) - if (originPoint) { - originPoint = false; - continue; - } - - // Skip the final point - if (p == pathList.get(pathList.size() - 1)) { - continue; - } - p = - new ZonePoint( - (p.x + (footprintBounds.width / 2)), - (p.y + (footprintBounds.height / 2))); - highlightCell(p, fetch("redDot"), .333f); - } - timer.stop("renderPath-3"); + background = grayLabel; + foreground = Color.BLACK; } + } else { + background = darkGrayLabel; + foreground = Color.WHITE; + } + String name = token.getName(); + if (isGMView && token.getGMName() != null && !StringUtil.isEmpty(token.getGMName())) { + name += " (" + token.getGMName() + ")"; + } + + // Calculate image dimensions + + float labelHeight = normalFont.getLineHeight() + GraphicsUtil.BOX_PADDINGY * 2; + + java.awt.Rectangle r = token.getBounds(zone); + tmpWorldCoord.x = r.x + r.width / 2; + tmpWorldCoord.y = (r.y + r.height + offset + labelHeight * zoom / 2) * -1; + tmpWorldCoord.z = 0; + tmpScreenCoord = cam.project(tmpWorldCoord); + + drawBoxedString( + name, tmpScreenCoord.x, tmpScreenCoord.y, SwingUtilities.CENTER, background, foreground); + + var label = token.getLabel(); + + // Draw name and label to image + if (label != null && label.trim().length() > 0) { + drawBoxedString( + label, + tmpScreenCoord.x, + tmpScreenCoord.y - labelHeight, + SwingUtilities.CENTER, + background, + foreground); + } } + } - private TextureRegion getCellHighlight() { - if (zone.getGrid() instanceof SquareGrid) - return fetch("whiteBorder"); - if (zone.getGrid() instanceof HexGrid) - return fetch("hexBorder"); - if (zone.getGrid() instanceof IsometricGrid) - return fetch("isoBorder"); + private abstract class AbstractDrawingDrawer { + public void draw(Drawable element, Pen pen) { + if (pen.getBackgroundPaint() instanceof DrawableColorPaint) { + var colorPaint = (DrawableColorPaint) pen.getBackgroundPaint(); + Color.argb8888ToColor(tmpColor, colorPaint.getColor()); + drawer.setColor(tmpColor); + } + drawBackground(element, pen); - return null; + if (pen.getPaint() instanceof DrawableColorPaint) { + var colorPaint = (DrawableColorPaint) pen.getPaint(); + Color.argb8888ToColor(tmpColor, colorPaint.getColor()); + drawer.setColor(tmpColor); + } + var lineWidth = drawer.getDefaultLineWidth(); + drawer.setDefaultLineWidth(pen.getThickness()); + drawBorder(element, pen); + drawer.setDefaultLineWidth(lineWidth); } - private void addDistanceText(ZonePoint point, float size, float distance, float distanceWithoutTerrain) { - if (distance == 0) - return; - - Grid grid = zone.getGrid(); - float cwidth = (float) grid.getCellWidth(); - float cheight = (float) grid.getCellHeight(); - - float iwidth = cwidth * size; - float iheight = cheight * size; - - var cellX = (point.x - iwidth / 2); - var cellY = (-point.y + iheight / 2) + distanceFont.getLineHeight(); - - // Draw distance for each cell - var textOffset = 7 * distanceFontScale; // 7 pixels at 100% zoom & grid size of 50 - - String distanceText = NumberFormat.getInstance().format(distance); - if (log.isDebugEnabled() || showAstarDebugging) { - distanceText += " (" + NumberFormat.getInstance().format(distanceWithoutTerrain) + ")"; - //fontSize = (int) (fontSize * 0.75); - } - - glyphLayout.setText(distanceFont, distanceText); - - var textWidth = glyphLayout.width; - - distanceFont.setColor(Color.BLACK); - - // log.info("Text: [" + distanceText + "], width: " + textWidth + ", font size: " + fontSize + - // ", offset: " + textOffset + ", fontScale: " + fontScale+ ", getScale(): " + getScale()); - - distanceFont.draw(batch, distanceText, cellX + cwidth - textWidth - textOffset, cellY - cheight /*- textOffset*/); + protected void line(Pen pen, float x1, float y1, float x2, float y2) { + var halfLineWidth = pen.getThickness() / 2f; + if (!pen.getSquareCap()) { + drawer.filledCircle(x1, -y1, halfLineWidth); + drawer.filledCircle(x2, -y2, halfLineWidth); + drawer.line(x1, -y1, x2, -y2); + } else { + tmpVector.set(x1 - x2, y1 - y2).nor(); + var tx = tmpVector.x * halfLineWidth; + var ty = tmpVector.y * halfLineWidth; + drawer.line(x1 + tx, y1 + ty, x2 - tx, y2 - ty); + } } - private void highlightCell(ZonePoint zp, TextureRegion image, float size) { - Grid grid = zone.getGrid(); - float cwidth = (float) grid.getCellWidth() * size; - float cheight = (float) grid.getCellHeight() * size; + protected abstract void drawBackground(Drawable element, Pen pen); - float rotation = 0; - if (zone.getGrid() instanceof HexGridHorizontal) - rotation = 90; + protected abstract void drawBorder(Drawable element, Pen pen); + } - batch.draw(image, zp.x - cwidth / 2, -zp.y - cheight / 2, - 0, 0, cwidth, cheight, - 1f, 1f, rotation); + private abstract class AbstractTemplateDrawer extends AbstractDrawingDrawer { + @Override + protected void drawBackground(Drawable element, Pen pen) { + tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, AbstractTemplate.DEFAULT_BG_ALPHA); + drawer.setColor(tmpColor); + paint(pen, (AbstractTemplate) element, false, true); } - private void createScreenShot(String fileName) { - var handle = Gdx.files.absolute(fileName + ".png"); - if (!handle.exists()) { - batch.flush(); - var pix = Pixmap.createFromFrameBuffer(0, 0, width, height); - PixmapIO.writePNG(handle, pix, DEFAULT_COMPRESSION, true); - pix.dispose(); - } + @Override + protected void drawBorder(Drawable element, Pen pen) { + paint(pen, (AbstractTemplate) element, true, false); } - private void disposeZoneResources() { - if (!initialized) - return; - - //cam.zoom = 1.0f; - offsetX = 0; - offsetY = 0; - fogX = null; - fogY = null; - fetchedRegions.clear(); - fetchedSprites.clear(); - var oldPacker = packer; - packer = createPacker(); - oldPacker.dispose(); - - Gdx.app.postRunnable(() -> { - disposeZoneTextures(); - }); - } + protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean area) { + var radius = template.getRadius(); - private void disposeZoneTextures() { - updateCam(); - var background = this.background; - this.background = null; - if (background != null) { - background.dispose(); - } + if (radius == 0) return; + Zone zone = MapTool.getCampaign().getZone(template.getZoneId()); + if (zone == null) return; - var fog = this.fog; - this.fog = null; - if (fog != null) { - fog.dispose(); - } + // Find the proper distance + int gridSize = zone.getGrid().getSize(); + for (int y = 0; y < radius; y++) { + for (int x = 0; x < radius; x++) { - for (var sprite : isoSprites.values()) { - sprite.getTexture().dispose(); - } - isoSprites.clear(); + // Get the offset to the corner of the square + int xOff = x * gridSize; + int yOff = y * gridSize; - for (var sprite : bigSprites.values()) { - sprite.getTexture().dispose(); - } - bigSprites.clear(); - animationMap.clear(); + // Template specific painting + if (border) + paintBorder(pen, template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); + if (area) paintArea(template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); + } // endfor + } // endfor } - private void initializeZoneResources(Zone newZone) { - if (newZone == null || !initialized) - return; - - zoneRenderer = MapTool.getFrame().getZoneRenderer(newZone); - updateVisibleArea(); - - for (var assetId : newZone.getAllAssetIds()) { - AssetManager.getAssetAsynchronously(assetId, this); - } - zone = newZone; + protected void paintArea( + AbstractTemplate template, int xOff, int yOff, int gridSize, AbstractTemplate.Quadrant q) { + var vertex = template.getVertex(); + int x = vertex.x + getXMult(q) * xOff + ((getXMult(q) - 1) / 2) * gridSize; + int y = vertex.y + getYMult(q) * yOff + ((getYMult(q) - 1) / 2) * gridSize; + drawer.filledRectangle(x, -y - gridSize, gridSize, gridSize); } - private Texture paintToTexture(DrawablePaint paint) { - if (paint instanceof DrawableTexturePaint) { - var texturePaint = (DrawableTexturePaint) paint; - var image = texturePaint.getAsset().getImage(); - var pix = new Pixmap(image, 0, image.length); - var texture = new Texture(pix); - pix.dispose(); - return texture; - } - if (paint instanceof DrawableColorPaint) { - var colorPaint = (DrawableColorPaint) paint; - var colorValue = colorPaint.getColor(); - var color = new Color(); - Color.argb8888ToColor(color, colorValue); - var pix = new Pixmap(1, 1, Pixmap.Format.RGBA8888); - - pix.setColor(color); - pix.fill(); - var texture = new Texture(pix); - pix.dispose(); - return texture; - } - return null; + protected int getXMult(AbstractTemplate.Quadrant q) { + return ((q == AbstractTemplate.Quadrant.NORTH_WEST + || q == AbstractTemplate.Quadrant.SOUTH_WEST) + ? -1 + : +1); } - private Sprite paintToSprite(DrawablePaint paint) { - if (paint instanceof DrawableTexturePaint) { - var texturePaint = (DrawableTexturePaint) paint; - var image = texturePaint.getAsset().getImage(); - var pix = new Pixmap(image, 0, image.length); - var sprite = new Sprite(new Texture(pix)); - sprite.setSize(pix.getWidth(), pix.getHeight()); - sprite.setPosition(0, -1 * sprite.getHeight()); - pix.dispose(); - return sprite; - } - if (paint instanceof DrawableColorPaint) { - var colorPaint = (DrawableColorPaint) paint; - var colorValue = colorPaint.getColor(); - var color = new Color(); - Color.argb8888ToColor(color, colorValue); - var pix = new Pixmap(64, 64, Pixmap.Format.RGBA8888); - - pix.setColor(color); - pix.fill(); - var sprite = new Sprite(new Texture(pix)); - sprite.setSize(pix.getWidth(), pix.getHeight()); - sprite.setPosition(0, -1 * sprite.getHeight()); - pix.dispose(); - return sprite; - } - return null; + protected int getYMult(AbstractTemplate.Quadrant q) { + return ((q == AbstractTemplate.Quadrant.NORTH_WEST + || q == AbstractTemplate.Quadrant.NORTH_EAST) + ? -1 + : +1); } - private void fillArea(Area area) { - if (area == null || area.isEmpty()) - return; - - paintArea(area, true); + protected void paintCloseVerticalBorder( + Pen pen, + AbstractTemplate template, + int xOff, + int yOff, + int gridSize, + AbstractTemplate.Quadrant q) { + var vertex = template.getVertex(); + int x = vertex.x + getXMult(q) * xOff; + int y = vertex.y + getYMult(q) * yOff; + line(pen, x, y, x, y + getYMult(q) * gridSize); } - private void drawArea(Area area) { - if (area == null || area.isEmpty()) - return; - - paintArea(area, false); + protected void paintFarHorizontalBorder( + Pen pen, + AbstractTemplate template, + int xOff, + int yOff, + int gridSize, + AbstractTemplate.Quadrant q) { + var vertex = template.getVertex(); + int x = vertex.x + getXMult(q) * xOff; + int y = vertex.y + getYMult(q) * yOff + getYMult(q) * gridSize; + line(pen, x, y, x + getXMult(q) * gridSize, y); } - private void paintArea(Area area, boolean fill) { - pathToFloatArray(area.getPathIterator(null)); - - if (fill) { - var lastX = tmpFloat.get(tmpFloat.size-2); - var lastY = tmpFloat.get(tmpFloat.size-1); - if(lastX != tmpFloat.get(0) && lastY != tmpFloat.get(1)) - tmpFloat.add(tmpFloat.get(0), tmpFloat.get(1)); - - drawer.filledPolygon(tmpFloat.toArray()); - } else { - if(tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) - && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { - tmpFloat.pop(); - tmpFloat.pop(); - } - - drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.SMOOTH, false); - } + protected void paintFarVerticalBorder( + Pen pen, + AbstractTemplate template, + int xOff, + int yOff, + int gridSize, + AbstractTemplate.Quadrant q) { + var vertex = template.getVertex(); + int x = vertex.x + getXMult(q) * xOff + getXMult(q) * gridSize; + int y = vertex.y + getYMult(q) * yOff; + line(pen, x, y, x, y + getYMult(q) * gridSize); } - - private void pathToFloatArray(PathIterator it) { - tmpFloat.clear(); - - for (; !it.isDone(); it.next()) { - int type = it.currentSegment(floatsFromArea); - - switch (type) { - case PathIterator.SEG_MOVETO: - // System.out.println("Move to: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + ")"); - tmpFloat.add(floatsFromArea[0], -floatsFromArea[1]); - - break; - case PathIterator.SEG_CLOSE: - // System.out.println("Close"); - - return; - case PathIterator.SEG_LINETO: - // System.out.println("Line to: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + ")"); - tmpFloat.add(floatsFromArea[0], -floatsFromArea[1]); - break; - case PathIterator.SEG_QUADTO: - // System.out.println("quadratic bezier with: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + - // "), (" + floatsFromArea[2] + ", " + floatsFromArea[3] + ")"); - - tmpVector0.set(tmpFloat.get(tmpFloat.size - 2), tmpFloat.get(tmpFloat.size - 1)); - tmpVector1.set(floatsFromArea[0], -floatsFromArea[1]); - tmpVector2.set(floatsFromArea[2], -floatsFromArea[3]); - for (var i = 1; i <= pointsPerBezier; i++) { - Bezier.quadratic(tmpVectorOut, i / pointsPerBezier, tmpVector0, tmpVector1, tmpVector2, tmpVector); - tmpFloat.add(tmpVectorOut.x, tmpVectorOut.y); - } - break; - case PathIterator.SEG_CUBICTO: -// System.out.println("cubic bezier with: ( " + floatsFromArea[0] + ", " + floatsFromArea[1] + -// "), (" + floatsFromArea[2] + ", " + floatsFromArea[3] + -// "), (" + floatsFromArea[4] + ", " + floatsFromArea[5] + ")"); - - tmpVector0.set(tmpFloat.get(tmpFloat.size - 2), tmpFloat.get(tmpFloat.size - 1)); - tmpVector1.set(floatsFromArea[0], -floatsFromArea[1]); - tmpVector2.set(floatsFromArea[2], -floatsFromArea[3]); - tmpVector3.set(floatsFromArea[4], -floatsFromArea[5]); - for (var i = 1; i <= pointsPerBezier; i++) { - Bezier.cubic(tmpVectorOut, i / pointsPerBezier, tmpVector0, tmpVector1, tmpVector2, tmpVector3, tmpVector); - tmpFloat.add(tmpVectorOut.x, tmpVectorOut.y); - } - break; - default: - System.out.println("Type: " + type); - } - } + protected void paintCloseHorizontalBorder( + Pen pen, + AbstractTemplate template, + int xOff, + int yOff, + int gridSize, + AbstractTemplate.Quadrant q) { + var vertex = template.getVertex(); + int x = vertex.x + getXMult(q) * xOff; + int y = vertex.y + getYMult(q) * yOff; + line(pen, x, y, x + getXMult(q) * gridSize, y); } + protected abstract void paintArea( + AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance); + + protected abstract void paintBorder( + Pen pen, + AbstractTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int distance); + } + + private class LineTemplateDrawer extends AbstractTemplateDrawer { @Override - public void handleAppEvent(AppEvent event) { - System.out.println("AppEvent:" + event.getId()); - - if (event.getId() != MapTool.ZoneEvent.Activated) - return; - - var oldZone = zone; - // first disable rendering during intitialisation; - renderZone = false; - - if (oldZone != null) { - disposeZoneResources(); - oldZone.removeModelChangeListener(this); - } - - var newZone = (Zone) event.getNewValue(); - newZone.addModelChangeListener(this); - initializeZoneResources(newZone); - // just in case we are running before create was called and hence initializeZoneResources does nothing - zone = newZone; - renderZone = true; + protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean area) { + if (MapTool.getCampaign().getZone(template.getZoneId()) == null) { + return; + } + var lineTemplate = (LineTemplate) template; + + // Need to paint? We need a line and to translate the painting + if (lineTemplate.getPathVertex() == null) return; + if (template.getRadius() == 0) return; + if (lineTemplate.getPath() == null && lineTemplate.calcPath() == null) return; + + // Paint each element in the path + int gridSize = MapTool.getCampaign().getZone(template.getZoneId()).getGrid().getSize(); + ListIterator i = lineTemplate.getPath().listIterator(); + while (i.hasNext()) { + CellPoint p = i.next(); + int xOff = p.x * gridSize; + int yOff = p.y * gridSize; + int distance = template.getDistance(p.x, p.y); + + // Paint what is needed. + if (area) { + paintArea(template, p.x, p.y, xOff, yOff, gridSize, distance); + } // endif + if (border) { + paintBorder(pen, template, p.x, p.y, xOff, yOff, gridSize, i.previousIndex()); + } // endif + } // endfor } @Override - public void modelChanged(ModelChangeEvent event) { - Object evt = event.getEvent(); - System.out.println("ModelChangend: " + evt); - if(!(evt instanceof Zone.Event)) - return; - var eventType = (Zone.Event)evt; - switch (eventType) { - case TOPOLOGY_CHANGED: - flushFog(); - //flushLight(); - break; - case FOG_CHANGED: - flushFog = true; - break; - case TOKEN_CHANGED: { - updateVisibleArea(); - var token = (Token)event.getArg(); - updateBodyFor(token); - break; - } - case TOKEN_ADDED: { - var token = (Token)event.getArg(); - addBodyFor(token); - System.out.println(); - break; - } - } - - /* - if (evt == Zone.Event.TOKEN_CHANGED - || evt == Zone.Event.TOKEN_REMOVED - || evt == Zone.Event.TOKEN_ADDED) { - if (event.getArg() instanceof List) { - @SuppressWarnings("unchecked") - List list = (List) (event.getArg()); - for (Token token : list) { - zoneRenderer.flush(token); - } - } else { - zoneRenderer.flush((Token) event.getArg()); - } - }*/ -/* - var currentZone = zone; - - // for now quick and dirty - disposeZoneResources(); - initializeZoneResources(currentZone); - */ + protected void paintArea( + AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + var lineTemplate = (LineTemplate) template; + paintArea(template, xOff, yOff, gridSize, lineTemplate.getQuadrant()); } - private void addBodyFor(Token token) { -/* - var body = tokenBodies.get(token); - if(body != null) - return; - - // First we create a body definition - BodyDef bodyDef = new BodyDef(); -// We set our body to dynamic, for something like ground which doesn't move we would set it to StaticBody - bodyDef.type = BodyDef.BodyType.DynamicBody; -// Set our body's starting position in the world - // bodyDef.position.set(0, 0); - -// Create our body in the world using our body definition - body = world.createBody(bodyDef); - -// Create a circle shape and set its radius to 6 - CircleShape circle = new CircleShape(); - circle.setRadius(6f); - -// Create a fixture definition to apply our shape to - FixtureDef fixtureDef = new FixtureDef(); - fixtureDef.shape = circle; - fixtureDef.density = 0.5f; - fixtureDef.friction = 0.4f; - fixtureDef.restitution = 0.6f; // Make it bounce a little bit - -// Create our fixture and attach it to the body - Fixture fixture = body.createFixture(fixtureDef); - -// Remember to dispose of any shapes after you're done with them! -// BodyDef and FixtureDef don't need disposing, but shapes do. - circle.dispose(); - - tokenBodies.put(token, body); - updateBodyFor(token); - */ + @Override + protected void paintBorder( + Pen pen, + AbstractTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int pElement) { + var lineTemplate = (LineTemplate) template; + + // Have to scan 3 points behind and ahead, since that is the maximum number of points + // that can be added to the path from any single intersection. + boolean[] noPaint = new boolean[4]; + var path = lineTemplate.getPath(); + for (int i = pElement - 3; i < pElement + 3; i++) { + if (i < 0 || i >= path.size() || i == pElement) continue; + CellPoint p = path.get(i); + + // Ignore diagonal cells and cells that are not adjacent + int dx = p.x - x; + int dy = p.y - y; + if (Math.abs(dx) == Math.abs(dy) || Math.abs(dx) > 1 || Math.abs(dy) > 1) continue; + + // Remove the border between the 2 points + noPaint[dx != 0 ? (dx < 0 ? 0 : 2) : (dy < 0 ? 3 : 1)] = true; + } // endif + + var quadrant = lineTemplate.getQuadrant(); + // Paint the borders as needed + if (!noPaint[0]) paintCloseVerticalBorder(pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[1]) paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[2]) paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[3]) paintCloseHorizontalBorder(pen, template, xOff, yOff, gridSize, quadrant); } + } - void updateBodyFor(Token token) { - /* - var body = tokenBodies.get(token); - if(body == null) - return; - - var bounds = token.getBounds(zone); - - - float x = token.getX() + bounds.width/2 + token.getAnchorX(); - float y = -(token.getY() + bounds.height/2 + token.getAnchorY()); + private class LineCellTemplateDrawer extends AbstractTemplateDrawer { - body.setTransform(x, y, (float)Math.toRadians(token.getFacingInDegrees())); - */ - } - - public void setScale(Scale scale) { - offsetX = scale.getOffsetX() * -1; - offsetY = scale.getOffsetY(); - zoom = (float) (1f / scale.getScale()); - updateCam(); + @Override + protected void paintArea( + AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + var lineCellTemplate = (LineCellTemplate) template; + paintArea(template, xOff, yOff, gridSize, lineCellTemplate.getQuadrant()); } - public void flushFog() { - flushFog = true; - updateVisibleArea(); + @Override + protected void paintBorder( + Pen pen, + AbstractTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int pElement) { + var lineCellTemplate = (LineCellTemplate) template; + // Have to scan 3 points behind and ahead, since that is the maximum number of points + // that can be added to the path from any single intersection. + boolean[] noPaint = new boolean[4]; + var path = lineCellTemplate.getPath(); + for (int i = pElement - 3; i < pElement + 3; i++) { + if (i < 0 || i >= path.size() || i == pElement) continue; + CellPoint p = path.get(i); + + // Ignore diagonal cells and cells that are not adjacent + int dx = p.x - x; + int dy = p.y - y; + if (Math.abs(dx) == Math.abs(dy) || Math.abs(dx) > 1 || Math.abs(dy) > 1) continue; + + // Remove the border between the 2 points + noPaint[dx != 0 ? (dx < 0 ? 0 : 2) : (dy < 0 ? 3 : 1)] = true; + } // endif + + var quadrant = lineCellTemplate.getQuadrant(); + // Paint the borders as needed + if (!noPaint[0]) paintCloseVerticalBorder(pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[1]) paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[2]) paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[3]) paintCloseHorizontalBorder(pen, template, xOff, yOff, gridSize, quadrant); } @Override - public void assetAvailable(MD5Key key) { - try { - var asset = AssetManager.getAsset(key); - if(asset.getImageExtension() == "gif") { - - Gdx.app.postRunnable(() -> { - //var ass = AssetManager.getAsset(key); - var is = new ByteArrayInputStream(asset.getImage()); - var animation = GifDecoder.loadGIFAnimation(Animation.PlayMode.LOOP, is); - animationMap.put(key, animation); - }); - return; - } - if(asset.getImageExtension() == "data") { - var videoPlayer = VideoPlayerCreator.createVideoPlayer(); - videoPlayerMap.put(key, videoPlayer); - return; - } - var img = ImageUtil.createCompatibleImage(ImageUtil.bytesToImage(asset.getImage(), asset.getName()), null); - //var img = ImageManager.getImage(key); - var bytes = ImageUtil.imageToBytes(img, "png"); - // without imageutil there seem to be some issues with tranparency for some images. - // (black background instead of tranparent) - //var bytes = AssetManager.getAsset(key).getImage(); - var pix = new Pixmap(bytes, 0, bytes.length); - - try { - var name = key.toString(); - synchronized (packer) { - if (packer.getRect(name) == null) - packer.pack(name, pix); - - pix.dispose(); - } - } catch (GdxRuntimeException x) { - // this means that the pixmap is to big for the atlas. - Gdx.app.postRunnable(() -> { - synchronized (bigSprites) { - if (!bigSprites.containsKey(key)) - bigSprites.put(key, new Sprite(new Texture(pix))); - } - pix.dispose(); - }); - } - } catch (Exception e) { + protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean area) { + if (MapTool.getCampaign().getZone(template.getZoneId()) == null) { + return; + } + var lineCellTemplate = (LineCellTemplate) template; + var path = lineCellTemplate.getPath(); + // Need to paint? We need a line and to translate the painting + if (lineCellTemplate.getPathVertex() == null) return; + if (lineCellTemplate.getRadius() == 0) return; + if (path == null && lineCellTemplate.calcPath() == null) return; + + var quadrant = lineCellTemplate.getQuadrant(); + + // Paint each element in the path + int gridSize = + MapTool.getCampaign().getZone(lineCellTemplate.getZoneId()).getGrid().getSize(); + ListIterator i = path.listIterator(); + while (i.hasNext()) { + CellPoint p = i.next(); + int xOff = p.x * gridSize; + int yOff = p.y * gridSize; + int distance = template.getDistance(p.x, p.y); + + if (quadrant.equals(AbstractTemplate.Quadrant.NORTH_EAST.name())) { + yOff = yOff - gridSize; + } else if (quadrant.equals(AbstractTemplate.Quadrant.SOUTH_WEST.name())) { + xOff = xOff - gridSize; + } else if (quadrant.equals(AbstractTemplate.Quadrant.NORTH_WEST.name())) { + xOff = xOff - gridSize; + yOff = yOff - gridSize; } - } - private interface ItemRenderer { - void render(); + // Paint what is needed. + if (area) { + paintArea(template, p.x, p.y, xOff, yOff, gridSize, distance); + } // endif + if (border) { + paintBorder(pen, template, p.x, p.y, xOff, yOff, gridSize, i.previousIndex()); + } // endif + } // endfor } + } - private class LabelRenderer implements ItemRenderer { - private float x; - private float y; - private String text; - - public LabelRenderer(String text, float x, float y) { - this.x = x; - this.y = y; - this.text = text; - } - - @Override - public void render() { - tmpWorldCoord.x = x; - tmpWorldCoord.y = y; - tmpWorldCoord.z = 0; - tmpScreenCoord = cam.project(tmpWorldCoord); - - drawBoxedString( - text, - tmpScreenCoord.x, - tmpScreenCoord.y, - SwingUtilities.CENTER, - grayLabel, - Color.BLACK); + private class RadiusTemplateDrawer extends AbstractTemplateDrawer { + @Override + protected void paintArea( + AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + var radiusTemplate = (RadiusTemplate) template; + // Only squares w/in the radius + if (distance <= radiusTemplate.getRadius()) { + // Paint the squares + for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { + paintArea(template, xOff, yOff, gridSize, q); } + } } - private class TokenLabelRenderer implements ItemRenderer { - private final boolean isGMView; - private Token token; - - public TokenLabelRenderer(Token token, boolean isGMView) { - this.token = token; - this.isGMView = isGMView; - } - - @Override - public void render() { - int offset = 3; // Keep it from tramping on the token border. - NinePatch background; - Color foreground; - - if (token.isVisible()) { - if (token.getType() == Token.Type.NPC) { - background = blueLabel; - foreground = Color.WHITE; - } else { - background = grayLabel; - foreground = Color.BLACK; - } - } else { - background = darkGrayLabel; - foreground = Color.WHITE; - } - String name = token.getName(); - if (isGMView && token.getGMName() != null && !StringUtil.isEmpty(token.getGMName())) { - name += " (" + token.getGMName() + ")"; - } - - - // Calculate image dimensions - - float labelHeight = normalFont.getLineHeight() + GraphicsUtil.BOX_PADDINGY * 2; - - - java.awt.Rectangle r = token.getBounds(zone); - tmpWorldCoord.x = r.x + r.width / 2; - tmpWorldCoord.y = (r.y + r.height + offset + labelHeight * zoom / 2) * -1; - tmpWorldCoord.z = 0; - tmpScreenCoord = cam.project(tmpWorldCoord); - - drawBoxedString( - name, - tmpScreenCoord.x, - tmpScreenCoord.y, - SwingUtilities.CENTER, - background, - foreground); - - var label = token.getLabel(); - - // Draw name and label to image - if (label != null && label.trim().length() > 0) { - drawBoxedString( - label, - tmpScreenCoord.x, - tmpScreenCoord.y - labelHeight, - SwingUtilities.CENTER, - background, - foreground); - } - } + @Override + protected void paintBorder( + Pen pen, + AbstractTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int distance) { + var radiusTemplate = (RadiusTemplate) template; + paintBorderAtRadius( + pen, template, x, y, xOff, yOff, gridSize, distance, radiusTemplate.getRadius()); } - - private abstract class AbstractDrawingDrawer { - public void draw(Drawable element, Pen pen) { - if(pen.getBackgroundPaint() instanceof DrawableColorPaint) { - var colorPaint = (DrawableColorPaint)pen.getBackgroundPaint(); - Color.argb8888ToColor(tmpColor, colorPaint.getColor()); - drawer.setColor(tmpColor); - } - drawBackground(element, pen); - if(pen.getPaint() instanceof DrawableColorPaint) { - var colorPaint = (DrawableColorPaint)pen.getPaint(); - Color.argb8888ToColor(tmpColor, colorPaint.getColor()); - drawer.setColor(tmpColor); - } - var lineWidth = drawer.getDefaultLineWidth(); - drawer.setDefaultLineWidth(pen.getThickness()); - drawBorder(element, pen); - drawer.setDefaultLineWidth(lineWidth); + private void paintBorderAtRadius( + Pen pen, + AbstractTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int distance, + int radius) { + // At the border? + if (distance == radius) { + // Paint lines between vertical boundaries if needed + if (template.getDistance(x + 1, y) > radius) { + for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { + paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, q); + } } - protected void line(Pen pen, float x1, float y1, float x2, float y2) { - var halfLineWidth = pen.getThickness()/2f; - if(!pen.getSquareCap()) - { - drawer.filledCircle(x1, -y1, halfLineWidth); - drawer.filledCircle(x2, -y2, halfLineWidth); - drawer.line(x1, -y1, x2, -y2); - } else { - tmpVector.set(x1-x2, y1-y2).nor(); - var tx = tmpVector.x * halfLineWidth; - var ty = tmpVector.y * halfLineWidth; - drawer.line(x1 + tx, y1 + ty, x2 - tx, y2 - ty); - } + // Paint lines between horizontal boundaries if needed + if (template.getDistance(x, y + 1) > radius) { + for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { + paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, q); + } } - - - protected abstract void drawBackground(Drawable element, Pen pen); - protected abstract void drawBorder(Drawable element, Pen pen); + } } - - private abstract class AbstractTemplateDrawer extends AbstractDrawingDrawer { - @Override - protected void drawBackground(Drawable element, Pen pen) { - tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, AbstractTemplate.DEFAULT_BG_ALPHA); - drawer.setColor(tmpColor); - paint(pen, (AbstractTemplate)element, false, true); - } - - @Override - protected void drawBorder(Drawable element, Pen pen) { - paint(pen, (AbstractTemplate)element, true, false); - } + } - protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean area) { - var radius = template.getRadius(); - - if (radius == 0) return; - Zone zone = MapTool.getCampaign().getZone(template.getZoneId()); - if (zone == null) return; - - // Find the proper distance - int gridSize = zone.getGrid().getSize(); - for (int y = 0; y < radius; y++) { - for (int x = 0; x < radius; x++) { - - // Get the offset to the corner of the square - int xOff = x * gridSize; - int yOff = y * gridSize; - - // Template specific painting - if (border) paintBorder(pen, template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); - if (area) paintArea(template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); - } // endfor - } // endfor - } - - protected void paintArea(AbstractTemplate template, int xOff, int yOff, int gridSize, AbstractTemplate.Quadrant q) { - var vertex = template.getVertex(); - int x = vertex.x + getXMult(q) * xOff + ((getXMult(q) - 1) / 2) * gridSize; - int y = vertex.y + getYMult(q) * yOff + ((getYMult(q) - 1) / 2) * gridSize; - drawer.filledRectangle(x, -y - gridSize, gridSize, gridSize); - } - - protected int getXMult(AbstractTemplate.Quadrant q) { - return ((q == AbstractTemplate.Quadrant.NORTH_WEST || q == AbstractTemplate.Quadrant.SOUTH_WEST) ? -1 : +1); - } - - protected int getYMult(AbstractTemplate.Quadrant q) { - return ((q == AbstractTemplate.Quadrant.NORTH_WEST || q == AbstractTemplate.Quadrant.NORTH_EAST) ? -1 : +1); - } - - protected void paintCloseVerticalBorder(Pen pen, - AbstractTemplate template, int xOff, int yOff, int gridSize, AbstractTemplate.Quadrant q) { - var vertex = template.getVertex(); - int x = vertex.x + getXMult(q) * xOff; - int y = vertex.y + getYMult(q) * yOff; - line(pen, x, y, x, y + getYMult(q) * gridSize); - } - - protected void paintFarHorizontalBorder(Pen pen, - AbstractTemplate template, int xOff, int yOff, int gridSize, AbstractTemplate.Quadrant q) { - var vertex = template.getVertex(); - int x = vertex.x + getXMult(q) * xOff; - int y = vertex.y + getYMult(q) * yOff + getYMult(q) * gridSize; - line(pen, x, y, x + getXMult(q) * gridSize, y); - } - - protected void paintFarVerticalBorder(Pen pen, - AbstractTemplate template, int xOff, int yOff, int gridSize, AbstractTemplate.Quadrant q) { - var vertex = template.getVertex(); - int x = vertex.x + getXMult(q) * xOff + getXMult(q) * gridSize; - int y = vertex.y + getYMult(q) * yOff; - line(pen, x, y, x, y + getYMult(q) * gridSize); - } - - protected void paintCloseHorizontalBorder(Pen pen, - AbstractTemplate template, int xOff, int yOff, int gridSize, AbstractTemplate.Quadrant q) { - var vertex = template.getVertex(); - int x = vertex.x + getXMult(q) * xOff; - int y = vertex.y + getYMult(q) * yOff; - line(pen, x, y, x + getXMult(q) * gridSize, y); - } - - protected abstract void paintArea(AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance); + private class BurstTemplateDrawer extends AbstractDrawingDrawer { - protected abstract void paintBorder(Pen pen, AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance); + @Override + protected void drawBackground(Drawable element, Pen pen) { + var template = (BurstTemplate) element; + tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, AbstractTemplate.DEFAULT_BG_ALPHA); + drawer.setColor(tmpColor); + fillArea(template.getArea()); } - private class LineTemplateDrawer extends AbstractTemplateDrawer { - @Override - protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean area) { - if (MapTool.getCampaign().getZone(template.getZoneId()) == null) { - return; - } - var lineTemplate = (LineTemplate)template; - - // Need to paint? We need a line and to translate the painting - if (lineTemplate.getPathVertex() == null) return; - if (template.getRadius() == 0) return; - if (lineTemplate.getPath() == null && lineTemplate.calcPath() == null) return; - - // Paint each element in the path - int gridSize = MapTool.getCampaign().getZone(template.getZoneId()).getGrid().getSize(); - ListIterator i = lineTemplate.getPath().listIterator(); - while (i.hasNext()) { - CellPoint p = i.next(); - int xOff = p.x * gridSize; - int yOff = p.y * gridSize; - int distance = template.getDistance(p.x, p.y); - - // Paint what is needed. - if (area) { - paintArea(template, p.x, p.y, xOff, yOff, gridSize, distance); - } // endif - if (border) { - paintBorder(pen, template, p.x, p.y, xOff, yOff, gridSize, i.previousIndex()); - } // endif - } // endfor - } - @Override - protected void paintArea(AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { - var lineTemplate = (LineTemplate)template; - paintArea(template, xOff, yOff, gridSize, lineTemplate.getQuadrant()); - } - - @Override - protected void paintBorder(Pen pen ,AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int pElement) { - var lineTemplate = (LineTemplate)template; - - // Have to scan 3 points behind and ahead, since that is the maximum number of points - // that can be added to the path from any single intersection. - boolean[] noPaint = new boolean[4]; - var path = lineTemplate.getPath(); - for (int i = pElement - 3; i < pElement + 3; i++) { - if (i < 0 || i >= path.size() || i == pElement) continue; - CellPoint p = path.get(i); - - // Ignore diagonal cells and cells that are not adjacent - int dx = p.x - x; - int dy = p.y - y; - if (Math.abs(dx) == Math.abs(dy) || Math.abs(dx) > 1 || Math.abs(dy) > 1) continue; - - // Remove the border between the 2 points - noPaint[dx != 0 ? (dx < 0 ? 0 : 2) : (dy < 0 ? 3 : 1)] = true; - } // endif - - var quadrant = lineTemplate.getQuadrant(); - // Paint the borders as needed - if (!noPaint[0]) paintCloseVerticalBorder(pen, template, xOff, yOff, gridSize, quadrant); - if (!noPaint[1]) paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, quadrant); - if (!noPaint[2]) paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, quadrant); - if (!noPaint[3]) paintCloseHorizontalBorder(pen, template, xOff, yOff, gridSize, quadrant); - } + @Override + protected void drawBorder(Drawable element, Pen pen) { + var template = (BurstTemplate) element; + drawArea(template.getArea()); + drawArea(template.getVertexRenderer().getArea()); } + } - private class LineCellTemplateDrawer extends AbstractTemplateDrawer { - - @Override - protected void paintArea(AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { - var lineCellTemplate = (LineCellTemplate)template; - paintArea(template, xOff, yOff, gridSize, lineCellTemplate.getQuadrant()); - } - - @Override - protected void paintBorder(Pen pen, AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int pElement) { - var lineCellTemplate = (LineCellTemplate)template; - // Have to scan 3 points behind and ahead, since that is the maximum number of points - // that can be added to the path from any single intersection. - boolean[] noPaint = new boolean[4]; - var path = lineCellTemplate.getPath(); - for (int i = pElement - 3; i < pElement + 3; i++) { - if (i < 0 || i >= path.size() || i == pElement) continue; - CellPoint p = path.get(i); - - // Ignore diagonal cells and cells that are not adjacent - int dx = p.x - x; - int dy = p.y - y; - if (Math.abs(dx) == Math.abs(dy) || Math.abs(dx) > 1 || Math.abs(dy) > 1) continue; - - // Remove the border between the 2 points - noPaint[dx != 0 ? (dx < 0 ? 0 : 2) : (dy < 0 ? 3 : 1)] = true; - } // endif - - var quadrant = lineCellTemplate.getQuadrant(); - // Paint the borders as needed - if (!noPaint[0]) paintCloseVerticalBorder(pen, template, xOff, yOff, gridSize, quadrant); - if (!noPaint[1]) paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, quadrant); - if (!noPaint[2]) paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, quadrant); - if (!noPaint[3]) paintCloseHorizontalBorder(pen, template, xOff, yOff, gridSize, quadrant); - } - - @Override - protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean area) { - if (MapTool.getCampaign().getZone(template.getZoneId()) == null) { - return; - } - var lineCellTemplate = (LineCellTemplate)template; - var path = lineCellTemplate.getPath(); - // Need to paint? We need a line and to translate the painting - if (lineCellTemplate.getPathVertex() == null) return; - if (lineCellTemplate.getRadius() == 0) return; - if (path == null && lineCellTemplate.calcPath() == null) return; - - var quadrant = lineCellTemplate.getQuadrant(); - - // Paint each element in the path - int gridSize = MapTool.getCampaign().getZone(lineCellTemplate.getZoneId()).getGrid().getSize(); - ListIterator i = path.listIterator(); - while (i.hasNext()) { - CellPoint p = i.next(); - int xOff = p.x * gridSize; - int yOff = p.y * gridSize; - int distance = template.getDistance(p.x, p.y); - - if (quadrant.equals(AbstractTemplate.Quadrant.NORTH_EAST.name())) { - yOff = yOff - gridSize; - } else if (quadrant.equals(AbstractTemplate.Quadrant.SOUTH_WEST.name())) { - xOff = xOff - gridSize; - } else if (quadrant.equals(AbstractTemplate.Quadrant.NORTH_WEST.name())) { - xOff = xOff - gridSize; - yOff = yOff - gridSize; - } - - // Paint what is needed. - if (area) { - paintArea(template, p.x, p.y, xOff, yOff, gridSize, distance); - } // endif - if (border) { - paintBorder(pen, template, p.x, p.y, xOff, yOff, gridSize, i.previousIndex()); - } // endif - } // endfor + private class ConeTemplateDrawer extends RadiusTemplateDrawer { + @Override + protected void paintArea( + AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + var coneTemplate = (ConeTemplate) template; + + var direction = coneTemplate.getDirection(); + + // Drawing along the spines only? + if ((direction == AbstractTemplate.Direction.EAST + || direction == AbstractTemplate.Direction.WEST) + && y > x) return; + if ((direction == AbstractTemplate.Direction.NORTH + || direction == AbstractTemplate.Direction.SOUTH) + && x > y) return; + + // Only squares w/in the radius + if (distance > coneTemplate.getRadius()) { + return; + } + for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { + if (coneTemplate.withinQuadrant(q)) { + paintArea(template, xOff, yOff, gridSize, q); } + } } - private class RadiusTemplateDrawer extends AbstractTemplateDrawer { - @Override - protected void paintArea(AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { - var radiusTemplate = (RadiusTemplate)template; - // Only squares w/in the radius - if (distance <= radiusTemplate.getRadius()) { - // Paint the squares - for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { - paintArea(template, xOff, yOff, gridSize, q); - } - } - } - - @Override - protected void paintBorder(Pen pen, AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { - var radiusTemplate = (RadiusTemplate)template; - paintBorderAtRadius(pen, template, x, y, xOff, yOff, gridSize, distance, radiusTemplate.getRadius()); - } - - private void paintBorderAtRadius(Pen pen, AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance, int radius) { - // At the border? - if (distance == radius) { - // Paint lines between vertical boundaries if needed - if (template.getDistance(x + 1, y) > radius) { - for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { - paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, q); - } - } - - // Paint lines between horizontal boundaries if needed - if (template.getDistance(x, y + 1) > radius) { - for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { - paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, q); - } - } - } - } + @Override + protected void paintBorder( + Pen pen, + AbstractTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int distance) { + var coneTemplate = (ConeTemplate) template; + paintBorderAtRadius( + pen, coneTemplate, x, y, xOff, yOff, gridSize, distance, coneTemplate.getRadius()); + paintEdges(pen, coneTemplate, x, y, xOff, yOff, gridSize, distance); } - private class BurstTemplateDrawer extends AbstractDrawingDrawer { - - @Override - protected void drawBackground(Drawable element, Pen pen) { - var template = (BurstTemplate)element; - tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, AbstractTemplate.DEFAULT_BG_ALPHA); - drawer.setColor(tmpColor); - fillArea(template.getArea()); - } - - @Override - protected void drawBorder(Drawable element, Pen pen) { - var template = (BurstTemplate)element; - drawArea(template.getArea()); - drawArea(template.getVertexRenderer().getArea()); - } + protected void paintEdges( + Pen pen, + ConeTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int distance) { + + // Handle the edges + int radius = template.getRadius(); + var direction = template.getDirection(); + if (direction.ordinal() % 2 == 0) { + if (x == 0) { + if (direction == AbstractTemplate.Direction.SOUTH_EAST + || direction == AbstractTemplate.Direction.SOUTH_WEST) + paintCloseVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + if (direction == AbstractTemplate.Direction.NORTH_EAST + || direction == AbstractTemplate.Direction.NORTH_WEST) + paintCloseVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + } // endif + if (y == 0) { + if (direction == AbstractTemplate.Direction.SOUTH_EAST + || direction == AbstractTemplate.Direction.NORTH_EAST) + paintCloseHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + if (direction == AbstractTemplate.Direction.SOUTH_WEST + || direction == AbstractTemplate.Direction.NORTH_WEST) + paintCloseHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } // endif + } else if (direction.ordinal() % 2 == 1 && x == y && distance <= radius) { + if (direction == AbstractTemplate.Direction.SOUTH) { + paintFarVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + paintFarVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + paintCloseHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + paintCloseHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + } // endif + if (direction == AbstractTemplate.Direction.NORTH) { + paintFarVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + paintFarVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + paintCloseHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + paintCloseHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } // endif + if (direction == AbstractTemplate.Direction.EAST) { + paintCloseVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + paintCloseVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + paintFarHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + paintFarHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + } // endif + if (direction == AbstractTemplate.Direction.WEST) { + paintCloseVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + paintCloseVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + paintFarHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + paintFarHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } // endif + } // endif } - private class ConeTemplateDrawer extends RadiusTemplateDrawer { - @Override - protected void paintArea( - AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { - var coneTemplate = (ConeTemplate)template; - - var direction = coneTemplate.getDirection(); - - // Drawing along the spines only? - if ((direction == AbstractTemplate.Direction.EAST || direction == AbstractTemplate.Direction.WEST) && y > x) return; - if ((direction == AbstractTemplate.Direction.NORTH || direction == AbstractTemplate.Direction.SOUTH) && x > y) return; - - // Only squares w/in the radius - if (distance > coneTemplate.getRadius()) { - return; - } - for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { - if (coneTemplate.withinQuadrant(q)) { - paintArea(template, xOff, yOff, gridSize, q); - } - } - } - - @Override - protected void paintBorder(Pen pen, - AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { - var coneTemplate = (ConeTemplate)template; - paintBorderAtRadius(pen, coneTemplate, x, y, xOff, yOff, gridSize, distance, coneTemplate.getRadius()); - paintEdges(pen, coneTemplate, x, y, xOff, yOff, gridSize, distance); - } - - protected void paintEdges(Pen pen, - ConeTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { - - // Handle the edges - int radius = template.getRadius(); - var direction = template.getDirection(); - if (direction.ordinal() % 2 == 0) { - if (x == 0) { - if (direction == AbstractTemplate.Direction.SOUTH_EAST || direction == AbstractTemplate.Direction.SOUTH_WEST) - paintCloseVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - if (direction == AbstractTemplate.Direction.NORTH_EAST || direction == AbstractTemplate.Direction.NORTH_WEST) - paintCloseVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); - } // endif - if (y == 0) { - if (direction == AbstractTemplate.Direction.SOUTH_EAST || direction == AbstractTemplate.Direction.NORTH_EAST) - paintCloseHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); - if (direction == AbstractTemplate.Direction.SOUTH_WEST || direction == AbstractTemplate.Direction.NORTH_WEST) - paintCloseHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - } // endif - } else if (direction.ordinal() % 2 == 1 && x == y && distance <= radius) { - if (direction == AbstractTemplate.Direction.SOUTH) { - paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); - paintCloseHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - paintCloseHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); - } // endif - if (direction == AbstractTemplate.Direction.NORTH) { - paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); - paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - paintCloseHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); - paintCloseHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - } // endif - if (direction == AbstractTemplate.Direction.EAST) { - paintCloseVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - paintCloseVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); - paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); - } // endif - if (direction == AbstractTemplate.Direction.WEST) { - paintCloseVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); - paintCloseVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); - paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - } // endif - } // endif - } + protected void paintBorderAtRadius( + Pen pen, + ConeTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int distance, + int radius) { + // At the border? + if (distance == radius) { + var direction = template.getDirection(); + // Paint lines between vertical boundaries if needed + if (template.getDistance(x + 1, y) > radius) { + if (direction == AbstractTemplate.Direction.SOUTH_EAST + || (direction == AbstractTemplate.Direction.SOUTH && y >= x) + || (direction == AbstractTemplate.Direction.EAST && x >= y)) + paintFarVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + if (direction == AbstractTemplate.Direction.NORTH_EAST + || (direction == AbstractTemplate.Direction.NORTH && y >= x) + || (direction == AbstractTemplate.Direction.EAST && x >= y)) + paintFarVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + if (direction == AbstractTemplate.Direction.SOUTH_WEST + || (direction == AbstractTemplate.Direction.SOUTH && y >= x) + || (direction == AbstractTemplate.Direction.WEST && x >= y)) + paintFarVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + if (direction == AbstractTemplate.Direction.NORTH_WEST + || (direction == AbstractTemplate.Direction.NORTH && y >= x) + || (direction == AbstractTemplate.Direction.WEST && x >= y)) + paintFarVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } // endif - protected void paintBorderAtRadius(Pen pen, - ConeTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance, int radius) { - // At the border? - if (distance == radius) { - var direction = template.getDirection(); - // Paint lines between vertical boundaries if needed - if (template.getDistance(x + 1, y) > radius) { - if (direction == AbstractTemplate.Direction.SOUTH_EAST - || (direction == AbstractTemplate.Direction.SOUTH && y >= x) - || (direction == AbstractTemplate.Direction.EAST && x >= y)) - paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - if (direction == AbstractTemplate.Direction.NORTH_EAST - || (direction == AbstractTemplate.Direction.NORTH && y >= x) - || (direction == AbstractTemplate.Direction.EAST && x >= y)) - paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); - if (direction == AbstractTemplate.Direction.SOUTH_WEST - || (direction == AbstractTemplate.Direction.SOUTH && y >= x) - || (direction == AbstractTemplate.Direction.WEST && x >= y)) - paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); - if (direction == AbstractTemplate.Direction.NORTH_WEST - || (direction == AbstractTemplate.Direction.NORTH && y >= x) - || (direction == AbstractTemplate.Direction.WEST && x >= y)) - paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - } // endif - - // Paint lines between horizontal boundaries if needed - if (template.getDistance(x, y + 1) > radius) { - if (direction == AbstractTemplate.Direction.SOUTH_EAST - || (direction == AbstractTemplate.Direction.SOUTH && y >= x) - || (direction == AbstractTemplate.Direction.EAST && x >= y)) - paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - if (direction == AbstractTemplate.Direction.SOUTH_WEST - || (direction == AbstractTemplate.Direction.SOUTH && y >= x) - || (direction == AbstractTemplate.Direction.WEST && x >= y)) - paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); - if (direction == AbstractTemplate.Direction.NORTH_EAST - || (direction == AbstractTemplate.Direction.NORTH && y >= x) - || (direction == AbstractTemplate.Direction.EAST && x >= y)) - paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); - if (direction == AbstractTemplate.Direction.NORTH_WEST - || (direction == AbstractTemplate.Direction.NORTH && y >= x) - || (direction == AbstractTemplate.Direction.WEST && x >= y)) - paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - } // endif - } // endif - } + // Paint lines between horizontal boundaries if needed + if (template.getDistance(x, y + 1) > radius) { + if (direction == AbstractTemplate.Direction.SOUTH_EAST + || (direction == AbstractTemplate.Direction.SOUTH && y >= x) + || (direction == AbstractTemplate.Direction.EAST && x >= y)) + paintFarHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + if (direction == AbstractTemplate.Direction.SOUTH_WEST + || (direction == AbstractTemplate.Direction.SOUTH && y >= x) + || (direction == AbstractTemplate.Direction.WEST && x >= y)) + paintFarHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + if (direction == AbstractTemplate.Direction.NORTH_EAST + || (direction == AbstractTemplate.Direction.NORTH && y >= x) + || (direction == AbstractTemplate.Direction.EAST && x >= y)) + paintFarHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + if (direction == AbstractTemplate.Direction.NORTH_WEST + || (direction == AbstractTemplate.Direction.NORTH && y >= x) + || (direction == AbstractTemplate.Direction.WEST && x >= y)) + paintFarHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } // endif + } // endif } + } - private class BlastTemplateDrawer extends AbstractDrawingDrawer { - - @Override - protected void drawBackground(Drawable element, Pen pen) { - var template = (BlastTemplate)element; - tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, AbstractTemplate.DEFAULT_BG_ALPHA); - drawer.setColor(tmpColor); - fillArea(template.getArea()); - } + private class BlastTemplateDrawer extends AbstractDrawingDrawer { - @Override - protected void drawBorder(Drawable element, Pen pen) { - var template = (BlastTemplate)element; - drawArea(template.getArea()); - } + @Override + protected void drawBackground(Drawable element, Pen pen) { + var template = (BlastTemplate) element; + tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, AbstractTemplate.DEFAULT_BG_ALPHA); + drawer.setColor(tmpColor); + fillArea(template.getArea()); } - private class RadiusCellTemplateDrawer extends AbstractTemplateDrawer { - - @Override - protected void paintArea(AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { - // Only squares w/in the radius - int radius = template.getRadius(); - if (distance <= radius) { - paintArea(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - } - - if (template.getDistance(x, y + 1) <= radius) { - paintArea(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); - } - - if (template.getDistance(x + 1, y) <= radius) { - paintArea(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); - } - - if (template.getDistance(x + 1, y + 1) <= radius) { - paintArea(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - } - } + @Override + protected void drawBorder(Drawable element, Pen pen) { + var template = (BlastTemplate) element; + drawArea(template.getArea()); + } + } - @Override - protected void paintArea(AbstractTemplate template, int xOff, int yOff, int gridSize, AbstractTemplate.Quadrant q) { - ZonePoint vertex = template.getVertex(); - int x = vertex.x + getXMult(q) * xOff + ((getXMult(q) - 1) / 2) * gridSize; - int y = vertex.y + getYMult(q) * yOff + ((getYMult(q) - 1) / 2) * gridSize; - drawer.filledRectangle(x, -y - gridSize, gridSize, gridSize); - } + private class RadiusCellTemplateDrawer extends AbstractTemplateDrawer { - @Override - protected int getXMult(AbstractTemplate.Quadrant q) { - return ((q == AbstractTemplate.Quadrant.NORTH_WEST || q == AbstractTemplate.Quadrant.SOUTH_WEST) ? -1 : +1); - } + @Override + protected void paintArea( + AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + // Only squares w/in the radius + int radius = template.getRadius(); + if (distance <= radius) { + paintArea(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + } + + if (template.getDistance(x, y + 1) <= radius) { + paintArea(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + } + + if (template.getDistance(x + 1, y) <= radius) { + paintArea(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + } + + if (template.getDistance(x + 1, y + 1) <= radius) { + paintArea(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } + } - @Override - protected int getYMult(AbstractTemplate.Quadrant q) { - return ((q == AbstractTemplate.Quadrant.NORTH_WEST || q == AbstractTemplate.Quadrant.NORTH_EAST) ? -1 : +1); - } + @Override + protected void paintArea( + AbstractTemplate template, int xOff, int yOff, int gridSize, AbstractTemplate.Quadrant q) { + ZonePoint vertex = template.getVertex(); + int x = vertex.x + getXMult(q) * xOff + ((getXMult(q) - 1) / 2) * gridSize; + int y = vertex.y + getYMult(q) * yOff + ((getYMult(q) - 1) / 2) * gridSize; + drawer.filledRectangle(x, -y - gridSize, gridSize, gridSize); + } - @Override - protected void paintBorder(Pen pen, AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { - paintBorderAtRadius(pen, template, x, y, xOff, yOff, gridSize, distance, template.getRadius()); - } + @Override + protected int getXMult(AbstractTemplate.Quadrant q) { + return ((q == AbstractTemplate.Quadrant.NORTH_WEST + || q == AbstractTemplate.Quadrant.SOUTH_WEST) + ? -1 + : +1); + } - protected void paintBorderAtRadius(Pen pen, - AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance, int radius) { - // At the border? - // Paint lines between vertical boundaries if needed + @Override + protected int getYMult(AbstractTemplate.Quadrant q) { + return ((q == AbstractTemplate.Quadrant.NORTH_WEST + || q == AbstractTemplate.Quadrant.NORTH_EAST) + ? -1 + : +1); + } - if (template.getDistance(x, y + 1) == radius && template.getDistance(x + 1, y + 1) > radius) { - paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); - } - if (distance == radius && template.getDistance(x + 1, y) > radius) { - paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - } - if (template.getDistance(x + 1, y + 1) == radius && template.getDistance(x + 2, y + 1) > radius) { - paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - } - if (template.getDistance(x + 1, y) == radius && template.getDistance(x + 2, y) > radius) { - paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); - } // endif - if (x == 0 && y + 1 == radius) { - paintFarVerticalBorder(pen, template, xOff - gridSize, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - } - if (x == 0 && y + 2 == radius) { - paintFarVerticalBorder(pen, template, xOff - gridSize, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - } + @Override + protected void paintBorder( + Pen pen, + AbstractTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int distance) { + paintBorderAtRadius( + pen, template, x, y, xOff, yOff, gridSize, distance, template.getRadius()); + } - // Paint lines between horizontal boundaries if needed - if (template.getDistance(x, y + 1) == radius && template.getDistance(x, y + 2) > radius) { - paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); - } - if (template.getDistance(x, y) == radius && template.getDistance(x, y + 1) > radius) { - paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - } - if (y == 0 && x + 1 == radius) { - paintFarHorizontalBorder(pen, template, xOff, yOff - gridSize, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - } - if (y == 0 && x + 2 == radius) { - paintFarHorizontalBorder(pen, template, xOff, yOff - gridSize, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - } - if (template.getDistance(x + 1, y + 1) == radius && template.getDistance(x + 1, y + 2) > radius) { - paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - } - if (template.getDistance(x + 1, y) == radius && template.getDistance(x + 1, y + 1) > radius) { - paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); - } // endif - } + protected void paintBorderAtRadius( + Pen pen, + AbstractTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int distance, + int radius) { + // At the border? + // Paint lines between vertical boundaries if needed + + if (template.getDistance(x, y + 1) == radius && template.getDistance(x + 1, y + 1) > radius) { + paintFarVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + } + if (distance == radius && template.getDistance(x + 1, y) > radius) { + paintFarVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + } + if (template.getDistance(x + 1, y + 1) == radius + && template.getDistance(x + 2, y + 1) > radius) { + paintFarVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } + if (template.getDistance(x + 1, y) == radius && template.getDistance(x + 2, y) > radius) { + paintFarVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + } // endif + if (x == 0 && y + 1 == radius) { + paintFarVerticalBorder( + pen, template, xOff - gridSize, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + } + if (x == 0 && y + 2 == radius) { + paintFarVerticalBorder( + pen, template, xOff - gridSize, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } + + // Paint lines between horizontal boundaries if needed + if (template.getDistance(x, y + 1) == radius && template.getDistance(x, y + 2) > radius) { + paintFarHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + } + if (template.getDistance(x, y) == radius && template.getDistance(x, y + 1) > radius) { + paintFarHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + } + if (y == 0 && x + 1 == radius) { + paintFarHorizontalBorder( + pen, template, xOff, yOff - gridSize, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + } + if (y == 0 && x + 2 == radius) { + paintFarHorizontalBorder( + pen, template, xOff, yOff - gridSize, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } + if (template.getDistance(x + 1, y + 1) == radius + && template.getDistance(x + 1, y + 2) > radius) { + paintFarHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } + if (template.getDistance(x + 1, y) == radius && template.getDistance(x + 1, y + 1) > radius) { + paintFarHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + } // endif + } - @Override - protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean area) { - int radius = template.getRadius(); - GUID zoneId = template.getZoneId(); - - if (radius == 0) return; - Zone zone = MapTool.getCampaign().getZone(zoneId); - if (zone == null) return; - - // Find the proper distance - int gridSize = zone.getGrid().getSize(); - for (int y = 0; y < radius; y++) { - for (int x = 0; x < radius; x++) { - - // Get the offset to the corner of the square - int xOff = x * gridSize; - int yOff = y * gridSize; - - // Template specific painting - if (border) paintBorder(pen, template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); - if (area) paintArea(template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); - } // endfor - } // endfor - } + @Override + protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean area) { + int radius = template.getRadius(); + GUID zoneId = template.getZoneId(); + + if (radius == 0) return; + Zone zone = MapTool.getCampaign().getZone(zoneId); + if (zone == null) return; + + // Find the proper distance + int gridSize = zone.getGrid().getSize(); + for (int y = 0; y < radius; y++) { + for (int x = 0; x < radius; x++) { + + // Get the offset to the corner of the square + int xOff = x * gridSize; + int yOff = y * gridSize; + + // Template specific painting + if (border) + paintBorder(pen, template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); + if (area) paintArea(template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); + } // endfor + } // endfor } + } - private class ShapeDrawableDrawer extends AbstractDrawingDrawer { + private class ShapeDrawableDrawer extends AbstractDrawingDrawer { - @Override - protected void drawBackground(Drawable element, Pen pen) { - var shape = (ShapeDrawable)element; - fillArea(shape.getArea()); - } + @Override + protected void drawBackground(Drawable element, Pen pen) { + var shape = (ShapeDrawable) element; + fillArea(shape.getArea()); + } - @Override - protected void drawBorder(Drawable element, Pen pen) { - var shape = (ShapeDrawable)element; - pathToFloatArray(shape.getShape().getPathIterator(null)); - if(tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) - && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { - tmpFloat.pop(); - tmpFloat.pop(); - } - if(pen.getSquareCap()) - drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.POINTY, false); - else - { - drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.NONE, false); - for(int i=0; i + 1 < tmpFloat.size; i+=2) - drawer.filledCircle(tmpFloat.get(i), tmpFloat.get(i+1), pen.getThickness()/2f); - } - } + @Override + protected void drawBorder(Drawable element, Pen pen) { + var shape = (ShapeDrawable) element; + pathToFloatArray(shape.getShape().getPathIterator(null)); + if (tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) + && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { + tmpFloat.pop(); + tmpFloat.pop(); + } + if (pen.getSquareCap()) + drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.POINTY, false); + else { + drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.NONE, false); + for (int i = 0; i + 1 < tmpFloat.size; i += 2) + drawer.filledCircle(tmpFloat.get(i), tmpFloat.get(i + 1), pen.getThickness() / 2f); + } } + } } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index 237ff91c79..9f70d1c62c 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -234,7 +234,9 @@ public void setAutoResizeStamp(boolean value) { this.autoResizeStamp = value; } - public Map getSelectionSetMap() { return selectionSetMap; } + public Map getSelectionSetMap() { + return selectionSetMap; + } public boolean isAutoResizeStamp() { return autoResizeStamp; @@ -294,7 +296,6 @@ public List getShowPathList() { return showPathList; } - /** * Resets the token panels, fire onTokenSelection, repaints. The impersonation panel is only reset * if no token is currently impersonated. @@ -1114,7 +1115,7 @@ public void renderZone(Graphics2D g2d, PlayerView view) { } // Are we still waiting to show the zone ? if (isLoading()) { - if(!skipDrawing) { + if (!skipDrawing) { g2d.setColor(Color.black); g2d.fillRect(0, 0, viewRect.width, viewRect.height); GraphicsUtil.drawBoxedString(g2d, loadingProgress, viewRect.width / 2, viewRect.height / 2); @@ -1122,7 +1123,7 @@ public void renderZone(Graphics2D g2d, PlayerView view) { return; } if (MapTool.getCampaign().isBeingSerialized()) { - if(!skipDrawing) { + if (!skipDrawing) { g2d.setColor(Color.black); g2d.fillRect(0, 0, viewRect.width, viewRect.height); GraphicsUtil.drawBoxedString( @@ -1213,8 +1214,7 @@ public void renderZone(Graphics2D g2d, PlayerView view) { List drawables = zone.getBackgroundDrawnElements(); // if (!drawables.isEmpty()) { timer.start("drawableBackground"); - if(!skipDrawing) - renderDrawableOverlay(g2d, backgroundDrawableRenderer, view, drawables); + if (!skipDrawing) renderDrawableOverlay(g2d, backgroundDrawableRenderer, view, drawables); timer.stop("drawableBackground"); // } List background = zone.getBackgroundStamps(false); @@ -1229,13 +1229,12 @@ public void renderZone(Graphics2D g2d, PlayerView view) { List drawables = zone.getObjectDrawnElements(); // if (!drawables.isEmpty()) { timer.start("drawableObjects"); - if(!skipDrawing) - renderDrawableOverlay(g2d, objectDrawableRenderer, view, drawables); + if (!skipDrawing) renderDrawableOverlay(g2d, objectDrawableRenderer, view, drawables); timer.stop("drawableObjects"); // } } timer.start("grid"); - if(!skipDrawing) renderGrid(g2d, view); + if (!skipDrawing) renderGrid(g2d, view); timer.stop("grid"); if (Zone.Layer.OBJECT.isEnabled()) { @@ -1249,13 +1248,11 @@ public void renderZone(Graphics2D g2d, PlayerView view) { } if (Zone.Layer.TOKEN.isEnabled()) { timer.start("lights"); - if(!skipDrawing) - renderLights(g2d, view); + if (!skipDrawing) renderLights(g2d, view); timer.stop("lights"); timer.start("auras"); - if(!skipDrawing) - renderAuras(g2d, view); + if (!skipDrawing) renderAuras(g2d, view); timer.stop("auras"); } @@ -1284,8 +1281,7 @@ public void renderZone(Graphics2D g2d, PlayerView view) { List drawables = zone.getDrawnElements(); // if (!drawables.isEmpty()) { timer.start("drawableTokens"); - if(!skipDrawing) - renderDrawableOverlay(g2d, tokenDrawableRenderer, view, drawables); + if (!skipDrawing) renderDrawableOverlay(g2d, tokenDrawableRenderer, view, drawables); timer.stop("drawableTokens"); // } @@ -1293,8 +1289,7 @@ public void renderZone(Graphics2D g2d, PlayerView view) { drawables = zone.getGMDrawnElements(); // if (!drawables.isEmpty()) { timer.start("drawableGM"); - if(!skipDrawing) - renderDrawableOverlay(g2d, gmDrawableRenderer, view, drawables); + if (!skipDrawing) renderDrawableOverlay(g2d, gmDrawableRenderer, view, drawables); timer.stop("drawableGM"); // } List stamps = zone.getGMStamps(false); @@ -1311,8 +1306,7 @@ public void renderZone(Graphics2D g2d, PlayerView view) { timer.stop("tokens"); } timer.start("unowned movement"); - if(!skipDrawing) - showBlockedMoves(g2d, view, getUnOwnedMovementSet(view)); + if (!skipDrawing) showBlockedMoves(g2d, view, getUnOwnedMovementSet(view)); timer.stop("unowned movement"); // Moved below, after the renderFog() call... @@ -1372,8 +1366,7 @@ public void renderZone(Graphics2D g2d, PlayerView view) { } timer.start("owned movement"); - if(!skipDrawing) - showBlockedMoves(g2d, view, getOwnedMovementSet(view)); + if (!skipDrawing) showBlockedMoves(g2d, view, getOwnedMovementSet(view)); timer.stop("owned movement"); // Text associated with tokens being moved is added to a list to be drawn after, i.e. on top @@ -1383,21 +1376,18 @@ public void renderZone(Graphics2D g2d, PlayerView view) { // will be // visible. timer.start("token name/labels"); - if(!skipDrawing) - renderRenderables(g2d); + if (!skipDrawing) renderRenderables(g2d); timer.stop("token name/labels"); } // if (zone.visionType ...) if (view.isGMView()) { timer.start("visionOverlayGM"); - if(!skipDrawing) - renderGMVisionOverlay(g2d, view); + if (!skipDrawing) renderGMVisionOverlay(g2d, view); timer.stop("visionOverlayGM"); } else { timer.start("visionOverlayPlayer"); - if(!skipDrawing) - renderPlayerVisionOverlay(g2d, view); + if (!skipDrawing) renderPlayerVisionOverlay(g2d, view); timer.stop("visionOverlayPlayer"); } @@ -2002,7 +1992,6 @@ public String getLoadingProgress() { return loadingProgress; } - public boolean isLoading() { if (isLoaded) { // We're done, until the cache is cleared @@ -2866,7 +2855,9 @@ public List getTokensOnScreen() { return list; } - public Token getTokenUnderMouse() { return tokenUnderMouse; } + public Token getTokenUnderMouse() { + return tokenUnderMouse; + } public Zone.Layer getActiveLayer() { return activeLayer != null ? activeLayer : Zone.Layer.TOKEN; @@ -3164,8 +3155,7 @@ protected void renderTokens( } timer.stop("renderTokens:OnscreenCheck"); - if(skipDrawing) - continue; + if (skipDrawing) continue; // create a per token Graphics object - normally clipped, unless always visible Area tokenCellArea = zone.getGrid().getTokenCellArea(tokenBounds); @@ -3705,7 +3695,8 @@ protected void renderTokens( // Stacks if (!tokenList.isEmpty() && !tokenList.get(0).isStamp()) { // TODO: find a cleaner way to indicate token layer - if (tokenStackMap != null && !skipDrawing) { // FIXME Needed to prevent NPE but how can it be null? + if (tokenStackMap != null + && !skipDrawing) { // FIXME Needed to prevent NPE but how can it be null? for (Token token : tokenStackMap.keySet()) { Area bounds = getTokenBounds(token); if (bounds == null) { diff --git a/src/main/java/net/rptools/maptool/model/HexGrid.java b/src/main/java/net/rptools/maptool/model/HexGrid.java index 8aeebae94b..59eb05411f 100644 --- a/src/main/java/net/rptools/maptool/model/HexGrid.java +++ b/src/main/java/net/rptools/maptool/model/HexGrid.java @@ -148,11 +148,17 @@ public double getMinorRadius() { return minorRadius; } - public double getScaledMinorRadius() { return scaledMinorRadius; } + public double getScaledMinorRadius() { + return scaledMinorRadius; + } - public double getScaledEdgeProjection() { return scaledEdgeProjection; } + public double getScaledEdgeProjection() { + return scaledEdgeProjection; + } - public double getScaledEdgeLength() { return scaledEdgeLength; } + public double getScaledEdgeLength() { + return scaledEdgeLength; + } public void setMinorRadius(double minorRadius) { this.minorRadius = minorRadius; diff --git a/src/main/java/net/rptools/maptool/model/Token.java b/src/main/java/net/rptools/maptool/model/Token.java index 4bef530db3..bf6df1a7da 100644 --- a/src/main/java/net/rptools/maptool/model/Token.java +++ b/src/main/java/net/rptools/maptool/model/Token.java @@ -1134,15 +1134,16 @@ public MD5Key getTokenImageAssetId() { if (!getHasImageTable() || !hasFacing() || getImageTableName() == null) return getImageAssetId(); - LookupTable lookupTable = MapTool.getCampaign().getLookupTableMap().get(getImageTableName()); - if(lookupTable == null) - return getImageAssetId(); + LookupTable lookupTable = MapTool.getCampaign().getLookupTableMap().get(getImageTableName()); + if (lookupTable == null) return getImageAssetId(); try { LookupTable.LookupEntry result = lookupTable.getLookup(getFacing().toString()); - if (result != null) return result.getImageId(); + if (result != null) return result.getImageId(); - } catch (ParserException p) { /* do nothing */ } + } catch (ParserException p) { + /* do nothing */ + } return getImageAssetId(); } diff --git a/src/main/java/net/rptools/maptool/model/drawing/BurstTemplate.java b/src/main/java/net/rptools/maptool/model/drawing/BurstTemplate.java index 0f79cd8442..3db5f325c1 100644 --- a/src/main/java/net/rptools/maptool/model/drawing/BurstTemplate.java +++ b/src/main/java/net/rptools/maptool/model/drawing/BurstTemplate.java @@ -24,7 +24,6 @@ import net.rptools.maptool.client.MapTool; import net.rptools.maptool.model.GUID; import net.rptools.maptool.model.ZonePoint; -import org.locationtech.jts.awt.ShapeReader; import net.rptools.maptool.server.proto.drawing.BurstTemplateDto; import net.rptools.maptool.server.proto.drawing.DrawableDto; @@ -136,7 +135,9 @@ public Area getArea() { return renderer.getArea(); } - public ShapeDrawable getVertexRenderer() { return vertexRenderer; } + public ShapeDrawable getVertexRenderer() { + return vertexRenderer; + } @Override public DrawableDto toDto() { diff --git a/src/main/java/net/rptools/maptool/util/ImageManager.java b/src/main/java/net/rptools/maptool/util/ImageManager.java index c65503cc60..1ea9f6593f 100644 --- a/src/main/java/net/rptools/maptool/util/ImageManager.java +++ b/src/main/java/net/rptools/maptool/util/ImageManager.java @@ -23,10 +23,8 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; - import net.rptools.lib.MD5Key; import net.rptools.lib.image.ImageUtil; -import net.rptools.maptool.client.MapTool; import net.rptools.maptool.model.Asset; import net.rptools.maptool.model.AssetAvailableListener; import net.rptools.maptool.model.AssetManager; @@ -65,7 +63,6 @@ public class ImageManager { /** The buffered "?" image to display while transferring the image. */ public static BufferedImage TRANSFERING_IMAGE; - /** The broken image, a "X" is used for all situations where the asset or image was invalid. */ private static final String BROKEN_IMAGE_PNG = "net/rptools/maptool/client/image/broken.png"; From e3365a8e5c5c3ff11a1520b5c1b152541eed2f55 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 4 Apr 2022 22:30:16 +0200 Subject: [PATCH 064/139] merge with dev --- .../maptool/client/ui/MapToolFrame.java | 23 ------------------- .../maptool/client/ui/zone/GdxRenderer.java | 16 ++++++------- 2 files changed, 8 insertions(+), 31 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index f61f0aac42..af752b3b84 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -54,19 +54,6 @@ import net.rptools.maptool.client.AppActions.ClientAction; import net.rptools.maptool.client.MapTool.ZoneEvent; import net.rptools.maptool.client.swing.*; -import net.rptools.maptool.client.swing.AppHomeDiskSpaceStatusBar; -import net.rptools.maptool.client.swing.AssetCacheStatusBar; -import net.rptools.maptool.client.swing.CoordinateStatusBar; -import net.rptools.maptool.client.swing.DragImageGlassPane; -import net.rptools.maptool.client.swing.GlassPane; -import net.rptools.maptool.client.swing.ImageCacheStatusBar; -import net.rptools.maptool.client.swing.ImageChooserDialog; -import net.rptools.maptool.client.swing.MemoryStatusBar; -import net.rptools.maptool.client.swing.ProgressStatusBar; -import net.rptools.maptool.client.swing.SpacerStatusBar; -import net.rptools.maptool.client.swing.StatusPanel; -import net.rptools.maptool.client.swing.TopologyModeSelectionPanel; -import net.rptools.maptool.client.swing.ZoomStatusBar; import net.rptools.maptool.client.tool.PointerTool; import net.rptools.maptool.client.ui.assetpanel.AssetDirectory; import net.rptools.maptool.client.ui.assetpanel.AssetPanel; @@ -88,14 +75,7 @@ import net.rptools.maptool.language.I18N; import net.rptools.maptool.model.*; import net.rptools.maptool.model.Zone.Layer; -import net.rptools.maptool.model.ZoneFactory; -import net.rptools.maptool.model.ZonePoint; import net.rptools.maptool.model.drawing.*; -import net.rptools.maptool.model.drawing.DrawableColorPaint; -import net.rptools.maptool.model.drawing.DrawablePaint; -import net.rptools.maptool.model.drawing.DrawableTexturePaint; -import net.rptools.maptool.model.drawing.DrawnElement; -import net.rptools.maptool.model.drawing.Pen; import net.rptools.maptool.model.tokens.TokenEventBusBridge; import net.rptools.maptool.util.ImageManager; import org.apache.commons.collections4.map.LinkedMap; @@ -183,9 +163,6 @@ public class MapToolFrame extends DefaultDockableHolder /** The HTML pane showing the map overlay. */ private HTMLOverlayPanel overlayPanel; - private JPanel visibleControlPanel; - private FullScreenFrame fullScreenFrame; - private JPanel fullScreenToolPanel; private String statusMessage = ""; private CoordinateStatusBar coordinateStatusBar; private AssetCacheStatusBar assetCacheStatusBar; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java index 363a0e46f1..d71a6f34ee 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java @@ -794,7 +794,7 @@ private void renderFog(PlayerView view) { } else { if (fog == null) { var texturePaint = (DrawableTexturePaint) paint; - var image = texturePaint.getAsset().getImage(); + var image = texturePaint.getAsset().getData(); var pix = new Pixmap(image, 0, image.length); fog = new Texture(pix); fog.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat); @@ -1507,7 +1507,7 @@ private void renderBoard() { } else { if (background == null) { var texturePaint = (DrawableTexturePaint) paint; - var image = texturePaint.getAsset().getImage(); + var image = texturePaint.getAsset().getData(); var pix = new Pixmap(image, 0, image.length); background = new Texture(pix); background.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat); @@ -3202,7 +3202,7 @@ private void initializeZoneResources(Zone newZone) { private Texture paintToTexture(DrawablePaint paint) { if (paint instanceof DrawableTexturePaint) { var texturePaint = (DrawableTexturePaint) paint; - var image = texturePaint.getAsset().getImage(); + var image = texturePaint.getAsset().getData(); var pix = new Pixmap(image, 0, image.length); var texture = new Texture(pix); pix.dispose(); @@ -3227,7 +3227,7 @@ private Texture paintToTexture(DrawablePaint paint) { private Sprite paintToSprite(DrawablePaint paint) { if (paint instanceof DrawableTexturePaint) { var texturePaint = (DrawableTexturePaint) paint; - var image = texturePaint.getAsset().getImage(); + var image = texturePaint.getAsset().getData(); var pix = new Pixmap(image, 0, image.length); var sprite = new Sprite(new Texture(pix)); sprite.setSize(pix.getWidth(), pix.getHeight()); @@ -3499,25 +3499,25 @@ public void flushFog() { public void assetAvailable(MD5Key key) { try { var asset = AssetManager.getAsset(key); - if (asset.getImageExtension() == "gif") { + if (asset.getExtension() == "gif") { Gdx.app.postRunnable( () -> { // var ass = AssetManager.getAsset(key); - var is = new ByteArrayInputStream(asset.getImage()); + var is = new ByteArrayInputStream(asset.getData()); var animation = GifDecoder.loadGIFAnimation(Animation.PlayMode.LOOP, is); animationMap.put(key, animation); }); return; } - if (asset.getImageExtension() == "data") { + if (asset.getExtension() == "data") { var videoPlayer = VideoPlayerCreator.createVideoPlayer(); videoPlayerMap.put(key, videoPlayer); return; } var img = ImageUtil.createCompatibleImage( - ImageUtil.bytesToImage(asset.getImage(), asset.getName()), null); + ImageUtil.bytesToImage(asset.getData(), asset.getName()), null); // var img = ImageManager.getImage(key); var bytes = ImageUtil.imageToBytes(img, "png"); // without imageutil there seem to be some issues with tranparency for some images. From bd9de5b2351964112f0aa935d7d26951971a29bf Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 7 Apr 2022 18:10:37 +0200 Subject: [PATCH 065/139] add b2dlights test --- border.png | Bin 220 -> 0 bytes build.gradle | 6 +- .../maptool/client/ui/MapToolFrame.java | 12 +-- .../maptool/client/ui/ToolbarPanel.java | 2 +- .../maptool/client/ui/zone/GdxRenderer.java | 75 +++++++++++++++--- .../rptools/maptool/client/image/javafx.png | Bin 13861 -> 0 bytes .../rptools/maptool/client/image/libgdx.png | Bin 0 -> 6432 bytes 7 files changed, 78 insertions(+), 17 deletions(-) delete mode 100644 border.png delete mode 100644 src/main/resources/net/rptools/maptool/client/image/javafx.png create mode 100644 src/main/resources/net/rptools/maptool/client/image/libgdx.png diff --git a/border.png b/border.png deleted file mode 100644 index ea8637a6b3fda889115973b6607e3e332876ef17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^RzPgZ!3HD+-v0Otq!xR+IEGZrd3)`kV6%boq zxyw3IEtiRGm9;wWpK;&q tokenBodies = new HashMap<>(); + private Body body; + private PointLight pointLight; // private VideoPlayer videoPlayer; public GdxRenderer() { @@ -216,7 +220,44 @@ public void create() { manager = new com.badlogic.gdx.assets.AssetManager(); packer = createPacker(); - // debugRenderer = new Box2DDebugRenderer(); + world = new World(new Vector2(0, 0), false); + rayHandler = new RayHandler(world); + rayHandler.setGammaCorrection(true); + rayHandler.useDiffuseLight(true); + rayHandler.setBlurNum(3); + //rayHandler.setAmbientLight(0.3f); + pointLight = new PointLight(rayHandler, 120, Color.WHITE, 6, 4 ,-3); + + debugRenderer = new Box2DDebugRenderer(); + // First we create a body definition + BodyDef bodyDef = new BodyDef(); +// We set our body to dynamic, for something like ground which doesn't move we would set it to StaticBody + bodyDef.type = BodyDef.BodyType.DynamicBody; +// Set our body's starting position in the world + bodyDef.position.set(2.5f, -2.5f); + +// Create our body in the world using our body definition + body = world.createBody(bodyDef); + +// Create a circle shape and set its radius to 6 + CircleShape circle = new CircleShape(); + circle.setRadius(0.5f); + +// Create a fixture definition to apply our shape to + FixtureDef fixtureDef = new FixtureDef(); + fixtureDef.shape = circle; + fixtureDef.density = 0.5f; + fixtureDef.friction = 0.4f; + fixtureDef.restitution = 0.6f; // Make it bounce a little bit + +// Create our fixture and attach it to the body + Fixture fixture = body.createFixture(fixtureDef); + +// Remember to dispose of any shapes after you're done with them! +// BodyDef and FixtureDef don't need disposing, but shapes do. + circle.dispose(); + body.setLinearDamping(20f); + var resolver = new InternalFileHandleResolver(); manager.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver)); manager.setLoader(BitmapFont.class, ".ttf", new FreetypeFontLoader(resolver)); @@ -259,6 +300,20 @@ public void create() { initializeZoneResources(zone); } + private float accumulator = 0; + + private void doPhysicsStep(float deltaTime) { + // fixed time step + // max frame time to avoid spiral of death (on slow devices) + float frameTime = Math.min(deltaTime, 0.25f); + accumulator += frameTime; + while (accumulator >= 1/60f) { + world.step(1/60f, 6, 2); + rayHandler.update(); + accumulator -= 1/60f; + } + } + @Override public void dispose() { manager.dispose(); @@ -272,6 +327,9 @@ public void dispose() { atlas, Texture.TextureFilter.Linear, Texture.TextureFilter.Linear, false); packer.dispose(); tokenAtlas.dispose(); + world.dispose(); + debugRenderer.dispose(); + rayHandler.dispose(); } @Override @@ -340,14 +398,13 @@ public void render() { // vfxManager.beginInputCapture(); ScreenUtils.clear(Color.BLACK); doRendering(); - // rayHandler.setCombinedMatrix(cam.combined, cam.position.x, cam.position.y, - // cam.viewportWidth, cam.viewportHeight); - // rayHandler.updateAndRender(); - // debugRenderer.render(world, cam.combined); - // world.step(1/60f, 6, 2); + debugRenderer.render(world, cam.combined.cpy().scl((float)zone.getGrid().getCellWidth())); + rayHandler.setCombinedMatrix(cam.combined.cpy().scl((float)zone.getGrid().getCellWidth())); + rayHandler.render(); // vfxManager.endInputCapture(); // vfxManager.applyEffects(); // vfxManager.renderToScreen(); + doPhysicsStep(delta); } @NotNull diff --git a/src/main/resources/net/rptools/maptool/client/image/javafx.png b/src/main/resources/net/rptools/maptool/client/image/javafx.png deleted file mode 100644 index 104d5f4b06ec8e5186ac462cc2252b9b20b90e38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13861 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 diff --git a/src/main/resources/net/rptools/maptool/client/image/libgdx.png b/src/main/resources/net/rptools/maptool/client/image/libgdx.png new file mode 100644 index 0000000000000000000000000000000000000000..8575f4719f3e916ad23cd1428d8ff52888d2332b GIT binary patch literal 6432 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 bz#r!II4HNUfV3OB10q`5THG=}df~qS Date: Fri, 29 Apr 2022 20:39:04 +0200 Subject: [PATCH 066/139] start cleaning GdxRenderer --- build.gradle | 6 - .../box2d => lib/gdx}/GifDecoder.java | 2 +- .../box2d/unused/Box2DSpriteAdapter.java | 58 - .../maptool/box2d/unused/Box2dLightTest.java | 116 -- .../maptool/box2d/unused/Box2dRenderer.java | 720 -------- .../maptool/box2d/unused/DebugPointLight.java | 68 - .../maptool/box2d/unused/DesktopLauncher.java | 66 - .../maptool/box2d/unused/MapToolGame.java | 74 - .../box2d/unused/MapTool_InputProcessor.java | 102 -- .../maptool/client/ui/MapToolFrame.java | 1 + .../maptool/client/ui/zone/ZoneRenderer.java | 5 +- .../ui/zone/gdx/AbstractDrawingDrawer.java | 86 + .../ui/zone/gdx/AbstractTemplateDrawer.java | 150 ++ .../client/ui/zone/gdx/AreaRenderer.java | 144 ++ .../ui/zone/gdx/BlastTemplateDrawer.java | 42 + .../ui/zone/gdx/BurstTemplateDrawer.java | 43 + .../ui/zone/gdx/ConeTemplateDrawer.java | 210 +++ .../client/ui/zone/{ => gdx}/GdxRenderer.java | 1520 ++--------------- .../ui/zone/gdx/ItemRenderer.java} | 16 +- .../client/ui/zone/gdx/LabelRenderer.java | 45 + .../ui/zone/gdx/LineCellTemplateDrawer.java | 115 ++ .../ui/zone/gdx/LineTemplateDrawer.java | 104 ++ .../ui/zone/gdx/RadiusCellTemplateDrawer.java | 181 ++ .../ui/zone/gdx/RadiusTemplateDrawer.java | 82 + .../ui/zone/gdx/ShapeDrawableDrawer.java | 52 + .../client/ui/zone/gdx/TextRenderer.java | 119 ++ .../ui/zone/gdx/TokenLabelRenderer.java | 90 + 27 files changed, 1614 insertions(+), 2603 deletions(-) rename src/main/java/net/rptools/{maptool/box2d => lib/gdx}/GifDecoder.java (99%) delete mode 100644 src/main/java/net/rptools/maptool/box2d/unused/Box2DSpriteAdapter.java delete mode 100644 src/main/java/net/rptools/maptool/box2d/unused/Box2dLightTest.java delete mode 100644 src/main/java/net/rptools/maptool/box2d/unused/Box2dRenderer.java delete mode 100644 src/main/java/net/rptools/maptool/box2d/unused/DebugPointLight.java delete mode 100644 src/main/java/net/rptools/maptool/box2d/unused/DesktopLauncher.java delete mode 100644 src/main/java/net/rptools/maptool/box2d/unused/MapToolGame.java delete mode 100644 src/main/java/net/rptools/maptool/box2d/unused/MapTool_InputProcessor.java create mode 100644 src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java create mode 100644 src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractTemplateDrawer.java create mode 100644 src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java create mode 100644 src/main/java/net/rptools/maptool/client/ui/zone/gdx/BlastTemplateDrawer.java create mode 100644 src/main/java/net/rptools/maptool/client/ui/zone/gdx/BurstTemplateDrawer.java create mode 100644 src/main/java/net/rptools/maptool/client/ui/zone/gdx/ConeTemplateDrawer.java rename src/main/java/net/rptools/maptool/client/ui/zone/{ => gdx}/GdxRenderer.java (67%) rename src/main/java/net/rptools/maptool/{box2d/unused/Main.java => client/ui/zone/gdx/ItemRenderer.java} (57%) create mode 100644 src/main/java/net/rptools/maptool/client/ui/zone/gdx/LabelRenderer.java create mode 100644 src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineCellTemplateDrawer.java create mode 100644 src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineTemplateDrawer.java create mode 100644 src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusCellTemplateDrawer.java create mode 100644 src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusTemplateDrawer.java create mode 100644 src/main/java/net/rptools/maptool/client/ui/zone/gdx/ShapeDrawableDrawer.java create mode 100644 src/main/java/net/rptools/maptool/client/ui/zone/gdx/TextRenderer.java create mode 100644 src/main/java/net/rptools/maptool/client/ui/zone/gdx/TokenLabelRenderer.java diff --git a/build.gradle b/build.gradle index 1dd4ef7a91..695c956365 100644 --- a/build.gradle +++ b/build.gradle @@ -464,13 +464,7 @@ dependencies { implementation 'com.thelsing.gdx:gdx-backend-jogl:1.10.0' implementation "com.badlogicgames.gdx:gdx:$gdxVersion" - implementation "com.badlogicgames.gdx:gdx-box2d:$gdxVersion" - implementation "com.badlogicgames.box2dlights:box2dlights:$box2DLightsVersion" - implementation "com.badlogicgames.gdx:gdx-backend-lwjgl:$gdxVersion" implementation "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop" - implementation "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-desktop" - implementation 'com.crashinvaders.vfx:gdx-vfx-core:0.5.0' - implementation 'com.crashinvaders.vfx:gdx-vfx-effects:0.5.0' implementation "space.earlygrey:shapedrawer:$shapedrawerVersion" implementation "com.badlogicgames.gdx:gdx-freetype:$gdxVersion" implementation "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop" diff --git a/src/main/java/net/rptools/maptool/box2d/GifDecoder.java b/src/main/java/net/rptools/lib/gdx/GifDecoder.java similarity index 99% rename from src/main/java/net/rptools/maptool/box2d/GifDecoder.java rename to src/main/java/net/rptools/lib/gdx/GifDecoder.java index cbbd026823..07e98b4cbf 100644 --- a/src/main/java/net/rptools/maptool/box2d/GifDecoder.java +++ b/src/main/java/net/rptools/lib/gdx/GifDecoder.java @@ -12,7 +12,7 @@ * and specifically the Affero license * text at . */ -package net.rptools.maptool.box2d; +package net.rptools.lib.gdx; import static java.lang.System.arraycopy; diff --git a/src/main/java/net/rptools/maptool/box2d/unused/Box2DSpriteAdapter.java b/src/main/java/net/rptools/maptool/box2d/unused/Box2DSpriteAdapter.java deleted file mode 100644 index 826fe81167..0000000000 --- a/src/main/java/net/rptools/maptool/box2d/unused/Box2DSpriteAdapter.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * This software Copyright by the RPTools.net development team, and - * licensed under the Affero GPL Version 3 or, at your option, any later - * version. - * - * MapTool Source Code is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU Affero General Public - * License * along with this source Code. If not, please visit - * and specifically the Affero license - * text at . - */ -package net.rptools.maptool.box2d.unused; - -import com.badlogic.gdx.math.Vector2; -import com.badlogic.gdx.physics.box2d.Body; - -public class Box2DSpriteAdapter { - public final String TAG = this.getClass().getSimpleName(); - - private Body body; - private Vector2 offset = new Vector2(); - - public Box2DSpriteAdapter(Body body, float width, float height) { - this.body = body; - offset.set(width, height); - } - - public Box2DSpriteAdapter(Body body) { - this.body = body; - } - - public Vector2 position() { - return body.getPosition(); - } - - public float angleRad() { - return body.getAngle(); - } - - public float angleDeg() { - return 180 * body.getAngle() / ((float) Math.PI); - } - - public Vector2 centreOfRotation() { - return body.getLocalCenter(); - } - - public Vector2 offset() { - return offset; - } - - public void setOffset(float x, float y) { - offset.set(x, y); - } -} diff --git a/src/main/java/net/rptools/maptool/box2d/unused/Box2dLightTest.java b/src/main/java/net/rptools/maptool/box2d/unused/Box2dLightTest.java deleted file mode 100644 index 1bd5177560..0000000000 --- a/src/main/java/net/rptools/maptool/box2d/unused/Box2dLightTest.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * This software Copyright by the RPTools.net development team, and - * licensed under the Affero GPL Version 3 or, at your option, any later - * version. - * - * MapTool Source Code is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU Affero General Public - * License * along with this source Code. If not, please visit - * and specifically the Affero license - * text at . - */ -package net.rptools.maptool.box2d.unused; - -import box2dLight.ConeLight; -import box2dLight.PointLight; -import box2dLight.RayHandler; -import com.badlogic.gdx.ApplicationAdapter; -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.FPSLogger; -import com.badlogic.gdx.graphics.GL30; -import com.badlogic.gdx.graphics.OrthographicCamera; -import com.badlogic.gdx.math.Vector2; -import com.badlogic.gdx.physics.box2d.Body; -import com.badlogic.gdx.physics.box2d.BodyDef; -import com.badlogic.gdx.physics.box2d.BodyDef.BodyType; -import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer; -import com.badlogic.gdx.physics.box2d.CircleShape; -import com.badlogic.gdx.physics.box2d.FixtureDef; -import com.badlogic.gdx.physics.box2d.PolygonShape; -import com.badlogic.gdx.physics.box2d.World; - -public class Box2dLightTest extends ApplicationAdapter { - OrthographicCamera camera; - - float width, height; - - FPSLogger logger; - - World world; - Box2DDebugRenderer renderer; - - Body circleBody; - - RayHandler rayHandler; - - @Override - public void create() { - width = Gdx.graphics.getWidth() / 5; - height = Gdx.graphics.getHeight() / 5; - - camera = new OrthographicCamera(width, height); - camera.position.set(width * 0.5f, height * 0.5f, 0); - camera.update(); - - world = new World(new Vector2(0, -9.8f), false); - - renderer = new Box2DDebugRenderer(); - - logger = new FPSLogger(); - - BodyDef circleDef = new BodyDef(); - circleDef.type = BodyType.DynamicBody; - circleDef.position.set(width / 2f, height / 1.1f); - - circleBody = world.createBody(circleDef); - - CircleShape circleShape = new CircleShape(); - circleShape.setRadius(3f); - - FixtureDef circleFixture = new FixtureDef(); - circleFixture.shape = circleShape; - circleFixture.density = 0.4f; - circleFixture.friction = 0.1f; - circleFixture.restitution = 0.75f; - - circleBody.createFixture(circleFixture); - - BodyDef groundBodyDef = new BodyDef(); - groundBodyDef.position.set(0, 3); - - Body groundBody = world.createBody(groundBodyDef); - - PolygonShape groundBox = new PolygonShape(); - groundBox.setAsBox(camera.viewportWidth * 2, 3.0f); - - groundBody.createFixture(groundBox, 0.0f); - - rayHandler = new RayHandler(world); - rayHandler.setCombinedMatrix(camera); - - new PointLight(rayHandler, 5000, Color.DARK_GRAY, 400, (width / 2) - 75, (height / 2) + 50); - new ConeLight(rayHandler, 5000, Color.PINK, 400, (width / 2) + 30, (height / 2) + 15, 250, 35); - } - - @Override - public void dispose() { - world.dispose(); - } - - @Override - public void render() { - Gdx.gl.glClearColor(0, 0, 0, 1); - Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT); - - renderer.render(world, camera.combined); - rayHandler.updateAndRender(); - - world.step(1 / 60f, 6, 2); - - logger.log(); - } -} diff --git a/src/main/java/net/rptools/maptool/box2d/unused/Box2dRenderer.java b/src/main/java/net/rptools/maptool/box2d/unused/Box2dRenderer.java deleted file mode 100644 index 4978943140..0000000000 --- a/src/main/java/net/rptools/maptool/box2d/unused/Box2dRenderer.java +++ /dev/null @@ -1,720 +0,0 @@ -/* - * This software Copyright by the RPTools.net development team, and - * licensed under the Affero GPL Version 3 or, at your option, any later - * version. - * - * MapTool Source Code is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU Affero General Public - * License * along with this source Code. If not, please visit - * and specifically the Affero license - * text at . - */ -package net.rptools.maptool.box2d.unused; - -import box2dLight.PointLight; -import box2dLight.RayHandler; -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.Screen; -import com.badlogic.gdx.graphics.Camera; -import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.GL30; -import com.badlogic.gdx.graphics.Pixmap; -import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.g2d.PolygonRegion; -import com.badlogic.gdx.graphics.g2d.PolygonSprite; -import com.badlogic.gdx.graphics.g2d.Sprite; -import com.badlogic.gdx.graphics.g2d.TextureRegion; -import com.badlogic.gdx.graphics.glutils.ShapeRenderer; -import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType; -import com.badlogic.gdx.math.EarClippingTriangulator; -import com.badlogic.gdx.math.Vector2; -import com.badlogic.gdx.physics.box2d.Body; -import com.badlogic.gdx.physics.box2d.BodyDef; -import com.badlogic.gdx.physics.box2d.BodyDef.BodyType; -import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer; -import com.badlogic.gdx.physics.box2d.CircleShape; -import com.badlogic.gdx.physics.box2d.FixtureDef; -import com.badlogic.gdx.physics.box2d.PolygonShape; -import com.badlogic.gdx.physics.box2d.World; -import com.badlogic.gdx.scenes.scene2d.Stage; -import com.badlogic.gdx.utils.Array; -import com.badlogic.gdx.utils.FloatArray; -import com.badlogic.gdx.utils.ShortArray; -import com.badlogic.gdx.utils.viewport.ScreenViewport; -import java.awt.geom.AffineTransform; -import java.awt.geom.Area; -import java.awt.geom.PathIterator; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Random; -import java.util.Set; -import java.util.concurrent.ThreadLocalRandom; -import net.rptools.maptool.client.AppState; -import net.rptools.maptool.client.ui.MapToolFrame; -import net.rptools.maptool.client.ui.zone.ZoneRenderer; -import net.rptools.maptool.model.Zone; -import org.apache.commons.lang.ArrayUtils; - -public class Box2dRenderer implements Screen { - private static final Texture DEFAULT_BACKGROUND_TEXURE = - new Texture(Gdx.files.internal("net/rptools/maptool/client/image/grass.png")); - private static final Sprite SOCCER_BALL = - new Sprite(new Texture("net/rptools/maptool/client/image/soccer_ball.png")); - private static final Sprite LIGHT_SOURCE = - new Sprite(new Texture("net/rptools/maptool/client/image/light_ball.png")); - - private static final boolean DEBUG_BOX2D = false; - private static final boolean CREATE_RANDOM_EFFECTS = true; - private static boolean GAME_PAUSED = false; - - private static Texture backgroundTexture; - private static TextureRegion textureRegion; - private static byte[] backgroundImage; - private static Area vblArea = new Area(); - - private static Set vblBodySet = new HashSet<>(); - private static Set polySpriteSet = new HashSet<>(); - private static Set lightSet = new HashSet<>(); - - public static float frameRate = 60; - - private final MapToolGame app; - private MapToolFrame mapToolFrame; - private Stage stage; - private Box2DDebugRenderer renderer; - private RayHandler rayHandler; - private ShapeRenderer shapeRenderer; - - public Box2dRenderer(final MapToolGame app) { - this.app = app; - this.mapToolFrame = app.getMapToolFrame(); - - MapTool_InputProcessor inputProcessor = new MapTool_InputProcessor(this); - stage = new Stage(new ScreenViewport()); - Gdx.input.setInputProcessor(inputProcessor); // was stage - - app.world = new World(new Vector2(0, 0), true); // Earth gravity would be -9.7 - - if (DEBUG_BOX2D) renderer = new Box2DDebugRenderer(); - - rayHandler = new RayHandler(app.world); - // rayHandler.setAmbientLight(new Color(.1f, .1f, .1f, .1f)); - RayHandler.useDiffuseLight(true); - rayHandler.setCombinedMatrix(app.camera); - shapeRenderer = new ShapeRenderer(); - shapeRenderer.setAutoShapeType(true); - - // For Testing purposes - if (CREATE_RANDOM_EFFECTS) { - createTop(); - createBottom(); - createLeftSide(); - createRightSide(); - - for (int i = 0; i < 20; i++) { - createRandomBody(false); - } - - // Create a couple of lights on bodies? - for (int i = 0; i < 5; i++) { - createRandomBody(true); - // createRandomLight(); - } - } - - // For VBL texture - Pixmap pix = new Pixmap(1, 1, Pixmap.Format.RGBA8888); - pix.setColor(Color.BLUE.r, Color.BLUE.g, Color.BLUE.b, 196); // 128 default alpha - pix.fill(); - Texture textureSolid = new Texture(pix); - textureRegion = new TextureRegion(textureSolid); - } - - public Camera getCamera() { - return app.camera; - } - - @Override - public void show() {} - - @Override - public void render(float delta) { - Gdx.gl.glClearColor(1, 0, 0, 1); - Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT); - - // Suspend all activity while window is closed - update(delta); - stage.draw(); - - Array bodies = new Array(); - app.world.getBodies(bodies); - - drawBackgroundTile(); - - if (DEBUG_BOX2D) renderer.render(app.world, app.camera.combined); - - renderGrid(); - renderLightSources(bodies); - renderVBL(); - renderVblSprites(bodies); - - renderSoccerBalls(bodies, true); - rayHandler.updateAndRender(); - - debugLights(); - - // Drawn after rayHandler, spites always shown regardless of light then, eg always visible, can - // break up vbl/tokens later - // renderSoccerBalls(bodies, false); - renderFPS(); - - if (!GAME_PAUSED) app.world.step(1 / frameRate, 6, 2); - - Gdx.graphics.setTitle(MapToolGame.TITLE + " - " + Gdx.graphics.getFramesPerSecond() + " fps"); - } - - public void update(float delta) { - stage.act(delta); - } - - @Override - public void resize(int width, int height) { - app.camera.viewportHeight = (MapToolGame.VIEWPORT_WIDTH / width) * height; - - // stage.getViewport().update(width, height, true); - // MapToolGame.SCREEN_WIDTH = width; - // MapToolGame.SCREEN_HEIGHT = height; - } - - @Override - public void pause() { - GAME_PAUSED = !GAME_PAUSED; - } - - @Override - public void resume() {} - - @Override - public void hide() {} - - @Override - public void dispose() { - shapeRenderer.dispose(); - stage.dispose(); - } - - private void renderFPS() { - app.sb.begin(); - app.font.draw(app.sb, MapToolGame.TITLE, 20, MapToolGame.SCREEN_HEIGHT - 10); - app.font.draw( - app.sb, - "FPS: " + Gdx.graphics.getFramesPerSecond() + " [" + frameRate + "]", - 20, - MapToolGame.SCREEN_HEIGHT - 35); - app.font.draw(app.sb, "Lights: " + lightSet.size(), 20, MapToolGame.SCREEN_HEIGHT - 60); - app.sb.end(); - } - - private void renderLightSources(Array bodies) { - app.sb.begin(); - for (Body body : bodies) { - if (body.getUserData() != null) { - if (body.getUserData() instanceof Sprite) { - Sprite sprite = (Sprite) body.getUserData(); - sprite.setPosition( - body.getPosition().x - sprite.getWidth() / 2, - body.getPosition().y - sprite.getHeight() / 2); - sprite.setRotation((float) (body.getAngle() * 180 / Math.PI % 360)); - - if (sprite == LIGHT_SOURCE) { - sprite.draw(app.sb); - } - } - } - } - app.sb.end(); - } - - private void renderSoccerBalls(Array bodies, boolean beforeLights) { - app.sb.begin(); - for (Body body : bodies) { - if (body.getUserData() != null) { - if (body.getUserData() instanceof Sprite) { - Sprite sprite = (Sprite) body.getUserData(); - sprite.setPosition( - body.getPosition().x - sprite.getWidth() / 2, - body.getPosition().y - sprite.getHeight() / 2); - sprite.setRotation((float) (body.getAngle() * 180 / Math.PI % 360)); - - if (sprite == SOCCER_BALL) { - if (beforeLights) { - sprite.draw(app.sb); - } else { - for (PointLight light : lightSet) { - if (light.contains(sprite.getX(), sprite.getY())) { - sprite.draw(app.sb); - break; - } - } - } - } - } - } - } - app.sb.end(); - } - - private void renderVblSprites(Array bodies) { - app.polyBatch.begin(); - for (Body body : bodies) { - if (body.getUserData() != null) { - if (body.getUserData() instanceof PolygonSprite) { - PolygonSprite sprite = (PolygonSprite) body.getUserData(); - sprite.setPosition( - body.getPosition().x - sprite.getWidth() / 2, - body.getPosition().y - sprite.getHeight() / 2); - sprite.setRotation((float) (body.getAngle() * 180 / Math.PI % 360)); - sprite.draw(app.polyBatch); - } - } - } - app.polyBatch.end(); - } - - private void debugLights() { - if (lightSet.isEmpty() || !DEBUG_BOX2D) return; - - shapeRenderer.begin(); - for (DebugPointLight light : lightSet) { - // light.drawRays(shapeRenderer); - light.drawEdge(shapeRenderer); - } - shapeRenderer.end(); - } - - /* - * For POC only TODO: Check for color vs image and change to a listener vs getting images every frame - */ - private void drawBackgroundTile() { - /* Zone zone = mapToolFrame.getCurrentZoneRenderer().getZone(); - byte[] image = ImageManager.getTexture(zone.getBackgroundAsset(), mapToolFrame.getCurrentZoneRenderer()); - - if (image != null && image != backgroundImage) { - backgroundTexture = new Texture(new Pixmap(image, 0, image.length)); - backgroundImage = image; // Remember last image - System.out.println("Background image changed!"); - } - - if (backgroundTexture == null) - backgroundTexture = DEFAULT_BACKGROUND_TEXURE; - - backgroundTexture.setWrap(TextureWrap.Repeat, TextureWrap.Repeat); - app.sb.begin(); - app.sb.draw(backgroundTexture, 0, 0, 0, 0, MapToolGame.SCREEN_WIDTH, MapToolGame.SCREEN_HEIGHT); - app.sb.end();*/ - } - - /* - * TODO: Store grid shape for future frames and fix Hex/Iso offset! - */ - private void renderGrid() { - Zone zone = mapToolFrame.getCurrentZoneRenderer().getZone(); - int gridSize = (int) (zone.getGrid().getSize() * getScale()); - - if (!AppState.isShowGrid() || gridSize < ZoneRenderer.MIN_GRID_SIZE) { - return; - } - - float gridWidth = (float) zone.getGrid().getCellWidth(); - float gridHeight = (float) zone.getGrid().getCellHeight(); - - java.awt.Color gridColor = new java.awt.Color(zone.getGridColor()); - ShapeRenderer shape = new ShapeRenderer(); - - shape.begin(ShapeType.Line); - shape.setColor(gridColor.getRed(), gridColor.getGreen(), gridColor.getBlue(), 4f); - float[] gridVertices = areaToVertices(zone.getGrid().getCellShape()); - - shape.translate(1, 1, 0); - float transX = ((Gdx.graphics.getWidth() / gridWidth) + 1) * -gridWidth; - - for (int h = 0; h <= Gdx.graphics.getHeight() / gridHeight; h++) { - for (int w = 0; w <= Gdx.graphics.getWidth() / gridWidth; w++) { - shape.polygon(gridVertices); - shape.translate(gridWidth, 0, 0); - } - - shape.translate(transX, gridHeight, 0); - } - - shape.end(); - } - - private void renderVBL() { - Zone zone = mapToolFrame.getCurrentZoneRenderer().getZone(); - - if (vblArea.equals(zone.getTopology())) return; - - System.out.println("VBL Changed!"); - vblArea = new Area(zone.getTopology()); - - for (Body body : vblBodySet) { - app.world.destroyBody(body); - } - - vblBodySet.clear(); - polySpriteSet.clear(); - - ArrayList vblAreas = parseVblAreas(vblArea); - for (float[] vertices : vblAreas) { - // Creating a Sprite to show VBL for each VBL "island" - EarClippingTriangulator triangulator = new EarClippingTriangulator(); - ShortArray triangleIndices = triangulator.computeTriangles(vertices); - PolygonRegion polyReg = new PolygonRegion(textureRegion, vertices, triangleIndices.toArray()); - - Body vblBody = createVblBody(vertices); - if (vblBody != null) { - vblBody.setUserData(new PolygonSprite(polyReg)); - vblBodySet.add(vblBody); - } - } - } - - private ArrayList parseVblAreas(Area area) { - ArrayList vblAreas = new ArrayList(); - ArrayList vertices = new ArrayList(); - float[] coords = new float[6]; - float lastX = 0, lastY = 0; - - // Flip the y axis because box2d y is down - AffineTransform at = new AffineTransform(); - at.translate(0, Gdx.graphics.getHeight()); - at.scale(1, -1); - - for (PathIterator iter = area.createTransformedArea(at).getPathIterator(null); - !iter.isDone(); - iter.next()) { - int type = iter.currentSegment(coords); - - switch (type) { - case PathIterator.SEG_CLOSE: - System.out.println("SEG_CLOSE"); - vblAreas.add(ArrayUtils.toPrimitive(vertices.toArray(new Float[vertices.size()]))); - break; - case PathIterator.SEG_LINETO: - System.out.println("SEG_LINETO"); - // Jamz: depending on the topology tool used, the last point == first point which is not - // expected for box2d polygon ear clipping - if (coords[0] == vertices.get(0) && coords[1] == vertices.get(1)) break; - if (lastX == coords[0] && lastY == coords[1]) { - System.out.println("coords: " + Arrays.toString(coords)); - System.out.println("Skip!"); - break; - } - vertices.add(coords[0]); - vertices.add(coords[1]); - lastX = coords[0]; - lastY = coords[1]; - break; - case PathIterator.SEG_MOVETO: - System.out.println("SEG_MOVETO"); - vertices = new ArrayList(); - vertices.add(coords[0]); - vertices.add(coords[1]); - lastX = coords[0]; - lastY = coords[1]; - break; - } - } - - return vblAreas; - } - - // private void drawFilledPolygon(Polygon polygon, Color color) { - // ShapeRenderer shapeRenderer = null; - // shapeRenderer.begin(ShapeRenderer.ShapeType.Filled); - // shapeRenderer.setColor(color); - // - // float[] vertices = polygon.getTransformedVertices(); - // - // // NOTE: you probably don't want to create a new EarClippingTriangulator each frame - // ShortArray triangleIndices = new EarClippingTriangulator().computeTriangles(vertices); - // for (int i = 0; i < triangleIndices.size; i += 3) { - // shapeRenderer.triangle( - // vertices[triangleIndices.get(i) * 2], vertices[triangleIndices.get(i) * 2 + 1], - // vertices[triangleIndices.get(i + 1) * 2], vertices[triangleIndices.get(i + 1) * 2 + 1], - // vertices[triangleIndices.get(i + 2) * 2], vertices[triangleIndices.get(i + 2) * 2 + 1]); - // } - // - // shapeRenderer.end(); - // } - - private float[] areaToVertices(Area area) { - if (area.isEmpty()) return new float[0]; - - PathIterator iterator = area.getPathIterator(null); - float[] floats = new float[60]; - float[] vertices = new float[1000]; - int count1 = 0; - - while (!iterator.isDone()) { - int type = iterator.currentSegment(floats); - - if (type != PathIterator.SEG_CLOSE) { - vertices[count1++] = floats[0]; - vertices[count1++] = floats[1]; - } - iterator.next(); - } - - float[] finalVertices = new float[count1]; - System.arraycopy(vertices, 0, finalVertices, 0, count1); - - return finalVertices; - } - - // private Body createVblBody(ShortArray triangles) { - // if (triangles.size == 0) - // return null; - // - // Body vblBody; - // - // BodyDef vblDef = new BodyDef(); - // vblDef.type = BodyType.StaticBody; - // vblBody = app.world.createBody(vblDef); - // - // System.out.println("Looks like we have an array size of: " + triangles.size); - // System.out.println("triangle: " + triangles.toString()); - // - // for (int i = 0; i < triangles.size; i = i + 6) { - // PolygonShape vblShape = new PolygonShape(); - // - // Vector2[] triangle = { new Vector2(triangles.get(i + 0), triangles.get(i + 1)), - // new Vector2(triangles.get(i + 2), triangles.get(i + 3)), - // new Vector2(triangles.get(i + 4), triangles.get(i + 5)) }; - // - // vblShape.set(triangle); - // vblBody.createFixture(vblShape, 0f); - // vblShape.dispose(); - // } - // - // return vblBody; - // } - - private Body createVblBody(float[] areaPath) { - if (areaPath.length == 0) return null; - - Body vblBody; - - BodyDef vblDef = new BodyDef(); - vblDef.type = BodyType.StaticBody; - vblBody = app.world.createBody(vblDef); - - System.out.println("Looks like we have an array size of: " + areaPath.length); - System.out.println("areaPath : " + Arrays.toString(areaPath)); - - ShortArray triangles = new EarClippingTriangulator().computeTriangles(areaPath); - FloatArray polygon = new FloatArray(areaPath); - // FloatArray triangleOutlines = new FloatArray(triangles.size * 2); - - System.out.println("triangle size : " + triangles.size); - - for (int i = 0; i < triangles.size; i += 3) { - PolygonShape vblShape = new PolygonShape(); - FloatArray triangleOutlines = new FloatArray(); - - float ax = polygon.get(triangles.get(i) * 2); - float ay = polygon.get(triangles.get(i) * 2 + 1); - float bx = polygon.get(triangles.get(i + 1) * 2); - float by = polygon.get(triangles.get(i + 1) * 2 + 1); - float cx = polygon.get(triangles.get(i + 2) * 2); - float cy = polygon.get(triangles.get(i + 2) * 2 + 1); - - triangleOutlines.add(ax); - triangleOutlines.add(ay); - triangleOutlines.add(bx); - triangleOutlines.add(by); - triangleOutlines.add(cx); - triangleOutlines.add(cy); - - // System.out.println("triangleOutlines : " + Arrays.toString(triangleOutlines.toArray())); - vblShape.set(triangleOutlines.toArray()); - // System.out.println("Body shape created ok."); - vblBody.createFixture(vblShape, 0f); - - vblShape.dispose(); - } - - return vblBody; - } - - // private Body createVblBodyOLD(float[] vertices) { - // if (vertices.length == 0) - // return null; - // - // Body vblBody; - // - // BodyDef vblDef = new BodyDef(); - // vblDef.type = BodyType.StaticBody; - // vblBody = app.world.createBody(vblDef); - // - // PolygonShape vblShape = new PolygonShape(); - // vblShape.set(vertices); - // vblBody.createFixture(vblShape, 0f); - // - // vblShape.dispose(); - // - // return vblBody; - // } - - public double getScale() { - return mapToolFrame.getCurrentZoneRenderer().getScale(); - } - - /* - * For Testing only - */ - private void createTop() { - // Create the ground... - BodyDef groundBodyDef = new BodyDef(); - groundBodyDef.position.set(app.camera.viewportWidth * .25f, app.camera.viewportHeight * 1.25f); - Body groundBody = app.world.createBody(groundBodyDef); - - PolygonShape groundBox = new PolygonShape(); - groundBox.setAsBox(app.camera.viewportWidth * 1.5f, 3.0f); - groundBody.createFixture(groundBox, 0.0f); - } - - private void createBottom() { - // Create the ground... - BodyDef groundBodyDef = new BodyDef(); - groundBodyDef.position.set( - app.camera.viewportWidth * .25f, -(app.camera.viewportHeight * .25f)); - Body groundBody = app.world.createBody(groundBodyDef); - - PolygonShape groundBox = new PolygonShape(); - groundBox.setAsBox(app.camera.viewportWidth * 1.5f, 3.0f); - groundBody.createFixture(groundBox, 0.0f); - } - - private void createLeftSide() { - // Create the ground... - BodyDef groundBodyDef = new BodyDef(); - groundBodyDef.position.set(1, 0); - Body groundBody = app.world.createBody(groundBodyDef); - - PolygonShape groundBox = new PolygonShape(); - groundBox.setAsBox(3.0f, app.camera.viewportHeight * 2); - groundBody.createFixture(groundBox, 0.0f); - } - - private void createRightSide() { - // Create the ground... - BodyDef groundBodyDef = new BodyDef(); - groundBodyDef.position.set((app.camera.viewportWidth) - 1, 0); - Body groundBody = app.world.createBody(groundBodyDef); - - PolygonShape groundBox = new PolygonShape(); - groundBox.setAsBox(3.0f, app.camera.viewportHeight * 2); - groundBody.createFixture(groundBox, 0.0f); - } - - private DebugPointLight createLight(Color color, float distance, float x, float y) { - return new DebugPointLight(rayHandler, 500, color, distance, x, y); - // new ConeLight(rayHandler, 2000, Color.GOLDENROD, 600, (MapToolGame.V_WIDTH / 2) + 30, - // (MapToolGame.V_HEIGHT / 2) + 15, 250, 35); - // new PointLight(rayHandler, 2000, Color.DARK_GRAY, 1500, (MapToolGame.V_WIDTH / 3), - // (MapToolGame.V_HEIGHT / 2) + 50); - } - - private DebugPointLight createRandomLight() { - Random rand = new Random(); - - float x = rand.nextFloat() * MapToolGame.SCREEN_WIDTH; - float y = rand.nextFloat() * MapToolGame.SCREEN_HEIGHT * 1.25f; - - float r = rand.nextFloat(); - float g = rand.nextFloat(); - float b = rand.nextFloat(); - - // float distance = (rand.nextFloat() * 500) + 400; - float distance = 20 * MapToolGame.F2M * MapToolGame.PPM; // 20 feet? - - // Color randomColor = new Color(0f, 0f, 0f, 255f); - Color randomColor = new Color(r, g, b, 255); - - DebugPointLight light = createLight(randomColor, distance, x, y); - light.setSoftnessLength(128f); // how far light travels through body... - - return light; - } - - public void clearLights() { - System.out.println("Removing " + lightSet.size() + " lights."); - - for (DebugPointLight light : lightSet) { - light.remove(true); - app.world.destroyBody(light.getBody()); - } - - lightSet.clear(); - } - - public void createBody(boolean attachLight, float x, float y) { - Body circleBody; - - BodyDef circleDef = new BodyDef(); - circleDef.type = BodyType.DynamicBody; - circleDef.position.set(x, y); - - circleBody = app.world.createBody(circleDef); - - CircleShape circleShape = new CircleShape(); - if (attachLight) circleShape.setRadius(24f); - else circleShape.setRadius(32f); - - FixtureDef circleFixture = new FixtureDef(); - circleFixture.shape = circleShape; - circleFixture.density = random(1, 100f); - circleFixture.friction = random(.25f, 1f); - circleFixture.restitution = random(.25f, 1f); - - circleBody.createFixture(circleFixture); - // circleBody.setAngularVelocity(random(-5f, 5f)); - circleBody.setLinearVelocity(new Vector2(random(-250, 250), random(-250, 250))); - - // Attach the sprite - Sprite bodySprite; - if (attachLight) bodySprite = LIGHT_SOURCE; - else bodySprite = SOCCER_BALL; - - bodySprite.setOriginCenter(); - bodySprite.setPosition(x, y); - // sprite.scale(r); - circleBody.setUserData(bodySprite); - - if (attachLight) { - DebugPointLight pointLight = createRandomLight(); - lightSet.add(pointLight); - pointLight.attachToBody(circleBody); - } - - // Dispose of stuff - circleShape.dispose(); - } - - private void createRandomBody(boolean attachLight) { - float x = random(64, MapToolGame.SCREEN_WIDTH); - float y = random(MapToolGame.SCREEN_HEIGHT / 2, MapToolGame.SCREEN_HEIGHT); - - createBody(attachLight, x, y); - } - - private float random(float min, float max) { - return (float) ThreadLocalRandom.current().nextDouble(min, max + 1); - } -} diff --git a/src/main/java/net/rptools/maptool/box2d/unused/DebugPointLight.java b/src/main/java/net/rptools/maptool/box2d/unused/DebugPointLight.java deleted file mode 100644 index 703e561482..0000000000 --- a/src/main/java/net/rptools/maptool/box2d/unused/DebugPointLight.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * This software Copyright by the RPTools.net development team, and - * licensed under the Affero GPL Version 3 or, at your option, any later - * version. - * - * MapTool Source Code is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU Affero General Public - * License * along with this source Code. If not, please visit - * and specifically the Affero license - * text at . - */ -package net.rptools.maptool.box2d.unused; - -import box2dLight.PointLight; -import box2dLight.RayHandler; -import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.glutils.ShapeRenderer; - -public class DebugPointLight extends PointLight { - public DebugPointLight( - RayHandler rayHandler, int rays, Color color, float distance, float x, float y) { - super(rayHandler, rays, color, distance, x, y); - } - - public void drawEdge(ShapeRenderer renderer) { - if (isSoft()) { - int numVertices = softShadowMesh.getNumVertices(); - // default mesh edge - renderer.setColor(Color.CYAN); - for (int i = 0; i < numVertices * 4 - 8; i += 8) { - renderer.line(segments[i], segments[i + 1], segments[i + 8], segments[i + 9]); - } - renderer.setColor(Color.RED); - // soft mesh edge - for (int i = 0; i < numVertices * 4 - 8; i += 8) { - renderer.line(segments[i + 4], segments[i + 5], segments[i + 12], segments[i + 13]); - } - } else { - int numVertices = lightMesh.getNumVertices(); - renderer.setColor(Color.CYAN); - for (int i = 4; i < numVertices * 4 - 4; i += 4) { - renderer.line(segments[i], segments[i + 1], segments[i + 4], segments[i + 5]); - } - } - } - - public void drawRays(ShapeRenderer renderer) { - float sx = getX(); - float sy = getY(); - if (isSoft()) { - int numVertices = softShadowMesh.getNumVertices(); - renderer.setColor(Color.PURPLE); - for (int i = 0; i < numVertices * 4 - 8; i += 8) { - renderer.line(sx, sy, segments[i + 4], segments[i + 5]); - } - } else { - // rays - renderer.setColor(Color.YELLOW); - int numVertices = lightMesh.getNumVertices(); - for (int i = 4; i < numVertices * 4; i += 4) { - renderer.line(sx, sy, segments[i], segments[i + 1]); - } - } - } -} diff --git a/src/main/java/net/rptools/maptool/box2d/unused/DesktopLauncher.java b/src/main/java/net/rptools/maptool/box2d/unused/DesktopLauncher.java deleted file mode 100644 index 5009679e5f..0000000000 --- a/src/main/java/net/rptools/maptool/box2d/unused/DesktopLauncher.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * This software Copyright by the RPTools.net development team, and - * licensed under the Affero GPL Version 3 or, at your option, any later - * version. - * - * MapTool Source Code is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU Affero General Public - * License * along with this source Code. If not, please visit - * and specifically the Affero license - * text at . - */ -package net.rptools.maptool.box2d.unused; - -import com.badlogic.gdx.backends.lwjgl.LwjglAWTCanvas; -import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; -import javax.swing.JFrame; -import javax.swing.SwingUtilities; -import net.rptools.maptool.client.ui.MapToolFrame; - -public class DesktopLauncher extends JFrame { - - private static final long serialVersionUID = 2536172952937398744L; - private LwjglAWTCanvas canvas; - private LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration(); - private MapToolFrame mapToolFrame; - - public DesktopLauncher(MapToolFrame clientFrame) { - cfg.title = MapToolGame.TITLE; - cfg.width = MapToolGame.SCREEN_WIDTH; - cfg.height = MapToolGame.SCREEN_HEIGHT; - cfg.useGL30 = true; - cfg.useHDPI = true; - cfg.allowSoftwareMode = true; - cfg.resizable = true; - - mapToolFrame = clientFrame; - - // setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); - - // canvas = new LwjglAWTCanvas(new MapToolGame(mapToolFrame, this), cfg); - canvas.getCanvas().setSize(MapToolGame.SCREEN_WIDTH, MapToolGame.SCREEN_HEIGHT); - add(canvas.getCanvas()); - - pack(); - setVisible(true); - } - - public static void main(String[] arg) { - SwingUtilities.invokeLater( - new Runnable() { - public void run() { - new DesktopLauncher(null); - } - }); - } - - @Override - public void dispose() { - canvas.stop(); - - super.dispose(); - } -} diff --git a/src/main/java/net/rptools/maptool/box2d/unused/MapToolGame.java b/src/main/java/net/rptools/maptool/box2d/unused/MapToolGame.java deleted file mode 100644 index b12477b9fc..0000000000 --- a/src/main/java/net/rptools/maptool/box2d/unused/MapToolGame.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * This software Copyright by the RPTools.net development team, and - * licensed under the Affero GPL Version 3 or, at your option, any later - * version. - * - * MapTool Source Code is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU Affero General Public - * License * along with this source Code. If not, please visit - * and specifically the Affero license - * text at . - */ -package net.rptools.maptool.box2d.unused; - -import com.badlogic.gdx.Game; -import com.badlogic.gdx.graphics.OrthographicCamera; -import com.badlogic.gdx.graphics.g2d.BitmapFont; -import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; -import com.badlogic.gdx.graphics.g2d.SpriteBatch; -import com.badlogic.gdx.physics.box2d.World; -import net.rptools.maptool.client.ui.MapToolFrame; - -public class MapToolGame extends Game { - public static final String TITLE = "MapTool Box2D Lights Test"; - public static int SCREEN_WIDTH = 1900; - public static int SCREEN_HEIGHT = 1100; - public static int VIEWPORT_WIDTH = 25; - public static int VIEWPORT_HEIGHT = 14; - public static final float PPM = 76.2f; // Pixels Per Meter, gives us 50 pixels per 5 feet - public static final float F2M = .3048f; // Feet to Meters - - public OrthographicCamera camera; - public SpriteBatch sb; - public PolygonSpriteBatch polyBatch; - public World world; - public BitmapFont font; - - private MapToolFrame mapToolFrame; - - public MapToolGame(MapToolFrame parentFrame) { - mapToolFrame = parentFrame; - } - - @Override - public void create() { - camera = new OrthographicCamera(VIEWPORT_WIDTH, VIEWPORT_HEIGHT); - camera.position.set(VIEWPORT_WIDTH / 2, VIEWPORT_HEIGHT / 2, 0); - camera.setToOrtho(false); - camera.update(); - - sb = new SpriteBatch(); - polyBatch = new PolygonSpriteBatch(); - polyBatch.setProjectionMatrix(camera.combined); - font = new BitmapFont(); - - this.setScreen(new Box2dRenderer(this)); - } - - @Override - public void render() { - super.render(); - } - - @Override - public void dispose() { - sb.dispose(); - } - - public MapToolFrame getMapToolFrame() { - return this.mapToolFrame; - } -} diff --git a/src/main/java/net/rptools/maptool/box2d/unused/MapTool_InputProcessor.java b/src/main/java/net/rptools/maptool/box2d/unused/MapTool_InputProcessor.java deleted file mode 100644 index 7ec2f6ce78..0000000000 --- a/src/main/java/net/rptools/maptool/box2d/unused/MapTool_InputProcessor.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * This software Copyright by the RPTools.net development team, and - * licensed under the Affero GPL Version 3 or, at your option, any later - * version. - * - * MapTool Source Code is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU Affero General Public - * License * along with this source Code. If not, please visit - * and specifically the Affero license - * text at . - */ -package net.rptools.maptool.box2d.unused; - -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.Input.Buttons; -import com.badlogic.gdx.Input.Keys; -import com.badlogic.gdx.InputProcessor; -import com.badlogic.gdx.math.Vector3; - -public class MapTool_InputProcessor implements InputProcessor { - Box2dRenderer renderer; - - public MapTool_InputProcessor(Box2dRenderer renderer) { - this.renderer = renderer; - } - - @Override - public boolean keyDown(int keycode) { - return false; - } - - @Override - public boolean keyUp(int keycode) { - switch (keycode) { - case Keys.SPACE: - renderer.pause(); - break; - - case Keys.UP: - Box2dRenderer.frameRate += 1; - break; - - case Keys.DOWN: - Box2dRenderer.frameRate -= 1; - break; - - default: - break; - } - - return false; - } - - @Override - public boolean keyTyped(char character) { - return false; - } - - @Override - public boolean touchDown(int screenX, int screenY, int pointer, int button) { - // System.out.println("pointer, button: " + pointer + ", " + button); - return false; - } - - @Override - public boolean touchUp(int screenX, int screenY, int pointer, int button) { - if (button == Buttons.LEFT) { - Vector3 input = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0); - renderer.getCamera().unproject(input); - - // Now you can use input.x and input.y, as opposed to Gdx.input.getX() and Gdx.input.getY(), - // to draw the circle - // System.out.println("x, y: " + input.x + ", " + input.y); - renderer.createBody(true, input.x, input.y); - } else if (button == Buttons.RIGHT) { - renderer.clearLights(); - } - - return false; - } - - @Override - public boolean touchDragged(int screenX, int screenY, int pointer) { - // TODO Auto-generated method stub - return false; - } - - @Override - public boolean mouseMoved(int screenX, int screenY) { - // System.out.println("mouse moved: " + screenX + ", " + screenY); - return false; - } - - @Override - public boolean scrolled(float amountX, float amountY) { - System.out.println("Scrolled " + amountX + ", " + amountY); - return false; - } -} diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index c3c3829a9c..2481210a96 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -73,6 +73,7 @@ import net.rptools.maptool.client.ui.tokenpanel.TokenPanelTreeCellRenderer; import net.rptools.maptool.client.ui.tokenpanel.TokenPanelTreeModel; import net.rptools.maptool.client.ui.zone.*; +import net.rptools.maptool.client.ui.zone.gdx.GdxRenderer; import net.rptools.maptool.language.I18N; import net.rptools.maptool.model.*; import net.rptools.maptool.model.Zone.Layer; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index 9f70d1c62c..ce18026583 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -55,6 +55,7 @@ import net.rptools.maptool.client.ui.token.AbstractTokenOverlay; import net.rptools.maptool.client.ui.token.BarTokenOverlay; import net.rptools.maptool.client.ui.token.NewTokenDialog; +import net.rptools.maptool.client.ui.zone.gdx.GdxRenderer; import net.rptools.maptool.client.walker.ZoneWalker; import net.rptools.maptool.language.I18N; import net.rptools.maptool.model.*; @@ -3731,7 +3732,7 @@ protected void renderTokens( visibleTokenSet = Collections.unmodifiableSet(tempVisTokens); } - protected Map> getTokenStackMap() { + public Map> getTokenStackMap() { return tokenStackMap; } @@ -3744,7 +3745,7 @@ protected Map> getTokenStackMap() { * @param isGMView whether it is the view of a GM * @return true if the token is need of clipping, false otherwise */ - protected boolean isTokenInNeedOfClipping(Token token, Area tokenCellArea, boolean isGMView) { + public boolean isTokenInNeedOfClipping(Token token, Area tokenCellArea, boolean isGMView) { // can view everything or zone is not using vision = no clipping needed if (isGMView || !zoneView.isUsingVision()) return false; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java new file mode 100644 index 0000000000..e814d2de1b --- /dev/null +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java @@ -0,0 +1,86 @@ +/* + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. + * + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . + */ +package net.rptools.maptool.client.ui.zone.gdx; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.FloatArray; +import java.awt.geom.Area; +import java.awt.geom.PathIterator; +import net.rptools.maptool.model.drawing.Drawable; +import net.rptools.maptool.model.drawing.DrawableColorPaint; +import net.rptools.maptool.model.drawing.Pen; +import space.earlygrey.shapedrawer.ShapeDrawer; + +public abstract class AbstractDrawingDrawer { + protected Color tmpColor = new Color(); + protected Vector2 tmpVector = new Vector2(); + protected ShapeDrawer drawer; + protected AreaRenderer areaRenderer; + + public AbstractDrawingDrawer(ShapeDrawer drawer) { + this.drawer = drawer; + this.areaRenderer = new AreaRenderer(drawer); + } + + public void draw(Drawable element, Pen pen) { + if (pen.getBackgroundPaint() instanceof DrawableColorPaint) { + var colorPaint = (DrawableColorPaint) pen.getBackgroundPaint(); + Color.argb8888ToColor(tmpColor, colorPaint.getColor()); + drawer.setColor(tmpColor); + } + drawBackground(element, pen); + + if (pen.getPaint() instanceof DrawableColorPaint) { + var colorPaint = (DrawableColorPaint) pen.getPaint(); + Color.argb8888ToColor(tmpColor, colorPaint.getColor()); + drawer.setColor(tmpColor); + } + var lineWidth = drawer.getDefaultLineWidth(); + drawer.setDefaultLineWidth(pen.getThickness()); + drawBorder(element, pen); + drawer.setDefaultLineWidth(lineWidth); + } + + protected void line(Pen pen, float x1, float y1, float x2, float y2) { + var halfLineWidth = pen.getThickness() / 2f; + if (!pen.getSquareCap()) { + drawer.filledCircle(x1, -y1, halfLineWidth); + drawer.filledCircle(x2, -y2, halfLineWidth); + drawer.line(x1, -y1, x2, -y2); + } else { + tmpVector.set(x1 - x2, y1 - y2).nor(); + var tx = tmpVector.x * halfLineWidth; + var ty = tmpVector.y * halfLineWidth; + drawer.line(x1 + tx, y1 + ty, x2 - tx, y2 - ty); + } + } + + protected FloatArray pathToFloatArray(PathIterator pathIterator) { + return areaRenderer.pathToFloatArray(pathIterator); + } + + protected void fillArea(Area area) { + areaRenderer.fillArea(area); + } + + protected void drawArea(Area area) { + areaRenderer.drawArea(area); + } + + protected abstract void drawBackground(Drawable element, Pen pen); + + protected abstract void drawBorder(Drawable element, Pen pen); +} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractTemplateDrawer.java new file mode 100644 index 0000000000..a8f89bdf53 --- /dev/null +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractTemplateDrawer.java @@ -0,0 +1,150 @@ +/* + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. + * + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . + */ +package net.rptools.maptool.client.ui.zone.gdx; + +import net.rptools.maptool.client.MapTool; +import net.rptools.maptool.model.Zone; +import net.rptools.maptool.model.drawing.AbstractTemplate; +import net.rptools.maptool.model.drawing.Drawable; +import net.rptools.maptool.model.drawing.Pen; +import space.earlygrey.shapedrawer.ShapeDrawer; + +public abstract class AbstractTemplateDrawer extends AbstractDrawingDrawer { + + public AbstractTemplateDrawer(ShapeDrawer drawer) { + super(drawer); + } + + @Override + protected void drawBackground(Drawable element, Pen pen) { + tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, AbstractTemplate.DEFAULT_BG_ALPHA); + drawer.setColor(tmpColor); + paint(pen, (AbstractTemplate) element, false, true); + } + + @Override + protected void drawBorder(Drawable element, Pen pen) { + paint(pen, (AbstractTemplate) element, true, false); + } + + protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean area) { + var radius = template.getRadius(); + + if (radius == 0) return; + Zone zone = MapTool.getCampaign().getZone(template.getZoneId()); + if (zone == null) return; + + // Find the proper distance + int gridSize = zone.getGrid().getSize(); + for (int y = 0; y < radius; y++) { + for (int x = 0; x < radius; x++) { + + // Get the offset to the corner of the square + int xOff = x * gridSize; + int yOff = y * gridSize; + + // Template specific painting + if (border) + paintBorder(pen, template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); + if (area) paintArea(template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); + } // endfor + } // endfor + } + + protected void paintArea( + AbstractTemplate template, int xOff, int yOff, int gridSize, AbstractTemplate.Quadrant q) { + var vertex = template.getVertex(); + int x = vertex.x + getXMult(q) * xOff + ((getXMult(q) - 1) / 2) * gridSize; + int y = vertex.y + getYMult(q) * yOff + ((getYMult(q) - 1) / 2) * gridSize; + drawer.filledRectangle(x, -y - gridSize, gridSize, gridSize); + } + + protected int getXMult(AbstractTemplate.Quadrant q) { + return ((q == AbstractTemplate.Quadrant.NORTH_WEST || q == AbstractTemplate.Quadrant.SOUTH_WEST) + ? -1 + : +1); + } + + protected int getYMult(AbstractTemplate.Quadrant q) { + return ((q == AbstractTemplate.Quadrant.NORTH_WEST || q == AbstractTemplate.Quadrant.NORTH_EAST) + ? -1 + : +1); + } + + protected void paintCloseVerticalBorder( + Pen pen, + AbstractTemplate template, + int xOff, + int yOff, + int gridSize, + AbstractTemplate.Quadrant q) { + var vertex = template.getVertex(); + int x = vertex.x + getXMult(q) * xOff; + int y = vertex.y + getYMult(q) * yOff; + line(pen, x, y, x, y + getYMult(q) * gridSize); + } + + protected void paintFarHorizontalBorder( + Pen pen, + AbstractTemplate template, + int xOff, + int yOff, + int gridSize, + AbstractTemplate.Quadrant q) { + var vertex = template.getVertex(); + int x = vertex.x + getXMult(q) * xOff; + int y = vertex.y + getYMult(q) * yOff + getYMult(q) * gridSize; + line(pen, x, y, x + getXMult(q) * gridSize, y); + } + + protected void paintFarVerticalBorder( + Pen pen, + AbstractTemplate template, + int xOff, + int yOff, + int gridSize, + AbstractTemplate.Quadrant q) { + var vertex = template.getVertex(); + int x = vertex.x + getXMult(q) * xOff + getXMult(q) * gridSize; + int y = vertex.y + getYMult(q) * yOff; + line(pen, x, y, x, y + getYMult(q) * gridSize); + } + + protected void paintCloseHorizontalBorder( + Pen pen, + AbstractTemplate template, + int xOff, + int yOff, + int gridSize, + AbstractTemplate.Quadrant q) { + var vertex = template.getVertex(); + int x = vertex.x + getXMult(q) * xOff; + int y = vertex.y + getYMult(q) * yOff; + line(pen, x, y, x + getXMult(q) * gridSize, y); + } + + protected abstract void paintArea( + AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance); + + protected abstract void paintBorder( + Pen pen, + AbstractTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int distance); +} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java new file mode 100644 index 0000000000..95c88b2ef7 --- /dev/null +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java @@ -0,0 +1,144 @@ +/* + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. + * + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . + */ +package net.rptools.maptool.client.ui.zone.gdx; + +import com.badlogic.gdx.math.Bezier; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.FloatArray; +import java.awt.geom.Area; +import java.awt.geom.PathIterator; +import space.earlygrey.shapedrawer.JoinType; +import space.earlygrey.shapedrawer.ShapeDrawer; + +public class AreaRenderer { + + private FloatArray tmpFloat = new FloatArray(); + private ShapeDrawer drawer; + private float[] floatsFromArea = new float[6]; + private Vector2 tmpVector = new Vector2(); + private Vector2 tmpVector0 = new Vector2(); + private Vector2 tmpVector1 = new Vector2(); + private Vector2 tmpVector2 = new Vector2(); + private Vector2 tmpVector3 = new Vector2(); + private Vector2 tmpVectorOut = new Vector2(); + + public AreaRenderer(ShapeDrawer drawer) { + this.drawer = drawer; + } + + public void fillArea(Area area) { + if (area == null || area.isEmpty()) return; + + paintArea(area, true); + } + + public void drawArea(Area area) { + if (area == null || area.isEmpty()) return; + + paintArea(area, false); + } + + protected void paintArea(Area area, boolean fill) { + pathToFloatArray(area.getPathIterator(null)); + + if (fill) { + var lastX = tmpFloat.get(tmpFloat.size - 2); + var lastY = tmpFloat.get(tmpFloat.size - 1); + if (lastX != tmpFloat.get(0) && lastY != tmpFloat.get(1)) + tmpFloat.add(tmpFloat.get(0), tmpFloat.get(1)); + + drawer.filledPolygon(tmpFloat.toArray()); + } else { + if (tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) + && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { + tmpFloat.pop(); + tmpFloat.pop(); + } + + drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.SMOOTH, false); + } + } + + public FloatArray pathToFloatArray(PathIterator it) { + tmpFloat.clear(); + + for (; !it.isDone(); it.next()) { + int type = it.currentSegment(floatsFromArea); + + switch (type) { + case PathIterator.SEG_MOVETO: + // System.out.println("Move to: ( " + floatsFromArea[0] + ", " + + // floatsFromArea[1] + ")"); + tmpFloat.add(floatsFromArea[0], -floatsFromArea[1]); + + break; + case PathIterator.SEG_CLOSE: + // System.out.println("Close"); + + return tmpFloat; + case PathIterator.SEG_LINETO: + // System.out.println("Line to: ( " + floatsFromArea[0] + ", " + + // floatsFromArea[1] + ")"); + tmpFloat.add(floatsFromArea[0], -floatsFromArea[1]); + break; + case PathIterator.SEG_QUADTO: + // System.out.println("quadratic bezier with: ( " + floatsFromArea[0] + + // ", " + floatsFromArea[1] + + // "), (" + floatsFromArea[2] + ", " + floatsFromArea[3] + ")"); + + tmpVector0.set(tmpFloat.get(tmpFloat.size - 2), tmpFloat.get(tmpFloat.size - 1)); + tmpVector1.set(floatsFromArea[0], -floatsFromArea[1]); + tmpVector2.set(floatsFromArea[2], -floatsFromArea[3]); + for (var i = 1; i <= GdxRenderer.POINTS_PER_BEZIER; i++) { + Bezier.quadratic( + tmpVectorOut, + i / GdxRenderer.POINTS_PER_BEZIER, + tmpVector0, + tmpVector1, + tmpVector2, + tmpVector); + tmpFloat.add(tmpVectorOut.x, tmpVectorOut.y); + } + break; + case PathIterator.SEG_CUBICTO: + // System.out.println("cubic bezier with: ( " + floatsFromArea[0] + ", + // " + floatsFromArea[1] + + // "), (" + floatsFromArea[2] + ", " + floatsFromArea[3] + + // "), (" + floatsFromArea[4] + ", " + floatsFromArea[5] + + // ")"); + + tmpVector0.set(tmpFloat.get(tmpFloat.size - 2), tmpFloat.get(tmpFloat.size - 1)); + tmpVector1.set(floatsFromArea[0], -floatsFromArea[1]); + tmpVector2.set(floatsFromArea[2], -floatsFromArea[3]); + tmpVector3.set(floatsFromArea[4], -floatsFromArea[5]); + for (var i = 1; i <= GdxRenderer.POINTS_PER_BEZIER; i++) { + Bezier.cubic( + tmpVectorOut, + i / GdxRenderer.POINTS_PER_BEZIER, + tmpVector0, + tmpVector1, + tmpVector2, + tmpVector3, + tmpVector); + tmpFloat.add(tmpVectorOut.x, tmpVectorOut.y); + } + break; + default: + System.out.println("Type: " + type); + } + } + return tmpFloat; + } +} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BlastTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BlastTemplateDrawer.java new file mode 100644 index 0000000000..83513af3ac --- /dev/null +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BlastTemplateDrawer.java @@ -0,0 +1,42 @@ +/* + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. + * + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . + */ +package net.rptools.maptool.client.ui.zone.gdx; + +import net.rptools.maptool.model.drawing.AbstractTemplate; +import net.rptools.maptool.model.drawing.BlastTemplate; +import net.rptools.maptool.model.drawing.Drawable; +import net.rptools.maptool.model.drawing.Pen; +import space.earlygrey.shapedrawer.ShapeDrawer; + +public class BlastTemplateDrawer extends AbstractDrawingDrawer { + + public BlastTemplateDrawer(ShapeDrawer drawer) { + super(drawer); + } + + @Override + protected void drawBackground(Drawable element, Pen pen) { + var template = (BlastTemplate) element; + tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, AbstractTemplate.DEFAULT_BG_ALPHA); + drawer.setColor(tmpColor); + fillArea(template.getArea()); + } + + @Override + protected void drawBorder(Drawable element, Pen pen) { + var template = (BlastTemplate) element; + drawArea(template.getArea()); + } +} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BurstTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BurstTemplateDrawer.java new file mode 100644 index 0000000000..201b9e35a2 --- /dev/null +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BurstTemplateDrawer.java @@ -0,0 +1,43 @@ +/* + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. + * + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . + */ +package net.rptools.maptool.client.ui.zone.gdx; + +import net.rptools.maptool.model.drawing.AbstractTemplate; +import net.rptools.maptool.model.drawing.BurstTemplate; +import net.rptools.maptool.model.drawing.Drawable; +import net.rptools.maptool.model.drawing.Pen; +import space.earlygrey.shapedrawer.ShapeDrawer; + +public class BurstTemplateDrawer extends AbstractDrawingDrawer { + + public BurstTemplateDrawer(ShapeDrawer drawer) { + super(drawer); + } + + @Override + protected void drawBackground(Drawable element, Pen pen) { + var template = (BurstTemplate) element; + tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, AbstractTemplate.DEFAULT_BG_ALPHA); + drawer.setColor(tmpColor); + fillArea(template.getArea()); + } + + @Override + protected void drawBorder(Drawable element, Pen pen) { + var template = (BurstTemplate) element; + drawArea(template.getArea()); + drawArea(template.getVertexRenderer().getArea()); + } +} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ConeTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ConeTemplateDrawer.java new file mode 100644 index 0000000000..d08572be21 --- /dev/null +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ConeTemplateDrawer.java @@ -0,0 +1,210 @@ +/* + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. + * + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . + */ +package net.rptools.maptool.client.ui.zone.gdx; + +import net.rptools.maptool.model.drawing.AbstractTemplate; +import net.rptools.maptool.model.drawing.ConeTemplate; +import net.rptools.maptool.model.drawing.Pen; +import space.earlygrey.shapedrawer.ShapeDrawer; + +public class ConeTemplateDrawer extends RadiusTemplateDrawer { + + public ConeTemplateDrawer(ShapeDrawer drawer) { + super(drawer); + } + + @Override + protected void paintArea( + AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + var coneTemplate = (ConeTemplate) template; + + var direction = coneTemplate.getDirection(); + + // Drawing along the spines only? + if ((direction == AbstractTemplate.Direction.EAST + || direction == AbstractTemplate.Direction.WEST) + && y > x) return; + if ((direction == AbstractTemplate.Direction.NORTH + || direction == AbstractTemplate.Direction.SOUTH) + && x > y) return; + + // Only squares w/in the radius + if (distance > coneTemplate.getRadius()) { + return; + } + for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { + if (coneTemplate.withinQuadrant(q)) { + paintArea(template, xOff, yOff, gridSize, q); + } + } + } + + @Override + protected void paintBorder( + Pen pen, + AbstractTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int distance) { + var coneTemplate = (ConeTemplate) template; + paintBorderAtRadius( + pen, coneTemplate, x, y, xOff, yOff, gridSize, distance, coneTemplate.getRadius()); + paintEdges(pen, coneTemplate, x, y, xOff, yOff, gridSize, distance); + } + + protected void paintEdges( + Pen pen, + ConeTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int distance) { + + // Handle the edges + int radius = template.getRadius(); + var direction = template.getDirection(); + if (direction.ordinal() % 2 == 0) { + if (x == 0) { + if (direction == AbstractTemplate.Direction.SOUTH_EAST + || direction == AbstractTemplate.Direction.SOUTH_WEST) + paintCloseVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + if (direction == AbstractTemplate.Direction.NORTH_EAST + || direction == AbstractTemplate.Direction.NORTH_WEST) + paintCloseVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + } // endif + if (y == 0) { + if (direction == AbstractTemplate.Direction.SOUTH_EAST + || direction == AbstractTemplate.Direction.NORTH_EAST) + paintCloseHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + if (direction == AbstractTemplate.Direction.SOUTH_WEST + || direction == AbstractTemplate.Direction.NORTH_WEST) + paintCloseHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } // endif + } else if (direction.ordinal() % 2 == 1 && x == y && distance <= radius) { + if (direction == AbstractTemplate.Direction.SOUTH) { + paintFarVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + paintFarVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + paintCloseHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + paintCloseHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + } // endif + if (direction == AbstractTemplate.Direction.NORTH) { + paintFarVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + paintFarVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + paintCloseHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + paintCloseHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } // endif + if (direction == AbstractTemplate.Direction.EAST) { + paintCloseVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + paintCloseVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + paintFarHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + paintFarHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + } // endif + if (direction == AbstractTemplate.Direction.WEST) { + paintCloseVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + paintCloseVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + paintFarHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + paintFarHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } // endif + } // endif + } + + protected void paintBorderAtRadius( + Pen pen, + ConeTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int distance, + int radius) { + // At the border? + if (distance == radius) { + var direction = template.getDirection(); + // Paint lines between vertical boundaries if needed + if (template.getDistance(x + 1, y) > radius) { + if (direction == AbstractTemplate.Direction.SOUTH_EAST + || (direction == AbstractTemplate.Direction.SOUTH && y >= x) + || (direction == AbstractTemplate.Direction.EAST && x >= y)) + paintFarVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + if (direction == AbstractTemplate.Direction.NORTH_EAST + || (direction == AbstractTemplate.Direction.NORTH && y >= x) + || (direction == AbstractTemplate.Direction.EAST && x >= y)) + paintFarVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + if (direction == AbstractTemplate.Direction.SOUTH_WEST + || (direction == AbstractTemplate.Direction.SOUTH && y >= x) + || (direction == AbstractTemplate.Direction.WEST && x >= y)) + paintFarVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + if (direction == AbstractTemplate.Direction.NORTH_WEST + || (direction == AbstractTemplate.Direction.NORTH && y >= x) + || (direction == AbstractTemplate.Direction.WEST && x >= y)) + paintFarVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } // endif + + // Paint lines between horizontal boundaries if needed + if (template.getDistance(x, y + 1) > radius) { + if (direction == AbstractTemplate.Direction.SOUTH_EAST + || (direction == AbstractTemplate.Direction.SOUTH && y >= x) + || (direction == AbstractTemplate.Direction.EAST && x >= y)) + paintFarHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + if (direction == AbstractTemplate.Direction.SOUTH_WEST + || (direction == AbstractTemplate.Direction.SOUTH && y >= x) + || (direction == AbstractTemplate.Direction.WEST && x >= y)) + paintFarHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + if (direction == AbstractTemplate.Direction.NORTH_EAST + || (direction == AbstractTemplate.Direction.NORTH && y >= x) + || (direction == AbstractTemplate.Direction.EAST && x >= y)) + paintFarHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + if (direction == AbstractTemplate.Direction.NORTH_WEST + || (direction == AbstractTemplate.Direction.NORTH && y >= x) + || (direction == AbstractTemplate.Direction.WEST && x >= y)) + paintFarHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } // endif + } // endif + } +} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java similarity index 67% rename from src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java rename to src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 2d6ccfceb9..c9e9c010fe 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -12,12 +12,8 @@ * and specifically the Affero license * text at . */ -package net.rptools.maptool.client.ui.zone; +package net.rptools.maptool.client.ui.zone.gdx; -import static java.util.zip.Deflater.DEFAULT_COMPRESSION; - -import box2dLight.PointLight; -import box2dLight.RayHandler; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver; @@ -27,18 +23,15 @@ import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator; import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGeneratorLoader; import com.badlogic.gdx.graphics.g2d.freetype.FreetypeFontLoader; +import com.badlogic.gdx.graphics.glutils.FrameBuffer; import com.badlogic.gdx.math.*; import com.badlogic.gdx.math.Rectangle; -import com.badlogic.gdx.physics.box2d.*; import com.badlogic.gdx.scenes.scene2d.utils.TiledDrawable; import com.badlogic.gdx.utils.FloatArray; import com.badlogic.gdx.utils.GdxRuntimeException; import com.badlogic.gdx.utils.ScreenUtils; import com.badlogic.gdx.video.VideoPlayer; import com.badlogic.gdx.video.VideoPlayerCreator; -import com.crashinvaders.vfx.VfxManager; -import com.crashinvaders.vfx.effects.ChainVfxEffect; -import com.crashinvaders.vfx.framebuffer.VfxFrameBuffer; import java.awt.*; import java.awt.Shape; import java.awt.geom.*; @@ -52,10 +45,10 @@ import net.rptools.lib.AppEventListener; import net.rptools.lib.CodeTimer; import net.rptools.lib.MD5Key; +import net.rptools.lib.gdx.GifDecoder; import net.rptools.lib.image.ImageUtil; import net.rptools.lib.swing.ImageBorder; import net.rptools.lib.swing.SwingUtil; -import net.rptools.maptool.box2d.GifDecoder; import net.rptools.maptool.client.*; import net.rptools.maptool.client.tool.drawing.FreehandExposeTool; import net.rptools.maptool.client.tool.drawing.OvalExposeTool; @@ -64,6 +57,9 @@ import net.rptools.maptool.client.ui.Scale; import net.rptools.maptool.client.ui.Tool; import net.rptools.maptool.client.ui.token.*; +import net.rptools.maptool.client.ui.zone.DrawableLight; +import net.rptools.maptool.client.ui.zone.PlayerView; +import net.rptools.maptool.client.ui.zone.ZoneRenderer; import net.rptools.maptool.client.walker.ZoneWalker; import net.rptools.maptool.model.*; import net.rptools.maptool.model.Label; @@ -72,7 +68,6 @@ import net.rptools.maptool.util.FunctionUtil; import net.rptools.maptool.util.GraphicsUtil; import net.rptools.maptool.util.ImageManager; -import net.rptools.maptool.util.StringUtil; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.jetbrains.annotations.NotNull; @@ -91,8 +86,10 @@ public class GdxRenderer extends ApplicationAdapter private static final Logger log = LogManager.getLogger(GdxRenderer.class); + public static final float POINTS_PER_BEZIER = 10f; + private static GdxRenderer _instance; - // private final Map sprites = new HashMap<>(); + private final Map fetchedSprites = new HashMap<>(); private final Map isoSprites = new HashMap<>(); private final Map fetchedRegions = new HashMap<>(); @@ -104,23 +101,26 @@ public class GdxRenderer extends ApplicationAdapter private final String ATLAS = "net/rptools/maptool/client/maptool.atlas"; private final String FONT_NORMAL = "normalFont.ttf"; private final String FONT_DISTANCE = "distanceFont.ttf"; - PixmapPacker packer; - TextureAtlas tokenAtlas; + private PixmapPacker packer; + private TextureAtlas tokenAtlas; private boolean flushFog = true; // from renderToken: private Area visibleScreenArea; private Area exposedFogArea; private PlayerView lastView; - private List itemRenderList = new LinkedList<>(); + private final List itemRenderList = new LinkedList<>(); + // zone specific resources private Zone zone; private ZoneRenderer zoneRenderer; - // private MD5Key mapAssetId; + private int offsetX = 0; private int offsetY = 0; private float zoom = 1.0f; private float stateTime = 0f; private boolean renderZone = false; + private boolean showAstarDebugging = false; + // general resources private PerspectiveCamera cam; private OrthographicCamera hudCam; @@ -131,62 +131,43 @@ public class GdxRenderer extends ApplicationAdapter private BitmapFont normalFont; private BitmapFont distanceFont; private float distanceFontScale = 0; - private GlyphLayout glyphLayout = new GlyphLayout(); - private CodeTimer timer = new CodeTimer("GdxRenderer.renderZone"); - private VfxManager vfxManager; - private ChainVfxEffect vfxEffect; - private VfxFrameBuffer backBuffer; + private final CodeTimer timer = new CodeTimer("GdxRenderer.renderZone"); + private FrameBuffer backBuffer; private Integer fogX; private Integer fogY; private com.badlogic.gdx.assets.AssetManager manager; private TextureAtlas atlas; - private NinePatch grayLabel; - private NinePatch blueLabel; - private NinePatch darkGrayLabel; private Texture onePixel; private Texture fog; private Texture background; private ShapeDrawer drawer; - private final LineTemplateDrawer lineTemplateDrawer = new LineTemplateDrawer(); - private final LineCellTemplateDrawer lineCellTemplateDrawer = new LineCellTemplateDrawer(); - private final RadiusTemplateDrawer radiusTemplateDrawer = new RadiusTemplateDrawer(); - private final BurstTemplateDrawer burstTemplateDrawer = new BurstTemplateDrawer(); - private final ConeTemplateDrawer coneTemplateDrawer = new ConeTemplateDrawer(); - private final BlastTemplateDrawer blastTemplateDrawer = new BlastTemplateDrawer(); - private final RadiusCellTemplateDrawer radiusCellTemplateDrawer = new RadiusCellTemplateDrawer(); - private final ShapeDrawableDrawer shapeDrawableDrawer = new ShapeDrawableDrawer(); + private final GlyphLayout glyphLayout = new GlyphLayout(); + private LineTemplateDrawer lineTemplateDrawer; + private LineCellTemplateDrawer lineCellTemplateDrawer; + private RadiusTemplateDrawer radiusTemplateDrawer; + private BurstTemplateDrawer burstTemplateDrawer; + private ConeTemplateDrawer coneTemplateDrawer; + private BlastTemplateDrawer blastTemplateDrawer; + private RadiusCellTemplateDrawer radiusCellTemplateDrawer; + private ShapeDrawableDrawer shapeDrawableDrawer; + private TextRenderer textRenderer; + private AreaRenderer areaRenderer; // temorary objects. Stored here to avoid garbage collection; - private Vector3 tmpWorldCoord = new Vector3(); - private Vector3 tmpScreenCoord = new Vector3(); - private Color tmpColor = new Color(); - private float[] floatsFromArea = new float[6]; - private FloatArray tmpFloat = new FloatArray(); - private FloatArray tmpFloat1 = new FloatArray(); - private Vector2 tmpVector = new Vector2(); - private Vector2 tmpVectorOut = new Vector2(); - private Vector2 tmpVector0 = new Vector2(); - private Vector2 tmpVector1 = new Vector2(); - private Vector2 tmpVector2 = new Vector2(); - private Vector2 tmpVector3 = new Vector2(); - private Matrix4 tmpMatrix = new Matrix4(); - private Area tmpArea = new Area(); - private TiledDrawable tmpTile = new TiledDrawable(); - private float pointsPerBezier = 10f; - private boolean showAstarDebugging = false; - - // Box2D stuff - private World world; - private RayHandler rayHandler; - private Box2DDebugRenderer debugRenderer; - private Map tokenBodies = new HashMap<>(); - private Body body; - private PointLight pointLight; - // private VideoPlayer videoPlayer; + private final Vector3 tmpWorldCoord = new Vector3(); + private final Color tmpColor = new Color(); + private final FloatArray tmpFloat = new FloatArray(); + private final Vector2 tmpVector = new Vector2(); + private final Vector2 tmpVectorOut = new Vector2(); + private final Vector2 tmpVector0 = new Vector2(); + private final Vector2 tmpVector1 = new Vector2(); + private final Vector2 tmpVector2 = new Vector2(); + private final Matrix4 tmpMatrix = new Matrix4(); + private final Area tmpArea = new Area(); + private final TiledDrawable tmpTile = new TiledDrawable(); public GdxRenderer() { MapTool.getEventDispatcher().addListener(this, MapTool.ZoneEvent.Activated); - Box2D.init(); } public static GdxRenderer getInstance() { @@ -203,9 +184,6 @@ public void create() { dispose(); atlas = null; - blueLabel = null; - grayLabel = null; - darkGrayLabel = null; normalFont = null; distanceFont = null; fetchedSprites.clear(); @@ -215,49 +193,11 @@ public void create() { animationMap.clear(); } - // videoPlayer = VideoPlayerCreator.createVideoPlayer(); tokenAtlas = new TextureAtlas(); manager = new com.badlogic.gdx.assets.AssetManager(); + loadAssets(); packer = createPacker(); - world = new World(new Vector2(0, 0), false); - rayHandler = new RayHandler(world); - rayHandler.setGammaCorrection(true); - rayHandler.useDiffuseLight(true); - rayHandler.setBlurNum(3); - //rayHandler.setAmbientLight(0.3f); - pointLight = new PointLight(rayHandler, 120, Color.WHITE, 6, 4 ,-3); - - debugRenderer = new Box2DDebugRenderer(); - // First we create a body definition - BodyDef bodyDef = new BodyDef(); -// We set our body to dynamic, for something like ground which doesn't move we would set it to StaticBody - bodyDef.type = BodyDef.BodyType.DynamicBody; -// Set our body's starting position in the world - bodyDef.position.set(2.5f, -2.5f); - -// Create our body in the world using our body definition - body = world.createBody(bodyDef); - -// Create a circle shape and set its radius to 6 - CircleShape circle = new CircleShape(); - circle.setRadius(0.5f); - -// Create a fixture definition to apply our shape to - FixtureDef fixtureDef = new FixtureDef(); - fixtureDef.shape = circle; - fixtureDef.density = 0.5f; - fixtureDef.friction = 0.4f; - fixtureDef.restitution = 0.6f; // Make it bounce a little bit - -// Create our fixture and attach it to the body - Fixture fixture = body.createFixture(fixtureDef); - -// Remember to dispose of any shapes after you're done with them! -// BodyDef and FixtureDef don't need disposing, but shapes do. - circle.dispose(); - body.setLinearDamping(20f); - var resolver = new InternalFileHandleResolver(); manager.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver)); manager.setLoader(BitmapFont.class, ".ttf", new FreetypeFontLoader(resolver)); @@ -265,11 +205,10 @@ public void create() { width = Gdx.graphics.getWidth(); height = Gdx.graphics.getHeight(); + // we don't use an OrthographicCamera here in order to be able to add 3D-Models cam = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); cam.lookAt(0, 0, 0); - // cam.setToOrtho(false); - hudCam = new OrthographicCamera(); hudCam.setToOrtho(false); @@ -277,8 +216,7 @@ public void create() { batch = new PolygonSpriteBatch(); - backBuffer = new VfxFrameBuffer(Pixmap.Format.RGBA8888); - backBuffer.initialize(width, height); + backBuffer = new FrameBuffer(Pixmap.Format.RGBA8888, width, height, false); // TODO: Add it to the texture atlas Pixmap pixmap = new Pixmap(1, 1, Pixmap.Format.RGBA8888); @@ -289,37 +227,24 @@ public void create() { TextureRegion region = new TextureRegion(onePixel, 0, 0, 1, 1); drawer = new ShapeDrawer(batch, region); - vfxManager = new VfxManager(Pixmap.Format.RGBA8888); - // vfxEffect = new FxaaEffect(); - // vfxManager.addEffect(vfxEffect); + lineTemplateDrawer = new LineTemplateDrawer(drawer); + lineCellTemplateDrawer = new LineCellTemplateDrawer(drawer); + radiusTemplateDrawer = new RadiusTemplateDrawer(drawer); + burstTemplateDrawer = new BurstTemplateDrawer(drawer); + coneTemplateDrawer = new ConeTemplateDrawer(drawer); + blastTemplateDrawer = new BlastTemplateDrawer(drawer); + radiusCellTemplateDrawer = new RadiusCellTemplateDrawer(drawer); + shapeDrawableDrawer = new ShapeDrawableDrawer(drawer); + areaRenderer = new AreaRenderer(drawer); - backBuffer.addRenderer(new VfxFrameBuffer.BatchRendererAdapter(batch)); initialized = true; - - loadAssets(); initializeZoneResources(zone); } - private float accumulator = 0; - - private void doPhysicsStep(float deltaTime) { - // fixed time step - // max frame time to avoid spiral of death (on slow devices) - float frameTime = Math.min(deltaTime, 0.25f); - accumulator += frameTime; - while (accumulator >= 1/60f) { - world.step(1/60f, 6, 2); - rayHandler.update(); - accumulator -= 1/60f; - } - } - @Override public void dispose() { manager.dispose(); batch.dispose(); - vfxManager.dispose(); - if (vfxEffect != null) vfxEffect.dispose(); disposeZoneResources(); disposeZoneTextures(); onePixel.dispose(); @@ -327,17 +252,14 @@ public void dispose() { atlas, Texture.TextureFilter.Linear, Texture.TextureFilter.Linear, false); packer.dispose(); tokenAtlas.dispose(); - world.dispose(); - debugRenderer.dispose(); - rayHandler.dispose(); } @Override public void resize(int width, int height) { this.width = width; this.height = height; - vfxManager.resize(width, height); - backBuffer.initialize(width, height); + backBuffer.dispose(); + backBuffer = new FrameBuffer(Pixmap.Format.RGBA8888, width, height, false); updateCam(); } @@ -346,14 +268,12 @@ private void updateCam() { cam.viewportWidth = width; cam.viewportHeight = height; cam.near = 0.1f; - ; cam.position.x = zoom * (width / 2f + offsetX); cam.position.y = zoom * (height / 2f * -1 + offsetY); cam.position.z = (zoom * height) / (2f * (float) Math.tan(Math.toRadians(cam.fieldOfView / 2f))); cam.far = cam.position.z + 0.1f; - // cam.zoom = zoom; cam.update(); hudCam.viewportWidth = width; @@ -363,12 +283,9 @@ private void updateCam() { hudCam.update(); } - private boolean videostarted = false; - @Override public void render() { var delta = Gdx.graphics.getDeltaTime(); - var audio = Gdx.audio; stateTime += delta; manager.finishLoading(); packer.updateTextureAtlas( @@ -376,35 +293,13 @@ public void render() { if (atlas == null) atlas = manager.get(ATLAS, TextureAtlas.class); - if (blueLabel == null) blueLabel = atlas.createPatch("blueLabelbox"); - - if (grayLabel == null) grayLabel = atlas.createPatch("grayLabelbox"); - - if (darkGrayLabel == null) darkGrayLabel = atlas.createPatch("darkGreyLabelbox"); - if (normalFont == null) normalFont = manager.get(FONT_NORMAL, BitmapFont.class); - /* - if(!videoPlayer.isPlaying()) - try { - videoPlayer.play(Gdx.files.internal("big-buck-bunny_trailer.webm")); - videostarted = true; - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - */ + + textRenderer = new TextRenderer(atlas, batch, normalFont); ensureCorrectDistanceFont(); - // vfxManager.cleanUpBuffers(); - // vfxManager.beginInputCapture(); ScreenUtils.clear(Color.BLACK); doRendering(); - debugRenderer.render(world, cam.combined.cpy().scl((float)zone.getGrid().getCellWidth())); - rayHandler.setCombinedMatrix(cam.combined.cpy().scl((float)zone.getGrid().getCellWidth())); - rayHandler.render(); - // vfxManager.endInputCapture(); - // vfxManager.applyEffects(); - // vfxManager.renderToScreen(); - doPhysicsStep(delta); } @NotNull @@ -466,21 +361,21 @@ private void doRendering() { setProjectionMatrix(hudCam.combined); if (zoneRenderer.isLoading()) - drawBoxedString(zoneRenderer.getLoadingProgress(), width / 2f, height / 2f); + textRenderer.drawBoxedString(zoneRenderer.getLoadingProgress(), width / 2f, height / 2f); else if (MapTool.getCampaign().isBeingSerialized()) - drawBoxedString(" Please Wait ", width / 2f, height / 2f); + textRenderer.drawBoxedString(" Please Wait ", width / 2f, height / 2f); int noteVPos = 20; if (!zone.isVisible() && playerView.isGMView()) { - drawBoxedString("Map not visible to players", width / 2f, height - noteVPos); + textRenderer.drawBoxedString("Map not visible to players", width / 2f, height - noteVPos); noteVPos += 20; } if (AppState.isShowAsPlayer()) { - drawBoxedString("Player View", width / 2, height - noteVPos); + textRenderer.drawBoxedString("Player View", width / 2, height - noteVPos); } - drawString(String.valueOf(Gdx.graphics.getFramesPerSecond()), 10, 10); - drawString(String.valueOf(batch.renderCalls), width - 10, 10); + textRenderer.drawString(String.valueOf(Gdx.graphics.getFramesPerSecond()), 10, 10); + textRenderer.drawString(String.valueOf(batch.renderCalls), width - 10, 10); // videoPlayer.update(); // var frame = videoPlayer.getTexture(); @@ -767,11 +662,6 @@ private void renderVisionOverlay(PlayerView view) { boolean strictOwnership = MapTool.getServerPolicy() != null && MapTool.getServerPolicy().useStrictTokenManagement(); boolean showVisionAndHalo = isOwner || view.isGMView() || (tokenIsPC && !strictOwnership); - // String player = MapTool.getPlayer().getName(); - // System.err.print("tokenUnderMouse.ownedBy(" + player + "): " + isOwner); - // System.err.print(", tokenIsPC: " + tokenIsPC); - // System.err.print(", isGMView(): " + view.isGMView()); - // System.err.println(", strictOwnership: " + strictOwnership); /* * The vision arc and optional halo-filled visible area shouldn't be shown to everyone. If we are in GM view, or if we are the owner of the token in question, or if the token is a PC and @@ -779,7 +669,7 @@ private void renderVisionOverlay(PlayerView view) { */ if (showVisionAndHalo) { drawer.setColor(Color.WHITE); - drawArea(combined); + areaRenderer.drawArea(combined); renderHaloArea(combined); } } @@ -799,13 +689,13 @@ private void renderHaloArea(Area visible) { visionColor.getGreen() / 255f, visionColor.getBlue() / 255f, AppPreferences.getHaloOverlayOpacity() / 255f); - fillArea(visible); + areaRenderer.fillArea(visible); } } private void renderRenderables() { for (ItemRenderer renderer : itemRenderList) { - renderer.render(); + renderer.render(cam, zoom); } } @@ -819,8 +709,8 @@ private void renderFog(PlayerView view) { flushFog = true; } boolean cacheNotValid = - (backBuffer.getTexture().getWidth() != width - || backBuffer.getTexture().getHeight() != height); + (backBuffer.getColorBufferTexture().getWidth() != width + || backBuffer.getColorBufferTexture().getHeight() != height); timer.start("renderFog"); // if (flushFog || cacheNotValid) { @@ -893,7 +783,7 @@ private void renderFog(PlayerView view) { tempArea.add(new Area(exposedArea)); } if (combinedView) { - fillArea(combined); + areaRenderer.fillArea(combined); renderFogArea(combined, visibleArea); renderFogOutline(); } else { @@ -901,7 +791,7 @@ private void renderFog(PlayerView view) { // use 'combined' instead in this block of code? tempArea.add(combined); - fillArea(tempArea); + areaRenderer.fillArea(tempArea); renderFogArea(tempArea, visibleArea); renderFogOutline(); } @@ -912,7 +802,7 @@ private void renderFog(PlayerView view) { if (combined.isEmpty()) { combined = zone.getExposedArea(); } - fillArea(combined); + areaRenderer.fillArea(combined); renderFogArea(combined, visibleArea); renderFogOutline(); } else { @@ -928,7 +818,7 @@ private void renderFog(PlayerView view) { exposedArea = meta.getExposedAreaHistory(); myCombined.add(new Area(exposedArea)); } - fillArea(myCombined); + areaRenderer.fillArea(myCombined); renderFogArea(myCombined, visibleArea); renderFogOutline(); } @@ -943,7 +833,8 @@ private void renderFog(PlayerView view) { setProjectionMatrix(hudCam.combined); batch.setColor(Color.WHITE); - batch.draw(backBuffer.getTexture(), 0, 0, width, height, 0, 0, width, height, false, true); + batch.draw( + backBuffer.getColorBufferTexture(), 0, 0, width, height, 0, 0, width, height, false, true); setProjectionMatrix(cam.combined); timer.stop("renderFog"); @@ -960,19 +851,19 @@ private void renderFogArea(Area softFog, Area visibleArea) { drawer.setColor(0, 0, 0, AppPreferences.getFogOverlayOpacity() / 255.0f); // Fill in the exposed area - fillArea(softFog); + areaRenderer.fillArea(softFog); // batch.setColor(Color.CLEAR); drawer.setColor(Color.CLEAR); - fillArea(visibleArea); + areaRenderer.fillArea(visibleArea); } else { drawer.setColor(0, 0, 0, 80 / 255.0f); - fillArea(softFog); + areaRenderer.fillArea(softFog); drawer.setColor(Color.WHITE); } } else { - fillArea(softFog); + areaRenderer.fillArea(softFog); } } @@ -980,7 +871,7 @@ private void renderFogOutline() { if (visibleScreenArea == null) return; drawer.setColor(Color.BLACK); - drawArea(visibleScreenArea); + areaRenderer.drawArea(visibleScreenArea); } private void renderLabels(PlayerView view) { @@ -990,15 +881,15 @@ private void renderLabels(PlayerView view) { timer.start("labels-1.1"); Color.argb8888ToColor(tmpColor, label.getForegroundColor().getRGB()); if (label.isShowBackground()) { - drawBoxedString( + textRenderer.drawBoxedString( label.getLabel(), label.getX(), -label.getY(), SwingUtilities.CENTER, - grayLabel, + TextRenderer.Background.Gray, tmpColor); } else { - drawString(label.getLabel(), label.getX(), -label.getY(), tmpColor); + textRenderer.drawString(label.getLabel(), label.getX(), -label.getY(), tmpColor); } timer.stop("labels-1.1"); } @@ -1201,12 +1092,12 @@ private void showBlockedMoves(PlayerView view, Set mo distance = NumberFormat.getInstance().format(c); } if (!distance.isEmpty()) { - itemRenderList.add(new LabelRenderer(distance, x, -y)); + itemRenderList.add(new LabelRenderer(distance, x, -y, textRenderer)); y += 20; } } if (set.getPlayerId() != null && set.getPlayerId().length() >= 1) { - itemRenderList.add(new LabelRenderer(set.getPlayerId(), x, -y)); + itemRenderList.add(new LabelRenderer(set.getPlayerId(), x, -y, textRenderer)); } } // showLabels } // token == keyToken @@ -1242,7 +1133,7 @@ private void renderAuras(PlayerView view) { tmpColor.set(1, 1, 1, 0.59f); } drawer.setColor(tmpColor); - fillArea(light.getArea()); + areaRenderer.fillArea(light.getArea()); } timer.stop("auras-4"); @@ -1281,7 +1172,7 @@ private void renderLights(PlayerView view) { } tmpColor.a = alpha; drawer.setColor(tmpColor); - fillArea(light.getArea()); + areaRenderer.fillArea(light.getArea()); } timer.stop("lights-3"); @@ -1289,7 +1180,7 @@ private void renderLights(PlayerView view) { timer.start("lights-4"); for (Area brightArea : zoneRenderer.getZoneView().getBrightLights(view)) { drawer.setColor(Color.CLEAR); - fillArea(brightArea); + areaRenderer.fillArea(brightArea); } timer.stop("lights-4"); // createScreenShot("light"); @@ -1297,7 +1188,8 @@ private void renderLights(PlayerView view) { backBuffer.end(); setProjectionMatrix(hudCam.combined); - batch.draw(backBuffer.getTexture(), 0, 0, width, height, 0, 0, width, height, false, true); + batch.draw( + backBuffer.getColorBufferTexture(), 0, 0, width, height, 0, 0, width, height, false, true); setProjectionMatrix(cam.combined); } @@ -1331,7 +1223,7 @@ private void renderGrid(HexGrid grid) { drawer.setColor(tmpColor); var path = grid.createShape(zoneRenderer.getScale()); - pathToFloatArray(path.getPathIterator(null)); + areaRenderer.pathToFloatArray(path.getPathIterator(null)); int offU = grid.getOffU(zoneRenderer); int offV = grid.getOffV(zoneRenderer); @@ -1453,23 +1345,6 @@ private void renderGrid(SquareGrid grid) { drawer.line(Math.round(col + offX), y, Math.round(col + offX), y + h, lineWidth); } - private FloatArray pathToVertices(GeneralPath path) { - PathIterator iterator = path.getPathIterator(null); - - tmpFloat.clear(); - - while (!iterator.isDone()) { - int type = iterator.currentSegment(floatsFromArea); - - if (type != PathIterator.SEG_CLOSE) { - tmpFloat.add(floatsFromArea[0], floatsFromArea[1]); - } - iterator.next(); - } - - return tmpFloat; - } - private void renderDrawableOverlay(PlayerView view, List drawables) { for (var drawable : drawables.toArray()) renderDrawable((DrawnElement) drawable); } @@ -1491,64 +1366,6 @@ else if (drawable instanceof DrawablesGroup) else if (drawable instanceof LineTemplate) lineTemplateDrawer.draw(drawable, pen); } - public void drawString(String text, float centerX, float centerY, Color foreground) { - drawBoxedString(text, centerX, centerY, SwingUtilities.CENTER, null, foreground); - } - - public void drawString(String text, float centerX, float centerY) { - drawBoxedString(text, centerX, centerY, SwingUtilities.CENTER, null, Color.WHITE); - } - - public void drawBoxedString(String text, float centerX, float centerY) { - drawBoxedString(text, centerX, centerY, SwingUtilities.CENTER); - } - - public void drawBoxedString(String text, float x, float y, int justification) { - drawBoxedString(text, x, y, justification, grayLabel, Color.BLACK); - } - - private void drawBoxedString( - String text, float x, float y, int justification, NinePatch background, Color foreground) { - final int BOX_PADDINGX = 10; - final int BOX_PADDINGY = 2; - - if (text == null) text = ""; - - glyphLayout.setText(normalFont, text); - var strWidth = glyphLayout.width; - - var fontHeight = normalFont.getLineHeight(); - - var width = strWidth + BOX_PADDINGX * 2; - var height = fontHeight + BOX_PADDINGY * 2; - - y = y - fontHeight / 2 - BOX_PADDINGY; - - switch (justification) { - case SwingUtilities.CENTER: - x = x - strWidth / 2 - BOX_PADDINGX; - break; - case SwingUtilities.RIGHT: - x = x - strWidth - BOX_PADDINGX; - break; - case SwingUtilities.LEFT: - break; - } - - // Box - if (background != null) { - background.draw(batch, x, y, width, height); - } - - // Renderer message - - var textX = x + BOX_PADDINGX; - var textY = y + height - BOX_PADDINGY - normalFont.getAscent(); - - normalFont.setColor(foreground); - normalFont.draw(batch, text, textX, textY); - } - private void renderBoard() { if (!zone.drawBoard()) return; @@ -1669,7 +1486,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure drawer.setDefaultLineWidth(AppPreferences.getHaloLineWidth()); Color.argb8888ToColor(tmpColor, token.getHaloColor().getRGB()); drawer.setColor(tmpColor); - drawArea(zone.getGrid().getTokenCellArea(tokenBounds)); + areaRenderer.drawArea(zone.getGrid().getTokenCellArea(tokenBounds)); } // Calculate alpha Transparency from token and use opacity for indicating that token is moving @@ -1755,10 +1572,10 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure else drawer.setColor(1, 1, 0, 0.5f); var arrowArea = new Area(arrow); - fillArea(arrowArea); + areaRenderer.fillArea(arrowArea); drawer.setColor(Color.DARK_GRAY); - drawArea(arrowArea); + areaRenderer.drawArea(arrowArea); break; case TOP_DOWN: @@ -1781,11 +1598,11 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure drawer.update(); drawer.setColor(Color.YELLOW); - fillArea(arrowArea); + areaRenderer.fillArea(arrowArea); drawer.setColor(Color.DARK_GRAY); drawer.setDefaultLineWidth(1); - drawArea(arrowArea); + areaRenderer.drawArea(arrowArea); tmpMatrix.idt(); batch.setTransformMatrix(tmpMatrix); drawer.update(); @@ -1829,9 +1646,9 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure drawer.update(); drawer.setColor(Color.YELLOW); - fillArea(arrowArea); + areaRenderer.fillArea(arrowArea); drawer.setColor(Color.DARK_GRAY); - drawArea(arrowArea); + areaRenderer.drawArea(arrowArea); batch.setTransformMatrix(tmpMatrix.idt()); drawer.update(); break; @@ -1958,7 +1775,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure showCurrentTokenLabel = false; } if (showCurrentTokenLabel) { - itemRenderList.add(new TokenLabelRenderer(token, isGMView)); + itemRenderList.add(new TokenLabelRenderer(token, zone, isGMView, textRenderer)); } timer.stop("tokenlist-12"); } @@ -2283,15 +2100,13 @@ private void renderTokenOverlay( // Find the position of the image according to the size and side where they are placed switch (overlay.getSide()) { case LEFT: + case TOP: y += d.height - size.height; break; case RIGHT: x += d.width - size.width; y += d.height - size.height; break; - case TOP: - y += d.height - size.height; - break; } image.setPosition(x, y); @@ -2316,15 +2131,13 @@ private void renderTokenOverlay( // Find the position of the images according to the size and side where they are placed switch (side) { case LEFT: + case TOP: y += d.height - size.height; break; case RIGHT: x += d.width - size.width; y += d.height - size.height; break; - case TOP: - y += d.height - size.height; - break; } int width = @@ -2384,15 +2197,13 @@ private void renderTokenOverlay(DrawnBarTokenOverlay overlay, Token token, doubl switch (side) { case LEFT: + case TOP: y += h - height; break; case RIGHT: x += w - width; y += h - height; break; - case TOP: - y += h - height; - break; } if (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) { @@ -2428,15 +2239,13 @@ private void renderTokenOverlay(TwoToneBarTokenOverlay overlay, Token token, dou switch (side) { case LEFT: + case TOP: y += h - height; break; case RIGHT: x += w - width; y += h - height; break; - case TOP: - y += h - height; - break; } var color = overlay.getBgColor(); @@ -2485,15 +2294,13 @@ private void renderTokenOverlay(TwoImageBarTokenOverlay overlay, Token token, do // Find the position of the images according to the size and side where they are placed switch (side) { case LEFT: + case TOP: y += d.height - size.height; break; case RIGHT: x += d.width - size.width; y += d.height - size.height; break; - case TOP: - y += d.height - size.height; - break; } var width = @@ -2656,7 +2463,7 @@ private void renderTokenOverlay(FlowColorDotTokenOverlay overlay, Token token) { overlay.getOpacity() / 100); drawer.setColor(tmpColor); Shape s = overlay.getShape(bounds, token); - fillArea(new Area(s)); + areaRenderer.fillArea(new Area(s)); drawer.setColor(Color.WHITE); } @@ -2896,14 +2703,14 @@ private void paintClipped(Sprite image, Area bounds, Area clip) { tmpArea.reset(); tmpArea.add(bounds); tmpArea.subtract(clip); - fillArea(tmpArea); + areaRenderer.fillArea(tmpArea); backBuffer.end(); tmpWorldCoord.x = image.getX(); tmpWorldCoord.y = image.getY(); tmpWorldCoord.z = 0; - tmpScreenCoord = cam.project(tmpWorldCoord); + var screenCoord = cam.project(tmpWorldCoord); var x = image.getX(); var y = image.getY(); @@ -2913,13 +2720,13 @@ private void paintClipped(Sprite image, Area bounds, Area clip) { var hsrc = image.getHeight() / zoom; batch.draw( - backBuffer.getTexture(), + backBuffer.getColorBufferTexture(), x, y, w, h, - (int) tmpScreenCoord.x, - (int) tmpScreenCoord.y, + (int) screenCoord.x, + (int) screenCoord.y, (int) wsrc, (int) hsrc, false, @@ -3042,10 +2849,10 @@ private void renderPath(Path path, TokenFootprint footprint) { tmpVector1.set(x2, -y2); tmpVector2.set(xh, -yh); - for (var i = 1; i <= pointsPerBezier; i++) { + for (var i = 1; i <= POINTS_PER_BEZIER; i++) { Bezier.quadratic( tmpVectorOut, - i / pointsPerBezier, + i / POINTS_PER_BEZIER, tmpVector0, tmpVector1, tmpVector2, @@ -3157,7 +2964,6 @@ private void addDistanceText( String distanceText = NumberFormat.getInstance().format(distance); if (log.isDebugEnabled() || showAstarDebugging) { distanceText += " (" + NumberFormat.getInstance().format(distanceWithoutTerrain) + ")"; - // fontSize = (int) (fontSize * 0.75); } glyphLayout.setText(distanceFont, distanceText); @@ -3166,9 +2972,6 @@ private void addDistanceText( distanceFont.setColor(Color.BLACK); - // log.info("Text: [" + distanceText + "], width: " + textWidth + ", font size: " + fontSize + - // ", offset: " + textOffset + ", fontScale: " + fontScale+ ", getScale(): " + getScale()); - distanceFont.draw( batch, distanceText, @@ -3188,16 +2991,6 @@ private void highlightCell(ZonePoint zp, TextureRegion image, float size) { image, zp.x - cwidth / 2, -zp.y - cheight / 2, 0, 0, cwidth, cheight, 1f, 1f, rotation); } - private void createScreenShot(String fileName) { - var handle = Gdx.files.absolute(fileName + ".png"); - if (!handle.exists()) { - batch.flush(); - var pix = Pixmap.createFromFrameBuffer(0, 0, width, height); - PixmapIO.writePNG(handle, pix, DEFAULT_COMPRESSION, true); - pix.dispose(); - } - } - private void disposeZoneResources() { if (!initialized) return; @@ -3256,6 +3049,7 @@ private void initializeZoneResources(Zone newZone) { zone = newZone; } + // shapedrawer has to learn how to draw with texturePaint first. private Texture paintToTexture(DrawablePaint paint) { if (paint instanceof DrawableTexturePaint) { var texturePaint = (DrawableTexturePaint) paint; @@ -3310,104 +3104,6 @@ private Sprite paintToSprite(DrawablePaint paint) { return null; } - private void fillArea(Area area) { - if (area == null || area.isEmpty()) return; - - paintArea(area, true); - } - - private void drawArea(Area area) { - if (area == null || area.isEmpty()) return; - - paintArea(area, false); - } - - private void paintArea(Area area, boolean fill) { - pathToFloatArray(area.getPathIterator(null)); - - if (fill) { - var lastX = tmpFloat.get(tmpFloat.size - 2); - var lastY = tmpFloat.get(tmpFloat.size - 1); - if (lastX != tmpFloat.get(0) && lastY != tmpFloat.get(1)) - tmpFloat.add(tmpFloat.get(0), tmpFloat.get(1)); - - drawer.filledPolygon(tmpFloat.toArray()); - } else { - if (tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) - && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { - tmpFloat.pop(); - tmpFloat.pop(); - } - - drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.SMOOTH, false); - } - } - - private void pathToFloatArray(PathIterator it) { - tmpFloat.clear(); - - for (; !it.isDone(); it.next()) { - int type = it.currentSegment(floatsFromArea); - - switch (type) { - case PathIterator.SEG_MOVETO: - // System.out.println("Move to: ( " + floatsFromArea[0] + ", " + - // floatsFromArea[1] + ")"); - tmpFloat.add(floatsFromArea[0], -floatsFromArea[1]); - - break; - case PathIterator.SEG_CLOSE: - // System.out.println("Close"); - - return; - case PathIterator.SEG_LINETO: - // System.out.println("Line to: ( " + floatsFromArea[0] + ", " + - // floatsFromArea[1] + ")"); - tmpFloat.add(floatsFromArea[0], -floatsFromArea[1]); - break; - case PathIterator.SEG_QUADTO: - // System.out.println("quadratic bezier with: ( " + floatsFromArea[0] + - // ", " + floatsFromArea[1] + - // "), (" + floatsFromArea[2] + ", " + floatsFromArea[3] + ")"); - - tmpVector0.set(tmpFloat.get(tmpFloat.size - 2), tmpFloat.get(tmpFloat.size - 1)); - tmpVector1.set(floatsFromArea[0], -floatsFromArea[1]); - tmpVector2.set(floatsFromArea[2], -floatsFromArea[3]); - for (var i = 1; i <= pointsPerBezier; i++) { - Bezier.quadratic( - tmpVectorOut, i / pointsPerBezier, tmpVector0, tmpVector1, tmpVector2, tmpVector); - tmpFloat.add(tmpVectorOut.x, tmpVectorOut.y); - } - break; - case PathIterator.SEG_CUBICTO: - // System.out.println("cubic bezier with: ( " + floatsFromArea[0] + ", - // " + floatsFromArea[1] + - // "), (" + floatsFromArea[2] + ", " + floatsFromArea[3] + - // "), (" + floatsFromArea[4] + ", " + floatsFromArea[5] + - // ")"); - - tmpVector0.set(tmpFloat.get(tmpFloat.size - 2), tmpFloat.get(tmpFloat.size - 1)); - tmpVector1.set(floatsFromArea[0], -floatsFromArea[1]); - tmpVector2.set(floatsFromArea[2], -floatsFromArea[3]); - tmpVector3.set(floatsFromArea[4], -floatsFromArea[5]); - for (var i = 1; i <= pointsPerBezier; i++) { - Bezier.cubic( - tmpVectorOut, - i / pointsPerBezier, - tmpVector0, - tmpVector1, - tmpVector2, - tmpVector3, - tmpVector); - tmpFloat.add(tmpVectorOut.x, tmpVectorOut.y); - } - break; - default: - System.out.println("Type: " + type); - } - } - } - @Override public void handleAppEvent(AppEvent event) { System.out.println("AppEvent:" + event.getId()); @@ -3434,34 +3130,33 @@ public void handleAppEvent(AppEvent event) { @Override public void modelChanged(ModelChangeEvent event) { - Object evt = event.getEvent(); - System.out.println("ModelChangend: " + evt); - if (!(evt instanceof Zone.Event)) return; - var eventType = (Zone.Event) evt; - switch (eventType) { - case TOPOLOGY_CHANGED: - flushFog(); - // flushLight(); - break; - case FOG_CHANGED: - flushFog = true; - break; - case TOKEN_CHANGED: - { - updateVisibleArea(); - var token = (Token) event.getArg(); - updateBodyFor(token); - break; - } - case TOKEN_ADDED: - { - var token = (Token) event.getArg(); - addBodyFor(token); - System.out.println(); - break; + /* + Object evt = event.getEvent(); + System.out.println("ModelChangend: " + evt); + if (!(evt instanceof Zone.Event)) return; + var eventType = (Zone.Event) evt; + switch (eventType) { + case TOPOLOGY_CHANGED: + flushFog(); + // flushLight(); + break; + case FOG_CHANGED: + flushFog = true; + break; + case TOKEN_CHANGED: + { + updateVisibleArea(); + var token = (Token) event.getArg(); + break; + } + case TOKEN_ADDED: + { + var token = (Token) event.getArg(); + System.out.println(); + break; + } } - } - + */ /* if (evt == Zone.Event.TOKEN_CHANGED || evt == Zone.Event.TOKEN_REMOVED @@ -3485,61 +3180,6 @@ public void modelChanged(ModelChangeEvent event) { */ } - private void addBodyFor(Token token) { - /* - var body = tokenBodies.get(token); - if(body != null) - return; - - // First we create a body definition - BodyDef bodyDef = new BodyDef(); - // We set our body to dynamic, for something like ground which doesn't move we would set it to StaticBody - bodyDef.type = BodyDef.BodyType.DynamicBody; - // Set our body's starting position in the world - // bodyDef.position.set(0, 0); - - // Create our body in the world using our body definition - body = world.createBody(bodyDef); - - // Create a circle shape and set its radius to 6 - CircleShape circle = new CircleShape(); - circle.setRadius(6f); - - // Create a fixture definition to apply our shape to - FixtureDef fixtureDef = new FixtureDef(); - fixtureDef.shape = circle; - fixtureDef.density = 0.5f; - fixtureDef.friction = 0.4f; - fixtureDef.restitution = 0.6f; // Make it bounce a little bit - - // Create our fixture and attach it to the body - Fixture fixture = body.createFixture(fixtureDef); - - // Remember to dispose of any shapes after you're done with them! - // BodyDef and FixtureDef don't need disposing, but shapes do. - circle.dispose(); - - tokenBodies.put(token, body); - updateBodyFor(token); - */ - } - - void updateBodyFor(Token token) { - /* - var body = tokenBodies.get(token); - if(body == null) - return; - - var bounds = token.getBounds(zone); - - - float x = token.getX() + bounds.width/2 + token.getAnchorX(); - float y = -(token.getY() + bounds.height/2 + token.getAnchorY()); - - body.setTransform(x, y, (float)Math.toRadians(token.getFacingInDegrees())); - */ - } - public void setScale(Scale scale) { offsetX = scale.getOffsetX() * -1; offsetY = scale.getOffsetY(); @@ -3548,6 +3188,9 @@ public void setScale(Scale scale) { } public void flushFog() { + if(!initialized) + return; + flushFog = true; updateVisibleArea(); } @@ -3556,7 +3199,7 @@ public void flushFog() { public void assetAvailable(MD5Key key) { try { var asset = AssetManager.getAsset(key); - if (asset.getExtension() == "gif") { + if (asset.getExtension().equals("gif")) { Gdx.app.postRunnable( () -> { @@ -3567,7 +3210,7 @@ public void assetAvailable(MD5Key key) { }); return; } - if (asset.getExtension() == "data") { + if (asset.getExtension().equals("data")) { var videoPlayer = VideoPlayerCreator.createVideoPlayer(); videoPlayerMap.put(key, videoPlayer); return; @@ -3602,883 +3245,4 @@ public void assetAvailable(MD5Key key) { } catch (Exception e) { } } - - private interface ItemRenderer { - void render(); - } - - private class LabelRenderer implements ItemRenderer { - private float x; - private float y; - private String text; - - public LabelRenderer(String text, float x, float y) { - this.x = x; - this.y = y; - this.text = text; - } - - @Override - public void render() { - tmpWorldCoord.x = x; - tmpWorldCoord.y = y; - tmpWorldCoord.z = 0; - tmpScreenCoord = cam.project(tmpWorldCoord); - - drawBoxedString( - text, tmpScreenCoord.x, tmpScreenCoord.y, SwingUtilities.CENTER, grayLabel, Color.BLACK); - } - } - - private class TokenLabelRenderer implements ItemRenderer { - private final boolean isGMView; - private Token token; - - public TokenLabelRenderer(Token token, boolean isGMView) { - this.token = token; - this.isGMView = isGMView; - } - - @Override - public void render() { - int offset = 3; // Keep it from tramping on the token border. - NinePatch background; - Color foreground; - - if (token.isVisible()) { - if (token.getType() == Token.Type.NPC) { - background = blueLabel; - foreground = Color.WHITE; - } else { - background = grayLabel; - foreground = Color.BLACK; - } - } else { - background = darkGrayLabel; - foreground = Color.WHITE; - } - String name = token.getName(); - if (isGMView && token.getGMName() != null && !StringUtil.isEmpty(token.getGMName())) { - name += " (" + token.getGMName() + ")"; - } - - // Calculate image dimensions - - float labelHeight = normalFont.getLineHeight() + GraphicsUtil.BOX_PADDINGY * 2; - - java.awt.Rectangle r = token.getBounds(zone); - tmpWorldCoord.x = r.x + r.width / 2; - tmpWorldCoord.y = (r.y + r.height + offset + labelHeight * zoom / 2) * -1; - tmpWorldCoord.z = 0; - tmpScreenCoord = cam.project(tmpWorldCoord); - - drawBoxedString( - name, tmpScreenCoord.x, tmpScreenCoord.y, SwingUtilities.CENTER, background, foreground); - - var label = token.getLabel(); - - // Draw name and label to image - if (label != null && label.trim().length() > 0) { - drawBoxedString( - label, - tmpScreenCoord.x, - tmpScreenCoord.y - labelHeight, - SwingUtilities.CENTER, - background, - foreground); - } - } - } - - private abstract class AbstractDrawingDrawer { - public void draw(Drawable element, Pen pen) { - if (pen.getBackgroundPaint() instanceof DrawableColorPaint) { - var colorPaint = (DrawableColorPaint) pen.getBackgroundPaint(); - Color.argb8888ToColor(tmpColor, colorPaint.getColor()); - drawer.setColor(tmpColor); - } - drawBackground(element, pen); - - if (pen.getPaint() instanceof DrawableColorPaint) { - var colorPaint = (DrawableColorPaint) pen.getPaint(); - Color.argb8888ToColor(tmpColor, colorPaint.getColor()); - drawer.setColor(tmpColor); - } - var lineWidth = drawer.getDefaultLineWidth(); - drawer.setDefaultLineWidth(pen.getThickness()); - drawBorder(element, pen); - drawer.setDefaultLineWidth(lineWidth); - } - - protected void line(Pen pen, float x1, float y1, float x2, float y2) { - var halfLineWidth = pen.getThickness() / 2f; - if (!pen.getSquareCap()) { - drawer.filledCircle(x1, -y1, halfLineWidth); - drawer.filledCircle(x2, -y2, halfLineWidth); - drawer.line(x1, -y1, x2, -y2); - } else { - tmpVector.set(x1 - x2, y1 - y2).nor(); - var tx = tmpVector.x * halfLineWidth; - var ty = tmpVector.y * halfLineWidth; - drawer.line(x1 + tx, y1 + ty, x2 - tx, y2 - ty); - } - } - - protected abstract void drawBackground(Drawable element, Pen pen); - - protected abstract void drawBorder(Drawable element, Pen pen); - } - - private abstract class AbstractTemplateDrawer extends AbstractDrawingDrawer { - @Override - protected void drawBackground(Drawable element, Pen pen) { - tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, AbstractTemplate.DEFAULT_BG_ALPHA); - drawer.setColor(tmpColor); - paint(pen, (AbstractTemplate) element, false, true); - } - - @Override - protected void drawBorder(Drawable element, Pen pen) { - paint(pen, (AbstractTemplate) element, true, false); - } - - protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean area) { - var radius = template.getRadius(); - - if (radius == 0) return; - Zone zone = MapTool.getCampaign().getZone(template.getZoneId()); - if (zone == null) return; - - // Find the proper distance - int gridSize = zone.getGrid().getSize(); - for (int y = 0; y < radius; y++) { - for (int x = 0; x < radius; x++) { - - // Get the offset to the corner of the square - int xOff = x * gridSize; - int yOff = y * gridSize; - - // Template specific painting - if (border) - paintBorder(pen, template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); - if (area) paintArea(template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); - } // endfor - } // endfor - } - - protected void paintArea( - AbstractTemplate template, int xOff, int yOff, int gridSize, AbstractTemplate.Quadrant q) { - var vertex = template.getVertex(); - int x = vertex.x + getXMult(q) * xOff + ((getXMult(q) - 1) / 2) * gridSize; - int y = vertex.y + getYMult(q) * yOff + ((getYMult(q) - 1) / 2) * gridSize; - drawer.filledRectangle(x, -y - gridSize, gridSize, gridSize); - } - - protected int getXMult(AbstractTemplate.Quadrant q) { - return ((q == AbstractTemplate.Quadrant.NORTH_WEST - || q == AbstractTemplate.Quadrant.SOUTH_WEST) - ? -1 - : +1); - } - - protected int getYMult(AbstractTemplate.Quadrant q) { - return ((q == AbstractTemplate.Quadrant.NORTH_WEST - || q == AbstractTemplate.Quadrant.NORTH_EAST) - ? -1 - : +1); - } - - protected void paintCloseVerticalBorder( - Pen pen, - AbstractTemplate template, - int xOff, - int yOff, - int gridSize, - AbstractTemplate.Quadrant q) { - var vertex = template.getVertex(); - int x = vertex.x + getXMult(q) * xOff; - int y = vertex.y + getYMult(q) * yOff; - line(pen, x, y, x, y + getYMult(q) * gridSize); - } - - protected void paintFarHorizontalBorder( - Pen pen, - AbstractTemplate template, - int xOff, - int yOff, - int gridSize, - AbstractTemplate.Quadrant q) { - var vertex = template.getVertex(); - int x = vertex.x + getXMult(q) * xOff; - int y = vertex.y + getYMult(q) * yOff + getYMult(q) * gridSize; - line(pen, x, y, x + getXMult(q) * gridSize, y); - } - - protected void paintFarVerticalBorder( - Pen pen, - AbstractTemplate template, - int xOff, - int yOff, - int gridSize, - AbstractTemplate.Quadrant q) { - var vertex = template.getVertex(); - int x = vertex.x + getXMult(q) * xOff + getXMult(q) * gridSize; - int y = vertex.y + getYMult(q) * yOff; - line(pen, x, y, x, y + getYMult(q) * gridSize); - } - - protected void paintCloseHorizontalBorder( - Pen pen, - AbstractTemplate template, - int xOff, - int yOff, - int gridSize, - AbstractTemplate.Quadrant q) { - var vertex = template.getVertex(); - int x = vertex.x + getXMult(q) * xOff; - int y = vertex.y + getYMult(q) * yOff; - line(pen, x, y, x + getXMult(q) * gridSize, y); - } - - protected abstract void paintArea( - AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance); - - protected abstract void paintBorder( - Pen pen, - AbstractTemplate template, - int x, - int y, - int xOff, - int yOff, - int gridSize, - int distance); - } - - private class LineTemplateDrawer extends AbstractTemplateDrawer { - @Override - protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean area) { - if (MapTool.getCampaign().getZone(template.getZoneId()) == null) { - return; - } - var lineTemplate = (LineTemplate) template; - - // Need to paint? We need a line and to translate the painting - if (lineTemplate.getPathVertex() == null) return; - if (template.getRadius() == 0) return; - if (lineTemplate.getPath() == null && lineTemplate.calcPath() == null) return; - - // Paint each element in the path - int gridSize = MapTool.getCampaign().getZone(template.getZoneId()).getGrid().getSize(); - ListIterator i = lineTemplate.getPath().listIterator(); - while (i.hasNext()) { - CellPoint p = i.next(); - int xOff = p.x * gridSize; - int yOff = p.y * gridSize; - int distance = template.getDistance(p.x, p.y); - - // Paint what is needed. - if (area) { - paintArea(template, p.x, p.y, xOff, yOff, gridSize, distance); - } // endif - if (border) { - paintBorder(pen, template, p.x, p.y, xOff, yOff, gridSize, i.previousIndex()); - } // endif - } // endfor - } - - @Override - protected void paintArea( - AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { - var lineTemplate = (LineTemplate) template; - paintArea(template, xOff, yOff, gridSize, lineTemplate.getQuadrant()); - } - - @Override - protected void paintBorder( - Pen pen, - AbstractTemplate template, - int x, - int y, - int xOff, - int yOff, - int gridSize, - int pElement) { - var lineTemplate = (LineTemplate) template; - - // Have to scan 3 points behind and ahead, since that is the maximum number of points - // that can be added to the path from any single intersection. - boolean[] noPaint = new boolean[4]; - var path = lineTemplate.getPath(); - for (int i = pElement - 3; i < pElement + 3; i++) { - if (i < 0 || i >= path.size() || i == pElement) continue; - CellPoint p = path.get(i); - - // Ignore diagonal cells and cells that are not adjacent - int dx = p.x - x; - int dy = p.y - y; - if (Math.abs(dx) == Math.abs(dy) || Math.abs(dx) > 1 || Math.abs(dy) > 1) continue; - - // Remove the border between the 2 points - noPaint[dx != 0 ? (dx < 0 ? 0 : 2) : (dy < 0 ? 3 : 1)] = true; - } // endif - - var quadrant = lineTemplate.getQuadrant(); - // Paint the borders as needed - if (!noPaint[0]) paintCloseVerticalBorder(pen, template, xOff, yOff, gridSize, quadrant); - if (!noPaint[1]) paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, quadrant); - if (!noPaint[2]) paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, quadrant); - if (!noPaint[3]) paintCloseHorizontalBorder(pen, template, xOff, yOff, gridSize, quadrant); - } - } - - private class LineCellTemplateDrawer extends AbstractTemplateDrawer { - - @Override - protected void paintArea( - AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { - var lineCellTemplate = (LineCellTemplate) template; - paintArea(template, xOff, yOff, gridSize, lineCellTemplate.getQuadrant()); - } - - @Override - protected void paintBorder( - Pen pen, - AbstractTemplate template, - int x, - int y, - int xOff, - int yOff, - int gridSize, - int pElement) { - var lineCellTemplate = (LineCellTemplate) template; - // Have to scan 3 points behind and ahead, since that is the maximum number of points - // that can be added to the path from any single intersection. - boolean[] noPaint = new boolean[4]; - var path = lineCellTemplate.getPath(); - for (int i = pElement - 3; i < pElement + 3; i++) { - if (i < 0 || i >= path.size() || i == pElement) continue; - CellPoint p = path.get(i); - - // Ignore diagonal cells and cells that are not adjacent - int dx = p.x - x; - int dy = p.y - y; - if (Math.abs(dx) == Math.abs(dy) || Math.abs(dx) > 1 || Math.abs(dy) > 1) continue; - - // Remove the border between the 2 points - noPaint[dx != 0 ? (dx < 0 ? 0 : 2) : (dy < 0 ? 3 : 1)] = true; - } // endif - - var quadrant = lineCellTemplate.getQuadrant(); - // Paint the borders as needed - if (!noPaint[0]) paintCloseVerticalBorder(pen, template, xOff, yOff, gridSize, quadrant); - if (!noPaint[1]) paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, quadrant); - if (!noPaint[2]) paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, quadrant); - if (!noPaint[3]) paintCloseHorizontalBorder(pen, template, xOff, yOff, gridSize, quadrant); - } - - @Override - protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean area) { - if (MapTool.getCampaign().getZone(template.getZoneId()) == null) { - return; - } - var lineCellTemplate = (LineCellTemplate) template; - var path = lineCellTemplate.getPath(); - // Need to paint? We need a line and to translate the painting - if (lineCellTemplate.getPathVertex() == null) return; - if (lineCellTemplate.getRadius() == 0) return; - if (path == null && lineCellTemplate.calcPath() == null) return; - - var quadrant = lineCellTemplate.getQuadrant(); - - // Paint each element in the path - int gridSize = - MapTool.getCampaign().getZone(lineCellTemplate.getZoneId()).getGrid().getSize(); - ListIterator i = path.listIterator(); - while (i.hasNext()) { - CellPoint p = i.next(); - int xOff = p.x * gridSize; - int yOff = p.y * gridSize; - int distance = template.getDistance(p.x, p.y); - - if (quadrant.equals(AbstractTemplate.Quadrant.NORTH_EAST.name())) { - yOff = yOff - gridSize; - } else if (quadrant.equals(AbstractTemplate.Quadrant.SOUTH_WEST.name())) { - xOff = xOff - gridSize; - } else if (quadrant.equals(AbstractTemplate.Quadrant.NORTH_WEST.name())) { - xOff = xOff - gridSize; - yOff = yOff - gridSize; - } - - // Paint what is needed. - if (area) { - paintArea(template, p.x, p.y, xOff, yOff, gridSize, distance); - } // endif - if (border) { - paintBorder(pen, template, p.x, p.y, xOff, yOff, gridSize, i.previousIndex()); - } // endif - } // endfor - } - } - - private class RadiusTemplateDrawer extends AbstractTemplateDrawer { - @Override - protected void paintArea( - AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { - var radiusTemplate = (RadiusTemplate) template; - // Only squares w/in the radius - if (distance <= radiusTemplate.getRadius()) { - // Paint the squares - for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { - paintArea(template, xOff, yOff, gridSize, q); - } - } - } - - @Override - protected void paintBorder( - Pen pen, - AbstractTemplate template, - int x, - int y, - int xOff, - int yOff, - int gridSize, - int distance) { - var radiusTemplate = (RadiusTemplate) template; - paintBorderAtRadius( - pen, template, x, y, xOff, yOff, gridSize, distance, radiusTemplate.getRadius()); - } - - private void paintBorderAtRadius( - Pen pen, - AbstractTemplate template, - int x, - int y, - int xOff, - int yOff, - int gridSize, - int distance, - int radius) { - // At the border? - if (distance == radius) { - // Paint lines between vertical boundaries if needed - if (template.getDistance(x + 1, y) > radius) { - for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { - paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, q); - } - } - - // Paint lines between horizontal boundaries if needed - if (template.getDistance(x, y + 1) > radius) { - for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { - paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, q); - } - } - } - } - } - - private class BurstTemplateDrawer extends AbstractDrawingDrawer { - - @Override - protected void drawBackground(Drawable element, Pen pen) { - var template = (BurstTemplate) element; - tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, AbstractTemplate.DEFAULT_BG_ALPHA); - drawer.setColor(tmpColor); - fillArea(template.getArea()); - } - - @Override - protected void drawBorder(Drawable element, Pen pen) { - var template = (BurstTemplate) element; - drawArea(template.getArea()); - drawArea(template.getVertexRenderer().getArea()); - } - } - - private class ConeTemplateDrawer extends RadiusTemplateDrawer { - @Override - protected void paintArea( - AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { - var coneTemplate = (ConeTemplate) template; - - var direction = coneTemplate.getDirection(); - - // Drawing along the spines only? - if ((direction == AbstractTemplate.Direction.EAST - || direction == AbstractTemplate.Direction.WEST) - && y > x) return; - if ((direction == AbstractTemplate.Direction.NORTH - || direction == AbstractTemplate.Direction.SOUTH) - && x > y) return; - - // Only squares w/in the radius - if (distance > coneTemplate.getRadius()) { - return; - } - for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { - if (coneTemplate.withinQuadrant(q)) { - paintArea(template, xOff, yOff, gridSize, q); - } - } - } - - @Override - protected void paintBorder( - Pen pen, - AbstractTemplate template, - int x, - int y, - int xOff, - int yOff, - int gridSize, - int distance) { - var coneTemplate = (ConeTemplate) template; - paintBorderAtRadius( - pen, coneTemplate, x, y, xOff, yOff, gridSize, distance, coneTemplate.getRadius()); - paintEdges(pen, coneTemplate, x, y, xOff, yOff, gridSize, distance); - } - - protected void paintEdges( - Pen pen, - ConeTemplate template, - int x, - int y, - int xOff, - int yOff, - int gridSize, - int distance) { - - // Handle the edges - int radius = template.getRadius(); - var direction = template.getDirection(); - if (direction.ordinal() % 2 == 0) { - if (x == 0) { - if (direction == AbstractTemplate.Direction.SOUTH_EAST - || direction == AbstractTemplate.Direction.SOUTH_WEST) - paintCloseVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - if (direction == AbstractTemplate.Direction.NORTH_EAST - || direction == AbstractTemplate.Direction.NORTH_WEST) - paintCloseVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); - } // endif - if (y == 0) { - if (direction == AbstractTemplate.Direction.SOUTH_EAST - || direction == AbstractTemplate.Direction.NORTH_EAST) - paintCloseHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); - if (direction == AbstractTemplate.Direction.SOUTH_WEST - || direction == AbstractTemplate.Direction.NORTH_WEST) - paintCloseHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - } // endif - } else if (direction.ordinal() % 2 == 1 && x == y && distance <= radius) { - if (direction == AbstractTemplate.Direction.SOUTH) { - paintFarVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - paintFarVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); - paintCloseHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - paintCloseHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); - } // endif - if (direction == AbstractTemplate.Direction.NORTH) { - paintFarVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); - paintFarVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - paintCloseHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); - paintCloseHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - } // endif - if (direction == AbstractTemplate.Direction.EAST) { - paintCloseVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - paintCloseVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); - paintFarHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - paintFarHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); - } // endif - if (direction == AbstractTemplate.Direction.WEST) { - paintCloseVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); - paintCloseVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - paintFarHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); - paintFarHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - } // endif - } // endif - } - - protected void paintBorderAtRadius( - Pen pen, - ConeTemplate template, - int x, - int y, - int xOff, - int yOff, - int gridSize, - int distance, - int radius) { - // At the border? - if (distance == radius) { - var direction = template.getDirection(); - // Paint lines between vertical boundaries if needed - if (template.getDistance(x + 1, y) > radius) { - if (direction == AbstractTemplate.Direction.SOUTH_EAST - || (direction == AbstractTemplate.Direction.SOUTH && y >= x) - || (direction == AbstractTemplate.Direction.EAST && x >= y)) - paintFarVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - if (direction == AbstractTemplate.Direction.NORTH_EAST - || (direction == AbstractTemplate.Direction.NORTH && y >= x) - || (direction == AbstractTemplate.Direction.EAST && x >= y)) - paintFarVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); - if (direction == AbstractTemplate.Direction.SOUTH_WEST - || (direction == AbstractTemplate.Direction.SOUTH && y >= x) - || (direction == AbstractTemplate.Direction.WEST && x >= y)) - paintFarVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); - if (direction == AbstractTemplate.Direction.NORTH_WEST - || (direction == AbstractTemplate.Direction.NORTH && y >= x) - || (direction == AbstractTemplate.Direction.WEST && x >= y)) - paintFarVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - } // endif - - // Paint lines between horizontal boundaries if needed - if (template.getDistance(x, y + 1) > radius) { - if (direction == AbstractTemplate.Direction.SOUTH_EAST - || (direction == AbstractTemplate.Direction.SOUTH && y >= x) - || (direction == AbstractTemplate.Direction.EAST && x >= y)) - paintFarHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - if (direction == AbstractTemplate.Direction.SOUTH_WEST - || (direction == AbstractTemplate.Direction.SOUTH && y >= x) - || (direction == AbstractTemplate.Direction.WEST && x >= y)) - paintFarHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); - if (direction == AbstractTemplate.Direction.NORTH_EAST - || (direction == AbstractTemplate.Direction.NORTH && y >= x) - || (direction == AbstractTemplate.Direction.EAST && x >= y)) - paintFarHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); - if (direction == AbstractTemplate.Direction.NORTH_WEST - || (direction == AbstractTemplate.Direction.NORTH && y >= x) - || (direction == AbstractTemplate.Direction.WEST && x >= y)) - paintFarHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - } // endif - } // endif - } - } - - private class BlastTemplateDrawer extends AbstractDrawingDrawer { - - @Override - protected void drawBackground(Drawable element, Pen pen) { - var template = (BlastTemplate) element; - tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, AbstractTemplate.DEFAULT_BG_ALPHA); - drawer.setColor(tmpColor); - fillArea(template.getArea()); - } - - @Override - protected void drawBorder(Drawable element, Pen pen) { - var template = (BlastTemplate) element; - drawArea(template.getArea()); - } - } - - private class RadiusCellTemplateDrawer extends AbstractTemplateDrawer { - - @Override - protected void paintArea( - AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { - // Only squares w/in the radius - int radius = template.getRadius(); - if (distance <= radius) { - paintArea(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - } - - if (template.getDistance(x, y + 1) <= radius) { - paintArea(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); - } - - if (template.getDistance(x + 1, y) <= radius) { - paintArea(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); - } - - if (template.getDistance(x + 1, y + 1) <= radius) { - paintArea(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - } - } - - @Override - protected void paintArea( - AbstractTemplate template, int xOff, int yOff, int gridSize, AbstractTemplate.Quadrant q) { - ZonePoint vertex = template.getVertex(); - int x = vertex.x + getXMult(q) * xOff + ((getXMult(q) - 1) / 2) * gridSize; - int y = vertex.y + getYMult(q) * yOff + ((getYMult(q) - 1) / 2) * gridSize; - drawer.filledRectangle(x, -y - gridSize, gridSize, gridSize); - } - - @Override - protected int getXMult(AbstractTemplate.Quadrant q) { - return ((q == AbstractTemplate.Quadrant.NORTH_WEST - || q == AbstractTemplate.Quadrant.SOUTH_WEST) - ? -1 - : +1); - } - - @Override - protected int getYMult(AbstractTemplate.Quadrant q) { - return ((q == AbstractTemplate.Quadrant.NORTH_WEST - || q == AbstractTemplate.Quadrant.NORTH_EAST) - ? -1 - : +1); - } - - @Override - protected void paintBorder( - Pen pen, - AbstractTemplate template, - int x, - int y, - int xOff, - int yOff, - int gridSize, - int distance) { - paintBorderAtRadius( - pen, template, x, y, xOff, yOff, gridSize, distance, template.getRadius()); - } - - protected void paintBorderAtRadius( - Pen pen, - AbstractTemplate template, - int x, - int y, - int xOff, - int yOff, - int gridSize, - int distance, - int radius) { - // At the border? - // Paint lines between vertical boundaries if needed - - if (template.getDistance(x, y + 1) == radius && template.getDistance(x + 1, y + 1) > radius) { - paintFarVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); - } - if (distance == radius && template.getDistance(x + 1, y) > radius) { - paintFarVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - } - if (template.getDistance(x + 1, y + 1) == radius - && template.getDistance(x + 2, y + 1) > radius) { - paintFarVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - } - if (template.getDistance(x + 1, y) == radius && template.getDistance(x + 2, y) > radius) { - paintFarVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); - } // endif - if (x == 0 && y + 1 == radius) { - paintFarVerticalBorder( - pen, template, xOff - gridSize, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - } - if (x == 0 && y + 2 == radius) { - paintFarVerticalBorder( - pen, template, xOff - gridSize, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - } - - // Paint lines between horizontal boundaries if needed - if (template.getDistance(x, y + 1) == radius && template.getDistance(x, y + 2) > radius) { - paintFarHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); - } - if (template.getDistance(x, y) == radius && template.getDistance(x, y + 1) > radius) { - paintFarHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - } - if (y == 0 && x + 1 == radius) { - paintFarHorizontalBorder( - pen, template, xOff, yOff - gridSize, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); - } - if (y == 0 && x + 2 == radius) { - paintFarHorizontalBorder( - pen, template, xOff, yOff - gridSize, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - } - if (template.getDistance(x + 1, y + 1) == radius - && template.getDistance(x + 1, y + 2) > radius) { - paintFarHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); - } - if (template.getDistance(x + 1, y) == radius && template.getDistance(x + 1, y + 1) > radius) { - paintFarHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); - } // endif - } - - @Override - protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean area) { - int radius = template.getRadius(); - GUID zoneId = template.getZoneId(); - - if (radius == 0) return; - Zone zone = MapTool.getCampaign().getZone(zoneId); - if (zone == null) return; - - // Find the proper distance - int gridSize = zone.getGrid().getSize(); - for (int y = 0; y < radius; y++) { - for (int x = 0; x < radius; x++) { - - // Get the offset to the corner of the square - int xOff = x * gridSize; - int yOff = y * gridSize; - - // Template specific painting - if (border) - paintBorder(pen, template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); - if (area) paintArea(template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); - } // endfor - } // endfor - } - } - - private class ShapeDrawableDrawer extends AbstractDrawingDrawer { - - @Override - protected void drawBackground(Drawable element, Pen pen) { - var shape = (ShapeDrawable) element; - fillArea(shape.getArea()); - } - - @Override - protected void drawBorder(Drawable element, Pen pen) { - var shape = (ShapeDrawable) element; - pathToFloatArray(shape.getShape().getPathIterator(null)); - if (tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) - && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { - tmpFloat.pop(); - tmpFloat.pop(); - } - if (pen.getSquareCap()) - drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.POINTY, false); - else { - drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.NONE, false); - for (int i = 0; i + 1 < tmpFloat.size; i += 2) - drawer.filledCircle(tmpFloat.get(i), tmpFloat.get(i + 1), pen.getThickness() / 2f); - } - } - } } diff --git a/src/main/java/net/rptools/maptool/box2d/unused/Main.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ItemRenderer.java similarity index 57% rename from src/main/java/net/rptools/maptool/box2d/unused/Main.java rename to src/main/java/net/rptools/maptool/client/ui/zone/gdx/ItemRenderer.java index 0e63a3c2ec..b7f18099e3 100644 --- a/src/main/java/net/rptools/maptool/box2d/unused/Main.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ItemRenderer.java @@ -12,18 +12,10 @@ * and specifically the Affero license * text at . */ -package net.rptools.maptool.box2d.unused; +package net.rptools.maptool.client.ui.zone.gdx; -import com.badlogic.gdx.backends.lwjgl.LwjglApplication; -import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; +import com.badlogic.gdx.graphics.Camera; -public class Main { - public static void main(String[] args) { - LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration(); - cfg.title = "MapTool libgdx Test!"; - cfg.width = 1280; - cfg.height = 720; - - new LwjglApplication(new Box2dLightTest(), cfg); - } +public interface ItemRenderer { + void render(Camera camera, float zoom); } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LabelRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LabelRenderer.java new file mode 100644 index 0000000000..4d2cc12023 --- /dev/null +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LabelRenderer.java @@ -0,0 +1,45 @@ +/* + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. + * + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . + */ +package net.rptools.maptool.client.ui.zone.gdx; + +import com.badlogic.gdx.graphics.Camera; +import com.badlogic.gdx.math.Vector3; +import javax.swing.*; + +public class LabelRenderer implements ItemRenderer { + private final TextRenderer renderer; + private float x; + private float y; + private String text; + private Vector3 tmpWorldCoord = new Vector3(); + private Vector3 tmpScreenCoord = new Vector3(); + + public LabelRenderer(String text, float x, float y, TextRenderer renderer) { + this.x = x; + this.y = y; + this.text = text; + this.renderer = renderer; + } + + @Override + public void render(Camera camera, float zoom) { + tmpWorldCoord.x = x; + tmpWorldCoord.y = y; + tmpWorldCoord.z = 0; + tmpScreenCoord = camera.project(tmpWorldCoord); + + renderer.drawBoxedString(text, tmpScreenCoord.x, tmpScreenCoord.y, SwingUtilities.CENTER); + } +} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineCellTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineCellTemplateDrawer.java new file mode 100644 index 0000000000..d661b9dbad --- /dev/null +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineCellTemplateDrawer.java @@ -0,0 +1,115 @@ +/* + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. + * + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . + */ +package net.rptools.maptool.client.ui.zone.gdx; + +import java.util.ListIterator; +import net.rptools.maptool.client.MapTool; +import net.rptools.maptool.model.CellPoint; +import net.rptools.maptool.model.drawing.AbstractTemplate; +import net.rptools.maptool.model.drawing.LineCellTemplate; +import net.rptools.maptool.model.drawing.Pen; +import space.earlygrey.shapedrawer.ShapeDrawer; + +public class LineCellTemplateDrawer extends AbstractTemplateDrawer { + + public LineCellTemplateDrawer(ShapeDrawer drawer) { + super(drawer); + } + + @Override + protected void paintArea( + AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + var lineCellTemplate = (LineCellTemplate) template; + paintArea(template, xOff, yOff, gridSize, lineCellTemplate.getQuadrant()); + } + + @Override + protected void paintBorder( + Pen pen, + AbstractTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int pElement) { + var lineCellTemplate = (LineCellTemplate) template; + // Have to scan 3 points behind and ahead, since that is the maximum number of points + // that can be added to the path from any single intersection. + boolean[] noPaint = new boolean[4]; + var path = lineCellTemplate.getPath(); + for (int i = pElement - 3; i < pElement + 3; i++) { + if (i < 0 || i >= path.size() || i == pElement) continue; + CellPoint p = path.get(i); + + // Ignore diagonal cells and cells that are not adjacent + int dx = p.x - x; + int dy = p.y - y; + if (Math.abs(dx) == Math.abs(dy) || Math.abs(dx) > 1 || Math.abs(dy) > 1) continue; + + // Remove the border between the 2 points + noPaint[dx != 0 ? (dx < 0 ? 0 : 2) : (dy < 0 ? 3 : 1)] = true; + } // endif + + var quadrant = lineCellTemplate.getQuadrant(); + // Paint the borders as needed + if (!noPaint[0]) paintCloseVerticalBorder(pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[1]) paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[2]) paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[3]) paintCloseHorizontalBorder(pen, template, xOff, yOff, gridSize, quadrant); + } + + @Override + protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean area) { + if (MapTool.getCampaign().getZone(template.getZoneId()) == null) { + return; + } + var lineCellTemplate = (LineCellTemplate) template; + var path = lineCellTemplate.getPath(); + // Need to paint? We need a line and to translate the painting + if (lineCellTemplate.getPathVertex() == null) return; + if (lineCellTemplate.getRadius() == 0) return; + if (path == null && lineCellTemplate.calcPath() == null) return; + + var quadrant = lineCellTemplate.getQuadrant(); + + // Paint each element in the path + int gridSize = MapTool.getCampaign().getZone(lineCellTemplate.getZoneId()).getGrid().getSize(); + ListIterator i = path.listIterator(); + while (i.hasNext()) { + CellPoint p = i.next(); + int xOff = p.x * gridSize; + int yOff = p.y * gridSize; + int distance = template.getDistance(p.x, p.y); + + if (quadrant.equals(AbstractTemplate.Quadrant.NORTH_EAST.name())) { + yOff = yOff - gridSize; + } else if (quadrant.equals(AbstractTemplate.Quadrant.SOUTH_WEST.name())) { + xOff = xOff - gridSize; + } else if (quadrant.equals(AbstractTemplate.Quadrant.NORTH_WEST.name())) { + xOff = xOff - gridSize; + yOff = yOff - gridSize; + } + + // Paint what is needed. + if (area) { + paintArea(template, p.x, p.y, xOff, yOff, gridSize, distance); + } // endif + if (border) { + paintBorder(pen, template, p.x, p.y, xOff, yOff, gridSize, i.previousIndex()); + } // endif + } // endfor + } +} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineTemplateDrawer.java new file mode 100644 index 0000000000..92e1e7e0c4 --- /dev/null +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineTemplateDrawer.java @@ -0,0 +1,104 @@ +/* + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. + * + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . + */ +package net.rptools.maptool.client.ui.zone.gdx; + +import java.util.ListIterator; +import net.rptools.maptool.client.MapTool; +import net.rptools.maptool.model.CellPoint; +import net.rptools.maptool.model.drawing.AbstractTemplate; +import net.rptools.maptool.model.drawing.LineTemplate; +import net.rptools.maptool.model.drawing.Pen; +import space.earlygrey.shapedrawer.ShapeDrawer; + +public class LineTemplateDrawer extends AbstractTemplateDrawer { + public LineTemplateDrawer(ShapeDrawer drawer) { + super(drawer); + } + + @Override + protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean area) { + if (MapTool.getCampaign().getZone(template.getZoneId()) == null) { + return; + } + var lineTemplate = (LineTemplate) template; + + // Need to paint? We need a line and to translate the painting + if (lineTemplate.getPathVertex() == null) return; + if (template.getRadius() == 0) return; + if (lineTemplate.getPath() == null && lineTemplate.calcPath() == null) return; + + // Paint each element in the path + int gridSize = MapTool.getCampaign().getZone(template.getZoneId()).getGrid().getSize(); + ListIterator i = lineTemplate.getPath().listIterator(); + while (i.hasNext()) { + CellPoint p = i.next(); + int xOff = p.x * gridSize; + int yOff = p.y * gridSize; + int distance = template.getDistance(p.x, p.y); + + // Paint what is needed. + if (area) { + paintArea(template, p.x, p.y, xOff, yOff, gridSize, distance); + } // endif + if (border) { + paintBorder(pen, template, p.x, p.y, xOff, yOff, gridSize, i.previousIndex()); + } // endif + } // endfor + } + + @Override + protected void paintArea( + AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + var lineTemplate = (LineTemplate) template; + paintArea(template, xOff, yOff, gridSize, lineTemplate.getQuadrant()); + } + + @Override + protected void paintBorder( + Pen pen, + AbstractTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int pElement) { + var lineTemplate = (LineTemplate) template; + + // Have to scan 3 points behind and ahead, since that is the maximum number of points + // that can be added to the path from any single intersection. + boolean[] noPaint = new boolean[4]; + var path = lineTemplate.getPath(); + for (int i = pElement - 3; i < pElement + 3; i++) { + if (i < 0 || i >= path.size() || i == pElement) continue; + CellPoint p = path.get(i); + + // Ignore diagonal cells and cells that are not adjacent + int dx = p.x - x; + int dy = p.y - y; + if (Math.abs(dx) == Math.abs(dy) || Math.abs(dx) > 1 || Math.abs(dy) > 1) continue; + + // Remove the border between the 2 points + noPaint[dx != 0 ? (dx < 0 ? 0 : 2) : (dy < 0 ? 3 : 1)] = true; + } // endif + + var quadrant = lineTemplate.getQuadrant(); + // Paint the borders as needed + if (!noPaint[0]) paintCloseVerticalBorder(pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[1]) paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[2]) paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[3]) paintCloseHorizontalBorder(pen, template, xOff, yOff, gridSize, quadrant); + } +} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusCellTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusCellTemplateDrawer.java new file mode 100644 index 0000000000..e2ec6e80e8 --- /dev/null +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusCellTemplateDrawer.java @@ -0,0 +1,181 @@ +/* + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. + * + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . + */ +package net.rptools.maptool.client.ui.zone.gdx; + +import net.rptools.maptool.client.MapTool; +import net.rptools.maptool.model.GUID; +import net.rptools.maptool.model.Zone; +import net.rptools.maptool.model.ZonePoint; +import net.rptools.maptool.model.drawing.AbstractTemplate; +import net.rptools.maptool.model.drawing.Pen; +import space.earlygrey.shapedrawer.ShapeDrawer; + +public class RadiusCellTemplateDrawer extends AbstractTemplateDrawer { + + public RadiusCellTemplateDrawer(ShapeDrawer drawer) { + super(drawer); + } + + @Override + protected void paintArea( + AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + // Only squares w/in the radius + int radius = template.getRadius(); + if (distance <= radius) { + paintArea(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + } + + if (template.getDistance(x, y + 1) <= radius) { + paintArea(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + } + + if (template.getDistance(x + 1, y) <= radius) { + paintArea(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + } + + if (template.getDistance(x + 1, y + 1) <= radius) { + paintArea(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } + } + + @Override + protected void paintArea( + AbstractTemplate template, int xOff, int yOff, int gridSize, AbstractTemplate.Quadrant q) { + ZonePoint vertex = template.getVertex(); + int x = vertex.x + getXMult(q) * xOff + ((getXMult(q) - 1) / 2) * gridSize; + int y = vertex.y + getYMult(q) * yOff + ((getYMult(q) - 1) / 2) * gridSize; + drawer.filledRectangle(x, -y - gridSize, gridSize, gridSize); + } + + @Override + protected int getXMult(AbstractTemplate.Quadrant q) { + return ((q == AbstractTemplate.Quadrant.NORTH_WEST || q == AbstractTemplate.Quadrant.SOUTH_WEST) + ? -1 + : +1); + } + + @Override + protected int getYMult(AbstractTemplate.Quadrant q) { + return ((q == AbstractTemplate.Quadrant.NORTH_WEST || q == AbstractTemplate.Quadrant.NORTH_EAST) + ? -1 + : +1); + } + + @Override + protected void paintBorder( + Pen pen, + AbstractTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int distance) { + paintBorderAtRadius(pen, template, x, y, xOff, yOff, gridSize, distance, template.getRadius()); + } + + protected void paintBorderAtRadius( + Pen pen, + AbstractTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int distance, + int radius) { + // At the border? + // Paint lines between vertical boundaries if needed + + if (template.getDistance(x, y + 1) == radius && template.getDistance(x + 1, y + 1) > radius) { + paintFarVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + } + if (distance == radius && template.getDistance(x + 1, y) > radius) { + paintFarVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + } + if (template.getDistance(x + 1, y + 1) == radius + && template.getDistance(x + 2, y + 1) > radius) { + paintFarVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } + if (template.getDistance(x + 1, y) == radius && template.getDistance(x + 2, y) > radius) { + paintFarVerticalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + } // endif + if (x == 0 && y + 1 == radius) { + paintFarVerticalBorder( + pen, template, xOff - gridSize, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + } + if (x == 0 && y + 2 == radius) { + paintFarVerticalBorder( + pen, template, xOff - gridSize, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } + + // Paint lines between horizontal boundaries if needed + if (template.getDistance(x, y + 1) == radius && template.getDistance(x, y + 2) > radius) { + paintFarHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + } + if (template.getDistance(x, y) == radius && template.getDistance(x, y + 1) > radius) { + paintFarHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + } + if (y == 0 && x + 1 == radius) { + paintFarHorizontalBorder( + pen, template, xOff, yOff - gridSize, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + } + if (y == 0 && x + 2 == radius) { + paintFarHorizontalBorder( + pen, template, xOff, yOff - gridSize, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } + if (template.getDistance(x + 1, y + 1) == radius + && template.getDistance(x + 1, y + 2) > radius) { + paintFarHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + } + if (template.getDistance(x + 1, y) == radius && template.getDistance(x + 1, y + 1) > radius) { + paintFarHorizontalBorder( + pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + } // endif + } + + @Override + protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean area) { + int radius = template.getRadius(); + GUID zoneId = template.getZoneId(); + + if (radius == 0) return; + Zone zone = MapTool.getCampaign().getZone(zoneId); + if (zone == null) return; + + // Find the proper distance + int gridSize = zone.getGrid().getSize(); + for (int y = 0; y < radius; y++) { + for (int x = 0; x < radius; x++) { + + // Get the offset to the corner of the square + int xOff = x * gridSize; + int yOff = y * gridSize; + + // Template specific painting + if (border) + paintBorder(pen, template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); + if (area) paintArea(template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); + } // endfor + } // endfor + } +} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusTemplateDrawer.java new file mode 100644 index 0000000000..0bbea19abf --- /dev/null +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusTemplateDrawer.java @@ -0,0 +1,82 @@ +/* + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. + * + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . + */ +package net.rptools.maptool.client.ui.zone.gdx; + +import net.rptools.maptool.model.drawing.AbstractTemplate; +import net.rptools.maptool.model.drawing.Pen; +import net.rptools.maptool.model.drawing.RadiusTemplate; +import space.earlygrey.shapedrawer.ShapeDrawer; + +public class RadiusTemplateDrawer extends AbstractTemplateDrawer { + public RadiusTemplateDrawer(ShapeDrawer drawer) { + super(drawer); + } + + @Override + protected void paintArea( + AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + var radiusTemplate = (RadiusTemplate) template; + // Only squares w/in the radius + if (distance <= radiusTemplate.getRadius()) { + // Paint the squares + for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { + paintArea(template, xOff, yOff, gridSize, q); + } + } + } + + @Override + protected void paintBorder( + Pen pen, + AbstractTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int distance) { + var radiusTemplate = (RadiusTemplate) template; + paintBorderAtRadius( + pen, template, x, y, xOff, yOff, gridSize, distance, radiusTemplate.getRadius()); + } + + private void paintBorderAtRadius( + Pen pen, + AbstractTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int distance, + int radius) { + // At the border? + if (distance == radius) { + // Paint lines between vertical boundaries if needed + if (template.getDistance(x + 1, y) > radius) { + for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { + paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, q); + } + } + + // Paint lines between horizontal boundaries if needed + if (template.getDistance(x, y + 1) > radius) { + for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { + paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, q); + } + } + } + } +} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ShapeDrawableDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ShapeDrawableDrawer.java new file mode 100644 index 0000000000..2f2496b58b --- /dev/null +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ShapeDrawableDrawer.java @@ -0,0 +1,52 @@ +/* + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. + * + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . + */ +package net.rptools.maptool.client.ui.zone.gdx; + +import net.rptools.maptool.model.drawing.Drawable; +import net.rptools.maptool.model.drawing.Pen; +import net.rptools.maptool.model.drawing.ShapeDrawable; +import space.earlygrey.shapedrawer.JoinType; +import space.earlygrey.shapedrawer.ShapeDrawer; + +public class ShapeDrawableDrawer extends AbstractDrawingDrawer { + + public ShapeDrawableDrawer(ShapeDrawer drawer) { + super(drawer); + } + + @Override + protected void drawBackground(Drawable element, Pen pen) { + var shape = (ShapeDrawable) element; + fillArea(shape.getArea()); + } + + @Override + protected void drawBorder(Drawable element, Pen pen) { + var shape = (ShapeDrawable) element; + var tmpFloat = pathToFloatArray(shape.getShape().getPathIterator(null)); + if (tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) + && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { + tmpFloat.pop(); + tmpFloat.pop(); + } + if (pen.getSquareCap()) + drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.POINTY, false); + else { + drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.NONE, false); + for (int i = 0; i + 1 < tmpFloat.size; i += 2) + drawer.filledCircle(tmpFloat.get(i), tmpFloat.get(i + 1), pen.getThickness() / 2f); + } + } +} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TextRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TextRenderer.java new file mode 100644 index 0000000000..ec87c35934 --- /dev/null +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TextRenderer.java @@ -0,0 +1,119 @@ +/* + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. + * + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . + */ +package net.rptools.maptool.client.ui.zone.gdx; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.*; +import javax.swing.*; + +public class TextRenderer { + public enum Background { + Gray, + Blue, + DarkGray + } + + private GlyphLayout glyphLayout = new GlyphLayout(); + private NinePatch blueLabel; + private NinePatch grayLabel; + private NinePatch darkGrayLabel; + private Batch batch; + private BitmapFont font; + + public TextRenderer(TextureAtlas atlas, Batch batch, BitmapFont font) { + this.font = font; + this.batch = batch; + blueLabel = atlas.createPatch("blueLabelbox"); + grayLabel = atlas.createPatch("grayLabelbox"); + darkGrayLabel = atlas.createPatch("darkGreyLabelbox"); + } + + public BitmapFont getFont() { + return font; + } + + public void drawString(String text, float centerX, float centerY, Color foreground) { + drawBoxedString(text, centerX, centerY, SwingUtilities.CENTER, null, foreground); + } + + public void drawString(String text, float centerX, float centerY) { + drawBoxedString(text, centerX, centerY, SwingUtilities.CENTER, null, Color.WHITE); + } + + public void drawBoxedString(String text, float centerX, float centerY) { + drawBoxedString(text, centerX, centerY, SwingUtilities.CENTER); + } + + public void drawBoxedString(String text, float x, float y, int justification) { + drawBoxedString(text, x, y, justification, Background.Gray, Color.BLACK); + } + + public void drawBoxedString( + String text, float x, float y, int justification, Background background, Color foreground) { + NinePatch backgroundPatch = null; + if(background != null) { + switch (background) { + case Gray -> { + backgroundPatch = grayLabel; + } + case Blue -> { + backgroundPatch = blueLabel; + } + case DarkGray -> { + backgroundPatch = darkGrayLabel; + } + } + } + + final int BOX_PADDINGX = 10; + final int BOX_PADDINGY = 2; + + if (text == null) text = ""; + + glyphLayout.setText(font, text); + var strWidth = glyphLayout.width; + + var fontHeight = font.getLineHeight(); + + var width = strWidth + BOX_PADDINGX * 2; + var height = fontHeight + BOX_PADDINGY * 2; + + y = y - fontHeight / 2 - BOX_PADDINGY; + + switch (justification) { + case SwingUtilities.CENTER: + x = x - strWidth / 2 - BOX_PADDINGX; + break; + case SwingUtilities.RIGHT: + x = x - strWidth - BOX_PADDINGX; + break; + case SwingUtilities.LEFT: + break; + } + + // Box + if (backgroundPatch != null) { + backgroundPatch.draw(batch, x, y, width, height); + } + + // Renderer message + + var textX = x + BOX_PADDINGX; + var textY = y + height - BOX_PADDINGY - font.getAscent(); + + font.setColor(foreground); + font.draw(batch, text, textX, textY); + } +} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TokenLabelRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TokenLabelRenderer.java new file mode 100644 index 0000000000..dcb1743b82 --- /dev/null +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TokenLabelRenderer.java @@ -0,0 +1,90 @@ +/* + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. + * + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . + */ +package net.rptools.maptool.client.ui.zone.gdx; + +import com.badlogic.gdx.graphics.Camera; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.math.Vector3; +import javax.swing.*; +import net.rptools.maptool.model.Token; +import net.rptools.maptool.model.Zone; +import net.rptools.maptool.util.GraphicsUtil; +import net.rptools.maptool.util.StringUtil; + +public class TokenLabelRenderer implements ItemRenderer { + private final boolean isGMView; + private Token token; + private TextRenderer textRenderer; + private Vector3 tmpWorldCoord = new Vector3(); + private Vector3 tmpScreenCoord = new Vector3(); + private Zone zone; + + public TokenLabelRenderer(Token token, Zone zone, boolean isGMView, TextRenderer textRenderer) { + this.token = token; + this.zone = zone; + this.isGMView = isGMView; + this.textRenderer = textRenderer; + } + + @Override + public void render(Camera camera, float zoom) { + int offset = 3; // Keep it from tramping on the token border. + TextRenderer.Background background; + Color foreground; + + if (token.isVisible()) { + if (token.getType() == Token.Type.NPC) { + background = TextRenderer.Background.Blue; + foreground = Color.WHITE; + } else { + background = TextRenderer.Background.Gray; + foreground = Color.BLACK; + } + } else { + background = TextRenderer.Background.DarkGray; + foreground = Color.WHITE; + } + String name = token.getName(); + if (isGMView && token.getGMName() != null && !StringUtil.isEmpty(token.getGMName())) { + name += " (" + token.getGMName() + ")"; + } + + // Calculate image dimensions + + float labelHeight = textRenderer.getFont().getLineHeight() + GraphicsUtil.BOX_PADDINGY * 2; + + java.awt.Rectangle r = token.getBounds(zone); + tmpWorldCoord.x = r.x + r.width / 2; + tmpWorldCoord.y = (r.y + r.height + offset + labelHeight * zoom / 2) * -1; + tmpWorldCoord.z = 0; + tmpScreenCoord = camera.project(tmpWorldCoord); + + textRenderer.drawBoxedString( + name, tmpScreenCoord.x, tmpScreenCoord.y, SwingUtilities.CENTER, background, foreground); + + var label = token.getLabel(); + + // Draw name and label to image + if (label != null && label.trim().length() > 0) { + textRenderer.drawBoxedString( + label, + tmpScreenCoord.x, + tmpScreenCoord.y - labelHeight, + SwingUtilities.CENTER, + background, + foreground); + } + } +} From fd40f4d73e525842521a30173d9f746b0925e8ad Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Fri, 29 Apr 2022 21:15:32 +0200 Subject: [PATCH 067/139] build --- build.gradle | 4 ++-- src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 695c956365..21af12b3b8 100644 --- a/build.gradle +++ b/build.gradle @@ -459,9 +459,9 @@ dependencies { implementation 'com.google.guava:guava:31.0.1-jre' // libgdx - //implementation 'com.github.thelsing:libgdx-jogl-backend:master-SNAPSHOT' + implementation 'com.github.thelsing:libgdx-jogl-backend:master-SNAPSHOT' //maven local for development - implementation 'com.thelsing.gdx:gdx-backend-jogl:1.10.0' + //implementation 'com.thelsing.gdx:gdx-backend-jogl:1.10.0' implementation "com.badlogicgames.gdx:gdx:$gdxVersion" implementation "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop" diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index 2481210a96..76eb977812 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -346,6 +346,7 @@ public MapToolFrame(JMenuBar menuBar) { private void initGdx() { var config = new JoglAwtApplicationConfiguration(); config.foregroundFPS = 30; + config.backgroundFPS = 10; config.title = "maptool"; config.width = 640; config.height = 480; From 1c948eddf28fa22cc5d4e8c72ca44e5701303a2b Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Wed, 8 Jun 2022 21:57:11 +0200 Subject: [PATCH 068/139] build --- build.gradle | 4 ++-- .../maptool/client/ui/zone/gdx/GdxRenderer.java | 10 +++++++--- .../maptool/client/ui/zone/gdx/TextRenderer.java | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index c7728c1625..b9f4dfe323 100644 --- a/build.gradle +++ b/build.gradle @@ -459,9 +459,9 @@ dependencies { implementation 'com.google.guava:guava:31.0.1-jre' // libgdx - implementation 'com.github.thelsing:libgdx-jogl-backend:master-SNAPSHOT' + //implementation 'com.github.thelsing:libgdx-jogl-backend:master-SNAPSHOT' //maven local for development - //implementation 'com.thelsing.gdx:gdx-backend-jogl:1.10.0' + implementation 'com.thelsing.gdx:gdx-backend-jogl:1.10.0' implementation "com.badlogicgames.gdx:gdx:$gdxVersion" implementation "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop" diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index c9e9c010fe..3cdc04c769 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -167,7 +167,10 @@ public class GdxRenderer extends ApplicationAdapter private final TiledDrawable tmpTile = new TiledDrawable(); public GdxRenderer() { - MapTool.getEventDispatcher().addListener(this, MapTool.ZoneEvent.Activated); + var dispatcher = MapTool.getEventDispatcher(); + if (dispatcher != null) { + dispatcher.addListener(this, MapTool.ZoneEvent.Activated); + } } public static GdxRenderer getInstance() { @@ -265,6 +268,8 @@ public void resize(int width, int height) { } private void updateCam() { + if (cam == null) return; + cam.viewportWidth = width; cam.viewportHeight = height; cam.near = 0.1f; @@ -3188,8 +3193,7 @@ public void setScale(Scale scale) { } public void flushFog() { - if(!initialized) - return; + if (!initialized) return; flushFog = true; updateVisibleArea(); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TextRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TextRenderer.java index ec87c35934..4b3e0d6ae1 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TextRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TextRenderer.java @@ -63,7 +63,7 @@ public void drawBoxedString(String text, float x, float y, int justification) { public void drawBoxedString( String text, float x, float y, int justification, Background background, Color foreground) { NinePatch backgroundPatch = null; - if(background != null) { + if (background != null) { switch (background) { case Gray -> { backgroundPatch = grayLabel; From 85e16b2be68b2cf12f085688be1b6ce9f510eccf Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Wed, 8 Jun 2022 22:34:05 +0200 Subject: [PATCH 069/139] use github build for jogl --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index b9f4dfe323..c7728c1625 100644 --- a/build.gradle +++ b/build.gradle @@ -459,9 +459,9 @@ dependencies { implementation 'com.google.guava:guava:31.0.1-jre' // libgdx - //implementation 'com.github.thelsing:libgdx-jogl-backend:master-SNAPSHOT' + implementation 'com.github.thelsing:libgdx-jogl-backend:master-SNAPSHOT' //maven local for development - implementation 'com.thelsing.gdx:gdx-backend-jogl:1.10.0' + //implementation 'com.thelsing.gdx:gdx-backend-jogl:1.10.0' implementation "com.badlogicgames.gdx:gdx:$gdxVersion" implementation "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop" From 10cd47f212c20fceaa47e7c09003d875ac09d36e Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Fri, 17 Jun 2022 21:26:45 +0200 Subject: [PATCH 070/139] update gdx-backend-jogl --- build.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index c7728c1625..c4cab23150 100644 --- a/build.gradle +++ b/build.gradle @@ -97,7 +97,7 @@ ext { // vendor, tagVersion, appSemVer, and DSNs defaults are set in gradle.properties println "OS Detected: " + osdetector.os - gdxVersion = '1.10.0' + gdxVersion = '1.11.0' roboVMVersion = '2.3.12' box2DLightsVersion = '1.5' ashleyVersion = '1.7.3' @@ -459,9 +459,9 @@ dependencies { implementation 'com.google.guava:guava:31.0.1-jre' // libgdx - implementation 'com.github.thelsing:libgdx-jogl-backend:master-SNAPSHOT' + implementation 'com.github.thelsing:libgdx-jogl-backend:1.11.2' //maven local for development - //implementation 'com.thelsing.gdx:gdx-backend-jogl:1.10.0' + //implementation 'com.thelsing.gdx:gdx-backend-jogl:1.11.2' implementation "com.badlogicgames.gdx:gdx:$gdxVersion" implementation "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop" From a2e8684521cc40ca1db2c22d3b4b907e8d0998b8 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Fri, 17 Jun 2022 21:36:59 +0200 Subject: [PATCH 071/139] add jzy3d repo --- build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle b/build.gradle index 291fa12f23..b4598f293f 100644 --- a/build.gradle +++ b/build.gradle @@ -293,6 +293,7 @@ repositories { google() maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } maven { url "https://oss.sonatype.org/content/repositories/releases/" } + maven { url "https://maven.jzy3d.org/releases/"} } From 76f68d6482c9017459d405354eb171be8bdb7157 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Fri, 17 Jun 2022 21:24:27 +0100 Subject: [PATCH 072/139] add opens for jogl --- build.gradle | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b4598f293f..f3baba680a 100644 --- a/build.gradle +++ b/build.gradle @@ -158,7 +158,11 @@ run { "--add-opens=java.desktop/java.awt=ALL-UNNAMED", "--add-opens=java.desktop/java.awt.geom=ALL-UNNAMED", "--add-opens=java.desktop/sun.awt.geom=ALL-UNNAMED", "--add-opens=java.base/java.util=ALL-UNNAMED", "--add-opens=javafx.web/javafx.scene.web=ALL-UNNAMED", "--add-opens=javafx.web/com.sun.webkit=ALL-UNNAMED", "--add-opens=javafx.web/com.sun.webkit.dom=ALL-UNNAMED", - "--add-opens=java.desktop/javax.swing=ALL-UNNAMED","--add-opens=java.desktop/sun.awt.shell=ALL-UNNAMED"] + "--add-opens=java.desktop/javax.swing=ALL-UNNAMED","--add-opens=java.desktop/sun.awt.shell=ALL-UNNAMED", + "--add-opens=java.base/java.lang=ALL-UNNAMED", + "--add-opens=java.desktop/sun.awt=ALL-UNNAMED", + "--add-opens=java.desktop/sun.java2d=ALL-UNNAMED" + ] // Add -Dlog4j2.debug to see log4j2 details // Add -Djavax.net.debug=all to debug networking issues From 7c8e063e1967eed82072bd2318ac874e898d1cf8 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 7 Jul 2022 20:44:49 +0200 Subject: [PATCH 073/139] reduce diffs --- build.gradle | 4 +--- gradle.properties | 2 +- src/main/java/net/rptools/lib/gdx/GifDecoder.java | 14 -------------- .../net/rptools/maptool/client/AppActions.java | 15 --------------- .../java/net/rptools/maptool/client/MapTool.java | 12 ++++++++++-- 5 files changed, 12 insertions(+), 35 deletions(-) diff --git a/build.gradle b/build.gradle index f3baba680a..154ab1087e 100644 --- a/build.gradle +++ b/build.gradle @@ -110,7 +110,7 @@ spotless { java { target project.fileTree(project.rootDir) { include 'src/**/*.java' - exclude '**/JTextAreaAppender.java' + exclude '**/JTextAreaAppender.java', '**/GifDecoder.java' } licenseHeaderFile 'spotless.license.java' @@ -294,9 +294,7 @@ repositories { maven { url = 'https://maptool.craigs-stuff.net/repo/' } maven { url = 'https://nerps.net/repo/' } maven { url = 'https://jitpack.io' } - google() maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } - maven { url "https://oss.sonatype.org/content/repositories/releases/" } maven { url "https://maven.jzy3d.org/releases/"} } diff --git a/gradle.properties b/gradle.properties index 6c7149ed06..54e9344835 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ description=Virtual Tabletop for playing roleplaying games with remote players o # Versioning is controlled via git tag for that commit. For developing you can pass a -version=2.1 -vendor=Nerps if needed tagVersion=0.0.0 -defaultVersion=1.8.4 +defaultVersion=0.0.1 # Change executable by attaching developerRelease to App name to make it an unique install developerRelease=-Dev-Release diff --git a/src/main/java/net/rptools/lib/gdx/GifDecoder.java b/src/main/java/net/rptools/lib/gdx/GifDecoder.java index 07e98b4cbf..fe14886d4f 100644 --- a/src/main/java/net/rptools/lib/gdx/GifDecoder.java +++ b/src/main/java/net/rptools/lib/gdx/GifDecoder.java @@ -1,17 +1,3 @@ -/* - * This software Copyright by the RPTools.net development team, and - * licensed under the Affero GPL Version 3 or, at your option, any later - * version. - * - * MapTool Source Code is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU Affero General Public - * License * along with this source Code. If not, please visit - * and specifically the Affero license - * text at . - */ package net.rptools.lib.gdx; import static java.lang.System.arraycopy; diff --git a/src/main/java/net/rptools/maptool/client/AppActions.java b/src/main/java/net/rptools/maptool/client/AppActions.java index a3b26079fe..20ee0eb4ee 100644 --- a/src/main/java/net/rptools/maptool/client/AppActions.java +++ b/src/main/java/net/rptools/maptool/client/AppActions.java @@ -2076,21 +2076,6 @@ protected void executeAction() { } }; - public static final DefaultClientAction SHOW_BOX2D_TEST = - new DefaultClientAction() { - { - init("Show jfx"); - // init("Show Box2D Test"); - } - - @Override - public void executeAction() { - MapTool.getFrame().addGdx(); - // MapTool.loadBox2dTest(); - - } - }; - public static final DefaultClientAction ZOOM_RESET = new DefaultClientAction() { private Double lastZoom; diff --git a/src/main/java/net/rptools/maptool/client/MapTool.java b/src/main/java/net/rptools/maptool/client/MapTool.java index 1e11cf7253..fef69cdfcc 100644 --- a/src/main/java/net/rptools/maptool/client/MapTool.java +++ b/src/main/java/net/rptools/maptool/client/MapTool.java @@ -25,7 +25,16 @@ import io.sentry.SentryClientFactory; import io.sentry.event.BreadcrumbBuilder; import io.sentry.event.UserBuilder; -import java.awt.*; +import java.awt.Color; +import java.awt.Desktop; +import java.awt.Dimension; +import java.awt.EventQueue; +import java.awt.Font; +import java.awt.Graphics2D; +import java.awt.GraphicsDevice; +import java.awt.GraphicsEnvironment; +import java.awt.Toolkit; +import java.awt.Transparency; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.image.BufferedImage; @@ -38,7 +47,6 @@ import java.security.spec.InvalidKeySpecException; import java.text.MessageFormat; import java.util.*; -import java.util.List; import java.util.concurrent.ExecutionException; import javax.imageio.ImageIO; import javax.imageio.spi.IIORegistry; From 3f9699a01b8a6e9728c9964132b72a0545b21ea4 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 7 Jul 2022 21:33:12 +0200 Subject: [PATCH 074/139] reduce diffs --- build.gradle | 34 +- .../maptool/client/ui/MapToolFrame.java | 599 +++++++++--------- .../maptool/client/ui/ToolbarPanel.java | 10 +- .../maptool/client/ui/zone/ZoneRenderer.java | 33 +- .../rptools/maptool/util/ImageManager.java | 1 - .../maptool/client/image/light_ball.png | Bin 2149 -> 0 bytes .../maptool/client/image/soccer_ball.png | Bin 8001 -> 0 bytes 7 files changed, 340 insertions(+), 337 deletions(-) delete mode 100644 src/main/resources/net/rptools/maptool/client/image/light_ball.png delete mode 100644 src/main/resources/net/rptools/maptool/client/image/soccer_ball.png diff --git a/build.gradle b/build.gradle index 154ab1087e..76643677f4 100644 --- a/build.gradle +++ b/build.gradle @@ -96,14 +96,6 @@ ext { // vendor, tagVersion, appSemVer, and DSNs defaults are set in gradle.properties println "OS Detected: " + osdetector.os - - gdxVersion = '1.11.0' - roboVMVersion = '2.3.12' - box2DLightsVersion = '1.5' - ashleyVersion = '1.7.3' - aiVersion = '1.8.2' - gdxControllersVersion = '2.1.0' - shapedrawerVersion = '2.4.0' } spotless { @@ -157,11 +149,10 @@ run { "-DMAPTOOL_DATADIR=.maptool-" + vendor.toLowerCase(), "-XX:+ShowCodeDetailsInExceptionMessages", "--add-opens=java.desktop/java.awt=ALL-UNNAMED", "--add-opens=java.desktop/java.awt.geom=ALL-UNNAMED", "--add-opens=java.desktop/sun.awt.geom=ALL-UNNAMED", "--add-opens=java.base/java.util=ALL-UNNAMED", - "--add-opens=javafx.web/javafx.scene.web=ALL-UNNAMED", "--add-opens=javafx.web/com.sun.webkit=ALL-UNNAMED", "--add-opens=javafx.web/com.sun.webkit.dom=ALL-UNNAMED", - "--add-opens=java.desktop/javax.swing=ALL-UNNAMED","--add-opens=java.desktop/sun.awt.shell=ALL-UNNAMED", - "--add-opens=java.base/java.lang=ALL-UNNAMED", - "--add-opens=java.desktop/sun.awt=ALL-UNNAMED", - "--add-opens=java.desktop/sun.java2d=ALL-UNNAMED" + "--add-opens=javafx.web/javafx.scene.web=ALL-UNNAMED", "--add-opens=javafx.web/com.sun.webkit=ALL-UNNAMED", + "--add-opens=javafx.web/com.sun.webkit.dom=ALL-UNNAMED", "--add-opens=java.desktop/javax.swing=ALL-UNNAMED", + "--add-opens=java.desktop/sun.awt.shell=ALL-UNNAMED", "--add-opens=java.base/java.lang=ALL-UNNAMED", + "--add-opens=java.desktop/sun.awt=ALL-UNNAMED", "--add-opens=java.desktop/sun.java2d=ALL-UNNAMED" ] // Add -Dlog4j2.debug to see log4j2 details // Add -Djavax.net.debug=all to debug networking issues @@ -298,13 +289,6 @@ repositories { maven { url "https://maven.jzy3d.org/releases/"} } - -configurations.all { - resolutionStrategy.cacheChangingModulesFor 0, 'seconds' - resolutionStrategy.cacheDynamicVersionsFor 0, 'seconds' -} - - // In this section you declare the dependencies for your production and test code dependencies { implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.15.0' @@ -466,11 +450,11 @@ dependencies { //maven local for development //implementation 'com.thelsing.gdx:gdx-backend-jogl:1.11.2' - implementation "com.badlogicgames.gdx:gdx:$gdxVersion" - implementation "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop" - implementation "space.earlygrey:shapedrawer:$shapedrawerVersion" - implementation "com.badlogicgames.gdx:gdx-freetype:$gdxVersion" - implementation "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop" + implementation "com.badlogicgames.gdx:gdx:1.11.0" + implementation "com.badlogicgames.gdx:gdx-platform:1.11.0:natives-desktop" + implementation "space.earlygrey:shapedrawer:2.4.0" + implementation "com.badlogicgames.gdx:gdx-freetype:1.11.0" + implementation "com.badlogicgames.gdx:gdx-freetype-platform:1.11.0:natives-desktop" implementation "com.badlogicgames.gdx-video:gdx-video:1.3.2-SNAPSHOT" implementation "com.badlogicgames.gdx-video:gdx-video-lwjgl:1.3.2-SNAPSHOT" } diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index 76eb977812..b9bef5c68d 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -20,7 +20,6 @@ import com.jidesoft.docking.DockableFrame; import com.jogamp.opengl.awt.GLJPanel; import java.awt.*; -import java.awt.Rectangle; import java.awt.event.*; import java.awt.image.BufferedImage; import java.io.File; @@ -54,7 +53,19 @@ import net.rptools.maptool.client.*; import net.rptools.maptool.client.AppActions.ClientAction; import net.rptools.maptool.client.MapTool.ZoneEvent; -import net.rptools.maptool.client.swing.*; +import net.rptools.maptool.client.swing.AppHomeDiskSpaceStatusBar; +import net.rptools.maptool.client.swing.AssetCacheStatusBar; +import net.rptools.maptool.client.swing.CoordinateStatusBar; +import net.rptools.maptool.client.swing.DragImageGlassPane; +import net.rptools.maptool.client.swing.GlassPane; +import net.rptools.maptool.client.swing.ImageCacheStatusBar; +import net.rptools.maptool.client.swing.ImageChooserDialog; +import net.rptools.maptool.client.swing.MemoryStatusBar; +import net.rptools.maptool.client.swing.ProgressStatusBar; +import net.rptools.maptool.client.swing.SpacerStatusBar; +import net.rptools.maptool.client.swing.StatusPanel; +import net.rptools.maptool.client.swing.TopologyModeSelectionPanel; +import net.rptools.maptool.client.swing.ZoomStatusBar; import net.rptools.maptool.client.tool.PointerTool; import net.rptools.maptool.client.ui.assetpanel.AssetDirectory; import net.rptools.maptool.client.ui.assetpanel.AssetPanel; @@ -72,12 +83,24 @@ import net.rptools.maptool.client.ui.tokenpanel.InitiativePanel; import net.rptools.maptool.client.ui.tokenpanel.TokenPanelTreeCellRenderer; import net.rptools.maptool.client.ui.tokenpanel.TokenPanelTreeModel; -import net.rptools.maptool.client.ui.zone.*; +import net.rptools.maptool.client.ui.zone.PointerOverlay; +import net.rptools.maptool.client.ui.zone.PointerToolOverlay; +import net.rptools.maptool.client.ui.zone.ZoneMiniMapPanel; +import net.rptools.maptool.client.ui.zone.ZoneRenderer; import net.rptools.maptool.client.ui.zone.gdx.GdxRenderer; import net.rptools.maptool.language.I18N; -import net.rptools.maptool.model.*; +import net.rptools.maptool.model.Asset; +import net.rptools.maptool.model.GUID; +import net.rptools.maptool.model.Token; +import net.rptools.maptool.model.Zone; import net.rptools.maptool.model.Zone.Layer; -import net.rptools.maptool.model.drawing.*; +import net.rptools.maptool.model.ZoneFactory; +import net.rptools.maptool.model.ZonePoint; +import net.rptools.maptool.model.drawing.DrawableColorPaint; +import net.rptools.maptool.model.drawing.DrawablePaint; +import net.rptools.maptool.model.drawing.DrawableTexturePaint; +import net.rptools.maptool.model.drawing.DrawnElement; +import net.rptools.maptool.model.drawing.Pen; import net.rptools.maptool.model.tokens.TokenEventBusBridge; import net.rptools.maptool.util.ImageManager; import org.apache.commons.collections4.map.LinkedMap; @@ -102,11 +125,20 @@ public class MapToolFrame extends DefaultDockableHolder private final Pen pen = new Pen(Pen.DEFAULT); private final Map frameMap = new HashMap(); + + /** Are the drawing measurements being painted? */ + private boolean paintDrawingMeasurement = true; + + private ImageChooserDialog imageChooserDialog; + private ZoneRenderer currentRenderer; + // Components private final AssetPanel assetPanel; private final ClientConnectionPanel connectionPanel; /** The panel showing the initiative order. */ private final InitiativePanel initiativePanel; + /** The HTML pane showing the map overlay. */ + private HTMLOverlayPanel overlayPanel; private final PointerOverlay pointerOverlay; private final CommandPanel commandPanel; @@ -118,6 +150,8 @@ public class MapToolFrame extends DefaultDockableHolder /** Contains the zoneRenderer, as well as all overlays. */ private final JPanel zoneRendererPanel; + private GLJPanel gdxPanel; + private JPanel currentRenderPanel; /** Contains the overlays that should be displayed in front of everything else. */ private final PointerToolOverlay pointerToolOverlay; @@ -130,42 +164,10 @@ public class MapToolFrame extends DefaultDockableHolder private final List zoneRendererList; private final JMenuBar menuBar; private final StatusPanel statusPanel; + private String statusMessage = ""; private final ActivityMonitorPanel activityMonitor = new ActivityMonitorPanel(); private final ProgressStatusBar progressBar = new ProgressStatusBar(); private final ConnectionStatusPanel connectionStatusPanel = new ConnectionStatusPanel(); - private final ChatNotificationTimers chatTyperTimers; - private final ChatTyperObserver chatTyperObserver; - private final GlassPane glassPane; - private final TextureChooserPanel textureChooserPanel; - private final FileFilter campaignFilter = - new MTFileFilter("cmpgn", I18N.getText("file.ext.cmpgn")); - private final FileFilter mapFilter = new MTFileFilter("rpmap", I18N.getText("file.ext.rpmap")); - private final FileFilter propertiesFilter = - new MTFileFilter("mtprops", I18N.getText("file.ext.mtprops")); - private final FileFilter macroFilter = - new MTFileFilter("mtmacro", I18N.getText("file.ext.mtmacro")); - private final FileFilter macroSetFilter = - new MTFileFilter("mtmacset", I18N.getText("file.ext.mtmacset")); - private final FileFilter tableFilter = - new MTFileFilter("mttable", I18N.getText("file.ext.mttable")); - private final FileFilter dungeonDraftFilter = - new MTFileFilter("dd2vtt", I18N.getText("file.ext.dungeondraft")); - private final CampaignPanel campaignPanel = new CampaignPanel(); - private final GmPanel gmPanel = new GmPanel(); - private final GlobalPanel globalPanel = new GlobalPanel(); - private final SelectionPanel selectionPanel = new SelectionPanel(); - private final ImpersonatePanel impersonatePanel = new ImpersonatePanel(); - private final DragImageGlassPane dragImageGlassPane = new DragImageGlassPane(); - private JoglSwingCanvas joglSwingCanvas; - /** Are the drawing measurements being painted? */ - private boolean paintDrawingMeasurement = true; - - private ImageChooserDialog imageChooserDialog; - private ZoneRenderer currentRenderer; - /** The HTML pane showing the map overlay. */ - private HTMLOverlayPanel overlayPanel; - - private String statusMessage = ""; private CoordinateStatusBar coordinateStatusBar; private AssetCacheStatusBar assetCacheStatusBar; private ImageCacheStatusBar imageCacheStatusBar; @@ -173,18 +175,24 @@ public class MapToolFrame extends DefaultDockableHolder private ZoomStatusBar zoomStatusBar; private JLabel chatActionLabel; private boolean fullScreenToolsShown; + private Color chatTypingLabelColor; private ChatTypingNotification chatTypingPanel; private Timer chatTimer; private long chatNotifyDuration; + private final ChatNotificationTimers chatTyperTimers; + private final ChatTyperObserver chatTyperObserver; private GUID PreRemoveRenderGUID = null; + private final GlassPane glassPane; /** Model for the token tree panel of the map explorer. */ private TokenPanelTreeModel tokenPanelTreeModel; private DrawPanelTreeModel drawPanelTreeModel; private DrawablesPanel drawablesPanel; + private final TextureChooserPanel textureChooserPanel; private LookupTablePanel lookupTablePanel; + // External filename support private JFileChooser loadPropsFileChooser; private JFileChooser loadFileChooser; @@ -193,17 +201,153 @@ public class MapToolFrame extends DefaultDockableHolder private JFileChooser saveFileChooser; private JFileChooser saveMapFileChooser; private JFileChooser saveTokenFileChooser; + /** Remember the last layer selected */ private Layer lastSelectedLayer = Zone.Layer.TOKEN; + private final FileFilter campaignFilter = + new MTFileFilter("cmpgn", I18N.getText("file.ext.cmpgn")); + private final FileFilter mapFilter = new MTFileFilter("rpmap", I18N.getText("file.ext.rpmap")); + private final FileFilter propertiesFilter = + new MTFileFilter("mtprops", I18N.getText("file.ext.mtprops")); + private final FileFilter macroFilter = + new MTFileFilter("mtmacro", I18N.getText("file.ext.mtmacro")); + private final FileFilter macroSetFilter = + new MTFileFilter("mtmacset", I18N.getText("file.ext.mtmacset")); + private final FileFilter tableFilter = + new MTFileFilter("mttable", I18N.getText("file.ext.mttable")); + + private final FileFilter dungeonDraftFilter = + new MTFileFilter("dd2vtt", I18N.getText("file.ext.dungeondraft")); private EditTokenDialog tokenPropertiesDialog; - private GLJPanel gdxPanel; - private JFileChooser saveMacroFileChooser; - private JFileChooser saveMacroSetFileChooser; - private JFileChooser loadMacroFileChooser; - private JFileChooser loadMacroSetFileChooser; - private JFileChooser saveTableFileChooser; - private JFileChooser loadTableFileChooser; + + private final CampaignPanel campaignPanel = new CampaignPanel(); + private final GmPanel gmPanel = new GmPanel(); + private final GlobalPanel globalPanel = new GlobalPanel(); + private final SelectionPanel selectionPanel = new SelectionPanel(); + private final ImpersonatePanel impersonatePanel = new ImpersonatePanel(); + + private final DragImageGlassPane dragImageGlassPane = new DragImageGlassPane(); + + private final class KeyListenerDeleteDraw implements KeyListener { + private final JTree tree; + + private KeyListenerDeleteDraw(JTree tree) { + this.tree = tree; + } + + @Override + public void keyTyped(KeyEvent e) {} + + @Override + public void keyReleased(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_DELETE) { + EventQueue.invokeLater( + () -> { + TreePath[] selection = tree.getSelectionPaths(); + Set selectedDrawSet = new HashSet(); + if (selection != null) { + for (TreePath path : selection) { + if (path.getLastPathComponent() instanceof DrawnElement) { + DrawnElement de = (DrawnElement) path.getLastPathComponent(); + selectedDrawSet.add(de.getDrawable().getId()); + } + } + } + if (selectedDrawSet.isEmpty()) return; + // check to see if this is the required action + if (!MapTool.confirmDrawDelete()) { + return; + } + for (GUID id : selectedDrawSet) { + MapTool.serverCommand().undoDraw(getCurrentZoneRenderer().getZone().getId(), id); + } + getCurrentZoneRenderer().repaint(); + MapTool.getFrame().updateDrawTree(); + MapTool.getFrame().refresh(); + }); + } + } + + @Override + public void keyPressed(KeyEvent e) {} + } + + private final class KeyListenerDeleteToken implements KeyListener { + private final JTree tree; + + private KeyListenerDeleteToken(JTree tree) { + this.tree = tree; + } + + @Override + public void keyTyped(KeyEvent e) {} + + @Override + public void keyReleased(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_DELETE) { + EventQueue.invokeLater( + () -> { + // check to see if this is the required action + if (!MapTool.confirmTokenDelete()) { + return; + } + ZoneRenderer zr = getCurrentZoneRenderer(); + AppActions.deleteTokens(zr.getZone(), zr.getSelectedTokenSet()); + }); + } + } + + @Override + public void keyPressed(KeyEvent e) {} + } + + private class ChatTyperObserver implements Observer { + public void update(Observable o, Object arg) { + SwingUtilities.invokeLater( + () -> { + chatTypingPanel.invalidate(); + chatTypingPanel.repaint(); + }); + } + } + + public static class ChatNotificationTimers extends Observable { + private final LinkedMap chatTypingNotificationTimers; + + public synchronized void setChatTyper(final String playerName) { + if (AppPreferences.getTypingNotificationDuration() == 0) { + turnOffUpdates(); + chatTypingNotificationTimers.clear(); + } else { + MapTool.getFrame().getChatTimer().start(); + MapTool.getFrame().getChatTypingPanel().setVisible(true); + chatTypingNotificationTimers.put(playerName, System.currentTimeMillis()); + setChanged(); + notifyObservers(); + } + } + + private void turnOffUpdates() { + MapTool.getFrame().getChatTimer().stop(); + MapTool.getFrame().getChatTypingPanel().setVisible(false); + } + + public synchronized void removeChatTyper(final String playerName) { + chatTypingNotificationTimers.remove(playerName); + if (chatTypingNotificationTimers.isEmpty()) turnOffUpdates(); + setChanged(); + notifyObservers(); + } + + public synchronized LinkedMap getChatTypers() { + return new LinkedMap(chatTypingNotificationTimers); + } + + public ChatNotificationTimers() { + chatTypingNotificationTimers = new LinkedMap(); + } + } public MapToolFrame(JMenuBar menuBar) { // Set up the frame @@ -275,11 +419,11 @@ public MapToolFrame(JMenuBar menuBar) { // zoneMiniMapPanel.setSize(100, 100); zoneRendererPanel = new JPanel(new PositionalLayout(5)); + zoneRendererPanel.setBackground(Color.black); currentRenderPanel = zoneRendererPanel; initGdx(); - - // zoneRendererPanel.setBackground(Color.black); // zoneRendererPanel.add(zoneMiniMapPanel, PositionalLayout.Position.SE); + // zoneRendererPanel.add(getChatTypingLabel(), PositionalLayout.Position.NW); zoneRendererPanel.add(getChatTypingPanel(), PositionalLayout.Position.NW); zoneRendererPanel.add(getChatActionLabel(), PositionalLayout.Position.SW); @@ -288,7 +432,6 @@ public MapToolFrame(JMenuBar menuBar) { rendererBorderPanel = new JPanel(new GridLayout()); rendererBorderPanel.setBorder(BorderFactory.createLineBorder(Color.darkGray)); - // rendererBorderPanel.add(gdxPanel); rendererBorderPanel.add(zoneRendererPanel); toolbarPanel = new ToolbarPanel(toolbox); @@ -350,20 +493,13 @@ private void initGdx() { config.title = "maptool"; config.width = 640; config.height = 480; - joglSwingCanvas = new JoglSwingCanvas(GdxRenderer.getInstance(), config); + var joglSwingCanvas = new JoglSwingCanvas(GdxRenderer.getInstance(), config); gdxPanel = joglSwingCanvas.getGLCanvas(); gdxPanel.setVisible(false); gdxPanel.setLayout(new PositionalLayout(5)); } - private static DockableFrame createDockingFrame(MTFrame mtFrame, Component component, Icon icon) { - DockableFrame frame = new DockableFrame(mtFrame.name(), icon); - frame.add(component); - frame.addDockableFrameListener(new MapToolDockListener()); - return frame; - } - public void addGdx() { var show = !(currentRenderPanel instanceof GLJPanel); @@ -388,6 +524,18 @@ public void addGdx() { refresh(); } + private void correctGdxSize() { + if (currentRenderPanel == gdxPanel) { + gdxPanel.initializeBackend(false); + gdxPanel.reshape(0, 0, 0, 0); + gdxPanel.revalidate(); + } + } + + public GLJPanel getGdxPanel() { + return gdxPanel; + } + public ChatNotificationTimers getChatNotificationTimers() { return chatTyperTimers; } @@ -428,6 +576,46 @@ public ImageChooserDialog getImageChooserDialog() { return imageChooserDialog; } + public enum MTFrame { + /* + * These enums should be specified using references to the properties file. However, a simple toString() method is used later to determine what to display on the various panels. So if I + * convert the propName into the value from the properties file and return it, parts of the code later on use that string to do a properties file lookup! That means that any code using MTFrame + * enums that are converted to Strings need to be checked so that when the return value is used as the NAME of an Action, the property name is retrieved instead. Ugh. :( + * + * We'll need two additional methods: getPropName() and getDisplayName(). Perhaps toString() could call getDisplayName(), but it might be much simpler to debug if toString() weren't used. In + * that case, there's no reason to use an enum either ... may as well use a class with static final objects in it. Sigh. + */ + // @formatter:off + CONNECTIONS("Connections"), + TOKEN_TREE("MapExplorer"), + DRAW_TREE("DrawExplorer"), + INITIATIVE("Initiative"), + IMAGE_EXPLORER("Library"), + CHAT("Chat"), + LOOKUP_TABLES("Tables"), + GLOBAL("Global"), + CAMPAIGN("Campaign"), + GM("Gm"), + SELECTION("Selected"), + IMPERSONATED("Impersonate"); + // @formatter:on + + private String displayName; + + MTFrame(String dispName) { + displayName = dispName; + } + + @Override + public String toString() { + return displayName; + } + + public String getPropertyName() { + return "panel." + displayName; + } + } + private void configureDocking() { initializeFrames(); @@ -579,6 +767,13 @@ private JScrollPane scrollPaneFactory(JPanel panel) { return pane; } + private static DockableFrame createDockingFrame(MTFrame mtFrame, Component component, Icon icon) { + DockableFrame frame = new DockableFrame(mtFrame.name(), icon); + frame.add(component); + frame.addDockableFrameListener(new MapToolDockListener()); + return frame; + } + /** * Updates the window title, tab title, and side title of the given frame * @@ -636,6 +831,46 @@ public void refresh() { } } + private static class MTFileFilter extends FileFilter { + private final String extension; + private final String description; + + MTFileFilter(String exten, String desc) { + super(); + extension = exten; + description = desc; + } + + // Accept directories and files matching extension + @Override + public boolean accept(File f) { + if (f.isDirectory()) { + return true; + } + String ext = getExtension(f); + if (ext != null) { + return ext.equals(extension); + } + return false; + } + + @Override + public String getDescription() { + return description; + } + + public String getExtension(File f) { + String ext = null; + String s = f.getName(); + int i = s.lastIndexOf('.'); + + if (i > 0 && i < s.length() - 1) { + ext = s.substring(i + 1).toLowerCase(); + } + return ext; + } + } + public FileFilter getCmpgnFileFilter() { return campaignFilter; } @@ -748,10 +983,6 @@ public ZoomStatusBar getZoomStatusBar() { return zoomStatusBar; } - public GLJPanel getGdxPanel() { - return gdxPanel; - } - public AssetCacheStatusBar getAssetCacheStatusBar() { if (assetCacheStatusBar == null) { assetCacheStatusBar = new AssetCacheStatusBar(); @@ -1230,15 +1461,15 @@ public PointerOverlay getPointerOverlay() { return pointerOverlay; } - public String getStatusMessage() { - return statusMessage; - } - public void setStatusMessage(final String message) { statusMessage = message; SwingUtilities.invokeLater(() -> statusPanel.setStatus(" " + message)); } + public String getStatusMessage() { + return statusMessage; + } + public ActivityMonitorPanel getActivityMonitor() { return activityMonitor; } @@ -1355,6 +1586,12 @@ public void removeZoneRenderer(ZoneRenderer renderer) { zoneMiniMapPanel.repaint(); } + public void clearZoneRendererList() { + zoneRendererList.clear(); + zoneMiniMapPanel.flush(); + zoneMiniMapPanel.repaint(); + } + /** Stop the drag of the token, if any is being dragged. */ private void stopTokenDrag() { Tool tool = MapTool.getFrame().getToolbox().getSelectedTool(); @@ -1416,12 +1653,6 @@ public void setCurrentZoneRenderer(ZoneRenderer renderer) { getZoomStatusBar().update(); } - public void clearZoneRendererList() { - zoneRendererList.clear(); - zoneMiniMapPanel.flush(); - zoneMiniMapPanel.repaint(); - } - /** * Set the MapTool title bar. The title includes the name of the app, the player name, the * campaign name and the name of the specified zone. @@ -1681,7 +1912,6 @@ public void showWindowed() { rendererBorderPanel.add(currentRenderPanel); correctGdxSize(); - setJMenuBar(menuBar); menuBar.setVisible(true); this.setVisible(true); @@ -1690,11 +1920,9 @@ public void showWindowed() { fullScreenFrame = null; } - private void correctGdxSize() { - if (currentRenderPanel == gdxPanel) { - gdxPanel.initializeBackend(false); - gdxPanel.reshape(0, 0, 0, 0); - gdxPanel.revalidate(); + public static class FullScreenFrame extends JFrame { + public FullScreenFrame() { + setUndecorated(true); } } @@ -1941,6 +2169,9 @@ public InitiativePanel getInitiativePanel() { return initiativePanel; } + private JFileChooser saveMacroFileChooser; + private JFileChooser saveMacroSetFileChooser; + public JFileChooser getSaveMacroFileChooser() { if (saveMacroFileChooser == null) { saveMacroFileChooser = new JFileChooser(); @@ -1963,6 +2194,9 @@ public JFileChooser getSaveMacroSetFileChooser() { return saveMacroSetFileChooser; } + private JFileChooser loadMacroFileChooser; + private JFileChooser loadMacroSetFileChooser; + public JFileChooser getLoadMacroFileChooser() { if (loadMacroFileChooser == null) { loadMacroFileChooser = new JFileChooser(); @@ -1985,6 +2219,11 @@ public JFileChooser getLoadMacroSetFileChooser() { return loadMacroSetFileChooser; } + // end of Macro import/export support + + private JFileChooser saveTableFileChooser; + private JFileChooser loadTableFileChooser; + public JFileChooser getSaveTableFileChooser() { if (saveTableFileChooser == null) { saveTableFileChooser = new JFileChooser(); @@ -2010,214 +2249,6 @@ public JFileChooser getLoadTableFileChooser() { return loadTableFileChooser; } - public enum MTFrame { - /* - * These enums should be specified using references to the properties file. However, a simple toString() method is used later to determine what to display on the various panels. So if I - * convert the propName into the value from the properties file and return it, parts of the code later on use that string to do a properties file lookup! That means that any code using MTFrame - * enums that are converted to Strings need to be checked so that when the return value is used as the NAME of an Action, the property name is retrieved instead. Ugh. :( - * - * We'll need two additional methods: getPropName() and getDisplayName(). Perhaps toString() could call getDisplayName(), but it might be much simpler to debug if toString() weren't used. In - * that case, there's no reason to use an enum either ... may as well use a class with static final objects in it. Sigh. - */ - // @formatter:off - CONNECTIONS("Connections"), - TOKEN_TREE("MapExplorer"), - DRAW_TREE("DrawExplorer"), - INITIATIVE("Initiative"), - IMAGE_EXPLORER("Library"), - CHAT("Chat"), - LOOKUP_TABLES("Tables"), - GLOBAL("Global"), - CAMPAIGN("Campaign"), - GM("Gm"), - SELECTION("Selected"), - IMPERSONATED("Impersonate"); - // @formatter:on - - private String displayName; - - MTFrame(String dispName) { - displayName = dispName; - } - - @Override - public String toString() { - return displayName; - } - - public String getPropertyName() { - return "panel." + displayName; - } - } - - public static class ChatNotificationTimers extends Observable { - private final LinkedMap chatTypingNotificationTimers; - - public ChatNotificationTimers() { - chatTypingNotificationTimers = new LinkedMap(); - } - - public synchronized void setChatTyper(final String playerName) { - if (AppPreferences.getTypingNotificationDuration() == 0) { - turnOffUpdates(); - chatTypingNotificationTimers.clear(); - } else { - MapTool.getFrame().getChatTimer().start(); - MapTool.getFrame().getChatTypingPanel().setVisible(true); - chatTypingNotificationTimers.put(playerName, System.currentTimeMillis()); - setChanged(); - notifyObservers(); - } - } - - private void turnOffUpdates() { - MapTool.getFrame().getChatTimer().stop(); - MapTool.getFrame().getChatTypingPanel().setVisible(false); - } - - public synchronized void removeChatTyper(final String playerName) { - chatTypingNotificationTimers.remove(playerName); - if (chatTypingNotificationTimers.isEmpty()) turnOffUpdates(); - setChanged(); - notifyObservers(); - } - - public synchronized LinkedMap getChatTypers() { - return new LinkedMap(chatTypingNotificationTimers); - } - } - - private static class MTFileFilter extends FileFilter { - private final String extension; - private final String description; - - MTFileFilter(String exten, String desc) { - super(); - extension = exten; - description = desc; - } - - // Accept directories and files matching extension - @Override - public boolean accept(File f) { - if (f.isDirectory()) { - return true; - } - String ext = getExtension(f); - if (ext != null) { - return ext.equals(extension); - } - return false; - } - - @Override - public String getDescription() { - return description; - } - - public String getExtension(File f) { - String ext = null; - String s = f.getName(); - int i = s.lastIndexOf('.'); - - if (i > 0 && i < s.length() - 1) { - ext = s.substring(i + 1).toLowerCase(); - } - return ext; - } - } - - // end of Macro import/export support - - public static class FullScreenFrame extends JFrame { - public FullScreenFrame() { - setUndecorated(true); - } - } - - private final class KeyListenerDeleteDraw implements KeyListener { - private final JTree tree; - - private KeyListenerDeleteDraw(JTree tree) { - this.tree = tree; - } - - @Override - public void keyTyped(KeyEvent e) {} - - @Override - public void keyReleased(KeyEvent e) { - if (e.getKeyCode() == KeyEvent.VK_DELETE) { - EventQueue.invokeLater( - () -> { - TreePath[] selection = tree.getSelectionPaths(); - Set selectedDrawSet = new HashSet(); - if (selection != null) { - for (TreePath path : selection) { - if (path.getLastPathComponent() instanceof DrawnElement) { - DrawnElement de = (DrawnElement) path.getLastPathComponent(); - selectedDrawSet.add(de.getDrawable().getId()); - } - } - } - if (selectedDrawSet.isEmpty()) return; - // check to see if this is the required action - if (!MapTool.confirmDrawDelete()) { - return; - } - for (GUID id : selectedDrawSet) { - MapTool.serverCommand().undoDraw(getCurrentZoneRenderer().getZone().getId(), id); - } - getCurrentZoneRenderer().repaint(); - MapTool.getFrame().updateDrawTree(); - MapTool.getFrame().refresh(); - }); - } - } - - @Override - public void keyPressed(KeyEvent e) {} - } - - private final class KeyListenerDeleteToken implements KeyListener { - private final JTree tree; - - private KeyListenerDeleteToken(JTree tree) { - this.tree = tree; - } - - @Override - public void keyTyped(KeyEvent e) {} - - @Override - public void keyReleased(KeyEvent e) { - if (e.getKeyCode() == KeyEvent.VK_DELETE) { - EventQueue.invokeLater( - () -> { - // check to see if this is the required action - if (!MapTool.confirmTokenDelete()) { - return; - } - ZoneRenderer zr = getCurrentZoneRenderer(); - AppActions.deleteTokens(zr.getZone(), zr.getSelectedTokenSet()); - }); - } - } - - @Override - public void keyPressed(KeyEvent e) {} - } - - private class ChatTyperObserver implements Observer { - public void update(Observable o, Object arg) { - SwingUtilities.invokeLater( - () -> { - chatTypingPanel.invalidate(); - chatTypingPanel.repaint(); - }); - } - } - // end of Table import/export support @SuppressWarnings("serial") diff --git a/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java b/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java index 5997f4160c..a46fc1947d 100644 --- a/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java +++ b/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java @@ -178,11 +178,7 @@ public ToolbarPanel(Toolbox tbox) { tokenSelectionButtonAll.setSelected(true); // Jamz: End panel - add( - createJfxButton( - "net/rptools/maptool/client/image/libgdx.png", - I18N.getText("tools.mute.tooltip"), - I18N.getText("tools.unmute.tooltip"))); + add(createGdxButton("net/rptools/maptool/client/image/libgdx.png")); // the "Select Map" button mapselect = createZoneSelectionButton(); @@ -411,10 +407,8 @@ private JToggleButton createMuteButton( return button; } - private JToggleButton createJfxButton( - final String icon, String mutetooltip, String unmutetooltip) { + private JToggleButton createGdxButton(final String icon) { final JToggleButton button = new JToggleButton(); - button.setToolTipText(mutetooltip); button.addActionListener( e -> { MapTool.getFrame().addGdx(); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index 1896318ec9..cb10fe52fe 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -1205,7 +1205,6 @@ public void renderZone(Graphics2D g2d, PlayerView view) { // Rendering pipeline if (zone.drawBoard() && !skipDrawing) { - Rectangle fill = new Rectangle(getWidth(), getHeight()); timer.start("board"); renderBoard(g2d, view); timer.stop("board"); @@ -1391,24 +1390,6 @@ public void renderZone(Graphics2D g2d, PlayerView view) { timer.stop("visionOverlayPlayer"); } - renderOverlays(g2d, view); - // g2d.setColor(Color.red); - // for (AreaMeta meta : getTopologyAreaData().getAreaList()) { - // Area area = new - // Area(meta.getArea().getBounds()).createTransformedArea(AffineTransform.getScaleInstance(getScale(), - // getScale())); - // area = - // area.createTransformedArea(AffineTransform.getTranslateInstance(zoneScale.getOffsetX(), - // zoneScale.getOffsetY())); - // g2d.draw(area); - // } - SwingUtil.restoreAntiAliasing(g2d, oldAA); - if (resetClip) { - g2d.setClip(null); - } - } - - private void renderOverlays(Graphics2D g2d, PlayerView view) { timer.start("overlays"); for (ZoneOverlay overlay : overlayList) { String msg = null; @@ -1432,6 +1413,20 @@ private void renderOverlays(Graphics2D g2d, PlayerView view) { lightSourceIconOverlay.paintOverlay(this, g2d); } timer.stop("lightSourceIconOverlay.paintOverlay"); + // g2d.setColor(Color.red); + // for (AreaMeta meta : getTopologyAreaData().getAreaList()) { + // Area area = new + // Area(meta.getArea().getBounds()).createTransformedArea(AffineTransform.getScaleInstance(getScale(), + // getScale())); + // area = + // area.createTransformedArea(AffineTransform.getTranslateInstance(zoneScale.getOffsetX(), + // zoneScale.getOffsetY())); + // g2d.draw(area); + // } + SwingUtil.restoreAntiAliasing(g2d, oldAA); + if (resetClip) { + g2d.setClip(null); + } } private void delayRendering(ItemRenderer renderer) { diff --git a/src/main/java/net/rptools/maptool/util/ImageManager.java b/src/main/java/net/rptools/maptool/util/ImageManager.java index 1ea9f6593f..4adb7cf646 100644 --- a/src/main/java/net/rptools/maptool/util/ImageManager.java +++ b/src/main/java/net/rptools/maptool/util/ImageManager.java @@ -85,7 +85,6 @@ public class ImageManager { static { try { TRANSFERING_IMAGE = ImageUtil.getCompatibleImage(UNKNOWN_IMAGE_PNG); - } catch (IOException ioe) { log.error("static for 'unknown.png': not resolved; IOException", ioe); TRANSFERING_IMAGE = ImageUtil.createCompatibleImage(10, 10, 0); diff --git a/src/main/resources/net/rptools/maptool/client/image/light_ball.png b/src/main/resources/net/rptools/maptool/client/image/light_ball.png deleted file mode 100644 index 08e2824e75fe34e653e45b8c2ec0edec8e9ea981..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2149 zcmV-r2%7haP)~x z{>MN@mBJvP6*(NGIm%w7k>C9>1e}1?M;RVvB;x?25@I|M-~jvq!0$vhN7>5t;ddqA z^sMnwCNhpdhC&Jwpjv<$z_Y&<@F#f_d6l1czY77SfS$=Xm63@Uk||gwfCOxT00n-M zwTv%v-TW#7yZ~GX__=_e!8isIY7y0d5}u`wuK@yfH2Z6jXBbZ;tb~yEBMGPk@IvGP zex89S0YlP&GO`LZAgBSaM8LCRCv&=lAlFt8etV;w{^tL-v} zD#PI^NCp2zu0Mkxn1k21mOKXU5(ESzG_FC_YtpQkUqNkJUqV0ywyo;_8RV1vZ2@-A zGhfh)Su^hvM6~jp1LPGYTqD6LXS$CqkyRqdnS-}S@L#|r7IGhhFAaP2nf?a-f|s#? zXO=`pL0T0HtG`=$M2vtj*!3egyGKy_1w?;iP)iH^HK}s|GBAy1dspC%%=VrVsjcM? zsz_{~0{;MOzIyzc98qxv@Dvd~p;avqz{wOQRl6<%G_hHL4|t$pX9`PFO*Zdu2;MS{ zf_@i^BDWMpsw4@hAdY_^5*8Hbj6M*2iiA2r047mu$RxKh0>+>La{@h!tn=js;6nz; zToMLGCW+xQ<`1g1CIKGu`8j2K^91;^$MS~i8Vq2C;nh=qL4DRh-bpoJ3IxnSG)a5W zIsy_f1Pz#iObC446TAY|+MeaeG?&+<3+n~GLmLVpp^o5~QITe75ip7nFr~b{PSo{W zB*AGw;N7zv2wq#dCGd*Uy0Nvp5JQ}BD3p&TbyfyOkT=DtG< zSQGTUCy^xT^ndo~NNOr%GWgnvzET7z_$m{;6{FN(Iw3;~O88z)$&*!|{OL(6(0~zL z$Evwq;2Vh7uPLz)fPj$c530zda&_u#DH#}97uWK0W?5O^-7GSc3xHywM z(*Wz{oJvm2_HVi8P=aRVgv}-R1D;&`U0Hw!wYIRTh~0Oozg6?QMLv-03yMhQSg|%2 zhU%20?zzBm_U{o67d;6pA|`?Od_f=!1AJc++>K`+pXoCSoj#%sg@Ml(i4>E;<^T^p z?!7b->YGP+WBhr2kD2v1{k@nihPfnqKnB(XP-@V|<6JaOa&FEeUsRgv=Lh z??gc8nRQxN&ZMAH5^hKwATenTCR18)4-II0lGPG6#H6@FLDiHdax)W=T8m2}?3M(S znF&}+J4}pEuiL`e`|^ADzDFmwfl2*9b3^cljOEqZUgLcM#?|TrxhF?!YI{Q?a{NIB zFL4XoZ`^r9Mb~DE1zt^RJe}`NhmNErCoX77^*50X5f#O^kL?U?j4!XKLR^D`^Ttk1?#_p2}Gy~gf0Raxp`#l3vlZTzucf_{je|ig8?3aFGYTk zJXy2v5|!Jvu{VGf)ffRxLeaCL6bo-TVZ)inSy%AiMHIaHGnY$%wwJ|9A@2sXAYXg*;^?8+tu*0)n48`gWFKN|CHA-4p9WQmyVD~3g|5s-HA0XgIO!adKaPm)B zebE!|DTSW8c#C{$Yb_+eW9vM7`yZtKY65Ei;aUQe1bop0WNUi}FE!5Qz$r#TS6t6o z>Z?0HD6xc@{zlGknUjiFJv{Og#omoO@9D>mtW>+awL-8%ZHyp?+vQiZx#Hw#DIoFC6t>gNB4#jf-Dif_@!^TFXV8QfNOUeL!ulH=ovqz@ zC)U)+A!6qTteRfz*c=vU@YvkunwR%CJUcvec0-bNXe#I2AXakUpsu%u>#JYh-{J6d z1vvzR=Tl?W$x(KKT&dpO@@4%UPmgPl&;U~C%H^FMZmdm=yS(HF9-sFv-E3iPX5Rht bp8x{@cppSb9lA2900000NkvXXu0mjflfCY} diff --git a/src/main/resources/net/rptools/maptool/client/image/soccer_ball.png b/src/main/resources/net/rptools/maptool/client/image/soccer_ball.png deleted file mode 100644 index 81fa94838c33b6b78fcdcc018f4e3f6fa8f7a68a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8001 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 F Date: Fri, 8 Jul 2022 00:25:50 +0200 Subject: [PATCH 075/139] more scaling stuff --- .../client/ui/zone/gdx/GdxRenderer.java | 31 +++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 3cdc04c769..225f733be7 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -288,6 +288,11 @@ private void updateCam() { hudCam.update(); } + private float getDpiScale() { + int resolution = java.awt.Toolkit.getDefaultToolkit().getScreenResolution(); + return resolution/96.0f; + } + @Override public void render() { var delta = Gdx.graphics.getDeltaTime(); @@ -336,7 +341,7 @@ private void loadAssets() { var mySmallFont = new FreetypeFontLoader.FreeTypeFontLoaderParameter(); mySmallFont.fontFileName = "net/rptools/maptool/client/fonts/OpenSans-Regular.ttf"; - mySmallFont.fontParameters.size = 12; + mySmallFont.fontParameters.size = (int) (12 * getDpiScale()); manager.load(FONT_NORMAL, BitmapFont.class, mySmallFont); } @@ -382,9 +387,6 @@ else if (MapTool.getCampaign().isBeingSerialized()) textRenderer.drawString(String.valueOf(Gdx.graphics.getFramesPerSecond()), 10, 10); textRenderer.drawString(String.valueOf(batch.renderCalls), width - 10, 10); - // videoPlayer.update(); - // var frame = videoPlayer.getTexture(); - // if (frame != null) batch.draw(frame, 20, 20, 100, 100); batch.end(); collectTimerResults(); } @@ -1012,8 +1014,9 @@ private void showBlockedMoves(PlayerView view, Set mo // Other details if (token == keyToken) { - var x = footprintBounds.x; - var y = footprintBounds.y; + var dpiScale = getDpiScale(); + var x = footprintBounds.x * dpiScale; + var y = footprintBounds.y * dpiScale; var w = footprintBounds.width; var h = footprintBounds.height; @@ -1737,6 +1740,12 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure setProjectionMatrix(hudCam.combined); tmpWorldCoord.set(gdxTokenRectangle.x, gdxTokenRectangle.y, 0); cam.project(tmpWorldCoord); + + var dpiScale = getDpiScale(); + tmpWorldCoord.x *= dpiScale; + tmpWorldCoord.y *= dpiScale; + + gdxTokenRectangle.set( tmpWorldCoord.x, tmpWorldCoord.y, @@ -2010,6 +2019,8 @@ private void renderImageBorderAround(ImageBorder border, Rectangle bounds) { var width = bounds.width + leftMargin + rightMargin; var height = bounds.height + topMargin + bottomMargin; + var dpiScale = getDpiScale(); + // Draw Corners batch.draw( @@ -3186,9 +3197,11 @@ public void modelChanged(ModelChangeEvent event) { } public void setScale(Scale scale) { - offsetX = scale.getOffsetX() * -1; - offsetY = scale.getOffsetY(); - zoom = (float) (1f / scale.getScale()); + var dpiScale = getDpiScale(); + + offsetX = (int)(scale.getOffsetX() * dpiScale * -1); + offsetY = (int)(scale.getOffsetY() * dpiScale); + zoom = (float) (1f / scale.getScale() / dpiScale); updateCam(); } From a469f1d42b47618f38a2f7dc74347d4dfb8967b2 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Fri, 8 Jul 2022 00:26:09 +0200 Subject: [PATCH 076/139] more readresolve --- src/main/java/net/rptools/maptool/model/Token.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/rptools/maptool/model/Token.java b/src/main/java/net/rptools/maptool/model/Token.java index 80503a2e82..b53540468f 100644 --- a/src/main/java/net/rptools/maptool/model/Token.java +++ b/src/main/java/net/rptools/maptool/model/Token.java @@ -316,7 +316,7 @@ public String toString() { // Jamz: modifies A* cost of other tokens private double terrainModifier = 0.0d; private TerrainModifierOperation terrainModifierOperation = TerrainModifierOperation.NONE; - private final Set terrainModifiersIgnored = + private Set terrainModifiersIgnored = new HashSet<>(Collections.singletonList(TerrainModifierOperation.NONE)); private boolean isFlippedX; @@ -2483,6 +2483,12 @@ protected Object readResolve() { if (speechName == null) { speechName = ""; } + if (terrainModifiersIgnored == null) { + terrainModifiersIgnored = new HashSet<>(Collections.singletonList(TerrainModifierOperation.NONE)); + } + if(terrainModifierOperation == null) { + terrainModifierOperation = TerrainModifierOperation.NONE; + } return this; } From 4f3211b29fe3f2442af630ab9b0913a57fe4a3f9 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Fri, 8 Jul 2022 23:55:33 +0200 Subject: [PATCH 077/139] spotless --- .../rptools/maptool/client/ui/zone/gdx/GdxRenderer.java | 7 +++---- src/main/java/net/rptools/maptool/model/Token.java | 5 +++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 225f733be7..d8b0d86c6a 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -290,7 +290,7 @@ private void updateCam() { private float getDpiScale() { int resolution = java.awt.Toolkit.getDefaultToolkit().getScreenResolution(); - return resolution/96.0f; + return resolution / 96.0f; } @Override @@ -1745,7 +1745,6 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure tmpWorldCoord.x *= dpiScale; tmpWorldCoord.y *= dpiScale; - gdxTokenRectangle.set( tmpWorldCoord.x, tmpWorldCoord.y, @@ -3199,8 +3198,8 @@ public void modelChanged(ModelChangeEvent event) { public void setScale(Scale scale) { var dpiScale = getDpiScale(); - offsetX = (int)(scale.getOffsetX() * dpiScale * -1); - offsetY = (int)(scale.getOffsetY() * dpiScale); + offsetX = (int) (scale.getOffsetX() * dpiScale * -1); + offsetY = (int) (scale.getOffsetY() * dpiScale); zoom = (float) (1f / scale.getScale() / dpiScale); updateCam(); } diff --git a/src/main/java/net/rptools/maptool/model/Token.java b/src/main/java/net/rptools/maptool/model/Token.java index b53540468f..b411fcb2cc 100644 --- a/src/main/java/net/rptools/maptool/model/Token.java +++ b/src/main/java/net/rptools/maptool/model/Token.java @@ -2484,9 +2484,10 @@ protected Object readResolve() { speechName = ""; } if (terrainModifiersIgnored == null) { - terrainModifiersIgnored = new HashSet<>(Collections.singletonList(TerrainModifierOperation.NONE)); + terrainModifiersIgnored = + new HashSet<>(Collections.singletonList(TerrainModifierOperation.NONE)); } - if(terrainModifierOperation == null) { + if (terrainModifierOperation == null) { terrainModifierOperation = TerrainModifierOperation.NONE; } From d422a45001f574d6f15aff26b5f40125f29305a4 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 9 Jul 2022 20:53:45 +0200 Subject: [PATCH 078/139] remove ifs without braces --- .../maptool/client/ui/zone/ZoneRenderer.java | 95 ++++++++++++------- .../client/ui/zone/gdx/GdxRenderer.java | 11 +-- 2 files changed, 63 insertions(+), 43 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index cb10fe52fe..4ef76d42ad 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -1212,9 +1212,11 @@ public void renderZone(Graphics2D g2d, PlayerView view) { if (Zone.Layer.BACKGROUND.isEnabled()) { List drawables = zone.getBackgroundDrawnElements(); // if (!drawables.isEmpty()) { - timer.start("drawableBackground"); - if (!skipDrawing) renderDrawableOverlay(g2d, backgroundDrawableRenderer, view, drawables); - timer.stop("drawableBackground"); + if (!skipDrawing) { + timer.start("drawableBackground"); + renderDrawableOverlay(g2d, backgroundDrawableRenderer, view, drawables); + timer.stop("drawableBackground"); + } // } List background = zone.getBackgroundStamps(false); if (!background.isEmpty()) { @@ -1227,14 +1229,19 @@ public void renderZone(Graphics2D g2d, PlayerView view) { // Drawables on the object layer are always below the grid, and... List drawables = zone.getObjectDrawnElements(); // if (!drawables.isEmpty()) { - timer.start("drawableObjects"); - if (!skipDrawing) renderDrawableOverlay(g2d, objectDrawableRenderer, view, drawables); - timer.stop("drawableObjects"); + if (!skipDrawing) { + timer.start("drawableObjects"); + renderDrawableOverlay(g2d, objectDrawableRenderer, view, drawables); + timer.stop("drawableObjects"); + } // } } - timer.start("grid"); - if (!skipDrawing) renderGrid(g2d, view); - timer.stop("grid"); + + if (!skipDrawing) { + timer.start("grid"); + renderGrid(g2d, view); + timer.stop("grid"); + } if (Zone.Layer.OBJECT.isEnabled()) { // ... Images on the object layer are always ABOVE the grid. @@ -1246,13 +1253,18 @@ public void renderZone(Graphics2D g2d, PlayerView view) { } } if (Zone.Layer.TOKEN.isEnabled()) { - timer.start("lights"); - if (!skipDrawing) renderLights(g2d, view); - timer.stop("lights"); - timer.start("auras"); - if (!skipDrawing) renderAuras(g2d, view); - timer.stop("auras"); + if (!skipDrawing) { + timer.start("lights"); + renderLights(g2d, view); + timer.stop("lights"); + } + + if (!skipDrawing) { + timer.start("auras"); + renderAuras(g2d, view); + timer.stop("auras"); + } } /** @@ -1279,17 +1291,21 @@ public void renderZone(Graphics2D g2d, PlayerView view) { if (Zone.Layer.TOKEN.isEnabled()) { List drawables = zone.getDrawnElements(); // if (!drawables.isEmpty()) { - timer.start("drawableTokens"); - if (!skipDrawing) renderDrawableOverlay(g2d, tokenDrawableRenderer, view, drawables); - timer.stop("drawableTokens"); + if (!skipDrawing) { + timer.start("drawableTokens"); + renderDrawableOverlay(g2d, tokenDrawableRenderer, view, drawables); + timer.stop("drawableTokens"); + } // } if (view.isGMView() && Zone.Layer.GM.isEnabled()) { drawables = zone.getGMDrawnElements(); // if (!drawables.isEmpty()) { - timer.start("drawableGM"); - if (!skipDrawing) renderDrawableOverlay(g2d, gmDrawableRenderer, view, drawables); - timer.stop("drawableGM"); + if (!skipDrawing) { + timer.start("drawableGM"); + renderDrawableOverlay(g2d, gmDrawableRenderer, view, drawables); + timer.stop("drawableGM"); + } // } List stamps = zone.getGMStamps(false); if (!stamps.isEmpty()) { @@ -1304,9 +1320,12 @@ public void renderZone(Graphics2D g2d, PlayerView view) { renderTokens(g2d, tokens, view); timer.stop("tokens"); } - timer.start("unowned movement"); - if (!skipDrawing) showBlockedMoves(g2d, view, getUnOwnedMovementSet(view)); - timer.stop("unowned movement"); + + if (!skipDrawing) { + timer.start("unowned movement"); + showBlockedMoves(g2d, view, getUnOwnedMovementSet(view)); + timer.stop("unowned movement"); + } // Moved below, after the renderFog() call... // timer.start("owned movement"); @@ -1364,9 +1383,11 @@ public void renderZone(Graphics2D g2d, PlayerView view) { timer.stop("tokens - figures"); } - timer.start("owned movement"); - if (!skipDrawing) showBlockedMoves(g2d, view, getOwnedMovementSet(view)); - timer.stop("owned movement"); + if (!skipDrawing) { + timer.start("owned movement"); + showBlockedMoves(g2d, view, getOwnedMovementSet(view)); + timer.stop("owned movement"); + } // Text associated with tokens being moved is added to a list to be drawn after, i.e. on top // of, the tokens @@ -1374,19 +1395,21 @@ public void renderZone(Graphics2D g2d, PlayerView view) { // So if one moving token is on top of another moving token, at least the textual identifiers // will be // visible. - timer.start("token name/labels"); - if (!skipDrawing) renderRenderables(g2d); - timer.stop("token name/labels"); + if (!skipDrawing) { + timer.start("token name/labels"); + renderRenderables(g2d); + timer.stop("token name/labels"); + } } // if (zone.visionType ...) - if (view.isGMView()) { + if (view.isGMView() && !skipDrawing) { timer.start("visionOverlayGM"); - if (!skipDrawing) renderGMVisionOverlay(g2d, view); + renderGMVisionOverlay(g2d, view); timer.stop("visionOverlayGM"); - } else { + } else if (!skipDrawing) { timer.start("visionOverlayPlayer"); - if (!skipDrawing) renderPlayerVisionOverlay(g2d, view); + renderPlayerVisionOverlay(g2d, view); timer.stop("visionOverlayPlayer"); } @@ -3105,7 +3128,9 @@ protected void renderTokens( } timer.stop("renderTokens:OnscreenCheck"); - if (skipDrawing) continue; + if (skipDrawing) { + continue; + } // create a per token Graphics object - normally clipped, unless always visible Area tokenCellArea = zone.getGrid().getTokenCellArea(tokenBounds); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index d8b0d86c6a..f2c4ade3c8 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -165,6 +165,7 @@ public class GdxRenderer extends ApplicationAdapter private final Matrix4 tmpMatrix = new Matrix4(); private final Area tmpArea = new Area(); private final TiledDrawable tmpTile = new TiledDrawable(); + private float dpiScale; public GdxRenderer() { var dispatcher = MapTool.getEventDispatcher(); @@ -307,7 +308,7 @@ public void render() { textRenderer = new TextRenderer(atlas, batch, normalFont); ensureCorrectDistanceFont(); - + dpiScale = getDpiScale(); ScreenUtils.clear(Color.BLACK); doRendering(); } @@ -341,7 +342,7 @@ private void loadAssets() { var mySmallFont = new FreetypeFontLoader.FreeTypeFontLoaderParameter(); mySmallFont.fontFileName = "net/rptools/maptool/client/fonts/OpenSans-Regular.ttf"; - mySmallFont.fontParameters.size = (int) (12 * getDpiScale()); + mySmallFont.fontParameters.size = (int) (12 * dpiScale); manager.load(FONT_NORMAL, BitmapFont.class, mySmallFont); } @@ -1014,7 +1015,6 @@ private void showBlockedMoves(PlayerView view, Set mo // Other details if (token == keyToken) { - var dpiScale = getDpiScale(); var x = footprintBounds.x * dpiScale; var y = footprintBounds.y * dpiScale; var w = footprintBounds.width; @@ -1741,7 +1741,6 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure tmpWorldCoord.set(gdxTokenRectangle.x, gdxTokenRectangle.y, 0); cam.project(tmpWorldCoord); - var dpiScale = getDpiScale(); tmpWorldCoord.x *= dpiScale; tmpWorldCoord.y *= dpiScale; @@ -2018,8 +2017,6 @@ private void renderImageBorderAround(ImageBorder border, Rectangle bounds) { var width = bounds.width + leftMargin + rightMargin; var height = bounds.height + topMargin + bottomMargin; - var dpiScale = getDpiScale(); - // Draw Corners batch.draw( @@ -3196,8 +3193,6 @@ public void modelChanged(ModelChangeEvent event) { } public void setScale(Scale scale) { - var dpiScale = getDpiScale(); - offsetX = (int) (scale.getOffsetX() * dpiScale * -1); offsetY = (int) (scale.getOffsetY() * dpiScale); zoom = (float) (1f / scale.getScale() / dpiScale); From 705cc0b6982f879ca6f9ec33addbacd51e01c91b Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 9 Jul 2022 21:19:21 +0200 Subject: [PATCH 079/139] initialize dpiscale correctly --- .../java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index f2c4ade3c8..dbf5073377 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -197,6 +197,7 @@ public void create() { animationMap.clear(); } + dpiScale = getDpiScale(); tokenAtlas = new TextureAtlas(); manager = new com.badlogic.gdx.assets.AssetManager(); loadAssets(); From fe731d7ec98e78da448c068bceb79f4e731facb2 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Tue, 12 Jul 2022 22:52:12 +0200 Subject: [PATCH 080/139] fix black screen during zoom --- .../net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index dbf5073377..b4ab936c7c 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -274,12 +274,13 @@ private void updateCam() { cam.viewportWidth = width; cam.viewportHeight = height; - cam.near = 0.1f; + cam.position.x = zoom * (width / 2f + offsetX); cam.position.y = zoom * (height / 2f * -1 + offsetY); cam.position.z = (zoom * height) / (2f * (float) Math.tan(Math.toRadians(cam.fieldOfView / 2f))); - cam.far = cam.position.z + 0.1f; + cam.far = 1.1f * cam.position.z; + cam.near = 0.1f * cam.position.z; cam.update(); From 2409f3a14f73a9fb2d062f5efeb12bab2bfc15d0 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Tue, 12 Jul 2022 23:38:56 +0200 Subject: [PATCH 081/139] fix hdpi scaling issues --- .../client/ui/zone/gdx/GdxRenderer.java | 26 ++++++------ .../ui/zone/gdx/ScreenScaleProvider.java | 40 +++++++++++++++++++ .../client/ui/zone/gdx/TextRenderer.java | 16 ++++++-- 3 files changed, 65 insertions(+), 17 deletions(-) create mode 100644 src/main/java/net/rptools/maptool/client/ui/zone/gdx/ScreenScaleProvider.java diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index b4ab936c7c..0938d3b4be 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -165,7 +165,7 @@ public class GdxRenderer extends ApplicationAdapter private final Matrix4 tmpMatrix = new Matrix4(); private final Area tmpArea = new Area(); private final TiledDrawable tmpTile = new TiledDrawable(); - private float dpiScale; + private final ScreenScaleProvider dpiScaleProvider = new ScreenScaleProvider(); public GdxRenderer() { var dispatcher = MapTool.getEventDispatcher(); @@ -197,7 +197,6 @@ public void create() { animationMap.clear(); } - dpiScale = getDpiScale(); tokenAtlas = new TextureAtlas(); manager = new com.badlogic.gdx.assets.AssetManager(); loadAssets(); @@ -308,9 +307,9 @@ public void render() { if (normalFont == null) normalFont = manager.get(FONT_NORMAL, BitmapFont.class); - textRenderer = new TextRenderer(atlas, batch, normalFont); + textRenderer = new TextRenderer(atlas, batch, normalFont, dpiScaleProvider); ensureCorrectDistanceFont(); - dpiScale = getDpiScale(); + dpiScaleProvider.triggerUpdate(delta); ScreenUtils.clear(Color.BLACK); doRendering(); } @@ -344,7 +343,7 @@ private void loadAssets() { var mySmallFont = new FreetypeFontLoader.FreeTypeFontLoaderParameter(); mySmallFont.fontFileName = "net/rptools/maptool/client/fonts/OpenSans-Regular.ttf"; - mySmallFont.fontParameters.size = (int) (12 * dpiScale); + mySmallFont.fontParameters.size = (int) (12 * dpiScaleProvider.getDpiScale()); manager.load(FONT_NORMAL, BitmapFont.class, mySmallFont); } @@ -1017,8 +1016,8 @@ private void showBlockedMoves(PlayerView view, Set mo // Other details if (token == keyToken) { - var x = footprintBounds.x * dpiScale; - var y = footprintBounds.y * dpiScale; + var x = footprintBounds.x * dpiScaleProvider.getDpiScale(); + var y = footprintBounds.y * dpiScaleProvider.getDpiScale(); var w = footprintBounds.width; var h = footprintBounds.height; @@ -1188,10 +1187,10 @@ private void renderLights(PlayerView view) { // clear the bright areas timer.start("lights-4"); - for (Area brightArea : zoneRenderer.getZoneView().getBrightLights(view)) { - drawer.setColor(Color.CLEAR); - areaRenderer.fillArea(brightArea); - } + // for (Area brightArea : zoneRenderer.getZoneView().getBrightLights(view)) { + // drawer.setColor(Color.CLEAR); + // areaRenderer.fillArea(brightArea); + // } timer.stop("lights-4"); // createScreenShot("light"); batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); @@ -1743,8 +1742,8 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure tmpWorldCoord.set(gdxTokenRectangle.x, gdxTokenRectangle.y, 0); cam.project(tmpWorldCoord); - tmpWorldCoord.x *= dpiScale; - tmpWorldCoord.y *= dpiScale; + tmpWorldCoord.x *= dpiScaleProvider.getDpiScale(); + tmpWorldCoord.y *= dpiScaleProvider.getDpiScale(); gdxTokenRectangle.set( tmpWorldCoord.x, @@ -3195,6 +3194,7 @@ public void modelChanged(ModelChangeEvent event) { } public void setScale(Scale scale) { + var dpiScale = dpiScaleProvider.getDpiScale(); offsetX = (int) (scale.getOffsetX() * dpiScale * -1); offsetY = (int) (scale.getOffsetY() * dpiScale); zoom = (float) (1f / scale.getScale() / dpiScale); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ScreenScaleProvider.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ScreenScaleProvider.java new file mode 100644 index 0000000000..123571362c --- /dev/null +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ScreenScaleProvider.java @@ -0,0 +1,40 @@ +/* + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. + * + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . + */ +package net.rptools.maptool.client.ui.zone.gdx; + +import java.awt.*; + +public class ScreenScaleProvider { + private float _dpiScale; + private float _accumulatedTime; + + public ScreenScaleProvider() { + updateDpiScale(); + } + + public float getDpiScale() { + return _dpiScale; + } + + public void triggerUpdate(float deltaTime) { + _accumulatedTime += deltaTime; + // we update the dpiScale every second + if (_accumulatedTime < 1.0f) return; + } + + private void updateDpiScale() { + _dpiScale = Toolkit.getDefaultToolkit().getScreenResolution() / 96.0f; + } +} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TextRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TextRenderer.java index 4b3e0d6ae1..fe76d090a4 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TextRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TextRenderer.java @@ -32,12 +32,16 @@ public enum Background { private Batch batch; private BitmapFont font; - public TextRenderer(TextureAtlas atlas, Batch batch, BitmapFont font) { + private ScreenScaleProvider dpiScaleProvider; + + public TextRenderer( + TextureAtlas atlas, Batch batch, BitmapFont font, ScreenScaleProvider screenScaleProvider) { this.font = font; this.batch = batch; blueLabel = atlas.createPatch("blueLabelbox"); grayLabel = atlas.createPatch("grayLabelbox"); darkGrayLabel = atlas.createPatch("darkGreyLabelbox"); + dpiScaleProvider = screenScaleProvider; } public BitmapFont getFont() { @@ -77,14 +81,18 @@ public void drawBoxedString( } } - final int BOX_PADDINGX = 10; - final int BOX_PADDINGY = 2; + var dpiScale = dpiScaleProvider.getDpiScale(); + x *= dpiScale; + y *= dpiScale; + + var BOX_PADDINGX = 10 * dpiScale; + var BOX_PADDINGY = 2 * dpiScale; if (text == null) text = ""; + // the font size was already scaled. So don't scale it here. glyphLayout.setText(font, text); var strWidth = glyphLayout.width; - var fontHeight = font.getLineHeight(); var width = strWidth + BOX_PADDINGX * 2; From 37845e1197560957f615dd6e48e2a4e7b24b2d64 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 21 Jul 2022 00:39:11 +0200 Subject: [PATCH 082/139] more hdpi scaling issues fixed --- build.gradle | 2 +- .../maptool/client/ui/zone/ZoneRenderer.java | 6 ++- .../client/ui/zone/gdx/GdxRenderer.java | 51 ++++++++++--------- .../ui/zone/gdx/ScreenScaleProvider.java | 40 --------------- .../client/ui/zone/gdx/TextRenderer.java | 18 +++++-- 5 files changed, 45 insertions(+), 72 deletions(-) delete mode 100644 src/main/java/net/rptools/maptool/client/ui/zone/gdx/ScreenScaleProvider.java diff --git a/build.gradle b/build.gradle index 2ecb0c906f..942189f8e4 100644 --- a/build.gradle +++ b/build.gradle @@ -443,7 +443,7 @@ dependencies { implementation 'com.google.guava:guava:31.0.1-jre' // libgdx - implementation 'com.github.thelsing:libgdx-jogl-backend:1.11.2' + implementation 'com.github.thelsing:libgdx-jogl-backend:1.11.3' //maven local for development //implementation 'com.thelsing.gdx:gdx-backend-jogl:1.11.2' diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index 5c1e400712..e592858769 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -869,12 +869,14 @@ public void paintComponent(Graphics g) { int noteVPos = 20; if (MapTool.getFrame().areFullScreenToolsShown()) noteVPos += 40; - if (!AppPreferences.getMapVisibilityWarning() && (!zone.isVisible() && pl.isGMView())) { + if (!AppPreferences.getMapVisibilityWarning() + && (!zone.isVisible() && pl.isGMView()) + && !skipDrawing) { GraphicsUtil.drawBoxedString( g2d, I18N.getText("zone.map_not_visible"), getSize().width / 2, noteVPos); noteVPos += 20; } - if (AppState.isShowAsPlayer()) { + if (AppState.isShowAsPlayer() && !skipDrawing) { GraphicsUtil.drawBoxedString( g2d, I18N.getText("zone.player_view"), getSize().width / 2, noteVPos); } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 0938d3b4be..e80e301bbd 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -61,6 +61,7 @@ import net.rptools.maptool.client.ui.zone.PlayerView; import net.rptools.maptool.client.ui.zone.ZoneRenderer; import net.rptools.maptool.client.walker.ZoneWalker; +import net.rptools.maptool.language.I18N; import net.rptools.maptool.model.*; import net.rptools.maptool.model.Label; import net.rptools.maptool.model.Path; @@ -151,6 +152,8 @@ public class GdxRenderer extends ApplicationAdapter private RadiusCellTemplateDrawer radiusCellTemplateDrawer; private ShapeDrawableDrawer shapeDrawableDrawer; private TextRenderer textRenderer; + + private TextRenderer hudTextRenderer; private AreaRenderer areaRenderer; // temorary objects. Stored here to avoid garbage collection; @@ -165,7 +168,6 @@ public class GdxRenderer extends ApplicationAdapter private final Matrix4 tmpMatrix = new Matrix4(); private final Area tmpArea = new Area(); private final TiledDrawable tmpTile = new TiledDrawable(); - private final ScreenScaleProvider dpiScaleProvider = new ScreenScaleProvider(); public GdxRenderer() { var dispatcher = MapTool.getEventDispatcher(); @@ -290,11 +292,6 @@ private void updateCam() { hudCam.update(); } - private float getDpiScale() { - int resolution = java.awt.Toolkit.getDefaultToolkit().getScreenResolution(); - return resolution / 96.0f; - } - @Override public void render() { var delta = Gdx.graphics.getDeltaTime(); @@ -303,13 +300,17 @@ public void render() { packer.updateTextureAtlas( tokenAtlas, Texture.TextureFilter.Linear, Texture.TextureFilter.Linear, false); - if (atlas == null) atlas = manager.get(ATLAS, TextureAtlas.class); + if (atlas == null) { + atlas = manager.get(ATLAS, TextureAtlas.class); + } - if (normalFont == null) normalFont = manager.get(FONT_NORMAL, BitmapFont.class); + if (normalFont == null) { + normalFont = manager.get(FONT_NORMAL, BitmapFont.class); + textRenderer = new TextRenderer(atlas, batch, normalFont); + hudTextRenderer = new TextRenderer(atlas, batch, normalFont, false); + } - textRenderer = new TextRenderer(atlas, batch, normalFont, dpiScaleProvider); ensureCorrectDistanceFont(); - dpiScaleProvider.triggerUpdate(delta); ScreenUtils.clear(Color.BLACK); doRendering(); } @@ -343,7 +344,7 @@ private void loadAssets() { var mySmallFont = new FreetypeFontLoader.FreeTypeFontLoaderParameter(); mySmallFont.fontFileName = "net/rptools/maptool/client/fonts/OpenSans-Regular.ttf"; - mySmallFont.fontParameters.size = (int) (12 * dpiScaleProvider.getDpiScale()); + mySmallFont.fontParameters.size = (int) (12 * Gdx.graphics.getBackBufferScale()); manager.load(FONT_NORMAL, BitmapFont.class, mySmallFont); } @@ -373,21 +374,23 @@ private void doRendering() { setProjectionMatrix(hudCam.combined); if (zoneRenderer.isLoading()) - textRenderer.drawBoxedString(zoneRenderer.getLoadingProgress(), width / 2f, height / 2f); + hudTextRenderer.drawBoxedString(zoneRenderer.getLoadingProgress(), width / 2f, height / 2f); else if (MapTool.getCampaign().isBeingSerialized()) - textRenderer.drawBoxedString(" Please Wait ", width / 2f, height / 2f); + hudTextRenderer.drawBoxedString(" Please Wait ", width / 2f, height / 2f); - int noteVPos = 20; + float noteVPos = 20 * Gdx.graphics.getBackBufferScale(); if (!zone.isVisible() && playerView.isGMView()) { - textRenderer.drawBoxedString("Map not visible to players", width / 2f, height - noteVPos); - noteVPos += 20; + hudTextRenderer.drawBoxedString( + I18N.getText("zone.map_not_visible"), width / 2f, height - noteVPos); + noteVPos += 20 * Gdx.graphics.getBackBufferScale(); } if (AppState.isShowAsPlayer()) { - textRenderer.drawBoxedString("Player View", width / 2, height - noteVPos); + hudTextRenderer.drawBoxedString( + I18N.getText("zone.player_view"), width / 2, height - noteVPos); } - textRenderer.drawString(String.valueOf(Gdx.graphics.getFramesPerSecond()), 10, 10); - textRenderer.drawString(String.valueOf(batch.renderCalls), width - 10, 10); + hudTextRenderer.drawString(String.valueOf(Gdx.graphics.getFramesPerSecond()), 10, 10); + hudTextRenderer.drawString(String.valueOf(batch.renderCalls), width - 10, 10); batch.end(); collectTimerResults(); @@ -1016,8 +1019,8 @@ private void showBlockedMoves(PlayerView view, Set mo // Other details if (token == keyToken) { - var x = footprintBounds.x * dpiScaleProvider.getDpiScale(); - var y = footprintBounds.y * dpiScaleProvider.getDpiScale(); + var x = footprintBounds.x; + var y = footprintBounds.y; var w = footprintBounds.width; var h = footprintBounds.height; @@ -1742,8 +1745,8 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure tmpWorldCoord.set(gdxTokenRectangle.x, gdxTokenRectangle.y, 0); cam.project(tmpWorldCoord); - tmpWorldCoord.x *= dpiScaleProvider.getDpiScale(); - tmpWorldCoord.y *= dpiScaleProvider.getDpiScale(); + tmpWorldCoord.x *= Gdx.graphics.getBackBufferScale(); + tmpWorldCoord.y *= Gdx.graphics.getBackBufferScale(); gdxTokenRectangle.set( tmpWorldCoord.x, @@ -3194,7 +3197,7 @@ public void modelChanged(ModelChangeEvent event) { } public void setScale(Scale scale) { - var dpiScale = dpiScaleProvider.getDpiScale(); + var dpiScale = Gdx.graphics.getBackBufferScale(); offsetX = (int) (scale.getOffsetX() * dpiScale * -1); offsetY = (int) (scale.getOffsetY() * dpiScale); zoom = (float) (1f / scale.getScale() / dpiScale); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ScreenScaleProvider.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ScreenScaleProvider.java deleted file mode 100644 index 123571362c..0000000000 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ScreenScaleProvider.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * This software Copyright by the RPTools.net development team, and - * licensed under the Affero GPL Version 3 or, at your option, any later - * version. - * - * MapTool Source Code is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU Affero General Public - * License * along with this source Code. If not, please visit - * and specifically the Affero license - * text at . - */ -package net.rptools.maptool.client.ui.zone.gdx; - -import java.awt.*; - -public class ScreenScaleProvider { - private float _dpiScale; - private float _accumulatedTime; - - public ScreenScaleProvider() { - updateDpiScale(); - } - - public float getDpiScale() { - return _dpiScale; - } - - public void triggerUpdate(float deltaTime) { - _accumulatedTime += deltaTime; - // we update the dpiScale every second - if (_accumulatedTime < 1.0f) return; - } - - private void updateDpiScale() { - _dpiScale = Toolkit.getDefaultToolkit().getScreenResolution() / 96.0f; - } -} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TextRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TextRenderer.java index fe76d090a4..ff88f6f82b 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TextRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TextRenderer.java @@ -14,6 +14,7 @@ */ package net.rptools.maptool.client.ui.zone.gdx; +import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.*; import javax.swing.*; @@ -32,16 +33,23 @@ public enum Background { private Batch batch; private BitmapFont font; - private ScreenScaleProvider dpiScaleProvider; + private boolean scaling = true; - public TextRenderer( - TextureAtlas atlas, Batch batch, BitmapFont font, ScreenScaleProvider screenScaleProvider) { + public TextRenderer(TextureAtlas atlas, Batch batch, BitmapFont font) { this.font = font; this.batch = batch; blueLabel = atlas.createPatch("blueLabelbox"); grayLabel = atlas.createPatch("grayLabelbox"); darkGrayLabel = atlas.createPatch("darkGreyLabelbox"); - dpiScaleProvider = screenScaleProvider; + } + + public TextRenderer(TextureAtlas atlas, Batch batch, BitmapFont font, boolean scaling) { + this.font = font; + this.batch = batch; + blueLabel = atlas.createPatch("blueLabelbox"); + grayLabel = atlas.createPatch("grayLabelbox"); + darkGrayLabel = atlas.createPatch("darkGreyLabelbox"); + this.scaling = scaling; } public BitmapFont getFont() { @@ -81,7 +89,7 @@ public void drawBoxedString( } } - var dpiScale = dpiScaleProvider.getDpiScale(); + var dpiScale = scaling ? Gdx.graphics.getBackBufferScale() : 1.0f; x *= dpiScale; y *= dpiScale; From abf7caef3a0b15f70e6d89968e45e19f3b53f8ae Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 21 Jul 2022 00:54:16 +0200 Subject: [PATCH 083/139] fix failed test --- .../net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index e80e301bbd..16bf705309 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -3197,6 +3197,8 @@ public void modelChanged(ModelChangeEvent event) { } public void setScale(Scale scale) { + if (!initialized) return; + var dpiScale = Gdx.graphics.getBackBufferScale(); offsetX = (int) (scale.getOffsetX() * dpiScale * -1); offsetY = (int) (scale.getOffsetY() * dpiScale); From 267aa3dafed87727c4afe26e4c6e4d43f66ac4c5 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 21 Jul 2022 21:05:29 +0200 Subject: [PATCH 084/139] style --- .../net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 16bf705309..253cf239f0 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -3197,7 +3197,9 @@ public void modelChanged(ModelChangeEvent event) { } public void setScale(Scale scale) { - if (!initialized) return; + if (!initialized) { + return; + } var dpiScale = Gdx.graphics.getBackBufferScale(); offsetX = (int) (scale.getOffsetX() * dpiScale * -1); From 9e34811c2ad69f4ee7b46d2e1b47efd2b9123ed3 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 24 Sep 2022 16:50:12 +0200 Subject: [PATCH 085/139] spotless --- .../java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index dc511d2922..2713b29856 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -882,7 +882,9 @@ public void paintComponent(Graphics g) { int noteVPos = 20; if (MapTool.getFrame().areFullScreenToolsShown()) noteVPos += 40; - if (!AppPreferences.getMapVisibilityWarning() && (!zone.isVisible() && pl.isGMView()) && !skipDrawing) { + if (!AppPreferences.getMapVisibilityWarning() + && (!zone.isVisible() && pl.isGMView()) + && !skipDrawing) { GraphicsUtil.drawBoxedString( bufferG2d, I18N.getText("zone.map_not_visible"), getSize().width / 2, noteVPos); noteVPos += 20; From 727da5095c8877db8efb65c9f869358030d75fc9 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 13 Oct 2022 23:10:36 +0200 Subject: [PATCH 086/139] spotless --- gradle.properties | 2 +- .../maptool/client/ui/zone/ZoneRenderer.java | 2 +- .../client/ui/zone/gdx/GdxRenderer.java | 147 +++++++++++++----- 3 files changed, 111 insertions(+), 40 deletions(-) diff --git a/gradle.properties b/gradle.properties index 54e9344835..058c321c4d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ # Change vendor RPTools for official builds, or used for things like BETA builds # Should change this just once for a given Repo/Fork -vendor=RPTools +vendor=RPTools2 description=Virtual Tabletop for playing roleplaying games with remote players or face to face. # Versioning is controlled via git tag for that commit. For developing you can pass a -version=2.1 -vendor=Nerps if needed diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index 2713b29856..eefb7ffa68 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -1489,7 +1489,7 @@ public CodeTimer getCodeTimer() { return timer; } - private enum LightOverlayClipStyle { + public enum LightOverlayClipStyle { CLIP_TO_VISIBLE_AREA, CLIP_TO_NOT_VISIBLE_AREA, } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 253cf239f0..2c1cea1306 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -32,6 +32,7 @@ import com.badlogic.gdx.utils.ScreenUtils; import com.badlogic.gdx.video.VideoPlayer; import com.badlogic.gdx.video.VideoPlayerCreator; +import com.jogamp.opengl.GL; import java.awt.*; import java.awt.Shape; import java.awt.geom.*; @@ -40,6 +41,7 @@ import java.text.NumberFormat; import java.util.*; import java.util.List; +import javax.annotation.Nullable; import javax.swing.*; import net.rptools.lib.AppEvent; import net.rptools.lib.AppEventListener; @@ -415,8 +417,9 @@ private void initializeTimer() { public void invalidateCurrentViewCache() { flushFog = true; - - updateVisibleArea(); + drawableLights = null; + drawableAuras = null; + visibleScreenArea = null; lastView = null; var zoneView = zoneRenderer.getZoneView(); @@ -436,7 +439,11 @@ private void renderZone(PlayerView view) { // Calculations timer.start("calcs-1"); - updateVisibleArea(); + timer.start("ZoneRenderer-getVisibleArea"); + if (visibleScreenArea == null) { + visibleScreenArea = zoneRenderer.getZoneView().getVisibleArea(zoneRenderer.getPlayerView()); + } + timer.stop("ZoneRenderer-getVisibleArea"); timer.stop("calcs-1"); timer.start("calcs-2"); @@ -617,14 +624,6 @@ private void renderZone(PlayerView view) { } } - private void updateVisibleArea() { - // if (zoneRenderer.getZoneView().isUsingVision()) { - timer.start("ZoneRenderer-getVisibleArea"); - visibleScreenArea = zoneRenderer.getZoneView().getVisibleArea(zoneRenderer.getPlayerView()); - timer.stop("ZoneRenderer-getVisibleArea"); - // } - } - private void renderPlayerVisionOverlay(PlayerView view) { /* // This doesn't seem to have any effect ?? if (zone.hasFog()) { @@ -1130,6 +1129,9 @@ private void showBlockedMoves(ZonePoint zp, double angle, Sprite image, float si image.draw(batch); } + /** Holds the auras from lightSourceMap after they have been combined. */ + private List drawableAuras; + private void renderAuras(PlayerView view) { var alpha = AppPreferences.getAuraOverlayOpacity() / 255.0f; @@ -1151,26 +1153,93 @@ private void renderAuras(PlayerView view) { timer.stop("auras-4"); } + /** + * Cached set of lights arranged by lumens for some stability. TODO Token draw order would be + * nice. + */ + private List drawableLights = null; + private void renderLights(PlayerView view) { - if (zone.getVisionType() != Zone.VisionType.NIGHT) return; + // Collect and organize lights + timer.start("renderLights:getLights"); + if (drawableLights == null) { + timer.start("renderLights:populateCache"); + drawableLights = new ArrayList<>(zoneRenderer.getZoneView().getDrawableLights(view)); + drawableLights.removeIf(light -> light.getType() != LightSource.Type.NORMAL); + timer.stop("renderLights:populateCache"); + } + timer.start("renderLights:filterLights"); + final var darknessLights = + drawableLights.stream().filter(light -> light.getLumens() < 0).toList(); + final var nonDarknessLights = + drawableLights.stream().filter(light -> light.getLumens() >= 0).toList(); + timer.stop("renderLights:filterLights"); + timer.stop("renderLights:getLights"); + + timer.start("renderLights:renderLightOverlay"); + renderLightOverlay( + GL.GL_ALPHA, + GL.GL_ONE_MINUS_SRC_ALPHA, + new Color(1.0f, 1.0f, 1.0f, AppPreferences.getLightOverlayOpacity() / 255.0f), + view.isGMView() ? null : ZoneRenderer.LightOverlayClipStyle.CLIP_TO_VISIBLE_AREA, + nonDarknessLights, + new java.awt.Color(255, 255, 255, 255), + 1.0f); + timer.stop("renderLights:renderLightOverlay"); + + // Players should not be able to discern the nature of the darkness, so we always render it as + // black for them. + timer.start("renderLights:renderDarknessOverlay"); + renderLightOverlay( + GL.GL_ALPHA, + GL.GL_ONE_MINUS_SRC_ALPHA, + view.isGMView() + ? new Color(1.0f, 1.0f, 1.0f, AppPreferences.getLightOverlayOpacity() / 255.0f) + : Color.BLACK, + view.isGMView() ? null : ZoneRenderer.LightOverlayClipStyle.CLIP_TO_NOT_VISIBLE_AREA, + darknessLights, + new java.awt.Color(0, 0, 0, 255), + 1.0f); + timer.stop("renderLights:renderDarknessOverlay"); + } + + /** + * Combines a set of lights into an image that is then rendered into the zone. + * + * @param clipStyle How to clip the overlay relative to the visible area. Set to null for no extra + * clipping. + * @param lights The lights that will be rendered and blended. + * @param defaultPaint A default paint for lights without a paint. + * @param overlayOpacity The opacity used when rendering the final overlay on top of the zone. + */ + private void renderLightOverlay( + int blendSrcFunc, + int blendDstFunc, + Color tintColor, + @Nullable ZoneRenderer.LightOverlayClipStyle clipStyle, + List lights, + Paint defaultPaint, + float overlayOpacity) { + if (lights.isEmpty()) { + // No points spending resources accomplishing nothing. + return; + } + + // Set up a buffer image for lights to be drawn onto before the map + timer.start("renderLightOverlay:allocateBuffer"); backBuffer.begin(); ScreenUtils.clear(Color.CLEAR); setProjectionMatrix(cam.combined); - batch.setBlendFunction(GL20.GL_ONE, GL20.GL_NONE); + batch.setBlendFunction(blendSrcFunc, blendDstFunc); drawer.update(); - timer.start("lights-2"); - var alpha = AppPreferences.getLightOverlayOpacity() / 255.0f; - timer.stop("lights-2"); - - timer.start("lights-3"); - for (DrawableLight light : zoneRenderer.getZoneView().getDrawableLights(view)) { - var drawablePaint = light.getPaint(); - - if (light.getType() != LightSource.Type.NORMAL || drawablePaint == null) continue; - - var paint = drawablePaint.getPaint(); + timer.stop("renderLightOverlay:allocateBuffer"); + drawer.setColor(tintColor); + // Draw lights onto the buffer image so the map doesn't affect how they blend + timer.start("renderLightOverlay:drawLights"); + for (var light : lights) { + var paint = light.getPaint() != null ? light.getPaint().getPaint() : defaultPaint; if (paint instanceof DrawableColorPaint) { var colorPaint = (DrawableColorPaint) paint; @@ -1182,28 +1251,31 @@ private void renderLights(PlayerView view) { System.out.println("unexpected color type"); continue; } - tmpColor.a = alpha; drawer.setColor(tmpColor); - areaRenderer.fillArea(light.getArea()); + var areaToPaint = (Area) light.getArea().clone(); + if (clipStyle != null && visibleScreenArea != null) { + switch (clipStyle) { + case CLIP_TO_VISIBLE_AREA -> areaToPaint.intersect(visibleScreenArea); + case CLIP_TO_NOT_VISIBLE_AREA -> areaToPaint.subtract(visibleScreenArea); + } + } + areaRenderer.fillArea(areaToPaint); } - timer.stop("lights-3"); + drawer.setColor(1.0f, 1.0f, 1.0f, 1.0f); + timer.stop("renderLightOverlay:drawLights"); - // clear the bright areas - timer.start("lights-4"); - // for (Area brightArea : zoneRenderer.getZoneView().getBrightLights(view)) { - // drawer.setColor(Color.CLEAR); - // areaRenderer.fillArea(brightArea); - // } - timer.stop("lights-4"); - // createScreenShot("light"); + // Draw the buffer image with all the lights onto the map + timer.start("renderLightOverlay:drawBuffer"); batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); backBuffer.end(); setProjectionMatrix(hudCam.combined); + batch.setColor(1.0f, 1.0f, 1.0f, overlayOpacity); batch.draw( backBuffer.getColorBufferTexture(), 0, 0, width, height, 0, 0, width, height, false, true); - + batch.setColor(1.0f, 1.0f, 1.0f, 1.0f); setProjectionMatrix(cam.combined); + timer.stop("renderLightOverlay:drawBuffer"); } private void renderGrid(PlayerView view) { @@ -3057,7 +3129,6 @@ private void initializeZoneResources(Zone newZone) { if (newZone == null || !initialized) return; zoneRenderer = MapTool.getFrame().getZoneRenderer(newZone); - updateVisibleArea(); for (var assetId : newZone.getAllAssetIds()) { AssetManager.getAssetAsynchronously(assetId, this); @@ -3212,7 +3283,7 @@ public void flushFog() { if (!initialized) return; flushFog = true; - updateVisibleArea(); + visibleScreenArea = null; } @Override From 95fd92f47b2ec77f151c4739092389e24e8e161c Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 1 Dec 2022 20:44:25 +0100 Subject: [PATCH 087/139] fix build --- .../client/ui/zone/gdx/GdxRenderer.java | 32 ++++++++----------- 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 2c1cea1306..ef8336c1fe 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -32,6 +32,7 @@ import com.badlogic.gdx.utils.ScreenUtils; import com.badlogic.gdx.video.VideoPlayer; import com.badlogic.gdx.video.VideoPlayerCreator; +import com.google.common.eventbus.Subscribe; import com.jogamp.opengl.GL; import java.awt.*; import java.awt.Shape; @@ -43,8 +44,6 @@ import java.util.List; import javax.annotation.Nullable; import javax.swing.*; -import net.rptools.lib.AppEvent; -import net.rptools.lib.AppEventListener; import net.rptools.lib.CodeTimer; import net.rptools.lib.MD5Key; import net.rptools.lib.gdx.GifDecoder; @@ -52,6 +51,7 @@ import net.rptools.lib.swing.ImageBorder; import net.rptools.lib.swing.SwingUtil; import net.rptools.maptool.client.*; +import net.rptools.maptool.client.events.ZoneActivated; import net.rptools.maptool.client.tool.drawing.FreehandExposeTool; import net.rptools.maptool.client.tool.drawing.OvalExposeTool; import net.rptools.maptool.client.tool.drawing.PolygonExposeTool; @@ -63,6 +63,7 @@ import net.rptools.maptool.client.ui.zone.PlayerView; import net.rptools.maptool.client.ui.zone.ZoneRenderer; import net.rptools.maptool.client.walker.ZoneWalker; +import net.rptools.maptool.events.MapToolEventBus; import net.rptools.maptool.language.I18N; import net.rptools.maptool.model.*; import net.rptools.maptool.model.Label; @@ -85,7 +86,7 @@ *

    */ public class GdxRenderer extends ApplicationAdapter - implements AppEventListener, ModelChangeListener, AssetAvailableListener { + implements AssetAvailableListener { private static final Logger log = LogManager.getLogger(GdxRenderer.class); @@ -172,10 +173,7 @@ public class GdxRenderer extends ApplicationAdapter private final TiledDrawable tmpTile = new TiledDrawable(); public GdxRenderer() { - var dispatcher = MapTool.getEventDispatcher(); - if (dispatcher != null) { - dispatcher.addListener(this, MapTool.ZoneEvent.Activated); - } + new MapToolEventBus().getMainEventBus().register(this); } public static GdxRenderer getInstance() { @@ -3191,11 +3189,8 @@ private Sprite paintToSprite(DrawablePaint paint) { return null; } - @Override - public void handleAppEvent(AppEvent event) { - System.out.println("AppEvent:" + event.getId()); - - if (event.getId() != MapTool.ZoneEvent.Activated) return; + @Subscribe + void onZoneActivated(ZoneActivated event) { var oldZone = zone; // first disable rendering during intitialisation; @@ -3203,11 +3198,11 @@ public void handleAppEvent(AppEvent event) { if (oldZone != null) { disposeZoneResources(); - oldZone.removeModelChangeListener(this); + // oldZone.removeModelChangeListener(this); } - var newZone = (Zone) event.getNewValue(); - newZone.addModelChangeListener(this); + var newZone = event.zone(); + // newZone.addModelChangeListener(this); initializeZoneResources(newZone); // just in case we are running before create was called and hence initializeZoneResources does // nothing @@ -3215,9 +3210,10 @@ public void handleAppEvent(AppEvent event) { renderZone = true; } + /* @Override public void modelChanged(ModelChangeEvent event) { - /* + Object evt = event.getEvent(); System.out.println("ModelChangend: " + evt); if (!(evt instanceof Zone.Event)) return; @@ -3264,9 +3260,9 @@ public void modelChanged(ModelChangeEvent event) { // for now quick and dirty disposeZoneResources(); initializeZoneResources(currentZone); - */ - } + } +*/ public void setScale(Scale scale) { if (!initialized) { return; From 642d46030010249789c2043e18a6f16110b2c886 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Tue, 27 Dec 2022 16:20:54 +0100 Subject: [PATCH 088/139] spotless --- .../maptool/client/ui/MapToolFrame.java | 4 +- .../client/ui/zone/gdx/GdxRenderer.java | 49 +++++++++---------- 2 files changed, 26 insertions(+), 27 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index 32ed52a74e..8ce61afe99 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -14,9 +14,9 @@ */ package net.rptools.maptool.client.ui; -import com.google.common.eventbus.Subscribe; import com.badlogic.gdx.backends.jogamp.JoglAwtApplicationConfiguration; import com.badlogic.gdx.backends.jogamp.JoglSwingCanvas; +import com.google.common.eventbus.Subscribe; import com.jidesoft.docking.DefaultDockableHolder; import com.jidesoft.docking.DockableFrame; import com.jogamp.opengl.awt.GLJPanel; @@ -89,8 +89,8 @@ import net.rptools.maptool.client.ui.zone.PointerToolOverlay; import net.rptools.maptool.client.ui.zone.ZoneMiniMapPanel; import net.rptools.maptool.client.ui.zone.ZoneRenderer; -import net.rptools.maptool.events.MapToolEventBus; import net.rptools.maptool.client.ui.zone.gdx.GdxRenderer; +import net.rptools.maptool.events.MapToolEventBus; import net.rptools.maptool.language.I18N; import net.rptools.maptool.model.Asset; import net.rptools.maptool.model.GUID; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index ef8336c1fe..b81afe6508 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -85,8 +85,7 @@ * *

    */ -public class GdxRenderer extends ApplicationAdapter - implements AssetAvailableListener { +public class GdxRenderer extends ApplicationAdapter implements AssetAvailableListener { private static final Logger log = LogManager.getLogger(GdxRenderer.class); @@ -3198,11 +3197,11 @@ void onZoneActivated(ZoneActivated event) { if (oldZone != null) { disposeZoneResources(); - // oldZone.removeModelChangeListener(this); + // oldZone.removeModelChangeListener(this); } var newZone = event.zone(); - // newZone.addModelChangeListener(this); + // newZone.addModelChangeListener(this); initializeZoneResources(newZone); // just in case we are running before create was called and hence initializeZoneResources does // nothing @@ -3240,29 +3239,29 @@ public void modelChanged(ModelChangeEvent event) { } } */ - /* - if (evt == Zone.Event.TOKEN_CHANGED - || evt == Zone.Event.TOKEN_REMOVED - || evt == Zone.Event.TOKEN_ADDED) { - if (event.getArg() instanceof List) { - @SuppressWarnings("unchecked") - List list = (List) (event.getArg()); - for (Token token : list) { - zoneRenderer.flush(token); - } - } else { - zoneRenderer.flush((Token) event.getArg()); - } - }*/ - /* - var currentZone = zone; + /* + if (evt == Zone.Event.TOKEN_CHANGED + || evt == Zone.Event.TOKEN_REMOVED + || evt == Zone.Event.TOKEN_ADDED) { + if (event.getArg() instanceof List) { + @SuppressWarnings("unchecked") + List list = (List) (event.getArg()); + for (Token token : list) { + zoneRenderer.flush(token); + } + } else { + zoneRenderer.flush((Token) event.getArg()); + } + }*/ + /* + var currentZone = zone; - // for now quick and dirty - disposeZoneResources(); - initializeZoneResources(currentZone); + // for now quick and dirty + disposeZoneResources(); + initializeZoneResources(currentZone); - } -*/ + } + */ public void setScale(Scale scale) { if (!initialized) { return; From 0c1b787ad4afb6a9be4b487bee7d96919c5df0f5 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Tue, 27 Dec 2022 16:46:28 +0100 Subject: [PATCH 089/139] update to develop --- .../maptool/client/ui/ToolbarPanel.java | 12 ++----- .../maptool/client/ui/theme/Icons.java | 1 + .../client/ui/theme/RessourceManager.java | 1 + .../client/ui/zone/gdx/GdxRenderer.java | 36 ++++++++++--------- 4 files changed, 24 insertions(+), 26 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java b/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java index 1e0affa0d4..f36ac93f9c 100644 --- a/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java +++ b/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java @@ -177,7 +177,7 @@ public ToolbarPanel(Toolbox tbox) { tokenSelectionButtonAll.setSelected(true); // Jamz: End panel - add(createGdxButton("net/rptools/maptool/client/image/libgdx.png")); + add(createGdxButton(Icons.TOOLBAR_LIBGDX)); // the "Select Map" button mapselect = createZoneSelectionButton(); @@ -450,20 +450,14 @@ private JToggleButton createMuteButton( return button; } - private JToggleButton createGdxButton(final String icon) { + private JToggleButton createGdxButton(final Icons icon) { final JToggleButton button = new JToggleButton(); button.addActionListener( e -> { MapTool.getFrame().addGdx(); }); - try { - button.setIcon(createIcon(icon, 25, 25)); - // button.setSelectedIcon(createIcon(icon, 25, 25)); - } catch (IOException ioe) { - ioe.printStackTrace(); - } - + button.setIcon(RessourceManager.getBigIcon(icon)); return button; } diff --git a/src/main/java/net/rptools/maptool/client/ui/theme/Icons.java b/src/main/java/net/rptools/maptool/client/ui/theme/Icons.java index 9d4b7bf217..c128e2da76 100644 --- a/src/main/java/net/rptools/maptool/client/ui/theme/Icons.java +++ b/src/main/java/net/rptools/maptool/client/ui/theme/Icons.java @@ -127,6 +127,7 @@ public enum Icons { TOOLBAR_FOG_ON, TOOLBAR_HIDE_OFF, TOOLBAR_HIDE_ON, + TOOLBAR_LIBGDX, TOOLBAR_POINTERTOOL_AI_OFF, TOOLBAR_POINTERTOOL_AI_ON, TOOLBAR_POINTERTOOL_MEASURE, diff --git a/src/main/java/net/rptools/maptool/client/ui/theme/RessourceManager.java b/src/main/java/net/rptools/maptool/client/ui/theme/RessourceManager.java index 154397c24a..19429b8f9a 100644 --- a/src/main/java/net/rptools/maptool/client/ui/theme/RessourceManager.java +++ b/src/main/java/net/rptools/maptool/client/ui/theme/RessourceManager.java @@ -155,6 +155,7 @@ public class RessourceManager { put(Icons.TOOLBAR_FOG_ON, IMAGE_DIR + "tool/fog-blue.png"); put(Icons.TOOLBAR_HIDE_OFF, IMAGE_DIR + "tool/upArrow.png"); put(Icons.TOOLBAR_HIDE_ON, IMAGE_DIR + "tool/downArrow.png"); + put(Icons.TOOLBAR_LIBGDX, IMAGE_DIR + "libgdx.png"); put(Icons.TOOLBAR_POINTERTOOL_AI_OFF, IMAGE_DIR + "tool/ai-blue-off.png"); put(Icons.TOOLBAR_POINTERTOOL_AI_ON, IMAGE_DIR + "tool/ai-blue-green.png"); put(Icons.TOOLBAR_POINTERTOOL_MEASURE, IMAGE_DIR + "tool/ruler-blue.png"); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index b81afe6508..23fb588632 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -48,16 +48,18 @@ import net.rptools.lib.MD5Key; import net.rptools.lib.gdx.GifDecoder; import net.rptools.lib.image.ImageUtil; -import net.rptools.lib.swing.ImageBorder; -import net.rptools.lib.swing.SwingUtil; import net.rptools.maptool.client.*; import net.rptools.maptool.client.events.ZoneActivated; +import net.rptools.maptool.client.swing.ImageBorder; +import net.rptools.maptool.client.swing.SwingUtil; import net.rptools.maptool.client.tool.drawing.FreehandExposeTool; import net.rptools.maptool.client.tool.drawing.OvalExposeTool; import net.rptools.maptool.client.tool.drawing.PolygonExposeTool; import net.rptools.maptool.client.tool.drawing.RectangleExposeTool; import net.rptools.maptool.client.ui.Scale; import net.rptools.maptool.client.ui.Tool; +import net.rptools.maptool.client.ui.theme.Borders; +import net.rptools.maptool.client.ui.theme.RessourceManager; import net.rptools.maptool.client.ui.token.*; import net.rptools.maptool.client.ui.zone.DrawableLight; import net.rptools.maptool.client.ui.zone.PlayerView; @@ -1133,20 +1135,20 @@ private void renderAuras(PlayerView view) { var alpha = AppPreferences.getAuraOverlayOpacity() / 255.0f; timer.start("auras-4"); - - for (DrawableLight light : zoneRenderer.getZoneView().getLights(LightSource.Type.AURA)) { - var paint = light.getPaint(); - if (paint != null && paint instanceof DrawableColorPaint) { - var colorPaint = (DrawableColorPaint) paint; - Color.argb8888ToColor(tmpColor, colorPaint.getColor()); - tmpColor.a = alpha; - } else { - tmpColor.set(1, 1, 1, 0.59f); - } - drawer.setColor(tmpColor); - areaRenderer.fillArea(light.getArea()); - } - + /* + for (DrawableLight light : zoneRenderer.getZoneView().getLights(LightSource.Type.AURA)) { + var paint = light.getPaint(); + if (paint != null && paint instanceof DrawableColorPaint) { + var colorPaint = (DrawableColorPaint) paint; + Color.argb8888ToColor(tmpColor, colorPaint.getColor()); + tmpColor.a = alpha; + } else { + tmpColor.set(1, 1, 1, 0.59f); + } + drawer.setColor(tmpColor); + areaRenderer.fillArea(light.getArea()); + } + */ timer.stop("auras-4"); } @@ -1806,7 +1808,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure || tool instanceof OvalExposeTool || tool instanceof FreehandExposeTool || tool instanceof PolygonExposeTool) { - selectedBorder = AppConstants.FOW_TOOLS_BORDER; + selectedBorder = RessourceManager.getBorder(Borders.FOW_TOOLS); } } From c6d6046c7b67dee5ce6a142d614191eabbd81e89 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Fri, 6 Jan 2023 22:02:29 +0100 Subject: [PATCH 090/139] . --- .../client/ui/token/dialog/edit/TokenPropertiesDialog.java | 6 +++--- .../net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/token/dialog/edit/TokenPropertiesDialog.java b/src/main/java/net/rptools/maptool/client/ui/token/dialog/edit/TokenPropertiesDialog.java index a70e0f7d81..f27b888f9c 100644 --- a/src/main/java/net/rptools/maptool/client/ui/token/dialog/edit/TokenPropertiesDialog.java +++ b/src/main/java/net/rptools/maptool/client/ui/token/dialog/edit/TokenPropertiesDialog.java @@ -263,13 +263,13 @@ public class TokenPropertiesDialog { panel4.add(button4, new GridConstraints(15, 0, 1, 3, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); final JPanel panel7 = new JPanel(); panel7.setLayout(new GridLayoutManager(1, 1, new Insets(4, 4, 4, 4), -1, -1)); - panel7.setVisible(false); + panel7.setVisible(true); tabPanel.addTab(this.$$$getMessageFromBundle$$$("net/rptools/maptool/language/i18n", "EditTokenDialog.tab.state"), panel7); final JScrollPane scrollPane1 = new JScrollPane(); scrollPane1.setHorizontalScrollBarPolicy(31); panel7.add(scrollPane1, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); final JPanel panel8 = new JPanel(); - panel8.setLayout(new GridLayoutManager(1, 1, new Insets(0, 0, 0, 0), -1, -1)); + panel8.setLayout(new BorderLayout(0, 0)); panel8.setName("statesPanel"); scrollPane1.setViewportView(panel8); final JPanel panel9 = new JPanel(); @@ -307,7 +307,7 @@ public class TokenPropertiesDialog { panel10.add(spacer4, new GridConstraints(1, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_VERTICAL, 1, GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false)); final JPanel panel11 = new JPanel(); panel11.setLayout(new GridLayoutManager(7, 10, new Insets(4, 4, 4, 4), -1, -1)); - panel11.setVisible(true); + panel11.setVisible(false); tabPanel.addTab(this.$$$getMessageFromBundle$$$("net/rptools/maptool/language/i18n", "EditTokenDialog.tab.config"), panel11); final JLabel label11 = new JLabel(); this.$$$loadLabelText$$$(label11, this.$$$getMessageFromBundle$$$("net/rptools/maptool/language/i18n", "EditTokenDialog.label.shape")); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 23fb588632..0319773c33 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -52,12 +52,12 @@ import net.rptools.maptool.client.events.ZoneActivated; import net.rptools.maptool.client.swing.ImageBorder; import net.rptools.maptool.client.swing.SwingUtil; +import net.rptools.maptool.client.tool.Tool; import net.rptools.maptool.client.tool.drawing.FreehandExposeTool; import net.rptools.maptool.client.tool.drawing.OvalExposeTool; import net.rptools.maptool.client.tool.drawing.PolygonExposeTool; import net.rptools.maptool.client.tool.drawing.RectangleExposeTool; import net.rptools.maptool.client.ui.Scale; -import net.rptools.maptool.client.ui.Tool; import net.rptools.maptool.client.ui.theme.Borders; import net.rptools.maptool.client.ui.theme.RessourceManager; import net.rptools.maptool.client.ui.token.*; From fd0391ece01ba91f94aace48cd8a50478af41615 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 12 Jan 2023 20:39:55 +0100 Subject: [PATCH 091/139] . --- build.gradle | 7 +- .../lib/gdx/RepeatablePolygonSprite.java | 668 ++++++++++++++++++ .../ui/zone/gdx/AbstractDrawingDrawer.java | 18 +- .../client/ui/zone/gdx/AreaRenderer.java | 26 +- .../ui/zone/gdx/ShapeDrawableDrawer.java | 38 +- 5 files changed, 748 insertions(+), 9 deletions(-) create mode 100644 src/main/java/net/rptools/lib/gdx/RepeatablePolygonSprite.java diff --git a/build.gradle b/build.gradle index 4f7f9b0b32..9ae661f547 100644 --- a/build.gradle +++ b/build.gradle @@ -457,7 +457,8 @@ dependencies { implementation "com.badlogicgames.gdx:gdx:1.11.0" implementation "com.badlogicgames.gdx:gdx-platform:1.11.0:natives-desktop" - implementation "space.earlygrey:shapedrawer:2.4.0" + //implementation "space.earlygrey:shapedrawer:2.4.0" + implementation 'com.github.earlygrey:shapedrawer:extract-vertices-SNAPSHOT' implementation "com.badlogicgames.gdx:gdx-freetype:1.11.0" implementation "com.badlogicgames.gdx:gdx-freetype-platform:1.11.0:natives-desktop" implementation "com.badlogicgames.gdx-video:gdx-video:1.3.2-SNAPSHOT" @@ -512,6 +513,10 @@ task uberJar(type: Jar) { exclude 'module-info.class' //This is to make sure maptool doesn't become a module by including module-info of dependencies. Probably needs to be fixed before we go to jdk 11+ } +configurations.all { + resolutionStrategy.cacheDynamicVersionsFor 10, 'minutes' +} + jar { manifest { attributes 'Implementation-Title': project.name + developerRelease, diff --git a/src/main/java/net/rptools/lib/gdx/RepeatablePolygonSprite.java b/src/main/java/net/rptools/lib/gdx/RepeatablePolygonSprite.java new file mode 100644 index 0000000000..98b0c5f21a --- /dev/null +++ b/src/main/java/net/rptools/lib/gdx/RepeatablePolygonSprite.java @@ -0,0 +1,668 @@ +package net.rptools.lib.gdx; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; +import com.badlogic.gdx.graphics.g2d.TextureRegion; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.math.EarClippingTriangulator; +import com.badlogic.gdx.math.Intersector; +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Polygon; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.utils.Disposable; +import com.badlogic.gdx.utils.ShortArray; + +/** + * Renders polygon filled with a repeating TextureRegion with specified density + * Without causing an additional flush or render call + * + * @author Avetis Zakharyan (concept and first version) + * @author Kablion (rewrite) + */ +public class RepeatablePolygonSprite implements Disposable { + + public enum WrapType { + STRETCH,REPEAT,REPEAT_MIRRORED + } + + private WrapType wrapTypeX = WrapType.REPEAT; + private WrapType wrapTypeY = WrapType.REPEAT; + + private final Color color = new Color(Color.WHITE); + + private TextureRegion textureRegion; + private TextureRegion whiteTextureRegion; + + private Vector2 textureOffset = new Vector2(); + private float textureWidth = 0; + private float textureHeight = 0; + + private float textureDebugX = 0; + private float textureDebugY = 0; + + private boolean dirtyGrid = true; + private boolean dirtyAttributes = true; + + private Array parts = new Array(); + + private Array vertices = new Array(); + private Array indices = new Array(); + + private int rows; + private Vector2 gridOffset = new Vector2(); + private float gridWidth, gridHeight; + private Vector2 buildOffset = new Vector2(); + + private Polygon polygon = new Polygon(); + private Rectangle boundingRect = new Rectangle(); + + public RepeatablePolygonSprite() { + Pixmap pixmap = new Pixmap(1, 1, Pixmap.Format.RGBA8888); + pixmap.setColor(Color.WHITE); + pixmap.fill(); + this.whiteTextureRegion = new TextureRegion(new Texture(pixmap)); + pixmap.dispose(); + } + + /** + * calculates the grid and the parts in relation to the texture Origin + */ + private void prepareVertices() { + parts.clear(); + if (polygon.getVertices().length == 0) return; + float[] vertices = polygon.getVertices().clone(); + + Polygon polygon = new Polygon(vertices); + Polygon tmpPoly = new Polygon(); + Polygon intersectionPoly = new Polygon(); + EarClippingTriangulator triangulator = new EarClippingTriangulator(); + + int idx; + + Rectangle bounds = polygon.getBoundingRectangle(); + + + if (wrapTypeX == WrapType.STRETCH || textureRegion == null) { + gridWidth = bounds.getWidth(); + } else { + gridWidth = textureWidth; + } + if (wrapTypeY == WrapType.STRETCH || textureRegion == null) { + gridHeight = bounds.getHeight(); + } else { + gridHeight = textureHeight; + } + + polygon.setVertices(offset(vertices)); + + bounds = polygon.getBoundingRectangle(); + + int cols = (int) (Math.ceil(bounds.getWidth() / gridWidth)); + if (bounds.getX() + bounds.getWidth() > (cols + gridOffset.x) * gridWidth) cols++; + rows = (int) Math.ceil(bounds.getHeight() / gridHeight); + if (bounds.getY() + bounds.getHeight() > (rows + gridOffset.y) * gridHeight) rows++; + + for (int col = 0; col < cols; col++) { + for (int row = 0; row < rows; row++) { + float[] verts = new float[8]; + idx = 0; + int offsettedCol = col + (int) gridOffset.x; + int offsettedRow = row + (int) gridOffset.y; + + verts[idx++] = offsettedCol * gridWidth; + verts[idx++] = offsettedRow * gridHeight; + + verts[idx++] = (offsettedCol) * gridWidth; + verts[idx++] = (offsettedRow + 1) * gridHeight; + + verts[idx++] = (offsettedCol + 1) * gridWidth; + verts[idx++] = (offsettedRow + 1) * gridHeight; + + verts[idx++] = (offsettedCol + 1) * gridWidth; + verts[idx] = (offsettedRow) * gridHeight; + + tmpPoly.setVertices(verts); + + Intersector.intersectPolygons(polygon, tmpPoly, intersectionPoly); + verts = intersectionPoly.getVertices(); + if (verts.length > 0) { + parts.add(snapToGrid(verts, offsettedRow, offsettedCol)); + ShortArray arr = triangulator.computeTriangles(verts); + indices.add(arr.toArray()); + } else { + // adding null for key consistancy, needed to get col/row from key + // the other alternative is to make parts - IntMap + parts.add(null); + } + } + } + dirtyGrid = false; + dirtyAttributes = true; + } + + /** + * Builds final vertices with vertex attributes like coordinates, color and region u/v + */ + private void buildVertices() { + vertices.clear(); + if (polygon.getVertices().length == 0) return; + for (int i = 0; i < parts.size; i++) { + float verts[] = parts.get(i); + if (verts == null) continue; + + float[] fullVerts = new float[5 * verts.length / 2]; + int idx = 0; + + int col = i / rows; + int row = i % rows; + int offsettedCol = col + (int) gridOffset.x; + int offsettedRow = row + (int) gridOffset.y; + + for (int j = 0; j < verts.length; j += 2) { + float x = (verts[j] + buildOffset.x + textureOffset.x) - getOriginX(); + x *= getScaleX(); + float y = (verts[j + 1] + buildOffset.y + textureOffset.y) - getOriginY(); + y *= getScaleY(); + if (getRotation() != 0) { + float tempX = x; + float tempY = y; + float rotationInRads = getRotation() * MathUtils.degreesToRadians; + x = tempX * (float) Math.cos(rotationInRads) - tempY * (float) Math.sin(rotationInRads); + y = tempY * (float) Math.cos(rotationInRads) + tempX * (float) Math.sin(rotationInRads); + } + x += getX() + getOriginX(); + y += getY() + getOriginY(); + fullVerts[idx++] = x; + fullVerts[idx++] = y; + + fullVerts[idx++] = color.toFloatBits(); + + float inGridX = verts[j] - offsettedCol * gridWidth; + float inGridY = verts[j + 1] - offsettedRow * gridHeight; + float u = inGridX / gridWidth; + float v = inGridY / gridHeight; + if (u > 1.0f) u = 1.0f; + if (v > 1.0f) v = 1.0f; + if (u < 0.0f) u = 0.0f; + if (v < 0.0f) v = 0.0f; + // (col & 1 == 0) == true : col is even + if (wrapTypeX == WrapType.REPEAT_MIRRORED & (col & 1) != 0) u = 1 - u; + if (wrapTypeY == WrapType.REPEAT_MIRRORED & (row & 1) == 0) v = 1 - v; + + if (textureRegion != null) { + u = textureRegion.getU() + (textureRegion.getU2() - textureRegion.getU()) * u; + v = textureRegion.getV() + (textureRegion.getV2() - textureRegion.getV()) * v; + } else { + u = whiteTextureRegion.getU() + (whiteTextureRegion.getU2() - whiteTextureRegion.getU()) * u; + v = whiteTextureRegion.getV() + (whiteTextureRegion.getV2() - whiteTextureRegion.getV()) * v; + } + fullVerts[idx++] = u; + fullVerts[idx++] = v; + } + vertices.add(fullVerts); + } + + this.textureDebugX = (buildOffset.x + textureOffset.x) * getScaleX(); + this.textureDebugY = (buildOffset.y + textureOffset.y) * getScaleY(); + if (getRotation() != 0) { + float tempX = this.textureDebugX; + float tempY = this.textureDebugY; + float rotationInRads = getRotation() * MathUtils.degreesToRadians; + this.textureDebugX = tempX * (float) Math.cos(rotationInRads) - tempY * (float) Math.sin(rotationInRads); + this.textureDebugY = tempY * (float) Math.cos(rotationInRads) + tempX * (float) Math.sin(rotationInRads); + } + this.textureDebugX += getX(); + this.textureDebugY += getY(); + + this.boundingRect = this.polygon.getBoundingRectangle(); + + dirtyAttributes = false; + } + + /** + * This is a garbage, due to Intersector returning values slightly different then the grid values + * Snapping exactly to grid is important, so that during bulidVertices method, it can be figured out + * if points are on the wall of it's own grid box or not, to set u/v properly. + * Any other implementations are welcome + */ + private float[] snapToGrid(float[] vertices, int row, int col) { + float[] resultVerts = vertices.clone(); + for (int i = 0; i < resultVerts.length; i += 2) { + float inGridX = resultVerts[i] - col * gridWidth; + float inGridY = resultVerts[i + 1] - row * gridHeight; + float inGridXFraction = inGridX / gridWidth; + float inGridYFraction = inGridY / gridHeight; + if (inGridXFraction != 1 & inGridXFraction > 0.9999f) { + resultVerts[i] = (col + 1) * gridWidth; + } else if (inGridXFraction != 0 & inGridXFraction < 0.0001f) { + resultVerts[i] = col * gridWidth; + } + if (inGridYFraction != 1 & inGridYFraction > 0.9999f) { + resultVerts[i + 1] = (row + 1) * gridHeight; + } else if (inGridYFraction != 0 & inGridYFraction < 0.0001f) { + resultVerts[i + 1] = row * gridHeight; + } + } + + return resultVerts; + } + + /** + * Offsets polygon to 0 - textureOffset coordinate for ease of calculations, later this is put back on final render + * + * @param vertices vertices to offset + * @return offsetted vertices + */ + private float[] offset(float[] vertices) { + float[] result = vertices.clone(); + + Polygon polygon = new Polygon(result); + Rectangle bounds = polygon.getBoundingRectangle(); + + buildOffset.x = bounds.x; + buildOffset.y = bounds.y; + + for (int i = 0; i < result.length; i += 2) { + result[i] -= (buildOffset.x + textureOffset.x); + result[i + 1] -= (buildOffset.y + textureOffset.y); + } + + gridOffset.x = (int) Math.floor(-(textureOffset.x / gridWidth)); + gridOffset.y = (int) Math.floor(-(textureOffset.y / gridHeight)); + + return result; + } + + public void draw(PolygonSpriteBatch batch) { + if (dirtyGrid || parts.size == 0) { + prepareVertices(); + } + if (dirtyAttributes || vertices.size == 0) { + buildVertices(); + } + + Texture textureToDraw; + if (textureRegion != null) { + textureToDraw = textureRegion.getTexture(); + } else { + textureToDraw = whiteTextureRegion.getTexture(); + } + + for (int i = 0; i < vertices.size; i++) { + batch.draw(textureToDraw, vertices.get(i), 0, vertices.get(i).length, indices.get(i), 0, indices.get(i).length); + } + } + + public void drawDebug(ShapeRenderer shapes, Color color) { + if (dirtyGrid) { + prepareVertices(); + } + if (dirtyAttributes) { + buildVertices(); + } + + // draw grid + for (int i = 0; i < vertices.size; i++) { + + // draw vertices in grid + shapes.setColor(color); + float[] curVerts = vertices.get(i); + short[] curIndices = this.indices.get(i); + for (int j = 0; j < curIndices.length; j += 3) { + float x1 = curVerts[curIndices[j] * 5]; + float y1 = curVerts[curIndices[j] * 5 + 1]; + float x2 = curVerts[curIndices[j + 1] * 5]; + float y2 = curVerts[curIndices[j + 1] * 5 + 1]; + float x3 = curVerts[curIndices[j + 2] * 5]; + float y3 = curVerts[curIndices[j + 2] * 5 + 1]; + shapes.triangle(x1, y1, x2, y2, x3, y3); + } + } + + //draw cross on grid 0/0 + shapes.setColor(Color.RED); + shapes.line(textureDebugX - 1, textureDebugY - 1, + textureDebugX + 1, textureDebugY + 1); + shapes.line(textureDebugX - 1, textureDebugY + 1, + textureDebugX + 1, textureDebugY - 1); + } + + @Override + public void dispose() { + whiteTextureRegion.getTexture().dispose(); + whiteTextureRegion = null; + if (textureRegion != null) { + textureRegion.getTexture().dispose(); + textureRegion = null; + } + polygon = null; + boundingRect = null; + parts.clear(); + parts = null; + vertices.clear(); + vertices = null; + indices.clear(); + indices = null; + buildOffset = null; + gridOffset = null; + textureOffset = null; + } + + /** + * Sets the outline vertices of the polygon + * + * @param vertices - vertices of polygon relative to the origin + */ + public void setVertices(float[] vertices) { + if (vertices == null) { + Polygon tempPolygon = new Polygon(); + tempPolygon.setPosition(getX(), getY()); + tempPolygon.setOrigin(getOriginX(), getOriginY()); + tempPolygon.setRotation(getRotation()); + tempPolygon.setScale(getScaleX(), getScaleY()); + polygon = tempPolygon; + } else { + polygon.setVertices(vertices); + } + dirtyGrid = true; + } + + /** + * Sets the texture region, the size of repeating grid is equal to region size + * + * @param textureRegion - texture region mapped on the polygon + * @param wrapTypeX - WrapType how the texture region is drawn along the X-Axis + * @param wrapTypeY - WrapType how the texture region is drawn along the Y-Axis + */ + public void setTextureRegion(TextureRegion textureRegion, WrapType wrapTypeX, WrapType wrapTypeY) { + setTextureRegion(textureRegion); + setWrapTypeX(wrapTypeX); + setWrapTypeY(wrapTypeY); + } + + /** + * Sets the texture region, the size of repeating grid is equal to region size + * + * @param textureRegion - texture region mapped on the polygon + * @param textureWidth - width of the repeating region + * @param textureHeight - height of the repeating region + */ + public void setTextureRegion(TextureRegion textureRegion, float textureWidth, float textureHeight) { + setTextureRegion(textureRegion); + setTextureSize(textureWidth, textureHeight); + } + + /** + * Sets the texture region, the size of repeating grid is equal to region size + * + * @param textureRegion - texture region mapped on the polygon + * @param textureWidth - width of the repeating region + * @param textureHeight - height of the repeating region + * @param wrapTypeX - WrapType how the texture region is drawn along the X-Axis + * @param wrapTypeY - WrapType how the texture region is drawn along the Y-Axis + */ + public void setTextureRegion(TextureRegion textureRegion, float textureWidth, float textureHeight, WrapType wrapTypeX, WrapType wrapTypeY) { + setTextureRegion(textureRegion); + setTextureSize(textureWidth, textureHeight); + setWrapTypeX(wrapTypeX); + setWrapTypeY(wrapTypeY); + } + + /** + * Sets the texture region, the size of repeating grid is equal to region size if not set already + * + * @param textureRegion - texture region mapped on the polygon + */ + public void setTextureRegion(TextureRegion textureRegion) { + this.textureRegion = textureRegion; + if (this.textureWidth == 0) this.textureWidth = textureRegion.getRegionWidth(); + if (this.textureHeight == 0) this.textureHeight = textureRegion.getRegionHeight(); + dirtyGrid = true; + } + + /** + * Sets the position of the texture where 0 is the bottom left corner of the bounding rectangle + */ + public void setTextureOffset(float x, float y) { + this.textureOffset.set(x, y); + dirtyGrid = true; + } + + /** + * Sets the to be drawn width and height of the texture + */ + public void setTextureSize(float width, float height) { + this.textureWidth = width; + this.textureHeight = height; + dirtyGrid = true; + } + + /** + * Sets the sprite's position in the world + */ + public void setPosition(float x, float y) { + polygon.setPosition(x, y); + dirtyAttributes = true; + } + + /** + * Sets the sprite's x position in the world + */ + public void setX(float x) { + polygon.setPosition(x, getY()); + dirtyAttributes = true; + } + + /** + * Sets the sprite's y position in the world + */ + public void setY(float y) { + polygon.setPosition(getX(), y); + dirtyAttributes = true; + } + + /** + * Sets the sprite's position in the world + */ + public void translate(float x, float y) { + polygon.setPosition(getX() + x, getY() + y); + dirtyAttributes = true; + } + + /** + * Sets the origin in relation to the sprite's position for scaling and rotation. + */ + public void setOrigin(float x, float y) { + polygon.setOrigin(x, y); + dirtyAttributes = true; + } + + /** + * Sets the origin x in relation to the sprite's position for scaling and rotation. + */ + public void setOriginX(float x) { + setOrigin(x, getOriginY()); + } + + /** + * Sets the origin y in relation to the sprite's position for scaling and rotation. + */ + public void setOriginY(float y) { + setOrigin(getOriginX(), y); + } + + /** + * Sets the scale along both axises where 1 = normal Size + */ + public void setScale(float scaleX, float scaleY) { + polygon.setScale(scaleX, scaleY); + dirtyAttributes = true; + } + + /** + * Sets the scale along the x axis where 1 = normal Size + */ + public void setScaleX(float scaleX) { + polygon.setScale(scaleX, getScaleY()); + dirtyAttributes = true; + } + + /** + * Sets the scale along the y axis where 1 = normal Size + */ + public void setScaleY(float scaleY) { + polygon.setScale(getScaleX(), scaleY); + dirtyAttributes = true; + } + + /** + * Adds the specified scale to the current scale. + */ + public void scaleBy(float scaleXY) { + polygon.scale(scaleXY); + dirtyAttributes = true; + } + + /** + * Adds the specified scale to the current scale. + */ + public void scaleBy(float scaleX, float scaleY) { + polygon.setScale(getScaleX() + scaleX, getScaleY() + scaleY); + dirtyAttributes = true; + } + + public void setRotation(float degrees) { + polygon.setRotation(degrees); + dirtyAttributes = true; + } + + /** + * Adds the specified rotation to the current rotation. + */ + public void rotateBy(float amountInDegrees) { + polygon.rotate(amountInDegrees); + dirtyAttributes = true; + } + + /** + * Sets the type how the texture region is drawn along the X-Axis + * + * @param wrapType - a type of WrapType + */ + public void setWrapTypeX(WrapType wrapType) { + this.wrapTypeX = wrapType; + dirtyGrid = true; + } + + /** + * Sets the type how the texture region is drawn along the Y-Axis + * + * @param wrapType - a type of WrapType + */ + public void setWrapTypeY(WrapType wrapType) { + this.wrapTypeY = wrapType; + dirtyGrid = true; + } + + /** + * @param color - Tint color to be applied to entire polygon + */ + public void setColor(Color color) { + this.color.set(color); + dirtyAttributes = true; + } + + public WrapType getWrapTypeX() { + return wrapTypeX; + } + + public WrapType getWrapTypeY() { + return wrapTypeY; + } + + public TextureRegion getTextureRegion() { + return textureRegion; + } + + public float getTextureOffsetX() { + return textureOffset.x; + } + + public float getTextureOffsetY() { + return textureOffset.y; + } + + public float getTextureWidth() { + return textureWidth; + } + + public float getTextureHeight() { + return textureHeight; + } + + public float getX() { + return polygon.getX(); + } + + public float getY() { + return polygon.getY(); + } + + public float getOriginX() { + return polygon.getOriginX(); + } + + public float getOriginY() { + return polygon.getOriginY(); + } + + public float getScaleX() { + return polygon.getScaleX(); + } + + public float getScaleY() { + return polygon.getScaleY(); + } + + public float getRotation() { + return polygon.getRotation(); + } + + public Color getColor() { + return color; + } + + /** + * Returns the packed vertices, colors, and texture coordinates for this sprite. + */ + public Array getVertices() { + return vertices; + } + + public float[] getOriginalVertices() { + return polygon.getVertices().clone(); + } + + public float[] getTransformedVertices() { + return polygon.getTransformedVertices().clone(); + } + + public Polygon getPolygon() { + Polygon tempPolygon = new Polygon(); + if (getOriginalVertices().length != 0) tempPolygon.setVertices(getOriginalVertices()); + tempPolygon.setPosition(getX(), getY()); + tempPolygon.setOrigin(getOriginX(), getOriginY()); + tempPolygon.setRotation(getRotation()); + tempPolygon.setScale(getScaleX(), getScaleY()); + return tempPolygon; + } + + public Rectangle getBoundingRectangle() { + return this.boundingRect; + } +} + diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java index e814d2de1b..27c1139fc3 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java @@ -15,13 +15,15 @@ package net.rptools.maptool.client.ui.zone.gdx; import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.FloatArray; import java.awt.geom.Area; import java.awt.geom.PathIterator; -import net.rptools.maptool.model.drawing.Drawable; -import net.rptools.maptool.model.drawing.DrawableColorPaint; -import net.rptools.maptool.model.drawing.Pen; + +import net.rptools.maptool.model.drawing.*; import space.earlygrey.shapedrawer.ShapeDrawer; public abstract class AbstractDrawingDrawer { @@ -40,6 +42,16 @@ public void draw(Drawable element, Pen pen) { var colorPaint = (DrawableColorPaint) pen.getBackgroundPaint(); Color.argb8888ToColor(tmpColor, colorPaint.getColor()); drawer.setColor(tmpColor); + areaRenderer.setTextureRegion(null); + } else if(pen.getBackgroundPaint() instanceof DrawableTexturePaint texturePaint) { + var image = texturePaint.getAsset().getData(); + var pix = new Pixmap(image, 0, image.length); + + //FIXME properly dispose + var region = new TextureRegion(new Texture(pix)); + region.flip(false, true); + areaRenderer.setTextureRegion(region); + pix.dispose(); } drawBackground(element, pen); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java index 95c88b2ef7..0aeb1a300a 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java @@ -14,11 +14,16 @@ */ package net.rptools.maptool.client.ui.zone.gdx; +//import com.badlogic.gdx.graphics.g2d.RepeatablePolygonSprite; +import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; +import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.math.Bezier; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.FloatArray; import java.awt.geom.Area; import java.awt.geom.PathIterator; + +import net.rptools.lib.gdx.RepeatablePolygonSprite; import space.earlygrey.shapedrawer.JoinType; import space.earlygrey.shapedrawer.ShapeDrawer; @@ -34,10 +39,21 @@ public class AreaRenderer { private Vector2 tmpVector3 = new Vector2(); private Vector2 tmpVectorOut = new Vector2(); + // private RepeatablePolygonSprite polygonSprite = new RepeatablePolygonSprite(); + private TextureRegion textureRegion = null; + public AreaRenderer(ShapeDrawer drawer) { this.drawer = drawer; } + public TextureRegion getTextureRegion() { + return textureRegion; + } + + public void setTextureRegion(TextureRegion textureRegion) { + this.textureRegion = textureRegion; + } + public void fillArea(Area area) { if (area == null || area.isEmpty()) return; @@ -59,7 +75,15 @@ protected void paintArea(Area area, boolean fill) { if (lastX != tmpFloat.get(0) && lastY != tmpFloat.get(1)) tmpFloat.add(tmpFloat.get(0), tmpFloat.get(1)); - drawer.filledPolygon(tmpFloat.toArray()); + if(textureRegion == null) { + drawer.filledPolygon(tmpFloat.toArray()); + } else { + var sprite = new RepeatablePolygonSprite(); + // sprite.setPolygon(textureRegion, tmpFloat.toArray()); + sprite.setTextureRegion(textureRegion); + sprite.setVertices(tmpFloat.toArray()); + sprite.draw((PolygonSpriteBatch) drawer.getBatch()); + } } else { if (tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ShapeDrawableDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ShapeDrawableDrawer.java index 2f2496b58b..0b7f1c2eec 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ShapeDrawableDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ShapeDrawableDrawer.java @@ -14,7 +14,14 @@ */ package net.rptools.maptool.client.ui.zone.gdx; +import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; +import com.badlogic.gdx.graphics.g2d.TextureRegion; +import com.badlogic.gdx.utils.FloatArray; +import net.rptools.lib.gdx.RepeatablePolygonSprite; import net.rptools.maptool.model.drawing.Drawable; +import net.rptools.maptool.model.drawing.DrawableTexturePaint; import net.rptools.maptool.model.drawing.Pen; import net.rptools.maptool.model.drawing.ShapeDrawable; import space.earlygrey.shapedrawer.JoinType; @@ -42,11 +49,34 @@ protected void drawBorder(Drawable element, Pen pen) { tmpFloat.pop(); } if (pen.getSquareCap()) - drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.POINTY, false); + if(pen.getPaint() instanceof DrawableTexturePaint texturePaint) { + var image = texturePaint.getAsset().getData(); + var pix = new Pixmap(image, 0, image.length); + + //FIXME properly dispose + var region = new TextureRegion(new Texture(pix)); + region.flip(false, true); + pix.dispose(); + + drawer.startRecording(); + drawer.path(tmpFloat.toArray(), pen.getThickness(), JoinType.POINTY, false); + var drawing = drawer.stopRecording(); + var coordinates = new FloatArray(); + drawing.getTransformedXYCoordinates(coordinates); + + var sprite = new RepeatablePolygonSprite(); + sprite.setVertices (coordinates.toArray()); + sprite.setTextureRegion(region); + sprite.draw((PolygonSpriteBatch) drawer.getBatch()); + + } else { + areaRenderer.setTextureRegion(null); + drawer.path(tmpFloat.toArray(), pen.getThickness(), JoinType.POINTY, false); + } else { - drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.NONE, false); - for (int i = 0; i + 1 < tmpFloat.size; i += 2) - drawer.filledCircle(tmpFloat.get(i), tmpFloat.get(i + 1), pen.getThickness() / 2f); + drawer.path(tmpFloat.toArray(), pen.getThickness(), JoinType.NONE, false); + // for (int i = 0; i + 1 < tmpFloat.size; i += 2) + // drawer.filledCircle(tmpFloat.get(i), tmpFloat.get(i + 1), pen.getThickness() / 2f); } } } From f47d72397827962980c3aff3756fb12a0ed393c0 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Fri, 22 Sep 2023 23:34:24 +0200 Subject: [PATCH 092/139] remove RepeatablePolygonSprite.java --- build.gradle | 16 +- .../lib/gdx/RepeatablePolygonSprite.java | 668 ------------------ .../maptool/client/ui/zone/ZoneRenderer.java | 90 ++- .../ui/zone/gdx/AbstractDrawingDrawer.java | 16 +- .../client/ui/zone/gdx/AreaRenderer.java | 42 +- .../client/ui/zone/gdx/GdxRenderer.java | 74 +- .../ui/zone/gdx/ShapeDrawableDrawer.java | 33 +- .../java/net/rptools/maptool/model/Asset.java | 4 +- 8 files changed, 138 insertions(+), 805 deletions(-) delete mode 100644 src/main/java/net/rptools/lib/gdx/RepeatablePolygonSprite.java diff --git a/build.gradle b/build.gradle index 3004aca5b9..0ce7c81f10 100644 --- a/build.gradle +++ b/build.gradle @@ -314,7 +314,7 @@ repositories { maven { url = 'https://jitpack.io' } maven { url "https://www.jetbrains.com/intellij-repository/releases" } maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } - maven { url "https://maven.jzy3d.org/releases/"} + maven { url "https://jogamp.org/deployment/maven"} } // In this section you declare the dependencies for your production and test code @@ -502,18 +502,18 @@ dependencies { implementation 'com.miglayout:miglayout-swing:11.0' // libgdx - implementation 'com.github.thelsing:libgdx-jogl-backend:1.11.3' + //implementation 'com.github.thelsing:libgdx-jogl-backend:1.12.0' //maven local for development - //implementation 'com.thelsing.gdx:gdx-backend-jogl:1.11.2' + implementation 'com.thelsing.gdx:gdx-backend-jogl:1.12.0' - implementation "com.badlogicgames.gdx:gdx:1.11.0" - implementation "com.badlogicgames.gdx:gdx-platform:1.11.0:natives-desktop" + implementation "com.badlogicgames.gdx:gdx:1.12.0" + implementation "com.badlogicgames.gdx:gdx-platform:1.12.0:natives-desktop" //implementation "space.earlygrey:shapedrawer:2.4.0" implementation 'com.github.earlygrey:shapedrawer:extract-vertices-SNAPSHOT' - implementation "com.badlogicgames.gdx:gdx-freetype:1.11.0" - implementation "com.badlogicgames.gdx:gdx-freetype-platform:1.11.0:natives-desktop" + implementation "com.badlogicgames.gdx:gdx-freetype:1.12.0" + implementation "com.badlogicgames.gdx:gdx-freetype-platform:1.12.0:natives-desktop" implementation "com.badlogicgames.gdx-video:gdx-video:1.3.2-SNAPSHOT" - implementation "com.badlogicgames.gdx-video:gdx-video-lwjgl:1.3.2-SNAPSHOT" + implementation "com.badlogicgames.gdx-video:gdx-video-lwjgl3:1.3.2-SNAPSHOT" } diff --git a/src/main/java/net/rptools/lib/gdx/RepeatablePolygonSprite.java b/src/main/java/net/rptools/lib/gdx/RepeatablePolygonSprite.java deleted file mode 100644 index 98b0c5f21a..0000000000 --- a/src/main/java/net/rptools/lib/gdx/RepeatablePolygonSprite.java +++ /dev/null @@ -1,668 +0,0 @@ -package net.rptools.lib.gdx; - -import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.Pixmap; -import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; -import com.badlogic.gdx.graphics.g2d.TextureRegion; -import com.badlogic.gdx.graphics.glutils.ShapeRenderer; -import com.badlogic.gdx.math.EarClippingTriangulator; -import com.badlogic.gdx.math.Intersector; -import com.badlogic.gdx.math.MathUtils; -import com.badlogic.gdx.math.Polygon; -import com.badlogic.gdx.math.Rectangle; -import com.badlogic.gdx.math.Vector2; -import com.badlogic.gdx.utils.Array; -import com.badlogic.gdx.utils.Disposable; -import com.badlogic.gdx.utils.ShortArray; - -/** - * Renders polygon filled with a repeating TextureRegion with specified density - * Without causing an additional flush or render call - * - * @author Avetis Zakharyan (concept and first version) - * @author Kablion (rewrite) - */ -public class RepeatablePolygonSprite implements Disposable { - - public enum WrapType { - STRETCH,REPEAT,REPEAT_MIRRORED - } - - private WrapType wrapTypeX = WrapType.REPEAT; - private WrapType wrapTypeY = WrapType.REPEAT; - - private final Color color = new Color(Color.WHITE); - - private TextureRegion textureRegion; - private TextureRegion whiteTextureRegion; - - private Vector2 textureOffset = new Vector2(); - private float textureWidth = 0; - private float textureHeight = 0; - - private float textureDebugX = 0; - private float textureDebugY = 0; - - private boolean dirtyGrid = true; - private boolean dirtyAttributes = true; - - private Array parts = new Array(); - - private Array vertices = new Array(); - private Array indices = new Array(); - - private int rows; - private Vector2 gridOffset = new Vector2(); - private float gridWidth, gridHeight; - private Vector2 buildOffset = new Vector2(); - - private Polygon polygon = new Polygon(); - private Rectangle boundingRect = new Rectangle(); - - public RepeatablePolygonSprite() { - Pixmap pixmap = new Pixmap(1, 1, Pixmap.Format.RGBA8888); - pixmap.setColor(Color.WHITE); - pixmap.fill(); - this.whiteTextureRegion = new TextureRegion(new Texture(pixmap)); - pixmap.dispose(); - } - - /** - * calculates the grid and the parts in relation to the texture Origin - */ - private void prepareVertices() { - parts.clear(); - if (polygon.getVertices().length == 0) return; - float[] vertices = polygon.getVertices().clone(); - - Polygon polygon = new Polygon(vertices); - Polygon tmpPoly = new Polygon(); - Polygon intersectionPoly = new Polygon(); - EarClippingTriangulator triangulator = new EarClippingTriangulator(); - - int idx; - - Rectangle bounds = polygon.getBoundingRectangle(); - - - if (wrapTypeX == WrapType.STRETCH || textureRegion == null) { - gridWidth = bounds.getWidth(); - } else { - gridWidth = textureWidth; - } - if (wrapTypeY == WrapType.STRETCH || textureRegion == null) { - gridHeight = bounds.getHeight(); - } else { - gridHeight = textureHeight; - } - - polygon.setVertices(offset(vertices)); - - bounds = polygon.getBoundingRectangle(); - - int cols = (int) (Math.ceil(bounds.getWidth() / gridWidth)); - if (bounds.getX() + bounds.getWidth() > (cols + gridOffset.x) * gridWidth) cols++; - rows = (int) Math.ceil(bounds.getHeight() / gridHeight); - if (bounds.getY() + bounds.getHeight() > (rows + gridOffset.y) * gridHeight) rows++; - - for (int col = 0; col < cols; col++) { - for (int row = 0; row < rows; row++) { - float[] verts = new float[8]; - idx = 0; - int offsettedCol = col + (int) gridOffset.x; - int offsettedRow = row + (int) gridOffset.y; - - verts[idx++] = offsettedCol * gridWidth; - verts[idx++] = offsettedRow * gridHeight; - - verts[idx++] = (offsettedCol) * gridWidth; - verts[idx++] = (offsettedRow + 1) * gridHeight; - - verts[idx++] = (offsettedCol + 1) * gridWidth; - verts[idx++] = (offsettedRow + 1) * gridHeight; - - verts[idx++] = (offsettedCol + 1) * gridWidth; - verts[idx] = (offsettedRow) * gridHeight; - - tmpPoly.setVertices(verts); - - Intersector.intersectPolygons(polygon, tmpPoly, intersectionPoly); - verts = intersectionPoly.getVertices(); - if (verts.length > 0) { - parts.add(snapToGrid(verts, offsettedRow, offsettedCol)); - ShortArray arr = triangulator.computeTriangles(verts); - indices.add(arr.toArray()); - } else { - // adding null for key consistancy, needed to get col/row from key - // the other alternative is to make parts - IntMap - parts.add(null); - } - } - } - dirtyGrid = false; - dirtyAttributes = true; - } - - /** - * Builds final vertices with vertex attributes like coordinates, color and region u/v - */ - private void buildVertices() { - vertices.clear(); - if (polygon.getVertices().length == 0) return; - for (int i = 0; i < parts.size; i++) { - float verts[] = parts.get(i); - if (verts == null) continue; - - float[] fullVerts = new float[5 * verts.length / 2]; - int idx = 0; - - int col = i / rows; - int row = i % rows; - int offsettedCol = col + (int) gridOffset.x; - int offsettedRow = row + (int) gridOffset.y; - - for (int j = 0; j < verts.length; j += 2) { - float x = (verts[j] + buildOffset.x + textureOffset.x) - getOriginX(); - x *= getScaleX(); - float y = (verts[j + 1] + buildOffset.y + textureOffset.y) - getOriginY(); - y *= getScaleY(); - if (getRotation() != 0) { - float tempX = x; - float tempY = y; - float rotationInRads = getRotation() * MathUtils.degreesToRadians; - x = tempX * (float) Math.cos(rotationInRads) - tempY * (float) Math.sin(rotationInRads); - y = tempY * (float) Math.cos(rotationInRads) + tempX * (float) Math.sin(rotationInRads); - } - x += getX() + getOriginX(); - y += getY() + getOriginY(); - fullVerts[idx++] = x; - fullVerts[idx++] = y; - - fullVerts[idx++] = color.toFloatBits(); - - float inGridX = verts[j] - offsettedCol * gridWidth; - float inGridY = verts[j + 1] - offsettedRow * gridHeight; - float u = inGridX / gridWidth; - float v = inGridY / gridHeight; - if (u > 1.0f) u = 1.0f; - if (v > 1.0f) v = 1.0f; - if (u < 0.0f) u = 0.0f; - if (v < 0.0f) v = 0.0f; - // (col & 1 == 0) == true : col is even - if (wrapTypeX == WrapType.REPEAT_MIRRORED & (col & 1) != 0) u = 1 - u; - if (wrapTypeY == WrapType.REPEAT_MIRRORED & (row & 1) == 0) v = 1 - v; - - if (textureRegion != null) { - u = textureRegion.getU() + (textureRegion.getU2() - textureRegion.getU()) * u; - v = textureRegion.getV() + (textureRegion.getV2() - textureRegion.getV()) * v; - } else { - u = whiteTextureRegion.getU() + (whiteTextureRegion.getU2() - whiteTextureRegion.getU()) * u; - v = whiteTextureRegion.getV() + (whiteTextureRegion.getV2() - whiteTextureRegion.getV()) * v; - } - fullVerts[idx++] = u; - fullVerts[idx++] = v; - } - vertices.add(fullVerts); - } - - this.textureDebugX = (buildOffset.x + textureOffset.x) * getScaleX(); - this.textureDebugY = (buildOffset.y + textureOffset.y) * getScaleY(); - if (getRotation() != 0) { - float tempX = this.textureDebugX; - float tempY = this.textureDebugY; - float rotationInRads = getRotation() * MathUtils.degreesToRadians; - this.textureDebugX = tempX * (float) Math.cos(rotationInRads) - tempY * (float) Math.sin(rotationInRads); - this.textureDebugY = tempY * (float) Math.cos(rotationInRads) + tempX * (float) Math.sin(rotationInRads); - } - this.textureDebugX += getX(); - this.textureDebugY += getY(); - - this.boundingRect = this.polygon.getBoundingRectangle(); - - dirtyAttributes = false; - } - - /** - * This is a garbage, due to Intersector returning values slightly different then the grid values - * Snapping exactly to grid is important, so that during bulidVertices method, it can be figured out - * if points are on the wall of it's own grid box or not, to set u/v properly. - * Any other implementations are welcome - */ - private float[] snapToGrid(float[] vertices, int row, int col) { - float[] resultVerts = vertices.clone(); - for (int i = 0; i < resultVerts.length; i += 2) { - float inGridX = resultVerts[i] - col * gridWidth; - float inGridY = resultVerts[i + 1] - row * gridHeight; - float inGridXFraction = inGridX / gridWidth; - float inGridYFraction = inGridY / gridHeight; - if (inGridXFraction != 1 & inGridXFraction > 0.9999f) { - resultVerts[i] = (col + 1) * gridWidth; - } else if (inGridXFraction != 0 & inGridXFraction < 0.0001f) { - resultVerts[i] = col * gridWidth; - } - if (inGridYFraction != 1 & inGridYFraction > 0.9999f) { - resultVerts[i + 1] = (row + 1) * gridHeight; - } else if (inGridYFraction != 0 & inGridYFraction < 0.0001f) { - resultVerts[i + 1] = row * gridHeight; - } - } - - return resultVerts; - } - - /** - * Offsets polygon to 0 - textureOffset coordinate for ease of calculations, later this is put back on final render - * - * @param vertices vertices to offset - * @return offsetted vertices - */ - private float[] offset(float[] vertices) { - float[] result = vertices.clone(); - - Polygon polygon = new Polygon(result); - Rectangle bounds = polygon.getBoundingRectangle(); - - buildOffset.x = bounds.x; - buildOffset.y = bounds.y; - - for (int i = 0; i < result.length; i += 2) { - result[i] -= (buildOffset.x + textureOffset.x); - result[i + 1] -= (buildOffset.y + textureOffset.y); - } - - gridOffset.x = (int) Math.floor(-(textureOffset.x / gridWidth)); - gridOffset.y = (int) Math.floor(-(textureOffset.y / gridHeight)); - - return result; - } - - public void draw(PolygonSpriteBatch batch) { - if (dirtyGrid || parts.size == 0) { - prepareVertices(); - } - if (dirtyAttributes || vertices.size == 0) { - buildVertices(); - } - - Texture textureToDraw; - if (textureRegion != null) { - textureToDraw = textureRegion.getTexture(); - } else { - textureToDraw = whiteTextureRegion.getTexture(); - } - - for (int i = 0; i < vertices.size; i++) { - batch.draw(textureToDraw, vertices.get(i), 0, vertices.get(i).length, indices.get(i), 0, indices.get(i).length); - } - } - - public void drawDebug(ShapeRenderer shapes, Color color) { - if (dirtyGrid) { - prepareVertices(); - } - if (dirtyAttributes) { - buildVertices(); - } - - // draw grid - for (int i = 0; i < vertices.size; i++) { - - // draw vertices in grid - shapes.setColor(color); - float[] curVerts = vertices.get(i); - short[] curIndices = this.indices.get(i); - for (int j = 0; j < curIndices.length; j += 3) { - float x1 = curVerts[curIndices[j] * 5]; - float y1 = curVerts[curIndices[j] * 5 + 1]; - float x2 = curVerts[curIndices[j + 1] * 5]; - float y2 = curVerts[curIndices[j + 1] * 5 + 1]; - float x3 = curVerts[curIndices[j + 2] * 5]; - float y3 = curVerts[curIndices[j + 2] * 5 + 1]; - shapes.triangle(x1, y1, x2, y2, x3, y3); - } - } - - //draw cross on grid 0/0 - shapes.setColor(Color.RED); - shapes.line(textureDebugX - 1, textureDebugY - 1, - textureDebugX + 1, textureDebugY + 1); - shapes.line(textureDebugX - 1, textureDebugY + 1, - textureDebugX + 1, textureDebugY - 1); - } - - @Override - public void dispose() { - whiteTextureRegion.getTexture().dispose(); - whiteTextureRegion = null; - if (textureRegion != null) { - textureRegion.getTexture().dispose(); - textureRegion = null; - } - polygon = null; - boundingRect = null; - parts.clear(); - parts = null; - vertices.clear(); - vertices = null; - indices.clear(); - indices = null; - buildOffset = null; - gridOffset = null; - textureOffset = null; - } - - /** - * Sets the outline vertices of the polygon - * - * @param vertices - vertices of polygon relative to the origin - */ - public void setVertices(float[] vertices) { - if (vertices == null) { - Polygon tempPolygon = new Polygon(); - tempPolygon.setPosition(getX(), getY()); - tempPolygon.setOrigin(getOriginX(), getOriginY()); - tempPolygon.setRotation(getRotation()); - tempPolygon.setScale(getScaleX(), getScaleY()); - polygon = tempPolygon; - } else { - polygon.setVertices(vertices); - } - dirtyGrid = true; - } - - /** - * Sets the texture region, the size of repeating grid is equal to region size - * - * @param textureRegion - texture region mapped on the polygon - * @param wrapTypeX - WrapType how the texture region is drawn along the X-Axis - * @param wrapTypeY - WrapType how the texture region is drawn along the Y-Axis - */ - public void setTextureRegion(TextureRegion textureRegion, WrapType wrapTypeX, WrapType wrapTypeY) { - setTextureRegion(textureRegion); - setWrapTypeX(wrapTypeX); - setWrapTypeY(wrapTypeY); - } - - /** - * Sets the texture region, the size of repeating grid is equal to region size - * - * @param textureRegion - texture region mapped on the polygon - * @param textureWidth - width of the repeating region - * @param textureHeight - height of the repeating region - */ - public void setTextureRegion(TextureRegion textureRegion, float textureWidth, float textureHeight) { - setTextureRegion(textureRegion); - setTextureSize(textureWidth, textureHeight); - } - - /** - * Sets the texture region, the size of repeating grid is equal to region size - * - * @param textureRegion - texture region mapped on the polygon - * @param textureWidth - width of the repeating region - * @param textureHeight - height of the repeating region - * @param wrapTypeX - WrapType how the texture region is drawn along the X-Axis - * @param wrapTypeY - WrapType how the texture region is drawn along the Y-Axis - */ - public void setTextureRegion(TextureRegion textureRegion, float textureWidth, float textureHeight, WrapType wrapTypeX, WrapType wrapTypeY) { - setTextureRegion(textureRegion); - setTextureSize(textureWidth, textureHeight); - setWrapTypeX(wrapTypeX); - setWrapTypeY(wrapTypeY); - } - - /** - * Sets the texture region, the size of repeating grid is equal to region size if not set already - * - * @param textureRegion - texture region mapped on the polygon - */ - public void setTextureRegion(TextureRegion textureRegion) { - this.textureRegion = textureRegion; - if (this.textureWidth == 0) this.textureWidth = textureRegion.getRegionWidth(); - if (this.textureHeight == 0) this.textureHeight = textureRegion.getRegionHeight(); - dirtyGrid = true; - } - - /** - * Sets the position of the texture where 0 is the bottom left corner of the bounding rectangle - */ - public void setTextureOffset(float x, float y) { - this.textureOffset.set(x, y); - dirtyGrid = true; - } - - /** - * Sets the to be drawn width and height of the texture - */ - public void setTextureSize(float width, float height) { - this.textureWidth = width; - this.textureHeight = height; - dirtyGrid = true; - } - - /** - * Sets the sprite's position in the world - */ - public void setPosition(float x, float y) { - polygon.setPosition(x, y); - dirtyAttributes = true; - } - - /** - * Sets the sprite's x position in the world - */ - public void setX(float x) { - polygon.setPosition(x, getY()); - dirtyAttributes = true; - } - - /** - * Sets the sprite's y position in the world - */ - public void setY(float y) { - polygon.setPosition(getX(), y); - dirtyAttributes = true; - } - - /** - * Sets the sprite's position in the world - */ - public void translate(float x, float y) { - polygon.setPosition(getX() + x, getY() + y); - dirtyAttributes = true; - } - - /** - * Sets the origin in relation to the sprite's position for scaling and rotation. - */ - public void setOrigin(float x, float y) { - polygon.setOrigin(x, y); - dirtyAttributes = true; - } - - /** - * Sets the origin x in relation to the sprite's position for scaling and rotation. - */ - public void setOriginX(float x) { - setOrigin(x, getOriginY()); - } - - /** - * Sets the origin y in relation to the sprite's position for scaling and rotation. - */ - public void setOriginY(float y) { - setOrigin(getOriginX(), y); - } - - /** - * Sets the scale along both axises where 1 = normal Size - */ - public void setScale(float scaleX, float scaleY) { - polygon.setScale(scaleX, scaleY); - dirtyAttributes = true; - } - - /** - * Sets the scale along the x axis where 1 = normal Size - */ - public void setScaleX(float scaleX) { - polygon.setScale(scaleX, getScaleY()); - dirtyAttributes = true; - } - - /** - * Sets the scale along the y axis where 1 = normal Size - */ - public void setScaleY(float scaleY) { - polygon.setScale(getScaleX(), scaleY); - dirtyAttributes = true; - } - - /** - * Adds the specified scale to the current scale. - */ - public void scaleBy(float scaleXY) { - polygon.scale(scaleXY); - dirtyAttributes = true; - } - - /** - * Adds the specified scale to the current scale. - */ - public void scaleBy(float scaleX, float scaleY) { - polygon.setScale(getScaleX() + scaleX, getScaleY() + scaleY); - dirtyAttributes = true; - } - - public void setRotation(float degrees) { - polygon.setRotation(degrees); - dirtyAttributes = true; - } - - /** - * Adds the specified rotation to the current rotation. - */ - public void rotateBy(float amountInDegrees) { - polygon.rotate(amountInDegrees); - dirtyAttributes = true; - } - - /** - * Sets the type how the texture region is drawn along the X-Axis - * - * @param wrapType - a type of WrapType - */ - public void setWrapTypeX(WrapType wrapType) { - this.wrapTypeX = wrapType; - dirtyGrid = true; - } - - /** - * Sets the type how the texture region is drawn along the Y-Axis - * - * @param wrapType - a type of WrapType - */ - public void setWrapTypeY(WrapType wrapType) { - this.wrapTypeY = wrapType; - dirtyGrid = true; - } - - /** - * @param color - Tint color to be applied to entire polygon - */ - public void setColor(Color color) { - this.color.set(color); - dirtyAttributes = true; - } - - public WrapType getWrapTypeX() { - return wrapTypeX; - } - - public WrapType getWrapTypeY() { - return wrapTypeY; - } - - public TextureRegion getTextureRegion() { - return textureRegion; - } - - public float getTextureOffsetX() { - return textureOffset.x; - } - - public float getTextureOffsetY() { - return textureOffset.y; - } - - public float getTextureWidth() { - return textureWidth; - } - - public float getTextureHeight() { - return textureHeight; - } - - public float getX() { - return polygon.getX(); - } - - public float getY() { - return polygon.getY(); - } - - public float getOriginX() { - return polygon.getOriginX(); - } - - public float getOriginY() { - return polygon.getOriginY(); - } - - public float getScaleX() { - return polygon.getScaleX(); - } - - public float getScaleY() { - return polygon.getScaleY(); - } - - public float getRotation() { - return polygon.getRotation(); - } - - public Color getColor() { - return color; - } - - /** - * Returns the packed vertices, colors, and texture coordinates for this sprite. - */ - public Array getVertices() { - return vertices; - } - - public float[] getOriginalVertices() { - return polygon.getVertices().clone(); - } - - public float[] getTransformedVertices() { - return polygon.getTransformedVertices().clone(); - } - - public Polygon getPolygon() { - Polygon tempPolygon = new Polygon(); - if (getOriginalVertices().length != 0) tempPolygon.setVertices(getOriginalVertices()); - tempPolygon.setPosition(getX(), getY()); - tempPolygon.setOrigin(getOriginX(), getOriginY()); - tempPolygon.setRotation(getRotation()); - tempPolygon.setScale(getScaleX(), getScaleY()); - return tempPolygon; - } - - public Rectangle getBoundingRectangle() { - return this.boundingRect; - } -} - diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index 59e5706f02..515ba12c12 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -60,6 +60,7 @@ import net.rptools.maptool.client.ui.token.AbstractTokenOverlay; import net.rptools.maptool.client.ui.token.BarTokenOverlay; import net.rptools.maptool.client.ui.token.dialog.create.NewTokenDialog; +import net.rptools.maptool.client.ui.zone.gdx.GdxRenderer; import net.rptools.maptool.client.walker.ZoneWalker; import net.rptools.maptool.events.MapToolEventBus; import net.rptools.maptool.language.I18N; @@ -159,12 +160,26 @@ public class ZoneRenderer extends JComponent private ZonePoint previousZonePoint; + public String getLoadingProgress() { + return loadingProgress; + } + + public Token getTokenUnderMouse() { + return tokenUnderMouse; + } + + public Map> getTokenStackMap() { + return tokenStackMap; + } + public enum TokenMoveCompletion { TRUE, FALSE, OTHER } + private boolean skipDrawing; + /** * Constructor for the ZoneRenderer from a zone. * @@ -239,6 +254,10 @@ public void showPath(Token token, boolean show) { } } + public List getShowPathList() { + return showPathList; + } + /** * If token is not null, center on it, set the active layer to it, select it, and request focus. * @@ -345,6 +364,10 @@ public void updateMoveSelectionSet(GUID keyToken, ZonePoint offset) { repaintDebouncer.dispatch(); // Jamz: may cause flicker when using AI } + public Map getSelectionSetMap() { + return selectionSetMap; + } + public void toggleMoveSelectionSetWaypoint(GUID keyToken, ZonePoint location) { SelectionSet set = selectionSetMap.get(keyToken); if (set == null) { @@ -593,6 +616,7 @@ public boolean isTokenMoving(Token token) { protected void setViewOffset(int x, int y) { zoneScale.setOffset(x, y); + GdxRenderer.getInstance().setScale(zoneScale); } public void centerOn(ZonePoint point) { @@ -634,6 +658,7 @@ public void flush(Token token) { tokenStackMap = null; zoneView.flush(token); + GdxRenderer.getInstance().flushFog(); } /** @@ -676,6 +701,7 @@ public void flushLight() { public void flushFog() { visibleScreenArea = null; repaintDebouncer.dispatch(); + GdxRenderer.getInstance().flushFog(); } /** @@ -694,7 +720,6 @@ public void removeOverlay(ZoneOverlay overlay) { } public void moveViewBy(int dx, int dy) { - setViewOffset(getViewOffsetX() + dx, getViewOffsetY() + dy); } @@ -713,16 +738,19 @@ public void moveViewByCells(int dx, int dy) { public void zoomReset(int x, int y) { zoneScale.zoomReset(x, y); MapTool.getFrame().getZoomStatusBar().update(); + GdxRenderer.getInstance().setScale(zoneScale); } public void zoomIn(int x, int y) { zoneScale.zoomIn(x, y); MapTool.getFrame().getZoomStatusBar().update(); + GdxRenderer.getInstance().setScale(zoneScale); } public void zoomOut(int x, int y) { zoneScale.zoomOut(x, y); MapTool.getFrame().getZoomStatusBar().update(); + GdxRenderer.getInstance().setScale(zoneScale); } public void setView(int x, int y, double scale) { @@ -731,6 +759,7 @@ public void setView(int x, int y, double scale) { zoneScale.setScale(scale); MapTool.getFrame().getZoomStatusBar().update(); + GdxRenderer.getInstance().setScale(zoneScale); } public void enforceView(int x, int y, double scale, int gmWidth, int gmHeight) { @@ -751,6 +780,7 @@ public void enforceView(int x, int y, double scale, int gmWidth, int gmHeight) { setScale(scale); centerOn(new ZonePoint(x, y)); + GdxRenderer.getInstance().setScale(zoneScale); } public void restoreView() { @@ -759,6 +789,7 @@ public void restoreView() { centerOn(previousZonePoint); setScale(previousScale); + GdxRenderer.getInstance().setScale(zoneScale); } public void forcePlayersView() { @@ -795,6 +826,7 @@ public void paintComponent(Graphics g) { timer.clear(); timer.setThreshold(10); timer.start("paintComponent"); + skipDrawing = MapTool.getFrame().getGdxPanel().isVisible(); Graphics2D g2d = (Graphics2D) g; @@ -818,19 +850,23 @@ public void paintComponent(Graphics g) { int noteVPos = 20; if (MapTool.getFrame().areFullScreenToolsShown()) noteVPos += 40; - if (!AppPreferences.getMapVisibilityWarning() && (!zone.isVisible() && pl.isGMView())) { + if (!AppPreferences.getMapVisibilityWarning() + && (!zone.isVisible() && pl.isGMView()) + && !skipDrawing) { GraphicsUtil.drawBoxedString( bufferG2d, I18N.getText("zone.map_not_visible"), getSize().width / 2, noteVPos); noteVPos += 20; } - if (AppState.isShowAsPlayer()) { + if (AppState.isShowAsPlayer() && !skipDrawing) { GraphicsUtil.drawBoxedString( bufferG2d, I18N.getText("zone.player_view"), getSize().width / 2, noteVPos); } timer.start("paintComponent:renderBuffer"); bufferG2d.dispose(); - g2d.drawImage(buffer, null, 0, 0); + if (!skipDrawing) { + g2d.drawImage(buffer, null, 0, 0); + } timer.stop("paintComponent:renderBuffer"); } @@ -1064,16 +1100,20 @@ public void renderZone(Graphics2D g2d, PlayerView view) { } // Are we still waiting to show the zone ? if (isLoading()) { - g2d.setColor(Color.black); - g2d.fillRect(0, 0, viewRect.width, viewRect.height); - GraphicsUtil.drawBoxedString(g2d, loadingProgress, viewRect.width / 2, viewRect.height / 2); + if (!skipDrawing) { + g2d.setColor(Color.black); + g2d.fillRect(0, 0, viewRect.width, viewRect.height); + GraphicsUtil.drawBoxedString(g2d, loadingProgress, viewRect.width / 2, viewRect.height / 2); + } return; } if (MapTool.getCampaign().isBeingSerialized()) { - g2d.setColor(Color.black); - g2d.fillRect(0, 0, viewRect.width, viewRect.height); - GraphicsUtil.drawBoxedString( - g2d, " Please Wait ", viewRect.width / 2, viewRect.height / 2); + if (!skipDrawing) { + g2d.setColor(Color.black); + g2d.fillRect(0, 0, viewRect.width, viewRect.height); + GraphicsUtil.drawBoxedString( + g2d, " Please Wait ", viewRect.width / 2, viewRect.height / 2); + } return; } if (zone == null) { @@ -1149,7 +1189,7 @@ public void renderZone(Graphics2D g2d, PlayerView view) { timer.stop("calcs-2"); // Rendering pipeline - if (zone.drawBoard()) { + if (zone.drawBoard() && !skipDrawing) { timer.start("board"); renderBoard(g2d, view); timer.stop("board"); @@ -1160,6 +1200,7 @@ public void renderZone(Graphics2D g2d, PlayerView view) { timer.start("drawableBackground"); renderDrawableOverlay(g2d, backgroundDrawableRenderer, view, drawables); timer.stop("drawableBackground"); + // } List background = zone.getBackgroundStamps(false); if (!background.isEmpty()) { @@ -1380,12 +1421,13 @@ private void delayRendering(ItemRenderer renderer) { } private void renderRenderables(Graphics2D g) { + if (skipDrawing) return; for (ItemRenderer renderer : itemRenderList) { renderer.render(g); } } - private enum LightOverlayClipStyle { + public enum LightOverlayClipStyle { CLIP_TO_VISIBLE_AREA, CLIP_TO_NOT_VISIBLE_AREA, } @@ -1405,6 +1447,8 @@ private enum LightOverlayClipStyle { * @param view the player view */ private void renderLights(Graphics2D g, PlayerView view) { + if (skipDrawing) return; + // Collect and organize lights timer.start("renderLights:getLights"); final var drawableLights = zoneView.getDrawableLights(view); @@ -1454,6 +1498,7 @@ private void renderLights(Graphics2D g, PlayerView view) { * @param view the player view. */ private void renderAuras(Graphics2D g, PlayerView view) { + if (skipDrawing) return; // Setup timer.start("renderAuras:getAuras"); final var drawableAuras = zoneView.getDrawableAuras(); @@ -1653,7 +1698,7 @@ private void renderLightOverlay( * @param view The player view. */ private void renderPlayerDarkness(Graphics2D g, PlayerView view) { - if (view.isGMView()) { + if (view.isGMView() || skipDrawing) { // GMs see the darkness rendered as lights, not as blackness. return; } @@ -1718,6 +1763,7 @@ private void renderGMVisionOverlay(Graphics2D g, PlayerView view) { * if there is one. */ private void renderVisionOverlay(Graphics2D g, PlayerView view) { + if (skipDrawing) return; Area currentTokenVisionArea = zoneView.getVisibleArea(tokenUnderMouse, view); if (currentTokenVisionArea == null) { return; @@ -1820,6 +1866,7 @@ private void renderLabels(Graphics2D g, PlayerView view) { } private void renderFog(Graphics2D g, PlayerView view) { + if (skipDrawing) return; Dimension size = getSize(); Area fogClip = new Area(new Rectangle(0, 0, size.width, size.height)); @@ -1977,6 +2024,8 @@ public boolean isLoading() { protected void renderDrawableOverlay( Graphics g, DrawableRenderer renderer, PlayerView view, List drawnElements) { + if (skipDrawing) return; + Rectangle viewport = new Rectangle( zoneScale.getOffsetX(), zoneScale.getOffsetY(), getSize().width, getSize().height); @@ -2043,6 +2092,7 @@ protected void renderBoard(Graphics2D g, PlayerView view) { } protected void renderGrid(Graphics2D g, PlayerView view) { + if (skipDrawing) return; int gridSize = (int) (zone.getGrid().getSize() * getScale()); if (!AppState.isShowGrid() || gridSize < MIN_GRID_SIZE) { return; @@ -2051,12 +2101,13 @@ protected void renderGrid(Graphics2D g, PlayerView view) { } protected void renderCoordinates(Graphics2D g, PlayerView view) { + if (skipDrawing) return; if (AppState.isShowCoordinates()) { zone.getGrid().drawCoordinatesOverlay(g, this); } } - private Set getOwnedMovementSet(PlayerView view) { + public Set getOwnedMovementSet(PlayerView view) { Set movementSet = new HashSet(); for (SelectionSet selection : selectionSetMap.values()) { if (selection.getPlayerId().equals(MapTool.getPlayer().getName())) { @@ -2066,7 +2117,7 @@ private Set getOwnedMovementSet(PlayerView view) { return movementSet; } - private Set getUnOwnedMovementSet(PlayerView view) { + public Set getUnOwnedMovementSet(PlayerView view) { Set movementSet = new HashSet(); for (SelectionSet selection : selectionSetMap.values()) { if (!selection.getPlayerId().equals(MapTool.getPlayer().getName())) { @@ -2077,7 +2128,7 @@ private Set getUnOwnedMovementSet(PlayerView view) { } protected void showBlockedMoves(Graphics2D g, PlayerView view, Set movementSet) { - if (selectionSetMap.isEmpty()) { + if (selectionSetMap.isEmpty() || skipDrawing) { return; } double scale = zoneScale.getScale(); @@ -3026,6 +3077,7 @@ protected void renderTokens( // This ensures that the timer is always stopped timer.stop("tokenlist-1e"); } + // Markers timer.start("renderTokens:Markers"); // System.out.println("Token " + token.getName() + " is a marker? " + token.isMarker()); @@ -3089,6 +3141,8 @@ protected void renderTokens( } timer.stop("renderTokens:OnscreenCheck"); + if (skipDrawing) continue; + // create a per token Graphics object - normally clipped, unless always visible Area tokenCellArea = zone.getGrid().getTokenCellArea(tokenBounds); Graphics2D tokenG; @@ -3680,7 +3734,7 @@ protected void renderTokens( * @param isGMView whether it is the view of a GM * @return true if the token is need of clipping, false otherwise */ - private boolean isTokenInNeedOfClipping(Token token, Area tokenCellArea, boolean isGMView) { + public boolean isTokenInNeedOfClipping(Token token, Area tokenCellArea, boolean isGMView) { // can view everything or zone is not using vision = no clipping needed if (isGMView || !zoneView.isUsingVision()) return false; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java index 27c1139fc3..63c66ab2af 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java @@ -22,7 +22,6 @@ import com.badlogic.gdx.utils.FloatArray; import java.awt.geom.Area; import java.awt.geom.PathIterator; - import net.rptools.maptool.model.drawing.*; import space.earlygrey.shapedrawer.ShapeDrawer; @@ -41,19 +40,20 @@ public void draw(Drawable element, Pen pen) { if (pen.getBackgroundPaint() instanceof DrawableColorPaint) { var colorPaint = (DrawableColorPaint) pen.getBackgroundPaint(); Color.argb8888ToColor(tmpColor, colorPaint.getColor()); - drawer.setColor(tmpColor); - areaRenderer.setTextureRegion(null); - } else if(pen.getBackgroundPaint() instanceof DrawableTexturePaint texturePaint) { + areaRenderer.setColor(tmpColor); + areaRenderer.setTextureRegion(drawer.getRegion()); + } else if (pen.getBackgroundPaint() instanceof DrawableTexturePaint texturePaint) { var image = texturePaint.getAsset().getData(); var pix = new Pixmap(image, 0, image.length); - - //FIXME properly dispose - var region = new TextureRegion(new Texture(pix)); - region.flip(false, true); + var tex = new Texture(pix); + tex.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat); + // FIXME properly dispose + var region = new TextureRegion(tex); areaRenderer.setTextureRegion(region); pix.dispose(); } drawBackground(element, pen); + areaRenderer.setColor(null); if (pen.getPaint() instanceof DrawableColorPaint) { var colorPaint = (DrawableColorPaint) pen.getPaint(); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java index 0aeb1a300a..5492fc5c05 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java @@ -14,22 +14,29 @@ */ package net.rptools.maptool.client.ui.zone.gdx; -//import com.badlogic.gdx.graphics.g2d.RepeatablePolygonSprite; -import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; -import com.badlogic.gdx.graphics.g2d.TextureRegion; +// import com.badlogic.gdx.graphics.g2d.RepeatablePolygonSprite; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.*; import com.badlogic.gdx.math.Bezier; +import com.badlogic.gdx.math.EarClippingTriangulator; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.FloatArray; import java.awt.geom.Area; import java.awt.geom.PathIterator; - -import net.rptools.lib.gdx.RepeatablePolygonSprite; import space.earlygrey.shapedrawer.JoinType; import space.earlygrey.shapedrawer.ShapeDrawer; public class AreaRenderer { private FloatArray tmpFloat = new FloatArray(); + + private Color color; + + public void setColor(Color value) { + color = value; + } + + public EarClippingTriangulator triangulator = new EarClippingTriangulator(); private ShapeDrawer drawer; private float[] floatsFromArea = new float[6]; private Vector2 tmpVector = new Vector2(); @@ -39,7 +46,6 @@ public class AreaRenderer { private Vector2 tmpVector3 = new Vector2(); private Vector2 tmpVectorOut = new Vector2(); - // private RepeatablePolygonSprite polygonSprite = new RepeatablePolygonSprite(); private TextureRegion textureRegion = null; public AreaRenderer(ShapeDrawer drawer) { @@ -70,20 +76,16 @@ protected void paintArea(Area area, boolean fill) { pathToFloatArray(area.getPathIterator(null)); if (fill) { - var lastX = tmpFloat.get(tmpFloat.size - 2); - var lastY = tmpFloat.get(tmpFloat.size - 1); - if (lastX != tmpFloat.get(0) && lastY != tmpFloat.get(1)) - tmpFloat.add(tmpFloat.get(0), tmpFloat.get(1)); - - if(textureRegion == null) { - drawer.filledPolygon(tmpFloat.toArray()); - } else { - var sprite = new RepeatablePolygonSprite(); - // sprite.setPolygon(textureRegion, tmpFloat.toArray()); - sprite.setTextureRegion(textureRegion); - sprite.setVertices(tmpFloat.toArray()); - sprite.draw((PolygonSpriteBatch) drawer.getBatch()); - } + var vertices = tmpFloat.toArray(); + var indicies = triangulator.computeTriangles(vertices); + var polyreg = new PolygonRegion(textureRegion, vertices, indicies.toArray()); + var poly = new PolygonSprite(polyreg); + var batch = (PolygonSpriteBatch) drawer.getBatch(); + if (color != null) { + poly.setColor(color); + } + poly.draw(batch); + } else { if (tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 0319773c33..9e0350227a 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -652,7 +652,7 @@ private void renderGMVisionOverlay(PlayerView view) { private void renderVisionOverlay(PlayerView view) { var tokenUnderMouse = zoneRenderer.getTokenUnderMouse(); - Area currentTokenVisionArea = zoneRenderer.getVisibleArea(tokenUnderMouse); + Area currentTokenVisionArea = zoneRenderer.getZoneView().getVisibleArea(tokenUnderMouse, view); if (currentTokenVisionArea == null) { return; } @@ -1165,7 +1165,7 @@ private void renderLights(PlayerView view) { if (drawableLights == null) { timer.start("renderLights:populateCache"); drawableLights = new ArrayList<>(zoneRenderer.getZoneView().getDrawableLights(view)); - drawableLights.removeIf(light -> light.getType() != LightSource.Type.NORMAL); + // drawableLights.removeIf(light -> light.getType() != LightSource.Type.NORMAL); timer.stop("renderLights:populateCache"); } timer.start("renderLights:filterLights"); @@ -2010,9 +2010,11 @@ private Sprite getSprite(MD5Key key) { if (!skip) { videoPlayer.update(); var texture = videoPlayer.getTexture(); - var sprite = new Sprite(texture); - sprite.setSize(texture.getWidth(), texture.getHeight()); - return sprite; + if (texture != null) { + var sprite = new Sprite(texture); + sprite.setSize(texture.getWidth(), texture.getHeight()); + return sprite; + } } } @@ -3125,7 +3127,9 @@ private void disposeZoneTextures() { } private void initializeZoneResources(Zone newZone) { - if (newZone == null || !initialized) return; + if (newZone == null || !initialized) { + return; + } zoneRenderer = MapTool.getFrame().getZoneRenderer(newZone); @@ -3194,76 +3198,18 @@ private Sprite paintToSprite(DrawablePaint paint) { void onZoneActivated(ZoneActivated event) { var oldZone = zone; - // first disable rendering during intitialisation; renderZone = false; if (oldZone != null) { disposeZoneResources(); - // oldZone.removeModelChangeListener(this); } var newZone = event.zone(); - // newZone.addModelChangeListener(this); initializeZoneResources(newZone); - // just in case we are running before create was called and hence initializeZoneResources does - // nothing zone = newZone; renderZone = true; } - /* - @Override - public void modelChanged(ModelChangeEvent event) { - - Object evt = event.getEvent(); - System.out.println("ModelChangend: " + evt); - if (!(evt instanceof Zone.Event)) return; - var eventType = (Zone.Event) evt; - switch (eventType) { - case TOPOLOGY_CHANGED: - flushFog(); - // flushLight(); - break; - case FOG_CHANGED: - flushFog = true; - break; - case TOKEN_CHANGED: - { - updateVisibleArea(); - var token = (Token) event.getArg(); - break; - } - case TOKEN_ADDED: - { - var token = (Token) event.getArg(); - System.out.println(); - break; - } - } - */ - /* - if (evt == Zone.Event.TOKEN_CHANGED - || evt == Zone.Event.TOKEN_REMOVED - || evt == Zone.Event.TOKEN_ADDED) { - if (event.getArg() instanceof List) { - @SuppressWarnings("unchecked") - List list = (List) (event.getArg()); - for (Token token : list) { - zoneRenderer.flush(token); - } - } else { - zoneRenderer.flush((Token) event.getArg()); - } - }*/ - /* - var currentZone = zone; - - // for now quick and dirty - disposeZoneResources(); - initializeZoneResources(currentZone); - - } - */ public void setScale(Scale scale) { if (!initialized) { return; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ShapeDrawableDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ShapeDrawableDrawer.java index 0b7f1c2eec..99ce586b82 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ShapeDrawableDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ShapeDrawableDrawer.java @@ -16,10 +16,11 @@ import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.PolygonRegion; +import com.badlogic.gdx.graphics.g2d.PolygonSprite; import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureRegion; -import com.badlogic.gdx.utils.FloatArray; -import net.rptools.lib.gdx.RepeatablePolygonSprite; +import com.badlogic.gdx.math.EarClippingTriangulator; import net.rptools.maptool.model.drawing.Drawable; import net.rptools.maptool.model.drawing.DrawableTexturePaint; import net.rptools.maptool.model.drawing.Pen; @@ -29,6 +30,8 @@ public class ShapeDrawableDrawer extends AbstractDrawingDrawer { + private EarClippingTriangulator triangulator = new EarClippingTriangulator(); + public ShapeDrawableDrawer(ShapeDrawer drawer) { super(drawer); } @@ -49,25 +52,21 @@ protected void drawBorder(Drawable element, Pen pen) { tmpFloat.pop(); } if (pen.getSquareCap()) - if(pen.getPaint() instanceof DrawableTexturePaint texturePaint) { + if (pen.getPaint() instanceof DrawableTexturePaint texturePaint) { var image = texturePaint.getAsset().getData(); var pix = new Pixmap(image, 0, image.length); - //FIXME properly dispose + // FIXME properly dispose var region = new TextureRegion(new Texture(pix)); - region.flip(false, true); + // region.flip(false, true); pix.dispose(); - drawer.startRecording(); - drawer.path(tmpFloat.toArray(), pen.getThickness(), JoinType.POINTY, false); - var drawing = drawer.stopRecording(); - var coordinates = new FloatArray(); - drawing.getTransformedXYCoordinates(coordinates); - - var sprite = new RepeatablePolygonSprite(); - sprite.setVertices (coordinates.toArray()); - sprite.setTextureRegion(region); - sprite.draw((PolygonSpriteBatch) drawer.getBatch()); + var vertices = tmpFloat.toArray(); + var indicies = triangulator.computeTriangles(vertices); + var polyreg = new PolygonRegion(region, vertices, indicies.toArray()); + var poly = new PolygonSprite(polyreg); + var batch = (PolygonSpriteBatch) drawer.getBatch(); + poly.draw(batch); } else { areaRenderer.setTextureRegion(null); @@ -75,8 +74,8 @@ protected void drawBorder(Drawable element, Pen pen) { } else { drawer.path(tmpFloat.toArray(), pen.getThickness(), JoinType.NONE, false); - // for (int i = 0; i + 1 < tmpFloat.size; i += 2) - // drawer.filledCircle(tmpFloat.get(i), tmpFloat.get(i + 1), pen.getThickness() / 2f); + // for (int i = 0; i + 1 < tmpFloat.size; i += 2) + // drawer.filledCircle(tmpFloat.get(i), tmpFloat.get(i + 1), pen.getThickness() / 2f); } } } diff --git a/src/main/java/net/rptools/maptool/model/Asset.java b/src/main/java/net/rptools/maptool/model/Asset.java index 6c10df0a18..239741160c 100644 --- a/src/main/java/net/rptools/maptool/model/Asset.java +++ b/src/main/java/net/rptools/maptool/model/Asset.java @@ -174,9 +174,9 @@ public static Type fromMediaType(MediaType mediaType, String filename) { yield Type.INVALID; } - default -> Type.INVALID; + default -> Type.DATA; }; - default -> Type.INVALID; + default -> Type.DATA; }; } } From 1dab082a94d6c26adea600d925782441fe20d525 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 23 Sep 2023 22:54:18 +0200 Subject: [PATCH 093/139] save wip --- src/main/java/net/rptools/lib/gdx/Joiner.java | 138 ++++++ .../ui/zone/gdx/AbstractDrawingDrawer.java | 74 ++-- .../ui/zone/gdx/AbstractTemplateDrawer.java | 56 ++- .../client/ui/zone/gdx/AreaRenderer.java | 408 ++++++++++++++++-- .../ui/zone/gdx/BlastTemplateDrawer.java | 15 +- .../ui/zone/gdx/BurstTemplateDrawer.java | 17 +- .../ui/zone/gdx/ConeTemplateDrawer.java | 80 ++-- .../client/ui/zone/gdx/GdxRenderer.java | 161 ++++--- .../ui/zone/gdx/LineCellTemplateDrawer.java | 34 +- .../ui/zone/gdx/LineTemplateDrawer.java | 34 +- .../ui/zone/gdx/RadiusCellTemplateDrawer.java | 97 +++-- .../ui/zone/gdx/RadiusTemplateDrawer.java | 25 +- .../ui/zone/gdx/ShapeDrawableDrawer.java | 54 +-- 13 files changed, 890 insertions(+), 303 deletions(-) create mode 100644 src/main/java/net/rptools/lib/gdx/Joiner.java diff --git a/src/main/java/net/rptools/lib/gdx/Joiner.java b/src/main/java/net/rptools/lib/gdx/Joiner.java new file mode 100644 index 0000000000..3bda9123f0 --- /dev/null +++ b/src/main/java/net/rptools/lib/gdx/Joiner.java @@ -0,0 +1,138 @@ +/* + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. + * + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . + */ +package net.rptools.lib.gdx; + +import com.badlogic.gdx.math.Vector; +import com.badlogic.gdx.math.Vector2; +import space.earlygrey.shapedrawer.ShapeUtils; + +// taken from shapedrawer because its protected there +public class Joiner { + + static final Vector2 AB = new Vector2(), BC = new Vector2(), v = new Vector2(); + + // All methods here set D and E based on A,B,C. + // D is always on left E is on right, relative to AB. + // Treat straight line as special case as in this case mitres have undefined length. + // "Inside point" refers to whichever of D or E is on the smaller angle side, vice versa for + // "outside point". + + // see + // https://math.stackexchange.com/questions/1849784/calculate-miter-points-of-stroked-vectors-in-cartesian-plane + public static float preparePointyJoin( + Vector2 A, Vector2 B, Vector2 C, Vector2 D, Vector2 E, float halfLineWidth) { + AB.set(B).sub(A); + BC.set(C).sub(B); + float angle = ShapeUtils.angleRad(AB, BC); + if (ShapeUtils.epsilonEquals(angle, 0) || ShapeUtils.epsilonEquals(angle, ShapeUtils.PI2)) { + prepareStraightJoin(B, D, E, halfLineWidth); + return angle; + } + float len = (float) (halfLineWidth / Math.sin(angle)); + boolean bendsLeft = angle < 0; + AB.setLength(len); + BC.setLength(len); + Vector insidePoint = bendsLeft ? D : E; + Vector outsidePoint = bendsLeft ? E : D; + insidePoint.set(B).sub(AB).add(BC); + outsidePoint.set(B).add(AB).sub(BC); + return angle; + } + + public static boolean prepareSmoothJoin( + Vector2 A, + Vector2 B, + Vector2 C, + Vector2 D, + Vector2 E, + float halfLineWidth, + boolean startOfEdge) { + AB.set(B).sub(A); + BC.set(C).sub(B); + float angle = ShapeUtils.angleRad(AB, BC); + if (ShapeUtils.epsilonEquals(angle, 0) || ShapeUtils.epsilonEquals(angle, ShapeUtils.PI2)) { + prepareStraightJoin(B, D, E, halfLineWidth); + return true; + } + float len = (float) (halfLineWidth / Math.sin(angle)); + AB.setLength(len); + BC.setLength(len); + boolean bendsLeft = angle < 0; + Vector insidePoint = bendsLeft ? D : E; + Vector outsidePoint = bendsLeft ? E : D; + insidePoint.set(B).sub(AB).add(BC); + // edgeDirection points towards the relevant edge - is this being calculated for the start of BC + // or the end of AB? + Vector2 edgeDirection = startOfEdge ? BC : AB; + // rotate edgeDirection PI/2 towards outsidePoint + if (bendsLeft) { + v.set(edgeDirection.y, -edgeDirection.x); // rotate PI/2 to the right (clockwise) + } else { + v.set(-edgeDirection.y, edgeDirection.x); // rotate PI/2 to the left (anticlockwise) + } + v.setLength(halfLineWidth); + outsidePoint.set(B).add(v); + return bendsLeft; + } + + public static void prepareStraightJoin(Vector2 B, Vector2 D, Vector2 E, float halfLineWidth) { + AB.setLength(halfLineWidth); + D.set(-AB.y, AB.x).add(B); + E.set(AB.y, -AB.x).add(B); + } + + public static Vector2 prepareFlatEndpoint( + float pathPointX, + float pathPointY, + float endPointX, + float endPointY, + Vector2 D, + Vector2 E, + float halfLineWidth) { + v.set(endPointX, endPointY).sub(pathPointX, pathPointY).setLength(halfLineWidth); + D.set(v.y, -v.x).add(endPointX, endPointY); + E.set(-v.y, v.x).add(endPointX, endPointY); + return v; + } + + public static void prepareFlatEndpoint( + Vector2 pathPoint, Vector2 endPoint, Vector2 D, Vector2 E, float halfLineWidth) { + prepareFlatEndpoint(pathPoint.x, pathPoint.y, endPoint.x, endPoint.y, D, E, halfLineWidth); + } + + public static void prepareSquareEndpoint( + float pathPointX, + float pathPointY, + float endPointX, + float endPointY, + Vector2 D, + Vector2 E, + float halfLineWidth) { + v.set(endPointX, endPointY).sub(pathPointX, pathPointY).setLength(halfLineWidth); + D.set(v.y, -v.x).add(endPointX, endPointY).add(v); + E.set(-v.y, v.x).add(endPointX, endPointY).add(v); + } + + public static void prepareSquareEndpoint( + Vector2 pathPoint, Vector2 endPoint, Vector2 D, Vector2 E, float halfLineWidth) { + prepareSquareEndpoint(pathPoint.x, pathPoint.y, endPoint.x, endPoint.y, D, E, halfLineWidth); + } + + public static void prepareRadialEndpoint(Vector2 A, Vector2 D, Vector2 E, float halfLineWidth) { + v.set(A).setLength(halfLineWidth); + D.set(A).sub(v); + E.set(A).add(v); + } +} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java index 63c66ab2af..7f85af11d2 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java @@ -17,31 +17,26 @@ import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureRegion; -import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.FloatArray; import java.awt.geom.Area; import java.awt.geom.PathIterator; import net.rptools.maptool.model.drawing.*; -import space.earlygrey.shapedrawer.ShapeDrawer; public abstract class AbstractDrawingDrawer { protected Color tmpColor = new Color(); - protected Vector2 tmpVector = new Vector2(); - protected ShapeDrawer drawer; + protected TextureRegion whitePixelRegion; protected AreaRenderer areaRenderer; - public AbstractDrawingDrawer(ShapeDrawer drawer) { - this.drawer = drawer; - this.areaRenderer = new AreaRenderer(drawer); + public AbstractDrawingDrawer(AreaRenderer areaRenderer) { + this.areaRenderer = areaRenderer; } - public void draw(Drawable element, Pen pen) { - if (pen.getBackgroundPaint() instanceof DrawableColorPaint) { - var colorPaint = (DrawableColorPaint) pen.getBackgroundPaint(); + public void draw(PolygonSpriteBatch batch, Drawable element, Pen pen) { + if (pen.getBackgroundPaint() instanceof DrawableColorPaint colorPaint) { Color.argb8888ToColor(tmpColor, colorPaint.getColor()); areaRenderer.setColor(tmpColor); - areaRenderer.setTextureRegion(drawer.getRegion()); } else if (pen.getBackgroundPaint() instanceof DrawableTexturePaint texturePaint) { var image = texturePaint.getAsset().getData(); var pix = new Pixmap(image, 0, image.length); @@ -52,47 +47,50 @@ public void draw(Drawable element, Pen pen) { areaRenderer.setTextureRegion(region); pix.dispose(); } - drawBackground(element, pen); - areaRenderer.setColor(null); + drawBackground(batch, element, pen); - if (pen.getPaint() instanceof DrawableColorPaint) { - var colorPaint = (DrawableColorPaint) pen.getPaint(); + if (pen.getPaint() instanceof DrawableColorPaint colorPaint) { Color.argb8888ToColor(tmpColor, colorPaint.getColor()); - drawer.setColor(tmpColor); + areaRenderer.setColor(tmpColor); + } else if (pen.getPaint() instanceof DrawableTexturePaint texturePaint) { + var image = texturePaint.getAsset().getData(); + var pix = new Pixmap(image, 0, image.length); + var tex = new Texture(pix); + tex.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat); + // FIXME properly dispose + var region = new TextureRegion(tex); + areaRenderer.setTextureRegion(region); + pix.dispose(); } - var lineWidth = drawer.getDefaultLineWidth(); - drawer.setDefaultLineWidth(pen.getThickness()); - drawBorder(element, pen); - drawer.setDefaultLineWidth(lineWidth); + + drawBorder(batch, element, pen); } - protected void line(Pen pen, float x1, float y1, float x2, float y2) { - var halfLineWidth = pen.getThickness() / 2f; - if (!pen.getSquareCap()) { - drawer.filledCircle(x1, -y1, halfLineWidth); - drawer.filledCircle(x2, -y2, halfLineWidth); - drawer.line(x1, -y1, x2, -y2); - } else { - tmpVector.set(x1 - x2, y1 - y2).nor(); - var tx = tmpVector.x * halfLineWidth; - var ty = tmpVector.y * halfLineWidth; - drawer.line(x1 + tx, y1 + ty, x2 - tx, y2 - ty); - } + protected void line(PolygonSpriteBatch batch, Pen pen, float x1, float y1, float x2, float y2) { + var floats = new FloatArray(); + floats.add(x1, y1, x2, y2); + var path = + areaRenderer.path( + floats, + pen.getThickness(), + pen.getSquareCap() ? AreaRenderer.JoinType.Pointy : AreaRenderer.JoinType.Round, + false); + areaRenderer.paintVertices(batch, path); } protected FloatArray pathToFloatArray(PathIterator pathIterator) { return areaRenderer.pathToFloatArray(pathIterator); } - protected void fillArea(Area area) { - areaRenderer.fillArea(area); + protected void fillArea(PolygonSpriteBatch batch, Area area) { + areaRenderer.fillArea(batch, area); } - protected void drawArea(Area area) { - areaRenderer.drawArea(area); + protected void drawArea(PolygonSpriteBatch batch, Area area, Pen pen) { + areaRenderer.drawArea(batch, area, !pen.getSquareCap(), pen.getThickness()); } - protected abstract void drawBackground(Drawable element, Pen pen); + protected abstract void drawBackground(PolygonSpriteBatch batch, Drawable element, Pen pen); - protected abstract void drawBorder(Drawable element, Pen pen); + protected abstract void drawBorder(PolygonSpriteBatch batch, Drawable element, Pen pen); } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractTemplateDrawer.java index a8f89bdf53..e3ea47c768 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractTemplateDrawer.java @@ -14,32 +14,32 @@ */ package net.rptools.maptool.client.ui.zone.gdx; +import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; import net.rptools.maptool.client.MapTool; import net.rptools.maptool.model.Zone; import net.rptools.maptool.model.drawing.AbstractTemplate; import net.rptools.maptool.model.drawing.Drawable; import net.rptools.maptool.model.drawing.Pen; -import space.earlygrey.shapedrawer.ShapeDrawer; public abstract class AbstractTemplateDrawer extends AbstractDrawingDrawer { - public AbstractTemplateDrawer(ShapeDrawer drawer) { - super(drawer); + public AbstractTemplateDrawer(AreaRenderer renderer) { + super(renderer); } @Override - protected void drawBackground(Drawable element, Pen pen) { + protected void drawBackground(PolygonSpriteBatch batch, Drawable element, Pen pen) { tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, AbstractTemplate.DEFAULT_BG_ALPHA); - drawer.setColor(tmpColor); - paint(pen, (AbstractTemplate) element, false, true); + paint(batch, pen, (AbstractTemplate) element, false, true); } @Override - protected void drawBorder(Drawable element, Pen pen) { - paint(pen, (AbstractTemplate) element, true, false); + protected void drawBorder(PolygonSpriteBatch batch, Drawable element, Pen pen) { + paint(batch, pen, (AbstractTemplate) element, true, false); } - protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean area) { + protected void paint( + PolygonSpriteBatch batch, Pen pen, AbstractTemplate template, boolean border, boolean area) { var radius = template.getRadius(); if (radius == 0) return; @@ -57,18 +57,26 @@ protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean // Template specific painting if (border) - paintBorder(pen, template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); - if (area) paintArea(template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); + paintBorder(batch, pen, template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); + if (area) + paintArea(batch, template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); } // endfor } // endfor } protected void paintArea( - AbstractTemplate template, int xOff, int yOff, int gridSize, AbstractTemplate.Quadrant q) { + PolygonSpriteBatch batch, + AbstractTemplate template, + int xOff, + int yOff, + int gridSize, + AbstractTemplate.Quadrant q) { var vertex = template.getVertex(); int x = vertex.x + getXMult(q) * xOff + ((getXMult(q) - 1) / 2) * gridSize; int y = vertex.y + getYMult(q) * yOff + ((getYMult(q) - 1) / 2) * gridSize; - drawer.filledRectangle(x, -y - gridSize, gridSize, gridSize); + var floats = + new float[] {x, -y - gridSize, x, -y, x + gridSize, -y, x + gridSize, -y - gridSize}; + areaRenderer.paintVertices(batch, floats); } protected int getXMult(AbstractTemplate.Quadrant q) { @@ -84,6 +92,7 @@ protected int getYMult(AbstractTemplate.Quadrant q) { } protected void paintCloseVerticalBorder( + PolygonSpriteBatch batch, Pen pen, AbstractTemplate template, int xOff, @@ -93,10 +102,11 @@ protected void paintCloseVerticalBorder( var vertex = template.getVertex(); int x = vertex.x + getXMult(q) * xOff; int y = vertex.y + getYMult(q) * yOff; - line(pen, x, y, x, y + getYMult(q) * gridSize); + line(batch, pen, x, y, x, y + getYMult(q) * gridSize); } protected void paintFarHorizontalBorder( + PolygonSpriteBatch batch, Pen pen, AbstractTemplate template, int xOff, @@ -106,10 +116,11 @@ protected void paintFarHorizontalBorder( var vertex = template.getVertex(); int x = vertex.x + getXMult(q) * xOff; int y = vertex.y + getYMult(q) * yOff + getYMult(q) * gridSize; - line(pen, x, y, x + getXMult(q) * gridSize, y); + line(batch, pen, x, y, x + getXMult(q) * gridSize, y); } protected void paintFarVerticalBorder( + PolygonSpriteBatch batch, Pen pen, AbstractTemplate template, int xOff, @@ -119,10 +130,11 @@ protected void paintFarVerticalBorder( var vertex = template.getVertex(); int x = vertex.x + getXMult(q) * xOff + getXMult(q) * gridSize; int y = vertex.y + getYMult(q) * yOff; - line(pen, x, y, x, y + getYMult(q) * gridSize); + line(batch, pen, x, y, x, y + getYMult(q) * gridSize); } protected void paintCloseHorizontalBorder( + PolygonSpriteBatch batch, Pen pen, AbstractTemplate template, int xOff, @@ -132,13 +144,21 @@ protected void paintCloseHorizontalBorder( var vertex = template.getVertex(); int x = vertex.x + getXMult(q) * xOff; int y = vertex.y + getYMult(q) * yOff; - line(pen, x, y, x + getXMult(q) * gridSize, y); + line(batch, pen, x, y, x + getXMult(q) * gridSize, y); } protected abstract void paintArea( - AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance); + PolygonSpriteBatch batch, + AbstractTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int distance); protected abstract void paintBorder( + PolygonSpriteBatch batch, Pen pen, AbstractTemplate template, int x, diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java index 5492fc5c05..fa1f13f666 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java @@ -14,30 +14,42 @@ */ package net.rptools.maptool.client.ui.zone.gdx; -// import com.badlogic.gdx.graphics.g2d.RepeatablePolygonSprite; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.*; import com.badlogic.gdx.math.Bezier; import com.badlogic.gdx.math.EarClippingTriangulator; +import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.FloatArray; import java.awt.geom.Area; import java.awt.geom.PathIterator; -import space.earlygrey.shapedrawer.JoinType; -import space.earlygrey.shapedrawer.ShapeDrawer; +import java.util.ArrayList; +import java.util.List; +import net.rptools.lib.gdx.Joiner; +import space.earlygrey.shapedrawer.DefaultSideEstimator; +import space.earlygrey.shapedrawer.ShapeUtils; +import space.earlygrey.shapedrawer.SideEstimator; public class AreaRenderer { + public AreaRenderer(EarClippingTriangulator triangulator, TextureRegion whitePixelRegion) { + this.triangulator = triangulator; + this.whitePixel = whitePixelRegion; + } + + private TextureRegion whitePixel; + private FloatArray tmpFloat = new FloatArray(); private Color color; public void setColor(Color value) { color = value; + textureRegion = whitePixel; } - public EarClippingTriangulator triangulator = new EarClippingTriangulator(); - private ShapeDrawer drawer; + public EarClippingTriangulator triangulator; + private float[] floatsFromArea = new float[6]; private Vector2 tmpVector = new Vector2(); private Vector2 tmpVector0 = new Vector2(); @@ -48,10 +60,6 @@ public void setColor(Color value) { private TextureRegion textureRegion = null; - public AreaRenderer(ShapeDrawer drawer) { - this.drawer = drawer; - } - public TextureRegion getTextureRegion() { return textureRegion; } @@ -60,41 +68,30 @@ public void setTextureRegion(TextureRegion textureRegion) { this.textureRegion = textureRegion; } - public void fillArea(Area area) { + public void fillArea(PolygonSpriteBatch batch, Area area) { if (area == null || area.isEmpty()) return; - paintArea(area, true); + pathToFloatArray(area.getPathIterator(null)); + paintVertices(batch, tmpFloat.toArray()); } - public void drawArea(Area area) { + public void drawArea(PolygonSpriteBatch batch, Area area, boolean rounded, float thickness) { if (area == null || area.isEmpty()) return; - paintArea(area, false); - } - - protected void paintArea(Area area, boolean fill) { pathToFloatArray(area.getPathIterator(null)); + var vertices = path(tmpFloat, thickness, rounded ? JoinType.Round : JoinType.Pointy, false); + paintVertices(batch, vertices); + } - if (fill) { - var vertices = tmpFloat.toArray(); - var indicies = triangulator.computeTriangles(vertices); - var polyreg = new PolygonRegion(textureRegion, vertices, indicies.toArray()); - var poly = new PolygonSprite(polyreg); - var batch = (PolygonSpriteBatch) drawer.getBatch(); - if (color != null) { - poly.setColor(color); - } - poly.draw(batch); - - } else { - if (tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) - && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { - tmpFloat.pop(); - tmpFloat.pop(); - } - - drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.SMOOTH, false); + protected void paintVertices(PolygonSpriteBatch batch, float[] vertices) { + var indicies = triangulator.computeTriangles(vertices); + var polyreg = new PolygonRegion(textureRegion, vertices, indicies.toArray()); + var poly = new PolygonSprite(polyreg); + if (color != null) { + poly.setColor(color); } + poly.draw(batch); + color = null; } public FloatArray pathToFloatArray(PathIterator it) { @@ -112,7 +109,12 @@ public FloatArray pathToFloatArray(PathIterator it) { break; case PathIterator.SEG_CLOSE: // System.out.println("Close"); - + if (tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) + && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { + // make sure we don't have last and first point the same + tmpFloat.pop(); + tmpFloat.pop(); + } return tmpFloat; case PathIterator.SEG_LINETO: // System.out.println("Line to: ( " + floatsFromArea[0] + ", " + @@ -167,4 +169,338 @@ public FloatArray pathToFloatArray(PathIterator it) { } return tmpFloat; } + + private Vector2 A = new Vector2(); + private Vector2 B = new Vector2(); + private Vector2 C = new Vector2(); + private Vector2 D = new Vector2(); + private Vector2 E = new Vector2(); + private Vector2 E0 = new Vector2(); + private Vector2 D0 = new Vector2(); + private Vector2 AB = new Vector2(); + private Vector2 BC = new Vector2(); + private Vector2 vec1 = new Vector2(); + + enum JoinType { + Pointy, + Smooth, + Round + } + + public float[] path(FloatArray path, float lineWidth, JoinType joinType, boolean open) { + var outer = new ArrayList(); + var inner = new ArrayList(); + + float halfWidth = lineWidth / 2f; + + if (path.size == 2) { + var x = path.get(0); + var y = path.get(1); + if (joinType == JoinType.Round) { + addArc(outer, x, y, halfWidth, 0, MathUtils.PI2 - 0.1f, false); + } else { + outer.add(x - halfWidth); + outer.add(y - halfWidth); + outer.add(x - halfWidth); + outer.add(y + halfWidth); + outer.add(x + halfWidth); + outer.add(y + halfWidth); + outer.add(x + halfWidth); + outer.add(y - halfWidth); + outer.add(x - halfWidth); + outer.add(y - halfWidth); + } + + } else if (path.size == 4) { + A.set(path.get(0), path.get(1)); + B.set(path.get(2), path.get(3)); + if (joinType == JoinType.Round) { + Joiner.prepareFlatEndpoint(B, A, D, E, halfWidth); + E0.set(D); + outer.add(D.x); + outer.add(D.y); + vec1.set(D).add(-A.x, -A.y); + var angle = vec1.angleRad(); + addArc(outer, A.x, A.y, halfWidth, angle, angle + MathUtils.PI, false); + outer.add(E.x); + outer.add(E.y); + + Joiner.prepareFlatEndpoint(A, B, D, E, halfWidth); + outer.add(D.x); + outer.add(D.y); + vec1.set(D).add(-B.x, -B.y); + angle = vec1.angleRad(); + addArc(outer, B.x, B.y, halfWidth, angle, angle + MathUtils.PI, false); + outer.add(E.x); + outer.add(E.y); + outer.add(E0.x); + outer.add(E0.y); + } else { + Joiner.prepareSquareEndpoint(B, A, D, E, halfWidth); + E0.set(D); + outer.add(D.x); + outer.add(D.y); + outer.add(E.x); + outer.add(E.y); + Joiner.prepareSquareEndpoint(A, B, D, E, halfWidth); + outer.add(D.x); + outer.add(D.y); + outer.add(E.x); + outer.add(E.y); + outer.add(E0.x); + outer.add(E0.y); + } + + } else { + for (int i = 2; i < path.size - 2; i += 2) { + A.set(path.get(i - 2), path.get(i - 1)); + B.set(path.get(i), path.get(i + 1)); + C.set(path.get(i + 2), path.get(i + 3)); + if (i == 2) { + if (open) { + if (joinType == JoinType.Round) { + Joiner.prepareFlatEndpoint(B, A, D, E, halfWidth); + outer.add(D.x); + outer.add(D.y); + vec1.set(D).add(-A.x, -A.y); + var angle = vec1.angleRad(); + addArc(inner, A.x, A.y, halfWidth, angle, angle + MathUtils.PI, false); + inner.add(E.x); + inner.add(E.y); + } else { + Joiner.prepareSquareEndpoint(B, A, D, E, halfWidth); + outer.add(D.x); + outer.add(D.y); + + // add link at start + // inner.add(D.x); + // inner.add(D.y); + + inner.add(E.x); + inner.add(E.y); + } + } else { + vec1.set(path.get(path.size - 2), path.get(path.size - 1)); + if (joinType == JoinType.Pointy) { + Joiner.preparePointyJoin(vec1, A, B, D0, E0, halfWidth); + } else { + Joiner.prepareSmoothJoin(vec1, A, B, D0, E0, halfWidth, true); + } + outer.add(D0.x); + outer.add(D0.y); + inner.add(E0.x); + inner.add(E0.y); + } + } + if (joinType == JoinType.Pointy) { + Joiner.preparePointyJoin(A, B, C, D, E, halfWidth); + outer.add(D.x); + outer.add(D.y); + inner.add(E.x); + inner.add(E.y); + } else { + var bendsLeft = Joiner.prepareSmoothJoin(A, B, C, D, E, halfWidth, false); + if (bendsLeft) { + vec1.set(E); + } else { + vec1.set(D); + } + outer.add(D.x); + outer.add(D.y); + inner.add(E.x); + inner.add(E.y); + // shapeRenderer.circle(B.x, B.y, halfWidth); + + Joiner.prepareSmoothJoin(A, B, C, D, E, halfWidth, true); + if (bendsLeft) { + if (joinType == JoinType.Round) { + AB.set(B).sub(A); + BC.set(C).sub(B); + vec1.add(-B.x, -B.y); + var angle = vec1.angleRad(); + var angleDiff = MathUtils.PI2 - ShapeUtils.angleRad(AB, BC); + addArc(inner, B.x, B.y, halfWidth, angle, angle + angleDiff, false); + } + inner.add(E.x); + inner.add(E.y); + } else { + if (joinType == JoinType.Round) { + AB.set(B).sub(A); + BC.set(C).sub(B); + vec1.add(-B.x, -B.y); + var angle = vec1.angleRad(); + var angleDiff = MathUtils.PI2 - ShapeUtils.angleRad(AB, BC); + addArc(outer, B.x, B.y, halfWidth, angle, angle + angleDiff, true); + } + outer.add(D.x); + outer.add(D.y); + } + } + } + if (open) { + if (joinType == JoinType.Round) { + Joiner.prepareFlatEndpoint(B, C, D, E, halfWidth); + outer.add(E.x); + outer.add(E.y); + inner.add(D.x); + inner.add(D.y); + vec1.set(D).add(-C.x, -C.y); + var angle = vec1.angleRad(); + addArc(inner, C.x, C.y, halfWidth, angle, angle + MathUtils.PI, false); + } else { + Joiner.prepareSquareEndpoint(B, C, D, E, halfWidth); + outer.add(E.x); + outer.add(E.y); + + inner.add(D.x); + inner.add(D.y); + } + } else { + if (joinType == JoinType.Pointy) { + // draw last link on path + A.set(path.get(0), path.get(1)); + Joiner.preparePointyJoin(B, C, A, D, E, halfWidth); + outer.add(D.x); + outer.add(D.y); + inner.add(E.x); + inner.add(E.y); + + // draw connection back to first vertex + outer.add(D0.x); + outer.add(D0.y); + inner.add(E0.x); + inner.add(E0.y); + + } else { + // draw last link on path + A.set(B); + B.set(C); + C.set(path.get(0), path.get(1)); + var bendsLeft = Joiner.prepareSmoothJoin(A, B, C, D, E, halfWidth, false); + if (bendsLeft) { + vec1.set(E); + } else { + vec1.set(D); + } + outer.add(D.x); + outer.add(D.y); + inner.add(E.x); + inner.add(E.y); + + // draw connection back to first vertex + Joiner.prepareSmoothJoin(A, B, C, D, E, halfWidth, true); + if (bendsLeft) { + if (joinType == JoinType.Round) { + AB.set(B).sub(A); + BC.set(C).sub(B); + vec1.add(-B.x, -B.y); + var angle = vec1.angleRad(); + var angleDiff = MathUtils.PI2 - ShapeUtils.angleRad(AB, BC); + addArc(inner, B.x, B.y, halfWidth, angle, angle + angleDiff, false); + } + inner.add(E.x); + inner.add(E.y); + } else { + if (joinType == JoinType.Round) { + AB.set(B).sub(A); + BC.set(C).sub(B); + vec1.add(-B.x, -B.y); + var angle = vec1.angleRad(); + var angleDiff = MathUtils.PI2 - ShapeUtils.angleRad(AB, BC); + addArc(outer, B.x, B.y, halfWidth, angle, angle + angleDiff, true); + } + outer.add(D.x); + outer.add(D.y); + } + + A.set(B); + B.set(C); + C.set(path.get(2), path.get(3)); + bendsLeft = Joiner.prepareSmoothJoin(A, B, C, D, E, halfWidth, false); + if (bendsLeft) { + vec1.set(E); + } else { + vec1.set(D); + } + outer.add(D.x); + outer.add(D.y); + inner.add(E.x); + inner.add(E.y); + + if (joinType == JoinType.Round) { + AB.set(B).sub(A); + BC.set(C).sub(B); + vec1.add(-B.x, -B.y); + var angle = vec1.angleRad(); + var angleDiff = MathUtils.PI2 - ShapeUtils.angleRad(AB, BC); + addArc(outer, B.x, B.y, halfWidth, angle, angle + angleDiff, true); + } + + outer.add(D0.x); + outer.add(D0.y); + } + } + } + float[] floatArray = new float[outer.size() + inner.size()]; + int i = 0; + + for (Float f : outer) { + floatArray[i++] = f; + } + + for (int j = 1; j <= inner.size(); j += 2) { + floatArray[floatArray.length - j] = inner.get(j); + floatArray[floatArray.length - j - 1] = inner.get(j - 1); + } + return floatArray; + } + + private Vector2 A1 = new Vector2(); + private Vector2 B1 = new Vector2(); + private Vector2 dir = new Vector2(); + + private void addArc( + List list, + float centreX, + float centreY, + float radius, + float startAngle, + float endAngle, + boolean clockwise) { + if (startAngle < 0) { + startAngle += MathUtils.PI2; + } + + if (endAngle < 0) { + endAngle += MathUtils.PI2; + } + var sides = estimateSidesRequired(radius, radius); + var deltaAngle = (endAngle + MathUtils.PI2 - startAngle) % MathUtils.PI2; + if (clockwise) { + deltaAngle = MathUtils.PI2 - deltaAngle; + } + + var dAnglePerSide = deltaAngle / sides; + var angle = startAngle; + if (clockwise) { + dAnglePerSide *= -1; + } + + for (var i = 0; i <= sides; i++) { + var cos = MathUtils.cos(angle); + var sin = MathUtils.sin(angle); + angle += dAnglePerSide; + var x = centreX + cos * radius; + var y = centreY + sin * radius; + + list.add(x); + list.add(y); + } + } + + private SideEstimator sideEstimator = new DefaultSideEstimator(); + + protected int estimateSidesRequired(float radiusX, float radiusY) { + return sideEstimator.estimateSidesRequired(1, radiusX, radiusY); + } } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BlastTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BlastTemplateDrawer.java index 83513af3ac..986029a123 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BlastTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BlastTemplateDrawer.java @@ -14,29 +14,28 @@ */ package net.rptools.maptool.client.ui.zone.gdx; +import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; import net.rptools.maptool.model.drawing.AbstractTemplate; import net.rptools.maptool.model.drawing.BlastTemplate; import net.rptools.maptool.model.drawing.Drawable; import net.rptools.maptool.model.drawing.Pen; -import space.earlygrey.shapedrawer.ShapeDrawer; public class BlastTemplateDrawer extends AbstractDrawingDrawer { - public BlastTemplateDrawer(ShapeDrawer drawer) { - super(drawer); + public BlastTemplateDrawer(AreaRenderer renderer) { + super(renderer); } @Override - protected void drawBackground(Drawable element, Pen pen) { + protected void drawBackground(PolygonSpriteBatch batch, Drawable element, Pen pen) { var template = (BlastTemplate) element; tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, AbstractTemplate.DEFAULT_BG_ALPHA); - drawer.setColor(tmpColor); - fillArea(template.getArea()); + fillArea(batch, template.getArea()); } @Override - protected void drawBorder(Drawable element, Pen pen) { + protected void drawBorder(PolygonSpriteBatch batch, Drawable element, Pen pen) { var template = (BlastTemplate) element; - drawArea(template.getArea()); + drawArea(batch, template.getArea(), pen); } } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BurstTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BurstTemplateDrawer.java index 201b9e35a2..7c8e4a6248 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BurstTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BurstTemplateDrawer.java @@ -14,30 +14,29 @@ */ package net.rptools.maptool.client.ui.zone.gdx; +import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; import net.rptools.maptool.model.drawing.AbstractTemplate; import net.rptools.maptool.model.drawing.BurstTemplate; import net.rptools.maptool.model.drawing.Drawable; import net.rptools.maptool.model.drawing.Pen; -import space.earlygrey.shapedrawer.ShapeDrawer; public class BurstTemplateDrawer extends AbstractDrawingDrawer { - public BurstTemplateDrawer(ShapeDrawer drawer) { - super(drawer); + public BurstTemplateDrawer(AreaRenderer renderer) { + super(renderer); } @Override - protected void drawBackground(Drawable element, Pen pen) { + protected void drawBackground(PolygonSpriteBatch batch, Drawable element, Pen pen) { var template = (BurstTemplate) element; tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, AbstractTemplate.DEFAULT_BG_ALPHA); - drawer.setColor(tmpColor); - fillArea(template.getArea()); + fillArea(batch, template.getArea()); } @Override - protected void drawBorder(Drawable element, Pen pen) { + protected void drawBorder(PolygonSpriteBatch batch, Drawable element, Pen pen) { var template = (BurstTemplate) element; - drawArea(template.getArea()); - drawArea(template.getVertexRenderer().getArea()); + drawArea(batch, template.getArea(), pen); + drawArea(batch, template.getVertexRenderer().getArea(), pen); } } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ConeTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ConeTemplateDrawer.java index d08572be21..0bcd7b2d92 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ConeTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ConeTemplateDrawer.java @@ -14,20 +14,27 @@ */ package net.rptools.maptool.client.ui.zone.gdx; +import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; import net.rptools.maptool.model.drawing.AbstractTemplate; import net.rptools.maptool.model.drawing.ConeTemplate; import net.rptools.maptool.model.drawing.Pen; -import space.earlygrey.shapedrawer.ShapeDrawer; public class ConeTemplateDrawer extends RadiusTemplateDrawer { - public ConeTemplateDrawer(ShapeDrawer drawer) { - super(drawer); + public ConeTemplateDrawer(AreaRenderer renderer) { + super(renderer); } @Override protected void paintArea( - AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + PolygonSpriteBatch batch, + AbstractTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int distance) { var coneTemplate = (ConeTemplate) template; var direction = coneTemplate.getDirection(); @@ -46,13 +53,14 @@ protected void paintArea( } for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { if (coneTemplate.withinQuadrant(q)) { - paintArea(template, xOff, yOff, gridSize, q); + paintArea(batch, template, xOff, yOff, gridSize, q); } } } @Override protected void paintBorder( + PolygonSpriteBatch batch, Pen pen, AbstractTemplate template, int x, @@ -63,11 +71,12 @@ protected void paintBorder( int distance) { var coneTemplate = (ConeTemplate) template; paintBorderAtRadius( - pen, coneTemplate, x, y, xOff, yOff, gridSize, distance, coneTemplate.getRadius()); - paintEdges(pen, coneTemplate, x, y, xOff, yOff, gridSize, distance); + batch, pen, coneTemplate, x, y, xOff, yOff, gridSize, distance, coneTemplate.getRadius()); + paintEdges(batch, pen, coneTemplate, x, y, xOff, yOff, gridSize, distance); } protected void paintEdges( + PolygonSpriteBatch batch, Pen pen, ConeTemplate template, int x, @@ -85,67 +94,68 @@ protected void paintEdges( if (direction == AbstractTemplate.Direction.SOUTH_EAST || direction == AbstractTemplate.Direction.SOUTH_WEST) paintCloseVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); if (direction == AbstractTemplate.Direction.NORTH_EAST || direction == AbstractTemplate.Direction.NORTH_WEST) paintCloseVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); } // endif if (y == 0) { if (direction == AbstractTemplate.Direction.SOUTH_EAST || direction == AbstractTemplate.Direction.NORTH_EAST) paintCloseHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); if (direction == AbstractTemplate.Direction.SOUTH_WEST || direction == AbstractTemplate.Direction.NORTH_WEST) paintCloseHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); } // endif } else if (direction.ordinal() % 2 == 1 && x == y && distance <= radius) { if (direction == AbstractTemplate.Direction.SOUTH) { paintFarVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); paintFarVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); paintCloseHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); paintCloseHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); } // endif if (direction == AbstractTemplate.Direction.NORTH) { paintFarVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); paintFarVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); paintCloseHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); paintCloseHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); } // endif if (direction == AbstractTemplate.Direction.EAST) { paintCloseVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); paintCloseVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); paintFarHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); paintFarHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); } // endif if (direction == AbstractTemplate.Direction.WEST) { paintCloseVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); paintCloseVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); paintFarHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); paintFarHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); } // endif } // endif } protected void paintBorderAtRadius( + PolygonSpriteBatch batch, Pen pen, ConeTemplate template, int x, @@ -164,22 +174,22 @@ protected void paintBorderAtRadius( || (direction == AbstractTemplate.Direction.SOUTH && y >= x) || (direction == AbstractTemplate.Direction.EAST && x >= y)) paintFarVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); if (direction == AbstractTemplate.Direction.NORTH_EAST || (direction == AbstractTemplate.Direction.NORTH && y >= x) || (direction == AbstractTemplate.Direction.EAST && x >= y)) paintFarVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); if (direction == AbstractTemplate.Direction.SOUTH_WEST || (direction == AbstractTemplate.Direction.SOUTH && y >= x) || (direction == AbstractTemplate.Direction.WEST && x >= y)) paintFarVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); if (direction == AbstractTemplate.Direction.NORTH_WEST || (direction == AbstractTemplate.Direction.NORTH && y >= x) || (direction == AbstractTemplate.Direction.WEST && x >= y)) paintFarVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); } // endif // Paint lines between horizontal boundaries if needed @@ -188,22 +198,22 @@ protected void paintBorderAtRadius( || (direction == AbstractTemplate.Direction.SOUTH && y >= x) || (direction == AbstractTemplate.Direction.EAST && x >= y)) paintFarHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); if (direction == AbstractTemplate.Direction.SOUTH_WEST || (direction == AbstractTemplate.Direction.SOUTH && y >= x) || (direction == AbstractTemplate.Direction.WEST && x >= y)) paintFarHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); if (direction == AbstractTemplate.Direction.NORTH_EAST || (direction == AbstractTemplate.Direction.NORTH && y >= x) || (direction == AbstractTemplate.Direction.EAST && x >= y)) paintFarHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); if (direction == AbstractTemplate.Direction.NORTH_WEST || (direction == AbstractTemplate.Direction.NORTH && y >= x) || (direction == AbstractTemplate.Direction.WEST && x >= y)) paintFarHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); } // endif } // endif } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 9e0350227a..5780a8916e 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -173,6 +173,8 @@ public class GdxRenderer extends ApplicationAdapter implements AssetAvailableLis private final Area tmpArea = new Area(); private final TiledDrawable tmpTile = new TiledDrawable(); + private final EarClippingTriangulator triangulator = new EarClippingTriangulator(); + public GdxRenderer() { new MapToolEventBus().getMainEventBus().register(this); } @@ -234,15 +236,15 @@ public void create() { TextureRegion region = new TextureRegion(onePixel, 0, 0, 1, 1); drawer = new ShapeDrawer(batch, region); - lineTemplateDrawer = new LineTemplateDrawer(drawer); - lineCellTemplateDrawer = new LineCellTemplateDrawer(drawer); - radiusTemplateDrawer = new RadiusTemplateDrawer(drawer); - burstTemplateDrawer = new BurstTemplateDrawer(drawer); - coneTemplateDrawer = new ConeTemplateDrawer(drawer); - blastTemplateDrawer = new BlastTemplateDrawer(drawer); - radiusCellTemplateDrawer = new RadiusCellTemplateDrawer(drawer); - shapeDrawableDrawer = new ShapeDrawableDrawer(drawer); - areaRenderer = new AreaRenderer(drawer); + areaRenderer = new AreaRenderer(triangulator, region); + lineTemplateDrawer = new LineTemplateDrawer(areaRenderer); + lineCellTemplateDrawer = new LineCellTemplateDrawer(areaRenderer); + radiusTemplateDrawer = new RadiusTemplateDrawer(areaRenderer); + burstTemplateDrawer = new BurstTemplateDrawer(areaRenderer); + coneTemplateDrawer = new ConeTemplateDrawer(areaRenderer); + blastTemplateDrawer = new BlastTemplateDrawer(areaRenderer); + radiusCellTemplateDrawer = new RadiusCellTemplateDrawer(areaRenderer); + shapeDrawableDrawer = new ShapeDrawableDrawer(areaRenderer); initialized = true; initializeZoneResources(zone); @@ -678,8 +680,8 @@ private void renderVisionOverlay(PlayerView view) { * strict token ownership is off... then the vision arc should be displayed. */ if (showVisionAndHalo) { - drawer.setColor(Color.WHITE); - areaRenderer.drawArea(combined); + areaRenderer.setColor(Color.WHITE); + areaRenderer.drawArea(batch, combined, false, 1); renderHaloArea(combined); } } @@ -699,7 +701,7 @@ private void renderHaloArea(Area visible) { visionColor.getGreen() / 255f, visionColor.getBlue() / 255f, AppPreferences.getHaloOverlayOpacity() / 255f); - areaRenderer.fillArea(visible); + areaRenderer.fillArea(batch, visible); } } @@ -793,7 +795,7 @@ private void renderFog(PlayerView view) { tempArea.add(new Area(exposedArea)); } if (combinedView) { - areaRenderer.fillArea(combined); + areaRenderer.fillArea(batch, combined); renderFogArea(combined, visibleArea); renderFogOutline(); } else { @@ -801,7 +803,7 @@ private void renderFog(PlayerView view) { // use 'combined' instead in this block of code? tempArea.add(combined); - areaRenderer.fillArea(tempArea); + areaRenderer.fillArea(batch, tempArea); renderFogArea(tempArea, visibleArea); renderFogOutline(); } @@ -812,7 +814,7 @@ private void renderFog(PlayerView view) { if (combined.isEmpty()) { combined = zone.getExposedArea(); } - areaRenderer.fillArea(combined); + areaRenderer.fillArea(batch, combined); renderFogArea(combined, visibleArea); renderFogOutline(); } else { @@ -828,7 +830,7 @@ private void renderFog(PlayerView view) { exposedArea = meta.getExposedAreaHistory(); myCombined.add(new Area(exposedArea)); } - areaRenderer.fillArea(myCombined); + areaRenderer.fillArea(batch, myCombined); renderFogArea(myCombined, visibleArea); renderFogOutline(); } @@ -861,27 +863,27 @@ private void renderFogArea(Area softFog, Area visibleArea) { drawer.setColor(0, 0, 0, AppPreferences.getFogOverlayOpacity() / 255.0f); // Fill in the exposed area - areaRenderer.fillArea(softFog); + areaRenderer.fillArea(batch, softFog); // batch.setColor(Color.CLEAR); drawer.setColor(Color.CLEAR); - areaRenderer.fillArea(visibleArea); + areaRenderer.fillArea(batch, visibleArea); } else { drawer.setColor(0, 0, 0, 80 / 255.0f); - areaRenderer.fillArea(softFog); + areaRenderer.fillArea(batch, softFog); drawer.setColor(Color.WHITE); } } else { - areaRenderer.fillArea(softFog); + areaRenderer.fillArea(batch, softFog); } } private void renderFogOutline() { if (visibleScreenArea == null) return; - drawer.setColor(Color.BLACK); - areaRenderer.drawArea(visibleScreenArea); + areaRenderer.setColor(Color.BLACK); + areaRenderer.drawArea(batch, visibleScreenArea, false, 1); } private void renderLabels(PlayerView view) { @@ -1258,7 +1260,7 @@ private void renderLightOverlay( case CLIP_TO_NOT_VISIBLE_AREA -> areaToPaint.subtract(visibleScreenArea); } } - areaRenderer.fillArea(areaToPaint); + areaRenderer.fillArea(batch, areaToPaint); } drawer.setColor(1.0f, 1.0f, 1.0f, 1.0f); timer.stop("renderLightOverlay:drawLights"); @@ -1436,17 +1438,19 @@ private void renderDrawable(DrawnElement element) { var pen = element.getPen(); var drawable = element.getDrawable(); - if (drawable instanceof ShapeDrawable) shapeDrawableDrawer.draw(drawable, pen); + if (drawable instanceof ShapeDrawable) shapeDrawableDrawer.draw(batch, drawable, pen); else if (drawable instanceof DrawablesGroup) for (var groupElement : ((DrawablesGroup) drawable).getDrawableList()) renderDrawable(groupElement); - else if (drawable instanceof RadiusCellTemplate) radiusCellTemplateDrawer.draw(drawable, pen); - else if (drawable instanceof LineCellTemplate) lineCellTemplateDrawer.draw(drawable, pen); - else if (drawable instanceof BlastTemplate) blastTemplateDrawer.draw(drawable, pen); - else if (drawable instanceof ConeTemplate) coneTemplateDrawer.draw(drawable, pen); - else if (drawable instanceof BurstTemplate) burstTemplateDrawer.draw(drawable, pen); - else if (drawable instanceof RadiusTemplate) radiusTemplateDrawer.draw(drawable, pen); - else if (drawable instanceof LineTemplate) lineTemplateDrawer.draw(drawable, pen); + else if (drawable instanceof RadiusCellTemplate) + radiusCellTemplateDrawer.draw(batch, drawable, pen); + else if (drawable instanceof LineCellTemplate) + lineCellTemplateDrawer.draw(batch, drawable, pen); + else if (drawable instanceof BlastTemplate) blastTemplateDrawer.draw(batch, drawable, pen); + else if (drawable instanceof ConeTemplate) coneTemplateDrawer.draw(batch, drawable, pen); + else if (drawable instanceof BurstTemplate) burstTemplateDrawer.draw(batch, drawable, pen); + else if (drawable instanceof RadiusTemplate) radiusTemplateDrawer.draw(batch, drawable, pen); + else if (drawable instanceof LineTemplate) lineTemplateDrawer.draw(batch, drawable, pen); } private void renderBoard() { @@ -1566,10 +1570,13 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure // Render Halo if (token.hasHalo()) { - drawer.setDefaultLineWidth(AppPreferences.getHaloLineWidth()); Color.argb8888ToColor(tmpColor, token.getHaloColor().getRGB()); - drawer.setColor(tmpColor); - areaRenderer.drawArea(zone.getGrid().getTokenCellArea(tokenBounds)); + areaRenderer.setColor(tmpColor); + areaRenderer.drawArea( + batch, + zone.getGrid().getTokenCellArea(tokenBounds), + false, + AppPreferences.getHaloLineWidth()); } // Calculate alpha Transparency from token and use opacity for indicating that token is moving @@ -1655,10 +1662,10 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure else drawer.setColor(1, 1, 0, 0.5f); var arrowArea = new Area(arrow); - areaRenderer.fillArea(arrowArea); + areaRenderer.fillArea(batch, arrowArea); - drawer.setColor(Color.DARK_GRAY); - areaRenderer.drawArea(arrowArea); + areaRenderer.setColor(Color.DARK_GRAY); + areaRenderer.drawArea(batch, arrowArea, false, 1); break; case TOP_DOWN: @@ -1678,17 +1685,13 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure tmpMatrix.idt(); tmpMatrix.translate(cx, -cy, 0); batch.setTransformMatrix(tmpMatrix); - drawer.update(); - drawer.setColor(Color.YELLOW); - - areaRenderer.fillArea(arrowArea); - drawer.setColor(Color.DARK_GRAY); - drawer.setDefaultLineWidth(1); - areaRenderer.drawArea(arrowArea); + areaRenderer.setColor(Color.YELLOW); + areaRenderer.fillArea(batch, arrowArea); + areaRenderer.setColor(Color.DARK_GRAY); + areaRenderer.drawArea(batch, arrowArea, false, 1); tmpMatrix.idt(); batch.setTransformMatrix(tmpMatrix); - drawer.update(); break; case SQUARE: if (zone.getGrid().isIsometric()) { @@ -1726,14 +1729,12 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure tmpMatrix.translate(cx, -cy, 0); batch.setTransformMatrix(tmpMatrix); - drawer.update(); - drawer.setColor(Color.YELLOW); + areaRenderer.setColor(Color.YELLOW); - areaRenderer.fillArea(arrowArea); - drawer.setColor(Color.DARK_GRAY); - areaRenderer.drawArea(arrowArea); + areaRenderer.fillArea(batch, arrowArea); + areaRenderer.setColor(Color.DARK_GRAY); + areaRenderer.drawArea(batch, arrowArea, false, 1); batch.setTransformMatrix(tmpMatrix.idt()); - drawer.update(); break; } } @@ -2552,7 +2553,7 @@ private void renderTokenOverlay(FlowColorDotTokenOverlay overlay, Token token) { overlay.getOpacity() / 100); drawer.setColor(tmpColor); Shape s = overlay.getShape(bounds, token); - areaRenderer.fillArea(new Area(s)); + areaRenderer.fillArea(batch, new Area(s)); drawer.setColor(Color.WHITE); } @@ -2792,7 +2793,7 @@ private void paintClipped(Sprite image, Area bounds, Area clip) { tmpArea.reset(); tmpArea.add(bounds); tmpArea.subtract(clip); - areaRenderer.fillArea(tmpArea); + areaRenderer.fillArea(batch, tmpArea); backBuffer.end(); @@ -3139,6 +3140,60 @@ private void initializeZoneResources(Zone newZone) { zone = newZone; } + /* + @Override + public void modelChanged(ModelChangeEvent event) { + + Object evt = event.getEvent(); + System.out.println("ModelChangend: " + evt); + if (!(evt instanceof Zone.Event)) return; + var eventType = (Zone.Event) evt; + switch (eventType) { + case TOPOLOGY_CHANGED: + flushFog(); + // flushLight(); + break; + case FOG_CHANGED: + flushFog = true; + break; + case TOKEN_CHANGED: + { + updateVisibleArea(); + var token = (Token) event.getArg(); + break; + } + case TOKEN_ADDED: + { + var token = (Token) event.getArg(); + System.out.println(); + break; + } + } + */ + /* + if (evt == Zone.Event.TOKEN_CHANGED + || evt == Zone.Event.TOKEN_REMOVED + || evt == Zone.Event.TOKEN_ADDED) { + if (event.getArg() instanceof List) { + @SuppressWarnings("unchecked") + List list = (List) (event.getArg()); + for (Token token : list) { + zoneRenderer.flush(token); + } + } else { + zoneRenderer.flush((Token) event.getArg()); + } + }*/ + /* + var currentZone = zone; + + // for now quick and dirty + disposeZoneResources(); + initializeZoneResources(currentZone); + + } + */ + // shapedrawer has to learn how to draw with texturePaint first. private Texture paintToTexture(DrawablePaint paint) { if (paint instanceof DrawableTexturePaint) { diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineCellTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineCellTemplateDrawer.java index d661b9dbad..d80b01ad91 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineCellTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineCellTemplateDrawer.java @@ -14,29 +14,37 @@ */ package net.rptools.maptool.client.ui.zone.gdx; +import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; import java.util.ListIterator; import net.rptools.maptool.client.MapTool; import net.rptools.maptool.model.CellPoint; import net.rptools.maptool.model.drawing.AbstractTemplate; import net.rptools.maptool.model.drawing.LineCellTemplate; import net.rptools.maptool.model.drawing.Pen; -import space.earlygrey.shapedrawer.ShapeDrawer; public class LineCellTemplateDrawer extends AbstractTemplateDrawer { - public LineCellTemplateDrawer(ShapeDrawer drawer) { - super(drawer); + public LineCellTemplateDrawer(AreaRenderer renderer) { + super(renderer); } @Override protected void paintArea( - AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + PolygonSpriteBatch batch, + AbstractTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int distance) { var lineCellTemplate = (LineCellTemplate) template; - paintArea(template, xOff, yOff, gridSize, lineCellTemplate.getQuadrant()); + paintArea(batch, template, xOff, yOff, gridSize, lineCellTemplate.getQuadrant()); } @Override protected void paintBorder( + PolygonSpriteBatch batch, Pen pen, AbstractTemplate template, int x, @@ -65,14 +73,16 @@ protected void paintBorder( var quadrant = lineCellTemplate.getQuadrant(); // Paint the borders as needed - if (!noPaint[0]) paintCloseVerticalBorder(pen, template, xOff, yOff, gridSize, quadrant); - if (!noPaint[1]) paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, quadrant); - if (!noPaint[2]) paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, quadrant); - if (!noPaint[3]) paintCloseHorizontalBorder(pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[0]) paintCloseVerticalBorder(batch, pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[1]) paintFarHorizontalBorder(batch, pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[2]) paintFarVerticalBorder(batch, pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[3]) + paintCloseHorizontalBorder(batch, pen, template, xOff, yOff, gridSize, quadrant); } @Override - protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean area) { + protected void paint( + PolygonSpriteBatch batch, Pen pen, AbstractTemplate template, boolean border, boolean area) { if (MapTool.getCampaign().getZone(template.getZoneId()) == null) { return; } @@ -105,10 +115,10 @@ protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean // Paint what is needed. if (area) { - paintArea(template, p.x, p.y, xOff, yOff, gridSize, distance); + paintArea(batch, template, p.x, p.y, xOff, yOff, gridSize, distance); } // endif if (border) { - paintBorder(pen, template, p.x, p.y, xOff, yOff, gridSize, i.previousIndex()); + paintBorder(batch, pen, template, p.x, p.y, xOff, yOff, gridSize, i.previousIndex()); } // endif } // endfor } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineTemplateDrawer.java index 92e1e7e0c4..8d630c5e7a 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineTemplateDrawer.java @@ -14,21 +14,22 @@ */ package net.rptools.maptool.client.ui.zone.gdx; +import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; import java.util.ListIterator; import net.rptools.maptool.client.MapTool; import net.rptools.maptool.model.CellPoint; import net.rptools.maptool.model.drawing.AbstractTemplate; import net.rptools.maptool.model.drawing.LineTemplate; import net.rptools.maptool.model.drawing.Pen; -import space.earlygrey.shapedrawer.ShapeDrawer; public class LineTemplateDrawer extends AbstractTemplateDrawer { - public LineTemplateDrawer(ShapeDrawer drawer) { - super(drawer); + public LineTemplateDrawer(AreaRenderer renderer) { + super(renderer); } @Override - protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean area) { + protected void paint( + PolygonSpriteBatch batch, Pen pen, AbstractTemplate template, boolean border, boolean area) { if (MapTool.getCampaign().getZone(template.getZoneId()) == null) { return; } @@ -50,23 +51,31 @@ protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean // Paint what is needed. if (area) { - paintArea(template, p.x, p.y, xOff, yOff, gridSize, distance); + paintArea(batch, template, p.x, p.y, xOff, yOff, gridSize, distance); } // endif if (border) { - paintBorder(pen, template, p.x, p.y, xOff, yOff, gridSize, i.previousIndex()); + paintBorder(batch, pen, template, p.x, p.y, xOff, yOff, gridSize, i.previousIndex()); } // endif } // endfor } @Override protected void paintArea( - AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + PolygonSpriteBatch batch, + AbstractTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int distance) { var lineTemplate = (LineTemplate) template; - paintArea(template, xOff, yOff, gridSize, lineTemplate.getQuadrant()); + paintArea(batch, template, xOff, yOff, gridSize, lineTemplate.getQuadrant()); } @Override protected void paintBorder( + PolygonSpriteBatch batch, Pen pen, AbstractTemplate template, int x, @@ -96,9 +105,10 @@ protected void paintBorder( var quadrant = lineTemplate.getQuadrant(); // Paint the borders as needed - if (!noPaint[0]) paintCloseVerticalBorder(pen, template, xOff, yOff, gridSize, quadrant); - if (!noPaint[1]) paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, quadrant); - if (!noPaint[2]) paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, quadrant); - if (!noPaint[3]) paintCloseHorizontalBorder(pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[0]) paintCloseVerticalBorder(batch, pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[1]) paintFarHorizontalBorder(batch, pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[2]) paintFarVerticalBorder(batch, pen, template, xOff, yOff, gridSize, quadrant); + if (!noPaint[3]) + paintCloseHorizontalBorder(batch, pen, template, xOff, yOff, gridSize, quadrant); } } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusCellTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusCellTemplateDrawer.java index e2ec6e80e8..9472d7658a 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusCellTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusCellTemplateDrawer.java @@ -14,49 +14,65 @@ */ package net.rptools.maptool.client.ui.zone.gdx; +import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; import net.rptools.maptool.client.MapTool; import net.rptools.maptool.model.GUID; import net.rptools.maptool.model.Zone; import net.rptools.maptool.model.ZonePoint; import net.rptools.maptool.model.drawing.AbstractTemplate; import net.rptools.maptool.model.drawing.Pen; -import space.earlygrey.shapedrawer.ShapeDrawer; public class RadiusCellTemplateDrawer extends AbstractTemplateDrawer { - public RadiusCellTemplateDrawer(ShapeDrawer drawer) { - super(drawer); + public RadiusCellTemplateDrawer(AreaRenderer renderer) { + super(renderer); } @Override protected void paintArea( - AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + PolygonSpriteBatch batch, + AbstractTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int distance) { // Only squares w/in the radius int radius = template.getRadius(); if (distance <= radius) { - paintArea(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + paintArea(batch, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); } if (template.getDistance(x, y + 1) <= radius) { - paintArea(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + paintArea(batch, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); } if (template.getDistance(x + 1, y) <= radius) { - paintArea(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + paintArea(batch, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); } if (template.getDistance(x + 1, y + 1) <= radius) { - paintArea(template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + paintArea(batch, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); } } @Override protected void paintArea( - AbstractTemplate template, int xOff, int yOff, int gridSize, AbstractTemplate.Quadrant q) { + PolygonSpriteBatch batch, + AbstractTemplate template, + int xOff, + int yOff, + int gridSize, + AbstractTemplate.Quadrant q) { ZonePoint vertex = template.getVertex(); int x = vertex.x + getXMult(q) * xOff + ((getXMult(q) - 1) / 2) * gridSize; int y = vertex.y + getYMult(q) * yOff + ((getYMult(q) - 1) / 2) * gridSize; - drawer.filledRectangle(x, -y - gridSize, gridSize, gridSize); + var floats = + new float[] { + x, -y - gridSize, x, -y, x + gridSize, -y, x + gridSize, -y - gridSize, + }; + areaRenderer.paintVertices(batch, floats); } @Override @@ -75,6 +91,7 @@ protected int getYMult(AbstractTemplate.Quadrant q) { @Override protected void paintBorder( + PolygonSpriteBatch batch, Pen pen, AbstractTemplate template, int x, @@ -83,10 +100,12 @@ protected void paintBorder( int yOff, int gridSize, int distance) { - paintBorderAtRadius(pen, template, x, y, xOff, yOff, gridSize, distance, template.getRadius()); + paintBorderAtRadius( + batch, pen, template, x, y, xOff, yOff, gridSize, distance, template.getRadius()); } protected void paintBorderAtRadius( + PolygonSpriteBatch batch, Pen pen, AbstractTemplate template, int x, @@ -101,60 +120,85 @@ protected void paintBorderAtRadius( if (template.getDistance(x, y + 1) == radius && template.getDistance(x + 1, y + 1) > radius) { paintFarVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); } if (distance == radius && template.getDistance(x + 1, y) > radius) { paintFarVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); } if (template.getDistance(x + 1, y + 1) == radius && template.getDistance(x + 2, y + 1) > radius) { paintFarVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); } if (template.getDistance(x + 1, y) == radius && template.getDistance(x + 2, y) > radius) { paintFarVerticalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); } // endif if (x == 0 && y + 1 == radius) { paintFarVerticalBorder( - pen, template, xOff - gridSize, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + batch, + pen, + template, + xOff - gridSize, + yOff, + gridSize, + AbstractTemplate.Quadrant.SOUTH_EAST); } if (x == 0 && y + 2 == radius) { paintFarVerticalBorder( - pen, template, xOff - gridSize, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + batch, + pen, + template, + xOff - gridSize, + yOff, + gridSize, + AbstractTemplate.Quadrant.NORTH_WEST); } // Paint lines between horizontal boundaries if needed if (template.getDistance(x, y + 1) == radius && template.getDistance(x, y + 2) > radius) { paintFarHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); } if (template.getDistance(x, y) == radius && template.getDistance(x, y + 1) > radius) { paintFarHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); } if (y == 0 && x + 1 == radius) { paintFarHorizontalBorder( - pen, template, xOff, yOff - gridSize, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + batch, + pen, + template, + xOff, + yOff - gridSize, + gridSize, + AbstractTemplate.Quadrant.SOUTH_EAST); } if (y == 0 && x + 2 == radius) { paintFarHorizontalBorder( - pen, template, xOff, yOff - gridSize, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + batch, + pen, + template, + xOff, + yOff - gridSize, + gridSize, + AbstractTemplate.Quadrant.NORTH_WEST); } if (template.getDistance(x + 1, y + 1) == radius && template.getDistance(x + 1, y + 2) > radius) { paintFarHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); } if (template.getDistance(x + 1, y) == radius && template.getDistance(x + 1, y + 1) > radius) { paintFarHorizontalBorder( - pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); } // endif } @Override - protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean area) { + protected void paint( + PolygonSpriteBatch batch, Pen pen, AbstractTemplate template, boolean border, boolean area) { int radius = template.getRadius(); GUID zoneId = template.getZoneId(); @@ -173,8 +217,9 @@ protected void paint(Pen pen, AbstractTemplate template, boolean border, boolean // Template specific painting if (border) - paintBorder(pen, template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); - if (area) paintArea(template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); + paintBorder(batch, pen, template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); + if (area) + paintArea(batch, template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); } // endfor } // endfor } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusTemplateDrawer.java index 0bbea19abf..d99cb9ae5e 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusTemplateDrawer.java @@ -14,31 +14,39 @@ */ package net.rptools.maptool.client.ui.zone.gdx; +import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; import net.rptools.maptool.model.drawing.AbstractTemplate; import net.rptools.maptool.model.drawing.Pen; import net.rptools.maptool.model.drawing.RadiusTemplate; -import space.earlygrey.shapedrawer.ShapeDrawer; public class RadiusTemplateDrawer extends AbstractTemplateDrawer { - public RadiusTemplateDrawer(ShapeDrawer drawer) { - super(drawer); + public RadiusTemplateDrawer(AreaRenderer renderer) { + super(renderer); } @Override protected void paintArea( - AbstractTemplate template, int x, int y, int xOff, int yOff, int gridSize, int distance) { + PolygonSpriteBatch batch, + AbstractTemplate template, + int x, + int y, + int xOff, + int yOff, + int gridSize, + int distance) { var radiusTemplate = (RadiusTemplate) template; // Only squares w/in the radius if (distance <= radiusTemplate.getRadius()) { // Paint the squares for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { - paintArea(template, xOff, yOff, gridSize, q); + paintArea(batch, template, xOff, yOff, gridSize, q); } } } @Override protected void paintBorder( + PolygonSpriteBatch batch, Pen pen, AbstractTemplate template, int x, @@ -49,10 +57,11 @@ protected void paintBorder( int distance) { var radiusTemplate = (RadiusTemplate) template; paintBorderAtRadius( - pen, template, x, y, xOff, yOff, gridSize, distance, radiusTemplate.getRadius()); + batch, pen, template, x, y, xOff, yOff, gridSize, distance, radiusTemplate.getRadius()); } private void paintBorderAtRadius( + PolygonSpriteBatch batch, Pen pen, AbstractTemplate template, int x, @@ -67,14 +76,14 @@ private void paintBorderAtRadius( // Paint lines between vertical boundaries if needed if (template.getDistance(x + 1, y) > radius) { for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { - paintFarVerticalBorder(pen, template, xOff, yOff, gridSize, q); + paintFarVerticalBorder(batch, pen, template, xOff, yOff, gridSize, q); } } // Paint lines between horizontal boundaries if needed if (template.getDistance(x, y + 1) > radius) { for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { - paintFarHorizontalBorder(pen, template, xOff, yOff, gridSize, q); + paintFarHorizontalBorder(batch, pen, template, xOff, yOff, gridSize, q); } } } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ShapeDrawableDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ShapeDrawableDrawer.java index 99ce586b82..c0ec084e9c 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ShapeDrawableDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ShapeDrawableDrawer.java @@ -14,68 +14,26 @@ */ package net.rptools.maptool.client.ui.zone.gdx; -import com.badlogic.gdx.graphics.Pixmap; -import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.g2d.PolygonRegion; -import com.badlogic.gdx.graphics.g2d.PolygonSprite; import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; -import com.badlogic.gdx.graphics.g2d.TextureRegion; -import com.badlogic.gdx.math.EarClippingTriangulator; import net.rptools.maptool.model.drawing.Drawable; -import net.rptools.maptool.model.drawing.DrawableTexturePaint; import net.rptools.maptool.model.drawing.Pen; import net.rptools.maptool.model.drawing.ShapeDrawable; -import space.earlygrey.shapedrawer.JoinType; -import space.earlygrey.shapedrawer.ShapeDrawer; public class ShapeDrawableDrawer extends AbstractDrawingDrawer { - private EarClippingTriangulator triangulator = new EarClippingTriangulator(); - - public ShapeDrawableDrawer(ShapeDrawer drawer) { - super(drawer); + public ShapeDrawableDrawer(AreaRenderer renderer) { + super(renderer); } @Override - protected void drawBackground(Drawable element, Pen pen) { + protected void drawBackground(PolygonSpriteBatch batch, Drawable element, Pen pen) { var shape = (ShapeDrawable) element; - fillArea(shape.getArea()); + fillArea(batch, shape.getArea()); } @Override - protected void drawBorder(Drawable element, Pen pen) { + protected void drawBorder(PolygonSpriteBatch batch, Drawable element, Pen pen) { var shape = (ShapeDrawable) element; - var tmpFloat = pathToFloatArray(shape.getShape().getPathIterator(null)); - if (tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) - && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { - tmpFloat.pop(); - tmpFloat.pop(); - } - if (pen.getSquareCap()) - if (pen.getPaint() instanceof DrawableTexturePaint texturePaint) { - var image = texturePaint.getAsset().getData(); - var pix = new Pixmap(image, 0, image.length); - - // FIXME properly dispose - var region = new TextureRegion(new Texture(pix)); - // region.flip(false, true); - pix.dispose(); - - var vertices = tmpFloat.toArray(); - var indicies = triangulator.computeTriangles(vertices); - var polyreg = new PolygonRegion(region, vertices, indicies.toArray()); - var poly = new PolygonSprite(polyreg); - var batch = (PolygonSpriteBatch) drawer.getBatch(); - poly.draw(batch); - - } else { - areaRenderer.setTextureRegion(null); - drawer.path(tmpFloat.toArray(), pen.getThickness(), JoinType.POINTY, false); - } - else { - drawer.path(tmpFloat.toArray(), pen.getThickness(), JoinType.NONE, false); - // for (int i = 0; i + 1 < tmpFloat.size; i += 2) - // drawer.filledCircle(tmpFloat.get(i), tmpFloat.get(i + 1), pen.getThickness() / 2f); - } + drawArea(batch, shape.getArea(), pen); } } From fb0371378434fa68bf5f59cd7f29f119b2d2f068 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sun, 24 Sep 2023 21:39:33 +0200 Subject: [PATCH 094/139] drawing with textures works now. --- .../client/ui/zone/gdx/AreaRenderer.java | 90 ++++++++++++++++--- .../client/ui/zone/gdx/GdxRenderer.java | 2 +- 2 files changed, 78 insertions(+), 14 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java index fa1f13f666..075d6327dc 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java @@ -27,16 +27,20 @@ import java.util.List; import net.rptools.lib.gdx.Joiner; import space.earlygrey.shapedrawer.DefaultSideEstimator; +import space.earlygrey.shapedrawer.ShapeDrawer; import space.earlygrey.shapedrawer.ShapeUtils; import space.earlygrey.shapedrawer.SideEstimator; public class AreaRenderer { - public AreaRenderer(EarClippingTriangulator triangulator, TextureRegion whitePixelRegion) { + public AreaRenderer( + EarClippingTriangulator triangulator, TextureRegion whitePixelRegion, ShapeDrawer drawer) { this.triangulator = triangulator; this.whitePixel = whitePixelRegion; + this.drawer = drawer; } + private ShapeDrawer drawer; private TextureRegion whitePixel; private FloatArray tmpFloat = new FloatArray(); @@ -75,22 +79,58 @@ public void fillArea(PolygonSpriteBatch batch, Area area) { paintVertices(batch, tmpFloat.toArray()); } + private boolean debug = false; + public void drawArea(PolygonSpriteBatch batch, Area area, boolean rounded, float thickness) { if (area == null || area.isEmpty()) return; pathToFloatArray(area.getPathIterator(null)); var vertices = path(tmpFloat, thickness, rounded ? JoinType.Round : JoinType.Pointy, false); + // drawDebug(vertices); + // debug = true; paintVertices(batch, vertices); + // debug = false; + } + + private void drawDebug(float[] vertices) { + var oldColor = drawer.getPackedColor(); + drawer.setColor(Color.ORANGE); + for (int j = 0; j < vertices.length; j += 2) { + float x1 = vertices[j]; + float y1 = vertices[j + 1]; + + if (j + 2 >= vertices.length) break; + float x2 = vertices[j + 2]; + float y2 = vertices[j + 3]; + drawer.line(x1, y1, x2, y2); + } + drawer.setColor(oldColor); + } + + private void drawDebug(float[] vertices, short[] indicies) { + var oldColor = drawer.getPackedColor(); + drawer.setColor(Color.CYAN); + for (int j = 0; j < indicies.length; j += 3) { + float x1 = vertices[2 * indicies[j]]; + float y1 = vertices[2 * indicies[j] + 1]; + float x2 = vertices[2 * indicies[j + 1]]; + float y2 = vertices[2 * indicies[j + 1] + 1]; + float x3 = vertices[2 * indicies[j + 2]]; + float y3 = vertices[2 * indicies[j + 2] + 1]; + drawer.triangle(x1, y1, x2, y2, x3, y3); + } + drawer.setColor(oldColor); } protected void paintVertices(PolygonSpriteBatch batch, float[] vertices) { - var indicies = triangulator.computeTriangles(vertices); - var polyreg = new PolygonRegion(textureRegion, vertices, indicies.toArray()); + var indicies = triangulator.computeTriangles(vertices).toArray(); + var polyreg = new PolygonRegion(textureRegion, vertices, indicies); var poly = new PolygonSprite(polyreg); if (color != null) { poly.setColor(color); } - poly.draw(batch); + if (debug) drawDebug(vertices, indicies); + else poly.draw(batch); color = null; } @@ -207,8 +247,6 @@ public float[] path(FloatArray path, float lineWidth, JoinType joinType, boolean outer.add(y + halfWidth); outer.add(x + halfWidth); outer.add(y - halfWidth); - outer.add(x - halfWidth); - outer.add(y - halfWidth); } } else if (path.size == 4) { @@ -433,11 +471,24 @@ public float[] path(FloatArray path, float lineWidth, JoinType joinType, boolean vec1.add(-B.x, -B.y); var angle = vec1.angleRad(); var angleDiff = MathUtils.PI2 - ShapeUtils.angleRad(AB, BC); - addArc(outer, B.x, B.y, halfWidth, angle, angle + angleDiff, true); + if (bendsLeft) { + addArc(inner, B.x, B.y, halfWidth, angle, angle + angleDiff, false); + inner.add(E0.x); + inner.add(E0.y); + } else { + addArc(outer, B.x, B.y, halfWidth, angle, angle + angleDiff, true); + outer.add(D0.x); + outer.add(D0.y); + } + } else { + if (bendsLeft) { + inner.add(E0.x); + inner.add(E0.y); + } else { + outer.add(D0.x); + outer.add(D0.y); + } } - - outer.add(D0.x); - outer.add(D0.y); } } } @@ -474,19 +525,28 @@ private void addArc( if (endAngle < 0) { endAngle += MathUtils.PI2; } - var sides = estimateSidesRequired(radius, radius); + var deltaAngle = (endAngle + MathUtils.PI2 - startAngle) % MathUtils.PI2; if (clockwise) { deltaAngle = MathUtils.PI2 - deltaAngle; } + var sides = estimateSidesRequired(radius, radius); + sides *= deltaAngle / MathUtils.PI2; var dAnglePerSide = deltaAngle / sides; var angle = startAngle; + angle += dAnglePerSide; + sides -= 1; if (clockwise) { dAnglePerSide *= -1; + angle += 2 * dAnglePerSide; } - - for (var i = 0; i <= sides; i++) { + var oldColor = drawer.getPackedColor(); + drawer.setColor(Color.WHITE_FLOAT_BITS); + for (var i = 1; i <= sides; i++) { + if (i > 1 && debug) { + drawer.setColor(Color.RED); + } var cos = MathUtils.cos(angle); var sin = MathUtils.sin(angle); angle += dAnglePerSide; @@ -495,7 +555,11 @@ private void addArc( list.add(x); list.add(y); + if (debug) { + drawer.circle(x, y, 2); + } } + drawer.setColor(oldColor); } private SideEstimator sideEstimator = new DefaultSideEstimator(); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 5780a8916e..707640d477 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -236,7 +236,7 @@ public void create() { TextureRegion region = new TextureRegion(onePixel, 0, 0, 1, 1); drawer = new ShapeDrawer(batch, region); - areaRenderer = new AreaRenderer(triangulator, region); + areaRenderer = new AreaRenderer(triangulator, region, drawer); lineTemplateDrawer = new LineTemplateDrawer(areaRenderer); lineCellTemplateDrawer = new LineCellTemplateDrawer(areaRenderer); radiusTemplateDrawer = new RadiusTemplateDrawer(areaRenderer); From bf5f114632584bb9608f33d8855c644d1d83c4c5 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 25 Sep 2023 21:44:35 +0200 Subject: [PATCH 095/139] embedding works correctly again. --- build.gradle | 2 +- .../maptool/client/ui/MapToolFrame.java | 43 +++---------------- .../maptool/client/ui/zone/ZoneRenderer.java | 7 ++- 3 files changed, 14 insertions(+), 38 deletions(-) diff --git a/build.gradle b/build.gradle index 0ce7c81f10..4b923ba1a3 100644 --- a/build.gradle +++ b/build.gradle @@ -615,4 +615,4 @@ task createWrapper(type: Wrapper) { // Configure current release tag in Sentry.io properties processResources.dependsOn configSentryRelease -configSentryRelease.dependsOn 'spotlessCheck' \ No newline at end of file +//configSentryRelease.dependsOn 'spotlessCheck' \ No newline at end of file diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index 213d3d767d..aa3a76fda6 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -415,11 +415,12 @@ public MapToolFrame(JMenuBar menuBar) { zoneRendererPanel.setBackground(Color.black); currentRenderPanel = zoneRendererPanel; initGdx(); + // zoneRendererPanel.add(zoneMiniMapPanel, PositionalLayout.Position.SE); // zoneRendererPanel.add(getChatTypingLabel(), PositionalLayout.Position.NW); zoneRendererPanel.add(getChatTypingPanel(), PositionalLayout.Position.NW); zoneRendererPanel.add(getChatActionLabel(), PositionalLayout.Position.SW); - + zoneRendererPanel.add(gdxPanel, PositionalLayout.Position.CENTER); commandPanel = new CommandPanel(); rendererBorderPanel = new JPanel(new GridLayout()); @@ -487,38 +488,9 @@ private void initGdx() { } public void addGdx() { - var show = !(currentRenderPanel instanceof GLJPanel); - - JPanel nextRenderPanel; - if (show) { - nextRenderPanel = gdxPanel; - } else { - nextRenderPanel = zoneRendererPanel; - } - - var layout = (PositionalLayout) currentRenderPanel.getLayout(); - for (Component c : currentRenderPanel.getComponents()) { - nextRenderPanel.add(c, layout.getComponentConstraints(c)); - } - currentRenderPanel.setVisible(false); - nextRenderPanel.setVisible(true); - rendererBorderPanel.remove(currentRenderPanel); - - rendererBorderPanel.add(nextRenderPanel); - currentRenderPanel = nextRenderPanel; - correctGdxSize(); - refresh(); - } - - private void correctGdxSize() { - if (currentRenderPanel == gdxPanel) { - gdxPanel.initializeBackend(false); - gdxPanel.reshape(0, 0, 0, 0); - gdxPanel.revalidate(); - } + gdxPanel.setVisible(!gdxPanel.isVisible()); } - - public GLJPanel getGdxPanel() { + public GLJPanel getGdxPanel() { return gdxPanel; } @@ -1658,7 +1630,7 @@ public void setCurrentZoneRenderer(ZoneRenderer renderer) { } if (renderer != null) { zoneRendererPanel.add( - renderer, PositionalLayout.Position.CENTER, zoneRendererPanel.getComponentCount() - 1); + renderer, PositionalLayout.Position.CENTER, zoneRendererPanel.getComponentCount() - 2); zoneRendererPanel.doLayout(); } currentRenderer = renderer; @@ -1793,8 +1765,7 @@ public void showFullScreen() { Rectangle bounds = graphicsConfig.getBounds(); fullScreenFrame = new FullScreenFrame(); - fullScreenFrame.add(currentRenderPanel); - correctGdxSize(); + fullScreenFrame.add(zoneRendererPanel); // Under mac os x this does not properly hide the menu bar so adjust top and height // so menu bar does not overlay screen. @@ -1882,6 +1853,7 @@ public void showFullScreenTools() { zoneRendererPanel.setComponentZOrder(initiativePanel, 0); zoneRendererPanel.revalidate(); + zoneRendererPanel.doLayout(); zoneRendererPanel.repaint(); fullScreenToolsShown = true; @@ -1927,7 +1899,6 @@ public void showWindowed() { hideFullScreenTools(); rendererBorderPanel.add(currentRenderPanel); - correctGdxSize(); setJMenuBar(menuBar); menuBar.setVisible(true); this.setVisible(true); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index 515ba12c12..c62fd5a9c0 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -846,7 +846,12 @@ public void paintComponent(Graphics g) { PlayerView pl = getPlayerView(); timer.stop("paintComponent:createView"); - renderZone(bufferG2d, pl); + // we still need to render the different overlays + var g2dForRendering = bufferG2d; + if(skipDrawing) { + g2dForRendering = g2d; + } + renderZone(g2dForRendering, pl); int noteVPos = 20; if (MapTool.getFrame().areFullScreenToolsShown()) noteVPos += 40; From 8e3fddffb1d3c49e7cc0d7f0765acfc5aced3272 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Fri, 29 Sep 2023 18:55:01 +0200 Subject: [PATCH 096/139] wip --- build.gradle | 3 + .../maptool/client/ui/MapToolFrame.java | 7 +- .../client/ui/zone/gdx/Box2DLightsTest.java | 536 ++++++++++++++++++ .../client/ui/zone/gdx/GdxRenderer.java | 44 ++ src/main/resources/data/bg.png | Bin 0 -> 394660 bytes src/main/resources/data/marble.png | Bin 0 -> 9522 bytes src/main/resources/mappe14.xlsx | Bin 0 -> 18917 bytes 7 files changed, 587 insertions(+), 3 deletions(-) create mode 100644 src/main/java/net/rptools/maptool/client/ui/zone/gdx/Box2DLightsTest.java create mode 100644 src/main/resources/data/bg.png create mode 100644 src/main/resources/data/marble.png create mode 100644 src/main/resources/mappe14.xlsx diff --git a/build.gradle b/build.gradle index 4b923ba1a3..61a1c38a43 100644 --- a/build.gradle +++ b/build.gradle @@ -514,6 +514,9 @@ dependencies { implementation "com.badlogicgames.gdx:gdx-freetype-platform:1.12.0:natives-desktop" implementation "com.badlogicgames.gdx-video:gdx-video:1.3.2-SNAPSHOT" implementation "com.badlogicgames.gdx-video:gdx-video-lwjgl3:1.3.2-SNAPSHOT" + implementation 'com.badlogicgames.box2dlights:box2dlights:1.5' + implementation 'com.badlogicgames.gdx:gdx-box2d:1.12.0' + implementation "com.badlogicgames.gdx:gdx-box2d-platform:1.12.0:natives-desktop" } diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index aa3a76fda6..558d6d152d 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -97,6 +97,7 @@ import net.rptools.maptool.client.ui.zone.PointerToolOverlay; import net.rptools.maptool.client.ui.zone.ZoneMiniMapPanel; import net.rptools.maptool.client.ui.zone.ZoneRenderer; +import net.rptools.maptool.client.ui.zone.gdx.Box2DLightsTest; import net.rptools.maptool.client.ui.zone.gdx.GdxRenderer; import net.rptools.maptool.events.MapToolEventBus; import net.rptools.maptool.language.I18N; @@ -420,7 +421,7 @@ public MapToolFrame(JMenuBar menuBar) { // zoneRendererPanel.add(getChatTypingLabel(), PositionalLayout.Position.NW); zoneRendererPanel.add(getChatTypingPanel(), PositionalLayout.Position.NW); zoneRendererPanel.add(getChatActionLabel(), PositionalLayout.Position.SW); - zoneRendererPanel.add(gdxPanel, PositionalLayout.Position.CENTER); + commandPanel = new CommandPanel(); rendererBorderPanel = new JPanel(new GridLayout()); @@ -433,7 +434,7 @@ public MapToolFrame(JMenuBar menuBar) { pointerToolOverlay = new PointerToolOverlay(); zoneRendererPanel.add(pointerToolOverlay, PositionalLayout.Position.CENTER, 0); - + zoneRendererPanel.add(gdxPanel, PositionalLayout.Position.CENTER, 0); // Put it all together setJMenuBar(menuBar); add(BorderLayout.NORTH, toolbarPanel); @@ -480,7 +481,7 @@ private void initGdx() { config.title = "maptool"; config.width = 640; config.height = 480; - var joglSwingCanvas = new JoglSwingCanvas(GdxRenderer.getInstance(), config); + var joglSwingCanvas = new JoglSwingCanvas(new Box2DLightsTest(), config); gdxPanel = joglSwingCanvas.getGLCanvas(); gdxPanel.setVisible(false); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/Box2DLightsTest.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/Box2DLightsTest.java new file mode 100644 index 0000000000..c9a87b38a3 --- /dev/null +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/Box2DLightsTest.java @@ -0,0 +1,536 @@ +package net.rptools.maptool.client.ui.zone.gdx; + +import java.util.ArrayList; + +import box2dLight.ChainLight; +import box2dLight.ConeLight; +import box2dLight.DirectionalLight; +import box2dLight.Light; +import box2dLight.PointLight; +import box2dLight.RayHandler; + +import com.badlogic.gdx.ApplicationListener; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input; +import com.badlogic.gdx.InputAdapter; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.OrthographicCamera; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.g2d.TextureRegion; +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Matrix4; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.math.Vector3; +import com.badlogic.gdx.physics.box2d.Body; +import com.badlogic.gdx.physics.box2d.BodyDef; +import com.badlogic.gdx.physics.box2d.BodyDef.BodyType; +import com.badlogic.gdx.physics.box2d.ChainShape; +import com.badlogic.gdx.physics.box2d.CircleShape; +import com.badlogic.gdx.physics.box2d.Fixture; +import com.badlogic.gdx.physics.box2d.FixtureDef; +import com.badlogic.gdx.physics.box2d.QueryCallback; +import com.badlogic.gdx.physics.box2d.World; +import com.badlogic.gdx.physics.box2d.joints.MouseJoint; +import com.badlogic.gdx.physics.box2d.joints.MouseJointDef; + +public class Box2DLightsTest extends InputAdapter implements ApplicationListener { + + static final int RAYS_PER_BALL = 128; + static final int BALLSNUM = 5; + static final float LIGHT_DISTANCE = 16f; + static final float RADIUS = 1f; + + static final float viewportWidth = 48; + static final float viewportHeight = 32; + + OrthographicCamera camera; + + SpriteBatch batch; + BitmapFont font; + TextureRegion textureRegion; + Texture bg; + + /** our box2D world **/ + World world; + + /** our boxes **/ + ArrayList balls = new ArrayList(BALLSNUM); + + /** our ground box **/ + Body groundBody; + + /** our mouse joint **/ + MouseJoint mouseJoint = null; + + /** a hit body **/ + Body hitBody = null; + + /** pixel perfect projection for font rendering */ + Matrix4 normalProjection = new Matrix4(); + + boolean showText = true; + + /** BOX2D LIGHT STUFF */ + RayHandler rayHandler; + + ArrayList lights = new ArrayList(BALLSNUM); + + float sunDirection = -90f; + + @Override + public void create() { + + MathUtils.random.setSeed(Long.MIN_VALUE); + + camera = new OrthographicCamera(viewportWidth, viewportHeight); + camera.position.set(0, viewportHeight / 2f, 0); + camera.update(); + + batch = new SpriteBatch(); + font = new BitmapFont(); + font.setColor(Color.RED); + + textureRegion = new TextureRegion(new Texture( + Gdx.files.internal("data/marble.png"))); + bg = new Texture(Gdx.files.internal("data/bg.png")); + + createPhysicsWorld(); + Gdx.input.setInputProcessor(this); + + normalProjection.setToOrtho2D( + 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + + /** BOX2D LIGHT STUFF BEGIN */ + RayHandler.setGammaCorrection(true); + RayHandler.useDiffuseLight(true); + + rayHandler = new RayHandler(world); + rayHandler.setAmbientLight(0f, 0f, 0f, 0.5f); + rayHandler.setBlurNum(3); + + initPointLights(); + /** BOX2D LIGHT STUFF END */ + + } + + @Override + public void render() { + + /** Rotate directional light like sun :) */ + if (lightsType == 3) { + sunDirection += Gdx.graphics.getDeltaTime() * 4f; + lights.get(0).setDirection(sunDirection); + } + + camera.update(); + + boolean stepped = fixedStep(Gdx.graphics.getDeltaTime()); + Gdx.gl.glClearColor(0.3f, 0.3f, 0.3f, 1); + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + + batch.setProjectionMatrix(camera.combined); + batch.disableBlending(); + batch.begin(); + { + batch.draw(bg, -viewportWidth / 2f, 0, viewportWidth, viewportHeight); + batch.enableBlending(); + for (int i = 0; i < BALLSNUM; i++) { + Body ball = balls.get(i); + Vector2 position = ball.getPosition(); + float angle = MathUtils.radiansToDegrees * ball.getAngle(); + batch.draw( + textureRegion, + position.x - RADIUS, position.y - RADIUS, + RADIUS, RADIUS, + RADIUS * 2, RADIUS * 2, + 1f, 1f, + angle); + } + } + batch.end(); + + /** BOX2D LIGHT STUFF BEGIN */ + rayHandler.setCombinedMatrix(camera); + + if (stepped) rayHandler.update(); + rayHandler.render(); + /** BOX2D LIGHT STUFF END */ + + long time = System.nanoTime(); + + boolean atShadow = rayHandler.pointAtShadow(testPoint.x, + testPoint.y); + aika += System.nanoTime() - time; + + /** FONT */ + if (showText) { + batch.setProjectionMatrix(normalProjection); + batch.begin(); + + font.draw(batch, + "F1 - PointLight", + 0, Gdx.graphics.getHeight()); + font.draw(batch, + "F2 - ConeLight", + 0, Gdx.graphics.getHeight() - 15); + font.draw(batch, + "F3 - ChainLight", + 0, Gdx.graphics.getHeight() - 30); + font.draw(batch, + "F4 - DirectionalLight", + 0, Gdx.graphics.getHeight() - 45); + font.draw(batch, + "F5 - random lights colors", + 0, Gdx.graphics.getHeight() - 75); + font.draw(batch, + "F6 - random lights distance", + 0, Gdx.graphics.getHeight() - 90); + font.draw(batch, + "F9 - default blending (1.3)", + 0, Gdx.graphics.getHeight() - 120); + font.draw(batch, + "F10 - over-burn blending (default in 1.2)", + 0, Gdx.graphics.getHeight() - 135); + font.draw(batch, + "F11 - some other blending", + 0, Gdx.graphics.getHeight() - 150); + + font.draw(batch, + "F12 - toggle help text", + 0, Gdx.graphics.getHeight() - 180); + + font.draw(batch, + Integer.toString(Gdx.graphics.getFramesPerSecond()) + + "mouse at shadows: " + atShadow + + " time used for shadow calculation:" + + aika / ++times + "ns" , 0, 20); + + batch.end(); + } + } + + void clearLights() { + if (lights.size() > 0) { + for (Light light : lights) { + light.remove(); + } + lights.clear(); + } + groundBody.setActive(true); + } + + void initPointLights() { + clearLights(); + for (int i = 0; i < BALLSNUM; i++) { + PointLight light = new PointLight( + rayHandler, RAYS_PER_BALL, null, LIGHT_DISTANCE, 0f, 0f); + light.attachToBody(balls.get(i), RADIUS / 2f, RADIUS / 2f); + light.setColor( + MathUtils.random(), + MathUtils.random(), + MathUtils.random(), + 1f); + lights.add(light); + } + } + + void initConeLights() { + clearLights(); + for (int i = 0; i < BALLSNUM; i++) { + ConeLight light = new ConeLight( + rayHandler, RAYS_PER_BALL, null, LIGHT_DISTANCE, + 0, 0, 0f, MathUtils.random(15f, 40f)); + light.attachToBody( + balls.get(i), + RADIUS / 2f, RADIUS / 2f, MathUtils.random(0f, 360f)); + light.setColor( + MathUtils.random(), + MathUtils.random(), + MathUtils.random(), + 1f); + lights.add(light); + } + } + + void initChainLights() { + clearLights(); + for (int i = 0; i < BALLSNUM; i++) { + ChainLight light = new ChainLight( + rayHandler, RAYS_PER_BALL, null, LIGHT_DISTANCE, 1, + new float[]{-5, 0, 0, 3, 5, 0}); + light.attachToBody( + balls.get(i), + MathUtils.random(0f, 360f)); + light.setColor( + MathUtils.random(), + MathUtils.random(), + MathUtils.random(), + 1f); + lights.add(light); + } + } + + void initDirectionalLight() { + clearLights(); + + groundBody.setActive(false); + sunDirection = MathUtils.random(0f, 360f); + + DirectionalLight light = new DirectionalLight( + rayHandler, 4 * RAYS_PER_BALL, null, sunDirection); + lights.add(light); + } + + private final static int MAX_FPS = 30; + private final static int MIN_FPS = 15; + public final static float TIME_STEP = 1f / MAX_FPS; + private final static float MAX_STEPS = 1f + MAX_FPS / MIN_FPS; + private final static float MAX_TIME_PER_FRAME = TIME_STEP * MAX_STEPS; + private final static int VELOCITY_ITERS = 6; + private final static int POSITION_ITERS = 2; + + float physicsTimeLeft; + long aika; + int times; + + private boolean fixedStep(float delta) { + physicsTimeLeft += delta; + if (physicsTimeLeft > MAX_TIME_PER_FRAME) + physicsTimeLeft = MAX_TIME_PER_FRAME; + + boolean stepped = false; + while (physicsTimeLeft >= TIME_STEP) { + world.step(TIME_STEP, VELOCITY_ITERS, POSITION_ITERS); + physicsTimeLeft -= TIME_STEP; + stepped = true; + } + return stepped; + } + + private void createPhysicsWorld() { + + world = new World(new Vector2(0, 0), true); + + float halfWidth = viewportWidth / 2f; + ChainShape chainShape = new ChainShape(); + chainShape.createLoop(new Vector2[] { + new Vector2(-halfWidth, 0f), + new Vector2(halfWidth, 0f), + new Vector2(halfWidth, viewportHeight), + new Vector2(-halfWidth, viewportHeight) }); + BodyDef chainBodyDef = new BodyDef(); + chainBodyDef.type = BodyType.StaticBody; + groundBody = world.createBody(chainBodyDef); + groundBody.createFixture(chainShape, 0); + chainShape.dispose(); + createBoxes(); + } + + private void createBoxes() { + CircleShape ballShape = new CircleShape(); + ballShape.setRadius(RADIUS); + + FixtureDef def = new FixtureDef(); + def.restitution = 0.9f; + def.friction = 0.01f; + def.shape = ballShape; + def.density = 1f; + BodyDef boxBodyDef = new BodyDef(); + boxBodyDef.type = BodyType.DynamicBody; + + for (int i = 0; i < BALLSNUM; i++) { + // Create the BodyDef, set a random position above the + // ground and create a new body + boxBodyDef.position.x = -20 + (float) (Math.random() * 40); + boxBodyDef.position.y = 10 + (float) (Math.random() * 15); + Body boxBody = world.createBody(boxBodyDef); + boxBody.createFixture(def); + balls.add(boxBody); + } + ballShape.dispose(); + } + + /** + * we instantiate this vector and the callback here so we don't irritate the + * GC + **/ + Vector3 testPoint = new Vector3(); + QueryCallback callback = new QueryCallback() { + @Override + public boolean reportFixture(Fixture fixture) { + if (fixture.getBody() == groundBody) + return true; + + if (fixture.testPoint(testPoint.x, testPoint.y)) { + hitBody = fixture.getBody(); + return false; + } else + return true; + } + }; + + @Override + public boolean touchDown(int x, int y, int pointer, int newParam) { + // translate the mouse coordinates to world coordinates + testPoint.set(x, y, 0); + camera.unproject(testPoint); + + // ask the world which bodies are within the given + // bounding box around the mouse pointer + hitBody = null; + world.QueryAABB(callback, testPoint.x - 0.1f, testPoint.y - 0.1f, + testPoint.x + 0.1f, testPoint.y + 0.1f); + + // if we hit something we create a new mouse joint + // and attach it to the hit body. + if (hitBody != null) { + MouseJointDef def = new MouseJointDef(); + def.bodyA = groundBody; + def.bodyB = hitBody; + def.collideConnected = true; + def.target.set(testPoint.x, testPoint.y); + def.maxForce = 1000.0f * hitBody.getMass(); + + mouseJoint = (MouseJoint) world.createJoint(def); + hitBody.setAwake(true); + } + + return false; + } + + /** another temporary vector **/ + Vector2 target = new Vector2(); + + @Override + public boolean touchDragged(int x, int y, int pointer) { + camera.unproject(testPoint.set(x, y, 0)); + target.set(testPoint.x, testPoint.y); + // if a mouse joint exists we simply update + // the target of the joint based on the new + // mouse coordinates + if (mouseJoint != null) { + mouseJoint.setTarget(target); + } + return false; + } + + @Override + public boolean touchUp(int x, int y, int pointer, int button) { + // if a mouse joint exists we simply destroy it + if (mouseJoint != null) { + world.destroyJoint(mouseJoint); + mouseJoint = null; + } + return false; + } + + @Override + public void dispose() { + rayHandler.dispose(); + world.dispose(); + } + + /** + * Type of lights to use: + * 0 - PointLight + * 1 - ConeLight + * 2 - ChainLight + * 3 - DirectionalLight + */ + int lightsType = 0; + + @Override + public boolean keyDown(int keycode) { + switch (keycode) { + + case Input.Keys.F1: + if (lightsType != 0) { + initPointLights(); + lightsType = 0; + } + return true; + + case Input.Keys.F2: + if (lightsType != 1) { + initConeLights(); + lightsType = 1; + } + return true; + + case Input.Keys.F3: + if (lightsType != 2) { + initChainLights(); + lightsType = 2; + } + return true; + + case Input.Keys.F4: + if (lightsType != 3) { + initDirectionalLight(); + lightsType = 3; + } + return true; + + case Input.Keys.F5: + for (Light light : lights) + light.setColor( + MathUtils.random(), + MathUtils.random(), + MathUtils.random(), + 1f); + return true; + + case Input.Keys.F6: + for (Light light : lights) + light.setDistance(MathUtils.random( + LIGHT_DISTANCE * 0.5f, LIGHT_DISTANCE * 2f)); + return true; + + case Input.Keys.F9: + rayHandler.diffuseBlendFunc.reset(); + return true; + + case Input.Keys.F10: + rayHandler.diffuseBlendFunc.set( + GL20.GL_DST_COLOR, GL20.GL_SRC_COLOR); + return true; + + case Input.Keys.F11: + rayHandler.diffuseBlendFunc.set( + GL20.GL_SRC_COLOR, GL20.GL_DST_COLOR); + return true; + + case Input.Keys.F12: + showText = !showText; + return true; + + default: + return false; + + } + } + + @Override + public boolean mouseMoved(int x, int y) { + testPoint.set(x, y, 0); + camera.unproject(testPoint); + return false; + } + + + @Override + public void pause() { + } + + @Override + public void resize(int arg0, int arg1) { + } + + @Override + public void resume() { + } + +} \ No newline at end of file diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 707640d477..0390a9f347 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -14,6 +14,8 @@ */ package net.rptools.maptool.client.ui.zone.gdx; +import box2dLight.PointLight; +import box2dLight.RayHandler; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver; @@ -26,6 +28,9 @@ import com.badlogic.gdx.graphics.glutils.FrameBuffer; import com.badlogic.gdx.math.*; import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.physics.box2d.Box2D; +import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer; +import com.badlogic.gdx.physics.box2d.World; import com.badlogic.gdx.scenes.scene2d.utils.TiledDrawable; import com.badlogic.gdx.utils.FloatArray; import com.badlogic.gdx.utils.GdxRuntimeException; @@ -174,8 +179,13 @@ public class GdxRenderer extends ApplicationAdapter implements AssetAvailableLis private final TiledDrawable tmpTile = new TiledDrawable(); private final EarClippingTriangulator triangulator = new EarClippingTriangulator(); + private World world; + private Box2DDebugRenderer debugRenderer; + private RayHandler rayHandler; + private PointLight light; public GdxRenderer() { + Box2D.init(); new MapToolEventBus().getMainEventBus().register(this); } @@ -202,6 +212,13 @@ public void create() { animationMap.clear(); } + world = new World(new Vector2(0, 0), true); + debugRenderer = new Box2DDebugRenderer(); + rayHandler = new RayHandler(world); + rayHandler.setAmbientLight(0f, 0f, 0f, 0.5f); + rayHandler.setBlurNum(3); + light = new PointLight(rayHandler, 10, new Color(1,1,1,1), 10, 10, 10); + tokenAtlas = new TextureAtlas(); manager = new com.badlogic.gdx.assets.AssetManager(); loadAssets(); @@ -261,6 +278,8 @@ public void dispose() { atlas, Texture.TextureFilter.Linear, Texture.TextureFilter.Linear, false); packer.dispose(); tokenAtlas.dispose(); + rayHandler.dispose(); + world.dispose(); } @Override @@ -315,7 +334,32 @@ public void render() { ensureCorrectDistanceFont(); ScreenUtils.clear(Color.BLACK); + boolean stepped = fixedStep(delta); + doRendering(); + rayHandler.setCombinedMatrix(hudCam); + + if (stepped) rayHandler.update(); + rayHandler.render(); + debugRenderer.render(world, cam.combined); + } + + private float TIME_STEP = 1/60f; + private int VELOCITY_ITERATIONS = 6; + private int POSITION_ITERATIONS = 2; + private float accumulator = 0f; + private boolean fixedStep(float deltaTime) { + // fixed time step + // max frame time to avoid spiral of death (on slow devices) + float frameTime = Math.min(deltaTime, 0.25f); + accumulator += frameTime; + boolean stepped = false; + while (accumulator >= TIME_STEP) { + world.step(TIME_STEP, VELOCITY_ITERATIONS, POSITION_ITERATIONS); + accumulator -= TIME_STEP; + stepped = true; + } + return stepped; } @NotNull diff --git a/src/main/resources/data/bg.png b/src/main/resources/data/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..d0630ebc2d80dbf9f1d936c89ef75f019cddd1c8 GIT binary patch literal 394660 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

    !_*{qA?DgEr1m_-RlO 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 i9LiJ{XzjM$s-iE>Q|WRPf=n|BIb*2g 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Ƹ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

    sv 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℞fWnWspdSj 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

    MRlVrYdd6>R2t1$15Q=e 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%0D;h+N?vF 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/mappe14.xlsx b/src/main/resources/mappe14.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a9796064abb5a8383829006786321f1957c0a658 GIT binary patch literal 18917 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 E0>Dg1H~;_u literal 0 HcmV?d00001 From 96945cdc783c6d7c3eeb2f9ad6551c621728a305 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 30 Sep 2023 23:58:14 +0200 Subject: [PATCH 097/139] disable box2d for now --- .../maptool/client/ui/MapToolFrame.java | 11 ++-- .../client/ui/zone/gdx/GdxRenderer.java | 60 ++++++++++++------- 2 files changed, 45 insertions(+), 26 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index 558d6d152d..4bc01fa4a5 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -97,7 +97,6 @@ import net.rptools.maptool.client.ui.zone.PointerToolOverlay; import net.rptools.maptool.client.ui.zone.ZoneMiniMapPanel; import net.rptools.maptool.client.ui.zone.ZoneRenderer; -import net.rptools.maptool.client.ui.zone.gdx.Box2DLightsTest; import net.rptools.maptool.client.ui.zone.gdx.GdxRenderer; import net.rptools.maptool.events.MapToolEventBus; import net.rptools.maptool.language.I18N; @@ -417,10 +416,9 @@ public MapToolFrame(JMenuBar menuBar) { currentRenderPanel = zoneRendererPanel; initGdx(); - // zoneRendererPanel.add(zoneMiniMapPanel, PositionalLayout.Position.SE); - // zoneRendererPanel.add(getChatTypingLabel(), PositionalLayout.Position.NW); zoneRendererPanel.add(getChatTypingPanel(), PositionalLayout.Position.NW); zoneRendererPanel.add(getChatActionLabel(), PositionalLayout.Position.SW); + zoneRendererPanel.add(gdxPanel, PositionalLayout.Position.CENTER); commandPanel = new CommandPanel(); @@ -434,7 +432,7 @@ public MapToolFrame(JMenuBar menuBar) { pointerToolOverlay = new PointerToolOverlay(); zoneRendererPanel.add(pointerToolOverlay, PositionalLayout.Position.CENTER, 0); - zoneRendererPanel.add(gdxPanel, PositionalLayout.Position.CENTER, 0); + // Put it all together setJMenuBar(menuBar); add(BorderLayout.NORTH, toolbarPanel); @@ -481,7 +479,7 @@ private void initGdx() { config.title = "maptool"; config.width = 640; config.height = 480; - var joglSwingCanvas = new JoglSwingCanvas(new Box2DLightsTest(), config); + var joglSwingCanvas = new JoglSwingCanvas(GdxRenderer.getInstance(), config); gdxPanel = joglSwingCanvas.getGLCanvas(); gdxPanel.setVisible(false); @@ -491,7 +489,8 @@ private void initGdx() { public void addGdx() { gdxPanel.setVisible(!gdxPanel.isVisible()); } - public GLJPanel getGdxPanel() { + + public GLJPanel getGdxPanel() { return gdxPanel; } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 0390a9f347..bc1fc33a36 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -132,7 +132,8 @@ public class GdxRenderer extends ApplicationAdapter implements AssetAvailableLis private boolean showAstarDebugging = false; // general resources - private PerspectiveCamera cam; + private OrthographicCamera cam; + private PerspectiveCamera cam3d; private OrthographicCamera hudCam; private PolygonSpriteBatch batch; private boolean initialized = false; @@ -184,6 +185,7 @@ public class GdxRenderer extends ApplicationAdapter implements AssetAvailableLis private RayHandler rayHandler; private PointLight light; + public GdxRenderer() { Box2D.init(); new MapToolEventBus().getMainEventBus().register(this); @@ -211,14 +213,22 @@ public void create() { bigSprites.clear(); animationMap.clear(); } + /* + world = new World(new Vector2(0, 0), true); + debugRenderer = new Box2DDebugRenderer(); + RayHandler.setGammaCorrection(true); + RayHandler.useDiffuseLight(true); + + rayHandler = new RayHandler(world); + rayHandler.setAmbientLight(0f, 0f, 0f, 0.5f); + rayHandler.setBlurNum(3); - world = new World(new Vector2(0, 0), true); - debugRenderer = new Box2DDebugRenderer(); - rayHandler = new RayHandler(world); - rayHandler.setAmbientLight(0f, 0f, 0f, 0.5f); - rayHandler.setBlurNum(3); - light = new PointLight(rayHandler, 10, new Color(1,1,1,1), 10, 10, 10); + //light = + new PointLight(rayHandler, 128, Color.RED, 600, 50, -50); + new PointLight(rayHandler, 128, Color.GREEN, 600, 50, -350); + new PointLight(rayHandler, 128, Color.BLUE, 600, 350, -350); + */ tokenAtlas = new TextureAtlas(); manager = new com.badlogic.gdx.assets.AssetManager(); loadAssets(); @@ -231,9 +241,12 @@ public void create() { width = Gdx.graphics.getWidth(); height = Gdx.graphics.getHeight(); - // we don't use an OrthographicCamera here in order to be able to add 3D-Models - cam = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); - cam.lookAt(0, 0, 0); + // Cam for 3D-Models + cam3d = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + cam3d.lookAt(0, 0, 0); + + cam = new OrthographicCamera(); + cam.setToOrtho(false); hudCam = new OrthographicCamera(); hudCam.setToOrtho(false); @@ -295,16 +308,22 @@ public void resize(int width, int height) { private void updateCam() { if (cam == null) return; + cam3d.viewportWidth = width; + cam3d.viewportHeight = height; + + cam3d.position.x = zoom * (width / 2f + offsetX); + cam3d.position.y = zoom * (height / 2f * -1 + offsetY); + cam3d.position.z = + (zoom * height) / (2f * (float) Math.tan(Math.toRadians(cam3d.fieldOfView / 2f))); + cam3d.far = 1.1f * cam3d.position.z; + cam3d.near = 0.1f * cam3d.position.z; + cam3d.update(); + cam.viewportWidth = width; cam.viewportHeight = height; - cam.position.x = zoom * (width / 2f + offsetX); cam.position.y = zoom * (height / 2f * -1 + offsetY); - cam.position.z = - (zoom * height) / (2f * (float) Math.tan(Math.toRadians(cam.fieldOfView / 2f))); - cam.far = 1.1f * cam.position.z; - cam.near = 0.1f * cam.position.z; - + cam.zoom = zoom; cam.update(); hudCam.viewportWidth = width; @@ -334,20 +353,21 @@ public void render() { ensureCorrectDistanceFont(); ScreenUtils.clear(Color.BLACK); - boolean stepped = fixedStep(delta); + // boolean stepped = fixedStep(delta); doRendering(); - rayHandler.setCombinedMatrix(hudCam); + /* rayHandler.setCombinedMatrix(cam); if (stepped) rayHandler.update(); rayHandler.render(); - debugRenderer.render(world, cam.combined); + debugRenderer.render(world, cam.combined);*/ } - private float TIME_STEP = 1/60f; + private float TIME_STEP = 1 / 60f; private int VELOCITY_ITERATIONS = 6; private int POSITION_ITERATIONS = 2; private float accumulator = 0f; + private boolean fixedStep(float deltaTime) { // fixed time step // max frame time to avoid spiral of death (on slow devices) From 90b0b95108dff6edb3a63e3a18c76d4b411104ac Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 7 Oct 2023 01:10:30 +0200 Subject: [PATCH 098/139] wip --- .../maptool/client/ui/zone/ZoneRenderer.java | 2 +- .../client/ui/zone/gdx/Box2DLightsTest.java | 851 +++++++++--------- .../client/ui/zone/gdx/GdxRenderer.java | 143 ++- 3 files changed, 479 insertions(+), 517 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index c62fd5a9c0..bab83fd772 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -848,7 +848,7 @@ public void paintComponent(Graphics g) { // we still need to render the different overlays var g2dForRendering = bufferG2d; - if(skipDrawing) { + if (skipDrawing) { g2dForRendering = g2d; } renderZone(g2dForRendering, pl); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/Box2DLightsTest.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/Box2DLightsTest.java index c9a87b38a3..91ffdc8899 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/Box2DLightsTest.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/Box2DLightsTest.java @@ -1,14 +1,25 @@ +/* + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. + * + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . + */ package net.rptools.maptool.client.ui.zone.gdx; -import java.util.ArrayList; - import box2dLight.ChainLight; import box2dLight.ConeLight; import box2dLight.DirectionalLight; import box2dLight.Light; import box2dLight.PointLight; import box2dLight.RayHandler; - import com.badlogic.gdx.ApplicationListener; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input; @@ -35,502 +46,456 @@ import com.badlogic.gdx.physics.box2d.World; import com.badlogic.gdx.physics.box2d.joints.MouseJoint; import com.badlogic.gdx.physics.box2d.joints.MouseJointDef; +import java.util.ArrayList; public class Box2DLightsTest extends InputAdapter implements ApplicationListener { - static final int RAYS_PER_BALL = 128; - static final int BALLSNUM = 5; - static final float LIGHT_DISTANCE = 16f; - static final float RADIUS = 1f; - - static final float viewportWidth = 48; - static final float viewportHeight = 32; - - OrthographicCamera camera; + static final int RAYS_PER_BALL = 128; + static final int BALLSNUM = 5; + static final float LIGHT_DISTANCE = 16f; + static final float RADIUS = 1f; - SpriteBatch batch; - BitmapFont font; - TextureRegion textureRegion; - Texture bg; + static final float viewportWidth = 48; + static final float viewportHeight = 32; - /** our box2D world **/ - World world; + OrthographicCamera camera; - /** our boxes **/ - ArrayList balls = new ArrayList(BALLSNUM); + SpriteBatch batch; + BitmapFont font; + TextureRegion textureRegion; + Texture bg; - /** our ground box **/ - Body groundBody; + /** our box2D world * */ + World world; - /** our mouse joint **/ - MouseJoint mouseJoint = null; + /** our boxes * */ + ArrayList balls = new ArrayList(BALLSNUM); - /** a hit body **/ - Body hitBody = null; + /** our ground box * */ + Body groundBody; - /** pixel perfect projection for font rendering */ - Matrix4 normalProjection = new Matrix4(); + /** our mouse joint * */ + MouseJoint mouseJoint = null; - boolean showText = true; + /** a hit body * */ + Body hitBody = null; - /** BOX2D LIGHT STUFF */ - RayHandler rayHandler; + /** pixel perfect projection for font rendering */ + Matrix4 normalProjection = new Matrix4(); - ArrayList lights = new ArrayList(BALLSNUM); + boolean showText = true; - float sunDirection = -90f; + /** BOX2D LIGHT STUFF */ + RayHandler rayHandler; - @Override - public void create() { + ArrayList lights = new ArrayList(BALLSNUM); - MathUtils.random.setSeed(Long.MIN_VALUE); + float sunDirection = -90f; - camera = new OrthographicCamera(viewportWidth, viewportHeight); - camera.position.set(0, viewportHeight / 2f, 0); - camera.update(); + @Override + public void create() { - batch = new SpriteBatch(); - font = new BitmapFont(); - font.setColor(Color.RED); + MathUtils.random.setSeed(Long.MIN_VALUE); - textureRegion = new TextureRegion(new Texture( - Gdx.files.internal("data/marble.png"))); - bg = new Texture(Gdx.files.internal("data/bg.png")); + camera = new OrthographicCamera(viewportWidth, viewportHeight); + camera.position.set(0, viewportHeight / 2f, 0); + camera.update(); - createPhysicsWorld(); - Gdx.input.setInputProcessor(this); + batch = new SpriteBatch(); + font = new BitmapFont(); + font.setColor(Color.RED); - normalProjection.setToOrtho2D( - 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + textureRegion = new TextureRegion(new Texture(Gdx.files.internal("data/marble.png"))); + bg = new Texture(Gdx.files.internal("data/bg.png")); - /** BOX2D LIGHT STUFF BEGIN */ - RayHandler.setGammaCorrection(true); - RayHandler.useDiffuseLight(true); + createPhysicsWorld(); + Gdx.input.setInputProcessor(this); - rayHandler = new RayHandler(world); - rayHandler.setAmbientLight(0f, 0f, 0f, 0.5f); - rayHandler.setBlurNum(3); + normalProjection.setToOrtho2D(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); - initPointLights(); - /** BOX2D LIGHT STUFF END */ + /** BOX2D LIGHT STUFF BEGIN */ + RayHandler.setGammaCorrection(true); + RayHandler.useDiffuseLight(true); - } + rayHandler = new RayHandler(world); + rayHandler.setAmbientLight(0f, 0f, 0f, 0.5f); + rayHandler.setBlurNum(3); - @Override - public void render() { + initPointLights(); + /** BOX2D LIGHT STUFF END */ + } - /** Rotate directional light like sun :) */ - if (lightsType == 3) { - sunDirection += Gdx.graphics.getDeltaTime() * 4f; - lights.get(0).setDirection(sunDirection); - } + @Override + public void render() { - camera.update(); - - boolean stepped = fixedStep(Gdx.graphics.getDeltaTime()); - Gdx.gl.glClearColor(0.3f, 0.3f, 0.3f, 1); - Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); - - batch.setProjectionMatrix(camera.combined); - batch.disableBlending(); - batch.begin(); - { - batch.draw(bg, -viewportWidth / 2f, 0, viewportWidth, viewportHeight); - batch.enableBlending(); - for (int i = 0; i < BALLSNUM; i++) { - Body ball = balls.get(i); - Vector2 position = ball.getPosition(); - float angle = MathUtils.radiansToDegrees * ball.getAngle(); - batch.draw( - textureRegion, - position.x - RADIUS, position.y - RADIUS, - RADIUS, RADIUS, - RADIUS * 2, RADIUS * 2, - 1f, 1f, - angle); - } - } - batch.end(); - - /** BOX2D LIGHT STUFF BEGIN */ - rayHandler.setCombinedMatrix(camera); - - if (stepped) rayHandler.update(); - rayHandler.render(); - /** BOX2D LIGHT STUFF END */ - - long time = System.nanoTime(); - - boolean atShadow = rayHandler.pointAtShadow(testPoint.x, - testPoint.y); - aika += System.nanoTime() - time; - - /** FONT */ - if (showText) { - batch.setProjectionMatrix(normalProjection); - batch.begin(); - - font.draw(batch, - "F1 - PointLight", - 0, Gdx.graphics.getHeight()); - font.draw(batch, - "F2 - ConeLight", - 0, Gdx.graphics.getHeight() - 15); - font.draw(batch, - "F3 - ChainLight", - 0, Gdx.graphics.getHeight() - 30); - font.draw(batch, - "F4 - DirectionalLight", - 0, Gdx.graphics.getHeight() - 45); - font.draw(batch, - "F5 - random lights colors", - 0, Gdx.graphics.getHeight() - 75); - font.draw(batch, - "F6 - random lights distance", - 0, Gdx.graphics.getHeight() - 90); - font.draw(batch, - "F9 - default blending (1.3)", - 0, Gdx.graphics.getHeight() - 120); - font.draw(batch, - "F10 - over-burn blending (default in 1.2)", - 0, Gdx.graphics.getHeight() - 135); - font.draw(batch, - "F11 - some other blending", - 0, Gdx.graphics.getHeight() - 150); - - font.draw(batch, - "F12 - toggle help text", - 0, Gdx.graphics.getHeight() - 180); - - font.draw(batch, - Integer.toString(Gdx.graphics.getFramesPerSecond()) - + "mouse at shadows: " + atShadow - + " time used for shadow calculation:" - + aika / ++times + "ns" , 0, 20); - - batch.end(); - } + /** Rotate directional light like sun :) */ + if (lightsType == 3) { + sunDirection += Gdx.graphics.getDeltaTime() * 4f; + lights.get(0).setDirection(sunDirection); } - void clearLights() { - if (lights.size() > 0) { - for (Light light : lights) { - light.remove(); - } - lights.clear(); - } - groundBody.setActive(true); + camera.update(); + + boolean stepped = fixedStep(Gdx.graphics.getDeltaTime()); + Gdx.gl.glClearColor(0.3f, 0.3f, 0.3f, 1); + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + + batch.setProjectionMatrix(camera.combined); + batch.disableBlending(); + batch.begin(); + { + batch.draw(bg, -viewportWidth / 2f, 0, viewportWidth, viewportHeight); + batch.enableBlending(); + for (int i = 0; i < BALLSNUM; i++) { + Body ball = balls.get(i); + Vector2 position = ball.getPosition(); + float angle = MathUtils.radiansToDegrees * ball.getAngle(); + batch.draw( + textureRegion, + position.x - RADIUS, + position.y - RADIUS, + RADIUS, + RADIUS, + RADIUS * 2, + RADIUS * 2, + 1f, + 1f, + angle); + } } - - void initPointLights() { - clearLights(); - for (int i = 0; i < BALLSNUM; i++) { - PointLight light = new PointLight( - rayHandler, RAYS_PER_BALL, null, LIGHT_DISTANCE, 0f, 0f); - light.attachToBody(balls.get(i), RADIUS / 2f, RADIUS / 2f); - light.setColor( - MathUtils.random(), - MathUtils.random(), - MathUtils.random(), - 1f); - lights.add(light); - } + batch.end(); + + /** BOX2D LIGHT STUFF BEGIN */ + rayHandler.setCombinedMatrix(camera); + + if (stepped) rayHandler.update(); + rayHandler.render(); + /** BOX2D LIGHT STUFF END */ + long time = System.nanoTime(); + + boolean atShadow = rayHandler.pointAtShadow(testPoint.x, testPoint.y); + aika += System.nanoTime() - time; + + /** FONT */ + if (showText) { + batch.setProjectionMatrix(normalProjection); + batch.begin(); + + font.draw(batch, "F1 - PointLight", 0, Gdx.graphics.getHeight()); + font.draw(batch, "F2 - ConeLight", 0, Gdx.graphics.getHeight() - 15); + font.draw(batch, "F3 - ChainLight", 0, Gdx.graphics.getHeight() - 30); + font.draw(batch, "F4 - DirectionalLight", 0, Gdx.graphics.getHeight() - 45); + font.draw(batch, "F5 - random lights colors", 0, Gdx.graphics.getHeight() - 75); + font.draw(batch, "F6 - random lights distance", 0, Gdx.graphics.getHeight() - 90); + font.draw(batch, "F9 - default blending (1.3)", 0, Gdx.graphics.getHeight() - 120); + font.draw( + batch, "F10 - over-burn blending (default in 1.2)", 0, Gdx.graphics.getHeight() - 135); + font.draw(batch, "F11 - some other blending", 0, Gdx.graphics.getHeight() - 150); + + font.draw(batch, "F12 - toggle help text", 0, Gdx.graphics.getHeight() - 180); + + font.draw( + batch, + Integer.toString(Gdx.graphics.getFramesPerSecond()) + + "mouse at shadows: " + + atShadow + + " time used for shadow calculation:" + + aika / ++times + + "ns", + 0, + 20); + + batch.end(); } - - void initConeLights() { - clearLights(); - for (int i = 0; i < BALLSNUM; i++) { - ConeLight light = new ConeLight( - rayHandler, RAYS_PER_BALL, null, LIGHT_DISTANCE, - 0, 0, 0f, MathUtils.random(15f, 40f)); - light.attachToBody( - balls.get(i), - RADIUS / 2f, RADIUS / 2f, MathUtils.random(0f, 360f)); - light.setColor( - MathUtils.random(), - MathUtils.random(), - MathUtils.random(), - 1f); - lights.add(light); - } + } + + void clearLights() { + if (lights.size() > 0) { + for (Light light : lights) { + light.remove(); + } + lights.clear(); } - - void initChainLights() { - clearLights(); - for (int i = 0; i < BALLSNUM; i++) { - ChainLight light = new ChainLight( - rayHandler, RAYS_PER_BALL, null, LIGHT_DISTANCE, 1, - new float[]{-5, 0, 0, 3, 5, 0}); - light.attachToBody( - balls.get(i), - MathUtils.random(0f, 360f)); - light.setColor( - MathUtils.random(), - MathUtils.random(), - MathUtils.random(), - 1f); - lights.add(light); - } + groundBody.setActive(true); + } + + void initPointLights() { + clearLights(); + for (int i = 0; i < BALLSNUM; i++) { + PointLight light = new PointLight(rayHandler, RAYS_PER_BALL, null, LIGHT_DISTANCE, 0f, 0f); + light.attachToBody(balls.get(i), RADIUS / 2f, RADIUS / 2f); + light.setColor(MathUtils.random(), MathUtils.random(), MathUtils.random(), 1f); + lights.add(light); } + } + + void initConeLights() { + clearLights(); + for (int i = 0; i < BALLSNUM; i++) { + ConeLight light = + new ConeLight( + rayHandler, + RAYS_PER_BALL, + null, + LIGHT_DISTANCE, + 0, + 0, + 0f, + MathUtils.random(15f, 40f)); + light.attachToBody(balls.get(i), RADIUS / 2f, RADIUS / 2f, MathUtils.random(0f, 360f)); + light.setColor(MathUtils.random(), MathUtils.random(), MathUtils.random(), 1f); + lights.add(light); + } + } + + void initChainLights() { + clearLights(); + for (int i = 0; i < BALLSNUM; i++) { + ChainLight light = + new ChainLight( + rayHandler, RAYS_PER_BALL, null, LIGHT_DISTANCE, 1, new float[] {-5, 0, 0, 3, 5, 0}); + light.attachToBody(balls.get(i), MathUtils.random(0f, 360f)); + light.setColor(MathUtils.random(), MathUtils.random(), MathUtils.random(), 1f); + lights.add(light); + } + } + + void initDirectionalLight() { + clearLights(); + + groundBody.setActive(false); + sunDirection = MathUtils.random(0f, 360f); + + DirectionalLight light = + new DirectionalLight(rayHandler, 4 * RAYS_PER_BALL, null, sunDirection); + lights.add(light); + } + + private static final int MAX_FPS = 30; + private static final int MIN_FPS = 15; + public static final float TIME_STEP = 1f / MAX_FPS; + private static final float MAX_STEPS = 1f + MAX_FPS / MIN_FPS; + private static final float MAX_TIME_PER_FRAME = TIME_STEP * MAX_STEPS; + private static final int VELOCITY_ITERS = 6; + private static final int POSITION_ITERS = 2; + + float physicsTimeLeft; + long aika; + int times; + + private boolean fixedStep(float delta) { + physicsTimeLeft += delta; + if (physicsTimeLeft > MAX_TIME_PER_FRAME) physicsTimeLeft = MAX_TIME_PER_FRAME; + + boolean stepped = false; + while (physicsTimeLeft >= TIME_STEP) { + world.step(TIME_STEP, VELOCITY_ITERS, POSITION_ITERS); + physicsTimeLeft -= TIME_STEP; + stepped = true; + } + return stepped; + } + + private void createPhysicsWorld() { + + world = new World(new Vector2(0, 0), true); + + float halfWidth = viewportWidth / 2f; + ChainShape chainShape = new ChainShape(); + chainShape.createLoop( + new Vector2[] { + new Vector2(-halfWidth, 0f), + new Vector2(halfWidth, 0f), + new Vector2(halfWidth, viewportHeight), + new Vector2(-halfWidth, viewportHeight) + }); + BodyDef chainBodyDef = new BodyDef(); + chainBodyDef.type = BodyType.StaticBody; + groundBody = world.createBody(chainBodyDef); + groundBody.createFixture(chainShape, 0); + chainShape.dispose(); + createBoxes(); + } + + private void createBoxes() { + CircleShape ballShape = new CircleShape(); + ballShape.setRadius(RADIUS); + + FixtureDef def = new FixtureDef(); + def.restitution = 0.9f; + def.friction = 0.01f; + def.shape = ballShape; + def.density = 1f; + BodyDef boxBodyDef = new BodyDef(); + boxBodyDef.type = BodyType.DynamicBody; + + for (int i = 0; i < BALLSNUM; i++) { + // Create the BodyDef, set a random position above the + // ground and create a new body + boxBodyDef.position.x = -20 + (float) (Math.random() * 40); + boxBodyDef.position.y = 10 + (float) (Math.random() * 15); + Body boxBody = world.createBody(boxBodyDef); + boxBody.createFixture(def); + balls.add(boxBody); + } + ballShape.dispose(); + } - void initDirectionalLight() { - clearLights(); - - groundBody.setActive(false); - sunDirection = MathUtils.random(0f, 360f); + /** we instantiate this vector and the callback here so we don't irritate the GC */ + Vector3 testPoint = new Vector3(); - DirectionalLight light = new DirectionalLight( - rayHandler, 4 * RAYS_PER_BALL, null, sunDirection); - lights.add(light); - } + QueryCallback callback = + new QueryCallback() { + @Override + public boolean reportFixture(Fixture fixture) { + if (fixture.getBody() == groundBody) return true; - private final static int MAX_FPS = 30; - private final static int MIN_FPS = 15; - public final static float TIME_STEP = 1f / MAX_FPS; - private final static float MAX_STEPS = 1f + MAX_FPS / MIN_FPS; - private final static float MAX_TIME_PER_FRAME = TIME_STEP * MAX_STEPS; - private final static int VELOCITY_ITERS = 6; - private final static int POSITION_ITERS = 2; - - float physicsTimeLeft; - long aika; - int times; - - private boolean fixedStep(float delta) { - physicsTimeLeft += delta; - if (physicsTimeLeft > MAX_TIME_PER_FRAME) - physicsTimeLeft = MAX_TIME_PER_FRAME; - - boolean stepped = false; - while (physicsTimeLeft >= TIME_STEP) { - world.step(TIME_STEP, VELOCITY_ITERS, POSITION_ITERS); - physicsTimeLeft -= TIME_STEP; - stepped = true; + if (fixture.testPoint(testPoint.x, testPoint.y)) { + hitBody = fixture.getBody(); + return false; + } else return true; } - return stepped; + }; + + @Override + public boolean touchDown(int x, int y, int pointer, int newParam) { + // translate the mouse coordinates to world coordinates + testPoint.set(x, y, 0); + camera.unproject(testPoint); + + // ask the world which bodies are within the given + // bounding box around the mouse pointer + hitBody = null; + world.QueryAABB( + callback, testPoint.x - 0.1f, testPoint.y - 0.1f, testPoint.x + 0.1f, testPoint.y + 0.1f); + + // if we hit something we create a new mouse joint + // and attach it to the hit body. + if (hitBody != null) { + MouseJointDef def = new MouseJointDef(); + def.bodyA = groundBody; + def.bodyB = hitBody; + def.collideConnected = true; + def.target.set(testPoint.x, testPoint.y); + def.maxForce = 1000.0f * hitBody.getMass(); + + mouseJoint = (MouseJoint) world.createJoint(def); + hitBody.setAwake(true); } - private void createPhysicsWorld() { - - world = new World(new Vector2(0, 0), true); - - float halfWidth = viewportWidth / 2f; - ChainShape chainShape = new ChainShape(); - chainShape.createLoop(new Vector2[] { - new Vector2(-halfWidth, 0f), - new Vector2(halfWidth, 0f), - new Vector2(halfWidth, viewportHeight), - new Vector2(-halfWidth, viewportHeight) }); - BodyDef chainBodyDef = new BodyDef(); - chainBodyDef.type = BodyType.StaticBody; - groundBody = world.createBody(chainBodyDef); - groundBody.createFixture(chainShape, 0); - chainShape.dispose(); - createBoxes(); + return false; + } + + /** another temporary vector * */ + Vector2 target = new Vector2(); + + @Override + public boolean touchDragged(int x, int y, int pointer) { + camera.unproject(testPoint.set(x, y, 0)); + target.set(testPoint.x, testPoint.y); + // if a mouse joint exists we simply update + // the target of the joint based on the new + // mouse coordinates + if (mouseJoint != null) { + mouseJoint.setTarget(target); + } + return false; + } + + @Override + public boolean touchUp(int x, int y, int pointer, int button) { + // if a mouse joint exists we simply destroy it + if (mouseJoint != null) { + world.destroyJoint(mouseJoint); + mouseJoint = null; } + return false; + } + + @Override + public void dispose() { + rayHandler.dispose(); + world.dispose(); + } + + /** Type of lights to use: 0 - PointLight 1 - ConeLight 2 - ChainLight 3 - DirectionalLight */ + int lightsType = 0; + + @Override + public boolean keyDown(int keycode) { + switch (keycode) { + case Input.Keys.F1: + if (lightsType != 0) { + initPointLights(); + lightsType = 0; + } + return true; - private void createBoxes() { - CircleShape ballShape = new CircleShape(); - ballShape.setRadius(RADIUS); - - FixtureDef def = new FixtureDef(); - def.restitution = 0.9f; - def.friction = 0.01f; - def.shape = ballShape; - def.density = 1f; - BodyDef boxBodyDef = new BodyDef(); - boxBodyDef.type = BodyType.DynamicBody; - - for (int i = 0; i < BALLSNUM; i++) { - // Create the BodyDef, set a random position above the - // ground and create a new body - boxBodyDef.position.x = -20 + (float) (Math.random() * 40); - boxBodyDef.position.y = 10 + (float) (Math.random() * 15); - Body boxBody = world.createBody(boxBodyDef); - boxBody.createFixture(def); - balls.add(boxBody); + case Input.Keys.F2: + if (lightsType != 1) { + initConeLights(); + lightsType = 1; } - ballShape.dispose(); - } + return true; - /** - * we instantiate this vector and the callback here so we don't irritate the - * GC - **/ - Vector3 testPoint = new Vector3(); - QueryCallback callback = new QueryCallback() { - @Override - public boolean reportFixture(Fixture fixture) { - if (fixture.getBody() == groundBody) - return true; - - if (fixture.testPoint(testPoint.x, testPoint.y)) { - hitBody = fixture.getBody(); - return false; - } else - return true; + case Input.Keys.F3: + if (lightsType != 2) { + initChainLights(); + lightsType = 2; } - }; - - @Override - public boolean touchDown(int x, int y, int pointer, int newParam) { - // translate the mouse coordinates to world coordinates - testPoint.set(x, y, 0); - camera.unproject(testPoint); - - // ask the world which bodies are within the given - // bounding box around the mouse pointer - hitBody = null; - world.QueryAABB(callback, testPoint.x - 0.1f, testPoint.y - 0.1f, - testPoint.x + 0.1f, testPoint.y + 0.1f); - - // if we hit something we create a new mouse joint - // and attach it to the hit body. - if (hitBody != null) { - MouseJointDef def = new MouseJointDef(); - def.bodyA = groundBody; - def.bodyB = hitBody; - def.collideConnected = true; - def.target.set(testPoint.x, testPoint.y); - def.maxForce = 1000.0f * hitBody.getMass(); - - mouseJoint = (MouseJoint) world.createJoint(def); - hitBody.setAwake(true); + return true; + + case Input.Keys.F4: + if (lightsType != 3) { + initDirectionalLight(); + lightsType = 3; } + return true; - return false; - } + case Input.Keys.F5: + for (Light light : lights) + light.setColor(MathUtils.random(), MathUtils.random(), MathUtils.random(), 1f); + return true; - /** another temporary vector **/ - Vector2 target = new Vector2(); - - @Override - public boolean touchDragged(int x, int y, int pointer) { - camera.unproject(testPoint.set(x, y, 0)); - target.set(testPoint.x, testPoint.y); - // if a mouse joint exists we simply update - // the target of the joint based on the new - // mouse coordinates - if (mouseJoint != null) { - mouseJoint.setTarget(target); - } - return false; - } + case Input.Keys.F6: + for (Light light : lights) + light.setDistance(MathUtils.random(LIGHT_DISTANCE * 0.5f, LIGHT_DISTANCE * 2f)); + return true; - @Override - public boolean touchUp(int x, int y, int pointer, int button) { - // if a mouse joint exists we simply destroy it - if (mouseJoint != null) { - world.destroyJoint(mouseJoint); - mouseJoint = null; - } - return false; - } + case Input.Keys.F9: + rayHandler.diffuseBlendFunc.reset(); + return true; - @Override - public void dispose() { - rayHandler.dispose(); - world.dispose(); - } + case Input.Keys.F10: + rayHandler.diffuseBlendFunc.set(GL20.GL_DST_COLOR, GL20.GL_SRC_COLOR); + return true; - /** - * Type of lights to use: - * 0 - PointLight - * 1 - ConeLight - * 2 - ChainLight - * 3 - DirectionalLight - */ - int lightsType = 0; - - @Override - public boolean keyDown(int keycode) { - switch (keycode) { - - case Input.Keys.F1: - if (lightsType != 0) { - initPointLights(); - lightsType = 0; - } - return true; - - case Input.Keys.F2: - if (lightsType != 1) { - initConeLights(); - lightsType = 1; - } - return true; - - case Input.Keys.F3: - if (lightsType != 2) { - initChainLights(); - lightsType = 2; - } - return true; - - case Input.Keys.F4: - if (lightsType != 3) { - initDirectionalLight(); - lightsType = 3; - } - return true; - - case Input.Keys.F5: - for (Light light : lights) - light.setColor( - MathUtils.random(), - MathUtils.random(), - MathUtils.random(), - 1f); - return true; - - case Input.Keys.F6: - for (Light light : lights) - light.setDistance(MathUtils.random( - LIGHT_DISTANCE * 0.5f, LIGHT_DISTANCE * 2f)); - return true; - - case Input.Keys.F9: - rayHandler.diffuseBlendFunc.reset(); - return true; - - case Input.Keys.F10: - rayHandler.diffuseBlendFunc.set( - GL20.GL_DST_COLOR, GL20.GL_SRC_COLOR); - return true; - - case Input.Keys.F11: - rayHandler.diffuseBlendFunc.set( - GL20.GL_SRC_COLOR, GL20.GL_DST_COLOR); - return true; - - case Input.Keys.F12: - showText = !showText; - return true; - - default: - return false; + case Input.Keys.F11: + rayHandler.diffuseBlendFunc.set(GL20.GL_SRC_COLOR, GL20.GL_DST_COLOR); + return true; - } - } + case Input.Keys.F12: + showText = !showText; + return true; - @Override - public boolean mouseMoved(int x, int y) { - testPoint.set(x, y, 0); - camera.unproject(testPoint); + default: return false; } + } + @Override + public boolean mouseMoved(int x, int y) { + testPoint.set(x, y, 0); + camera.unproject(testPoint); + return false; + } - @Override - public void pause() { - } + @Override + public void pause() {} - @Override - public void resize(int arg0, int arg1) { - } - - @Override - public void resume() { - } + @Override + public void resize(int arg0, int arg1) {} -} \ No newline at end of file + @Override + public void resume() {} +} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index bc1fc33a36..324bc94b7d 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -47,6 +47,7 @@ import java.text.NumberFormat; import java.util.*; import java.util.List; +import java.util.zip.Deflater; import javax.annotation.Nullable; import javax.swing.*; import net.rptools.lib.CodeTimer; @@ -1225,67 +1226,62 @@ private void renderAuras(PlayerView view) { private List drawableLights = null; private void renderLights(PlayerView view) { - // Collect and organize lights timer.start("renderLights:getLights"); - if (drawableLights == null) { - timer.start("renderLights:populateCache"); - drawableLights = new ArrayList<>(zoneRenderer.getZoneView().getDrawableLights(view)); - // drawableLights.removeIf(light -> light.getType() != LightSource.Type.NORMAL); - timer.stop("renderLights:populateCache"); - } - timer.start("renderLights:filterLights"); - final var darknessLights = - drawableLights.stream().filter(light -> light.getLumens() < 0).toList(); - final var nonDarknessLights = - drawableLights.stream().filter(light -> light.getLumens() >= 0).toList(); - timer.stop("renderLights:filterLights"); + final var drawableLights = zoneRenderer.getZoneView().getDrawableLights(view); timer.stop("renderLights:getLights"); - timer.start("renderLights:renderLightOverlay"); - renderLightOverlay( - GL.GL_ALPHA, - GL.GL_ONE_MINUS_SRC_ALPHA, - new Color(1.0f, 1.0f, 1.0f, AppPreferences.getLightOverlayOpacity() / 255.0f), - view.isGMView() ? null : ZoneRenderer.LightOverlayClipStyle.CLIP_TO_VISIBLE_AREA, - nonDarknessLights, - new java.awt.Color(255, 255, 255, 255), - 1.0f); - timer.stop("renderLights:renderLightOverlay"); - - // Players should not be able to discern the nature of the darkness, so we always render it as - // black for them. - timer.start("renderLights:renderDarknessOverlay"); - renderLightOverlay( - GL.GL_ALPHA, - GL.GL_ONE_MINUS_SRC_ALPHA, - view.isGMView() - ? new Color(1.0f, 1.0f, 1.0f, AppPreferences.getLightOverlayOpacity() / 255.0f) - : Color.BLACK, - view.isGMView() ? null : ZoneRenderer.LightOverlayClipStyle.CLIP_TO_NOT_VISIBLE_AREA, - darknessLights, - new java.awt.Color(0, 0, 0, 255), - 1.0f); - timer.stop("renderLights:renderDarknessOverlay"); - } + if (AppState.isShowLights()) { + // Lighting enabled. + timer.start("renderLights:renderLightOverlay"); + // final var overlayBlending = + // switch (zone.getLightingStyle()) { + // case OVERTOP -> AlphaComposite.SrcOver.derive( + // AppPreferences.getLightOverlayOpacity() / 255.f); + // case ENVIRONMENTAL -> LightingComposite.OverlaidLights; + // }; + + final var overlayFillColor = + switch (zone.getLightingStyle()) { + case OVERTOP -> Color.CLEAR; + case ENVIRONMENTAL -> Color.BLACK; + }; + + renderLightOverlay( + GL.GL_SRC_COLOR, + GL.GL_ONE_MINUS_SRC_COLOR, + GL.GL_SRC_ALPHA, + GL.GL_ONE_MINUS_SRC_ALPHA, + new Color(1, 1, 1, AppPreferences.getLightOverlayOpacity() / 255.f), + view.isGMView() ? null : ZoneRenderer.LightOverlayClipStyle.CLIP_TO_VISIBLE_AREA, + drawableLights, + overlayFillColor); + timer.stop("renderLights:renderLightOverlay"); + } + + if (AppState.isShowLumensOverlay()) { + // Lumens overlay enabled. + timer.start("renderLights:renderLumensOverlay"); + renderLumensOverlay( + view, + view.isGMView() ? null : ZoneRenderer.LightOverlayClipStyle.CLIP_TO_VISIBLE_AREA, + AppPreferences.getLumensOverlayOpacity() / 255.0f); + timer.stop("renderLights:renderLumensOverlay"); + } + } + + private void renderLumensOverlay( + PlayerView view, ZoneRenderer.LightOverlayClipStyle lightOverlayClipStyle, float v) {} - /** - * Combines a set of lights into an image that is then rendered into the zone. - * - * @param clipStyle How to clip the overlay relative to the visible area. Set to null for no extra - * clipping. - * @param lights The lights that will be rendered and blended. - * @param defaultPaint A default paint for lights without a paint. - * @param overlayOpacity The opacity used when rendering the final overlay on top of the zone. - */ private void renderLightOverlay( - int blendSrcFunc, - int blendDstFunc, + int lightBlendSrcFunc, + int lightBlendDstFunc, + int overlayBlendSrcFunc, + int overlayBlendDstFunc, Color tintColor, @Nullable ZoneRenderer.LightOverlayClipStyle clipStyle, - List lights, - Paint defaultPaint, - float overlayOpacity) { + Collection lights, + Color backgroundFill) { if (lights.isEmpty()) { // No points spending resources accomplishing nothing. return; @@ -1294,17 +1290,17 @@ private void renderLightOverlay( // Set up a buffer image for lights to be drawn onto before the map timer.start("renderLightOverlay:allocateBuffer"); backBuffer.begin(); + batch.setBlendFunction(GL20.GL_ONE, GL20.GL_NONE); ScreenUtils.clear(Color.CLEAR); setProjectionMatrix(cam.combined); - batch.setBlendFunction(blendSrcFunc, blendDstFunc); - drawer.update(); - + batch.setBlendFunction(lightBlendSrcFunc, lightBlendDstFunc); + //batch.setColor(tintColor); timer.stop("renderLightOverlay:allocateBuffer"); - drawer.setColor(tintColor); + // drawer.setColor(tintColor); // Draw lights onto the buffer image so the map doesn't affect how they blend timer.start("renderLightOverlay:drawLights"); for (var light : lights) { - var paint = light.getPaint() != null ? light.getPaint().getPaint() : defaultPaint; + var paint = light.getPaint().getPaint(); if (paint instanceof DrawableColorPaint) { var colorPaint = (DrawableColorPaint) paint; @@ -1316,29 +1312,30 @@ private void renderLightOverlay( System.out.println("unexpected color type"); continue; } - drawer.setColor(tmpColor); - var areaToPaint = (Area) light.getArea().clone(); - if (clipStyle != null && visibleScreenArea != null) { - switch (clipStyle) { - case CLIP_TO_VISIBLE_AREA -> areaToPaint.intersect(visibleScreenArea); - case CLIP_TO_NOT_VISIBLE_AREA -> areaToPaint.subtract(visibleScreenArea); - } - } - areaRenderer.fillArea(batch, areaToPaint); + + areaRenderer.setColor(tmpColor); + areaRenderer.fillArea(batch, light.getArea()); } - drawer.setColor(1.0f, 1.0f, 1.0f, 1.0f); timer.stop("renderLightOverlay:drawLights"); - + batch.end(); // Draw the buffer image with all the lights onto the map + var file = Gdx.files.absolute("C:\\Users\\tkunze\\OneDrive\\Desktop\\buffer.png"); + if(!file.exists()) { + Pixmap pixmap = Pixmap.createFromFrameBuffer(0, 0, width, height); + PixmapIO.writePNG(file, pixmap, Deflater.DEFAULT_COMPRESSION, true); + pixmap.dispose(); + } timer.start("renderLightOverlay:drawBuffer"); - batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); backBuffer.end(); - + batch.begin(); + batch.setBlendFunction(overlayBlendSrcFunc, overlayBlendDstFunc); setProjectionMatrix(hudCam.combined); - batch.setColor(1.0f, 1.0f, 1.0f, overlayOpacity); + + + batch.draw( backBuffer.getColorBufferTexture(), 0, 0, width, height, 0, 0, width, height, false, true); - batch.setColor(1.0f, 1.0f, 1.0f, 1.0f); + batch.setColor(Color.WHITE); setProjectionMatrix(cam.combined); timer.stop("renderLightOverlay:drawBuffer"); } From dc320ea2320ae2765977290554764678cd8531eb Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 7 Oct 2023 22:13:47 +0200 Subject: [PATCH 099/139] lights work --- .../client/ui/zone/gdx/AreaRenderer.java | 20 ++- .../client/ui/zone/gdx/GdxRenderer.java | 127 +++++++----------- 2 files changed, 58 insertions(+), 89 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java index 075d6327dc..f90e74f741 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java @@ -137,6 +137,8 @@ protected void paintVertices(PolygonSpriteBatch batch, float[] vertices) { public FloatArray pathToFloatArray(PathIterator it) { tmpFloat.clear(); + float moveToX = 0; + float moveToY = 0; for (; !it.isDone(); it.next()) { int type = it.currentSegment(floatsFromArea); @@ -144,18 +146,16 @@ public FloatArray pathToFloatArray(PathIterator it) { case PathIterator.SEG_MOVETO: // System.out.println("Move to: ( " + floatsFromArea[0] + ", " + // floatsFromArea[1] + ")"); + moveToX = floatsFromArea[0]; + moveToY = -floatsFromArea[1]; tmpFloat.add(floatsFromArea[0], -floatsFromArea[1]); break; case PathIterator.SEG_CLOSE: // System.out.println("Close"); - if (tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) - && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { - // make sure we don't have last and first point the same - tmpFloat.pop(); - tmpFloat.pop(); - } - return tmpFloat; + tmpFloat.add(moveToX, moveToY); + break; + // return tmpFloat; case PathIterator.SEG_LINETO: // System.out.println("Line to: ( " + floatsFromArea[0] + ", " + // floatsFromArea[1] + ")"); @@ -207,6 +207,12 @@ public FloatArray pathToFloatArray(PathIterator it) { System.out.println("Type: " + type); } } + if (tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) + && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { + // make sure we don't have last and first point the same + tmpFloat.pop(); + tmpFloat.pop(); + } return tmpFloat; } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 324bc94b7d..2ce75436c9 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -38,7 +38,6 @@ import com.badlogic.gdx.video.VideoPlayer; import com.badlogic.gdx.video.VideoPlayerCreator; import com.google.common.eventbus.Subscribe; -import com.jogamp.opengl.GL; import java.awt.*; import java.awt.Shape; import java.awt.geom.*; @@ -48,7 +47,6 @@ import java.util.*; import java.util.List; import java.util.zip.Deflater; -import javax.annotation.Nullable; import javax.swing.*; import net.rptools.lib.CodeTimer; import net.rptools.lib.MD5Key; @@ -255,6 +253,7 @@ public void create() { updateCam(); batch = new PolygonSpriteBatch(); + batch.enableBlending(); backBuffer = new FrameBuffer(Pixmap.Format.RGBA8888, width, height, false); @@ -483,8 +482,6 @@ private void initializeTimer() { public void invalidateCurrentViewCache() { flushFog = true; - drawableLights = null; - drawableAuras = null; visibleScreenArea = null; lastView = null; @@ -791,8 +788,11 @@ private void renderFog(PlayerView view) { timer.start("renderFog"); // if (flushFog || cacheNotValid) { + batch.flush(); + backBuffer.begin(); ScreenUtils.clear(Color.CLEAR); + batch.setBlendFunction(GL20.GL_ONE, GL20.GL_NONE); setProjectionMatrix(cam.combined); @@ -903,8 +903,10 @@ private void renderFog(PlayerView view) { timer.stop("renderFogArea"); flushFog = false; - // createScreenShot("fog"); + // createScreenshot("fog"); batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + batch.flush(); + backBuffer.end(); } @@ -1195,35 +1197,20 @@ private void showBlockedMoves(ZonePoint zp, double angle, Sprite image, float si image.draw(batch); } - /** Holds the auras from lightSourceMap after they have been combined. */ - private List drawableAuras; - private void renderAuras(PlayerView view) { var alpha = AppPreferences.getAuraOverlayOpacity() / 255.0f; - timer.start("auras-4"); - /* - for (DrawableLight light : zoneRenderer.getZoneView().getLights(LightSource.Type.AURA)) { - var paint = light.getPaint(); - if (paint != null && paint instanceof DrawableColorPaint) { - var colorPaint = (DrawableColorPaint) paint; - Color.argb8888ToColor(tmpColor, colorPaint.getColor()); - tmpColor.a = alpha; - } else { - tmpColor.set(1, 1, 1, 0.59f); - } - drawer.setColor(tmpColor); - areaRenderer.fillArea(light.getArea()); - } - */ - timer.stop("auras-4"); - } + // Setup + timer.start("renderAuras:getAuras"); + final var drawableAuras = zoneRenderer.getZoneView().getDrawableAuras(); + timer.stop("renderAuras:getAuras"); - /** - * Cached set of lights arranged by lumens for some stability. TODO Token draw order would be - * nice. - */ - private List drawableLights = null; + timer.start("renderAuras:renderAuraOverlay"); + renderLightOverlay( + drawableAuras, + alpha); + timer.stop("renderAuras:renderAuraOverlay"); + } private void renderLights(PlayerView view) { // Collect and organize lights @@ -1234,28 +1221,10 @@ private void renderLights(PlayerView view) { if (AppState.isShowLights()) { // Lighting enabled. timer.start("renderLights:renderLightOverlay"); - // final var overlayBlending = - // switch (zone.getLightingStyle()) { - // case OVERTOP -> AlphaComposite.SrcOver.derive( - // AppPreferences.getLightOverlayOpacity() / 255.f); - // case ENVIRONMENTAL -> LightingComposite.OverlaidLights; - // }; - - final var overlayFillColor = - switch (zone.getLightingStyle()) { - case OVERTOP -> Color.CLEAR; - case ENVIRONMENTAL -> Color.BLACK; - }; - - renderLightOverlay( - GL.GL_SRC_COLOR, - GL.GL_ONE_MINUS_SRC_COLOR, - GL.GL_SRC_ALPHA, - GL.GL_ONE_MINUS_SRC_ALPHA, - new Color(1, 1, 1, AppPreferences.getLightOverlayOpacity() / 255.f), - view.isGMView() ? null : ZoneRenderer.LightOverlayClipStyle.CLIP_TO_VISIBLE_AREA, - drawableLights, - overlayFillColor); + // zone.getLightingStyle() is not supported currently as you would probably need a custom + // shader + + renderLightOverlay(drawableLights, AppPreferences.getLightOverlayOpacity() / 255.f); timer.stop("renderLights:renderLightOverlay"); } @@ -1273,15 +1242,7 @@ private void renderLights(PlayerView view) { private void renderLumensOverlay( PlayerView view, ZoneRenderer.LightOverlayClipStyle lightOverlayClipStyle, float v) {} - private void renderLightOverlay( - int lightBlendSrcFunc, - int lightBlendDstFunc, - int overlayBlendSrcFunc, - int overlayBlendDstFunc, - Color tintColor, - @Nullable ZoneRenderer.LightOverlayClipStyle clipStyle, - Collection lights, - Color backgroundFill) { + private void renderLightOverlay(Collection lights, float alpha) { if (lights.isEmpty()) { // No points spending resources accomplishing nothing. return; @@ -1289,12 +1250,12 @@ private void renderLightOverlay( // Set up a buffer image for lights to be drawn onto before the map timer.start("renderLightOverlay:allocateBuffer"); + batch.flush(); backBuffer.begin(); - batch.setBlendFunction(GL20.GL_ONE, GL20.GL_NONE); + ScreenUtils.clear(Color.CLEAR); setProjectionMatrix(cam.combined); - batch.setBlendFunction(lightBlendSrcFunc, lightBlendDstFunc); - //batch.setColor(tintColor); + batch.setBlendFunctionSeparate(GL20.GL_SRC_COLOR, GL20.GL_ONE_MINUS_SRC_COLOR, GL20.GL_ONE, GL20.GL_NONE); timer.stop("renderLightOverlay:allocateBuffer"); // drawer.setColor(tintColor); // Draw lights onto the buffer image so the map doesn't affect how they blend @@ -1312,34 +1273,35 @@ private void renderLightOverlay( System.out.println("unexpected color type"); continue; } - + tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, alpha); areaRenderer.setColor(tmpColor); areaRenderer.fillArea(batch, light.getArea()); } + + batch.flush(); + backBuffer.end(); timer.stop("renderLightOverlay:drawLights"); - batch.end(); + // Draw the buffer image with all the lights onto the map - var file = Gdx.files.absolute("C:\\Users\\tkunze\\OneDrive\\Desktop\\buffer.png"); - if(!file.exists()) { - Pixmap pixmap = Pixmap.createFromFrameBuffer(0, 0, width, height); - PixmapIO.writePNG(file, pixmap, Deflater.DEFAULT_COMPRESSION, true); - pixmap.dispose(); - } timer.start("renderLightOverlay:drawBuffer"); - backBuffer.end(); - batch.begin(); - batch.setBlendFunction(overlayBlendSrcFunc, overlayBlendDstFunc); + batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); setProjectionMatrix(hudCam.combined); - - - - batch.draw( - backBuffer.getColorBufferTexture(), 0, 0, width, height, 0, 0, width, height, false, true); - batch.setColor(Color.WHITE); + //batch.setColor(1, 1, 1, alpha); + batch.draw(backBuffer.getColorBufferTexture(), 0, 0, width, height, 0, 0, 1, 1); setProjectionMatrix(cam.combined); + //batch.setColor(Color.WHITE); timer.stop("renderLightOverlay:drawBuffer"); } + private void createScreenshot(String name) { + var file = Gdx.files.absolute("C:\\Users\\tkunze\\OneDrive\\Desktop\\" + name + ".png"); + if (!file.exists()) { + Pixmap pixmap = Pixmap.createFromFrameBuffer(0, 0, width, height); + PixmapIO.writePNG(file, pixmap, Deflater.DEFAULT_COMPRESSION, true); + pixmap.dispose(); + } + } + private void renderGrid(PlayerView view) { var grid = zone.getGrid(); var scale = (float) zoneRenderer.getScale(); @@ -2841,7 +2803,7 @@ protected java.awt.Shape getSquareFacingArrow(int angle, int size) { } private void paintClipped(Sprite image, Area bounds, Area clip) { - + batch.flush(); backBuffer.begin(); ScreenUtils.clear(Color.CLEAR); @@ -2855,6 +2817,7 @@ private void paintClipped(Sprite image, Area bounds, Area clip) { tmpArea.add(bounds); tmpArea.subtract(clip); areaRenderer.fillArea(batch, tmpArea); + batch.flush(); backBuffer.end(); From ddd19ef3427c02bc5133bf5521376ad5e2ac96e3 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 7 Oct 2023 23:32:41 +0200 Subject: [PATCH 100/139] fog repaired --- .../client/ui/zone/gdx/AreaRenderer.java | 4 +- .../client/ui/zone/gdx/GdxRenderer.java | 152 ++++++++++++++---- 2 files changed, 126 insertions(+), 30 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java index f90e74f741..455c13c315 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java @@ -155,7 +155,7 @@ public FloatArray pathToFloatArray(PathIterator it) { // System.out.println("Close"); tmpFloat.add(moveToX, moveToY); break; - // return tmpFloat; + // return tmpFloat; case PathIterator.SEG_LINETO: // System.out.println("Line to: ( " + floatsFromArea[0] + ", " + // floatsFromArea[1] + ")"); @@ -208,7 +208,7 @@ public FloatArray pathToFloatArray(PathIterator it) { } } if (tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) - && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { + && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { // make sure we don't have last and first point the same tmpFloat.pop(); tmpFloat.pop(); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 2ce75436c9..ab01678d0f 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -758,11 +758,12 @@ private void renderHaloArea(Area visible) { java.awt.Color visionColor = useHaloColor ? tokenUnderMouse.getHaloColor() : tokenUnderMouse.getVisionOverlayColor(); - drawer.setColor( + tmpColor.set( visionColor.getRed() / 255f, visionColor.getGreen() / 255f, visionColor.getBlue() / 255f, AppPreferences.getHaloOverlayOpacity() / 255f); + areaRenderer.setColor(tmpColor); areaRenderer.fillArea(batch, visible); } } @@ -849,8 +850,6 @@ private void renderFog(PlayerView view) { || !MapTool.getServerPolicy().isUseIndividualFOW() || view.isGMView(); - drawer.setColor(Color.CLEAR); - if (view.getTokens() != null) { // if there are tokens selected combine the areas, then, if individual FOW is enabled // we pass the combined exposed area to build the soft FOW and visible area. @@ -860,6 +859,7 @@ private void renderFog(PlayerView view) { tempArea.add(new Area(exposedArea)); } if (combinedView) { + areaRenderer.setColor(Color.CLEAR); areaRenderer.fillArea(batch, combined); renderFogArea(combined, visibleArea); renderFogOutline(); @@ -867,7 +867,7 @@ private void renderFog(PlayerView view) { // 'combined' already includes the area encompassed by 'tempArea', so just // use 'combined' instead in this block of code? tempArea.add(combined); - + areaRenderer.setColor(Color.CLEAR); areaRenderer.fillArea(batch, tempArea); renderFogArea(tempArea, visibleArea); renderFogOutline(); @@ -879,6 +879,7 @@ private void renderFog(PlayerView view) { if (combined.isEmpty()) { combined = zone.getExposedArea(); } + areaRenderer.setColor(Color.CLEAR); areaRenderer.fillArea(batch, combined); renderFogArea(combined, visibleArea); renderFogOutline(); @@ -895,6 +896,7 @@ private void renderFog(PlayerView view) { exposedArea = meta.getExposedAreaHistory(); myCombined.add(new Area(exposedArea)); } + areaRenderer.setColor(Color.CLEAR); areaRenderer.fillArea(batch, myCombined); renderFogArea(myCombined, visibleArea); renderFogOutline(); @@ -903,17 +905,15 @@ private void renderFog(PlayerView view) { timer.stop("renderFogArea"); flushFog = false; - // createScreenshot("fog"); - batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); batch.flush(); + createScreenshot("fog"); backBuffer.end(); } - + batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); setProjectionMatrix(hudCam.combined); batch.setColor(Color.WHITE); - batch.draw( - backBuffer.getColorBufferTexture(), 0, 0, width, height, 0, 0, width, height, false, true); + batch.draw(backBuffer.getColorBufferTexture(), 0, 0, width, height, 0, 0, 1, 1); setProjectionMatrix(cam.combined); timer.stop("renderFog"); @@ -927,21 +927,20 @@ private void setProjectionMatrix(Matrix4 matrix) { private void renderFogArea(Area softFog, Area visibleArea) { if (zoneRenderer.getZoneView().isUsingVision()) { if (visibleArea != null && !visibleArea.isEmpty()) { - drawer.setColor(0, 0, 0, AppPreferences.getFogOverlayOpacity() / 255.0f); - + tmpColor.set(0, 0, 0, AppPreferences.getFogOverlayOpacity() / 255.0f); + areaRenderer.setColor(tmpColor); // Fill in the exposed area areaRenderer.fillArea(batch, softFog); - // batch.setColor(Color.CLEAR); - drawer.setColor(Color.CLEAR); - + areaRenderer.setColor(Color.CLEAR); areaRenderer.fillArea(batch, visibleArea); } else { - drawer.setColor(0, 0, 0, 80 / 255.0f); + tmpColor.set(0, 0, 0, AppPreferences.getFogOverlayOpacity() / 255.0f); + areaRenderer.setColor(tmpColor); areaRenderer.fillArea(batch, softFog); - drawer.setColor(Color.WHITE); } } else { + areaRenderer.setColor(Color.CLEAR); areaRenderer.fillArea(batch, softFog); } } @@ -1206,9 +1205,7 @@ private void renderAuras(PlayerView view) { timer.stop("renderAuras:getAuras"); timer.start("renderAuras:renderAuraOverlay"); - renderLightOverlay( - drawableAuras, - alpha); + renderLightOverlay(drawableAuras, alpha); timer.stop("renderAuras:renderAuraOverlay"); } @@ -1240,7 +1237,102 @@ private void renderLights(PlayerView view) { } private void renderLumensOverlay( - PlayerView view, ZoneRenderer.LightOverlayClipStyle lightOverlayClipStyle, float v) {} + PlayerView view, + ZoneRenderer.LightOverlayClipStyle lightOverlayClipStyle, + float overlayAlpha) { + /* final var disjointLumensLevels = zoneView.getDisjointObscuredLumensLevels(view); + + timer.start("renderLumensOverlay:allocateBuffer"); + try (final var bufferHandle = tempBufferPool.acquire()) { + BufferedImage lumensOverlay = bufferHandle.get(); + timer.stop("renderLumensOverlay:allocateBuffer"); + + Graphics2D newG = lumensOverlay.createGraphics(); + // At night, show any uncovered areas as dark. In daylight, show them as light (clear). + newG.setComposite(AlphaComposite.Src.derive(overlayOpacity)); + newG.setPaint( + zone.getVisionType() == Zone.VisionType.NIGHT + ? new java.awt.Color(0.f, 0.f, 0.f, 1.f) + : new java.awt.Color(0.f, 0.f, 0.f, 0.f)); + newG.fillRect(0, 0, lumensOverlay.getWidth(), lumensOverlay.getHeight()); + + newG.setComposite(AlphaComposite.SrcOver.derive(overlayOpacity)); + SwingUtil.useAntiAliasing(newG); + + if (clipStyle != null && visibleScreenArea != null) { + timer.start("renderLumensOverlay:setClip"); + Area clip = new Area(g.getClip()); + switch (clipStyle) { + case CLIP_TO_VISIBLE_AREA -> clip.intersect(visibleScreenArea); + case CLIP_TO_NOT_VISIBLE_AREA -> clip.subtract(visibleScreenArea); + } + newG.setClip(clip); + g.setClip(clip); + timer.stop("renderLumensOverlay:setClip"); + } + + timer.start("renderLumensOverlay:setTransform"); + AffineTransform af = new AffineTransform(); + af.translate(getViewOffsetX(), getViewOffsetY()); + af.scale(getScale(), getScale()); + newG.setTransform(af); + timer.stop("renderLumensOverlay:setTransform"); + + timer.start("renderLumensOverlay:drawLumens"); + for (final var lumensLevel : disjointLumensLevels) { + final var lumensStrength = lumensLevel.lumensStrength(); + + // Light is weaker than darkness, so do it first. + float lightOpacity; + float lightShade; + if (lumensStrength == 0) { + // This area represents daylight, so draw it as clear despite the low value. + lightShade = 1.f; + lightOpacity = 0; + } else if (lumensStrength >= 100) { + // Bright light, render mostly clear. + lightShade = 1.f; + lightOpacity = 1.f / 10.f; + } else { + lightShade = Math.max(0.f, Math.min(lumensStrength / 100.f, 1.f)); + lightShade *= lightShade; + lightOpacity = 1.f; + } + + timer.start("renderLumensOverlay:drawLights:fillArea"); + newG.setPaint(new java.awt.Color(lightShade, lightShade, lightShade, lightOpacity)); + newG.fill(lumensLevel.lightArea()); + + newG.setPaint(new java.awt.Color(0.f, 0.f, 0.f, 1.f)); + newG.fill(lumensLevel.darknessArea()); + timer.stop("renderLumensOverlay:drawLights:fillArea"); + } + + // Now draw borders around each region if configured. + final var borderThickness = AppPreferences.getLumensOverlayBorderThickness(); + if (borderThickness > 0) { + newG.setStroke( + new BasicStroke( + (float) borderThickness, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); + newG.setComposite(AlphaComposite.SrcOver); + newG.setPaint(new java.awt.Color(0.f, 0.f, 0.f, 1.f)); + for (final var lumensLevel : disjointLumensLevels) { + timer.start("renderLumensOverlay:drawLights:drawArea"); + newG.draw(lumensLevel.lightArea()); + newG.draw(lumensLevel.darknessArea()); + timer.stop("renderLumensOverlay:drawLights:drawArea"); + } + } + + timer.stop("renderLumensOverlay:drawLumens"); + newG.dispose(); + + timer.start("renderLumensOverlay:drawBuffer"); + g.drawImage(lumensOverlay, null, 0, 0); + timer.stop("renderLumensOverlay:drawBuffer"); + } + */ + } private void renderLightOverlay(Collection lights, float alpha) { if (lights.isEmpty()) { @@ -1255,9 +1347,10 @@ private void renderLightOverlay(Collection lights, float alpha) { ScreenUtils.clear(Color.CLEAR); setProjectionMatrix(cam.combined); - batch.setBlendFunctionSeparate(GL20.GL_SRC_COLOR, GL20.GL_ONE_MINUS_SRC_COLOR, GL20.GL_ONE, GL20.GL_NONE); + batch.setBlendFunctionSeparate( + GL20.GL_SRC_COLOR, GL20.GL_ONE_MINUS_SRC_COLOR, GL20.GL_ONE, GL20.GL_NONE); timer.stop("renderLightOverlay:allocateBuffer"); - // drawer.setColor(tintColor); + // Draw lights onto the buffer image so the map doesn't affect how they blend timer.start("renderLightOverlay:drawLights"); for (var light : lights) { @@ -1286,10 +1379,10 @@ private void renderLightOverlay(Collection lights, float alpha) { timer.start("renderLightOverlay:drawBuffer"); batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); setProjectionMatrix(hudCam.combined); - //batch.setColor(1, 1, 1, alpha); + // batch.setColor(1, 1, 1, alpha); batch.draw(backBuffer.getColorBufferTexture(), 0, 0, width, height, 0, 0, 1, 1); setProjectionMatrix(cam.combined); - //batch.setColor(Color.WHITE); + // batch.setColor(Color.WHITE); timer.stop("renderLightOverlay:drawBuffer"); } @@ -1681,10 +1774,14 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure batch.setTransformMatrix(tmpMatrix); drawer.update(); - if (token.getFacing() < 0) drawer.setColor(Color.YELLOW); - else drawer.setColor(1, 1, 0, 0.5f); + if (token.getFacing() < 0) { + tmpColor.set(Color.YELLOW); + } else { + tmpColor.set(1, 1, 0, 0.5f); + } var arrowArea = new Area(arrow); + areaRenderer.setColor(tmpColor); areaRenderer.fillArea(batch, arrowArea); areaRenderer.setColor(Color.DARK_GRAY); @@ -2811,8 +2908,7 @@ private void paintClipped(Sprite image, Area bounds, Area clip) { image.draw(batch); - drawer.setColor(Color.CLEAR); - + areaRenderer.setColor(Color.CLEAR); tmpArea.reset(); tmpArea.add(bounds); tmpArea.subtract(clip); From 524a568b9c241b83140d18d3f6ae766cde065382 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sun, 8 Oct 2023 20:36:11 +0200 Subject: [PATCH 101/139] lumen overlay --- .../maptool/client/ui/zone/ZoneRenderer.java | 19 +- .../ui/zone/gdx/AbstractDrawingDrawer.java | 2 +- .../client/ui/zone/gdx/AreaRenderer.java | 79 +++++--- .../client/ui/zone/gdx/GdxRenderer.java | 178 ++++++++---------- 4 files changed, 156 insertions(+), 122 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index bab83fd772..120e60b023 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -28,6 +28,7 @@ import java.awt.font.TextLayout; import java.awt.geom.*; import java.awt.image.BufferedImage; +import java.io.File; import java.text.NumberFormat; import java.util.*; import java.util.List; @@ -38,6 +39,8 @@ import javax.annotation.Nullable; import javax.imageio.ImageIO; import javax.swing.*; + +import net.didion.jwnl.data.Exc; import net.rptools.lib.CodeTimer; import net.rptools.lib.MD5Key; import net.rptools.maptool.client.*; @@ -1587,7 +1590,8 @@ private void renderLumensOverlay( } timer.start("renderLumensOverlay:drawLights:fillArea"); - newG.setPaint(new Color(lightShade, lightShade, lightShade, lightOpacity)); + var color = new Color(lightShade, lightShade, lightShade, lightOpacity); + newG.setPaint(color); newG.fill(lumensLevel.lightArea()); newG.setPaint(new Color(0.f, 0.f, 0.f, 1.f)); @@ -1613,13 +1617,24 @@ private void renderLumensOverlay( timer.stop("renderLumensOverlay:drawLumens"); newG.dispose(); - timer.start("renderLumensOverlay:drawBuffer"); g.drawImage(lumensOverlay, null, 0, 0); timer.stop("renderLumensOverlay:drawBuffer"); } } + private void screenshot(String name, BufferedImage image) { + try { + File outputfile = new File("C:\\Users\\tkunze\\OneDrive\\Desktop\\" + name + "_j2d.png"); + if(outputfile.exists()) + return; + + ImageIO.write(image, "png", outputfile); + } catch (Exception e) { + System.out.println(e.toString()); + } + } + /** * Combines a set of lights into an image that is then rendered into the zone. * diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java index 7f85af11d2..1793ae7288 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java @@ -71,7 +71,7 @@ protected void line(PolygonSpriteBatch batch, Pen pen, float x1, float y1, float floats.add(x1, y1, x2, y2); var path = areaRenderer.path( - floats, + floats.toArray(), pen.getThickness(), pen.getSquareCap() ? AreaRenderer.JoinType.Pointy : AreaRenderer.JoinType.Round, false); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java index 455c13c315..5799f1b5e0 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java @@ -25,6 +25,8 @@ import java.awt.geom.PathIterator; import java.util.ArrayList; import java.util.List; + +import com.badlogic.gdx.utils.IntArray; import net.rptools.lib.gdx.Joiner; import space.earlygrey.shapedrawer.DefaultSideEstimator; import space.earlygrey.shapedrawer.ShapeDrawer; @@ -45,6 +47,8 @@ public AreaRenderer( private FloatArray tmpFloat = new FloatArray(); + private IntArray segmentIndicies = new IntArray(); + private Color color; public void setColor(Color value) { @@ -76,6 +80,12 @@ public void fillArea(PolygonSpriteBatch batch, Area area) { if (area == null || area.isEmpty()) return; pathToFloatArray(area.getPathIterator(null)); + while (tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) + && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { + // make sure we don't have last and first point the same + tmpFloat.pop(); + tmpFloat.pop(); + } paintVertices(batch, tmpFloat.toArray()); } @@ -85,10 +95,29 @@ public void drawArea(PolygonSpriteBatch batch, Area area, boolean rounded, float if (area == null || area.isEmpty()) return; pathToFloatArray(area.getPathIterator(null)); - var vertices = path(tmpFloat, thickness, rounded ? JoinType.Round : JoinType.Pointy, false); + float[] vertices = null; + var floats = tmpFloat.toArray(); + if(segmentIndicies.size == 1) { + vertices = path(floats, thickness, rounded ? JoinType.Round : JoinType.Pointy, false); + paintVertices(batch, vertices); + } else { + var lastSegmentIndex = 0; + var color = this.color; + for(int i=0; i(); var inner = new ArrayList(); float halfWidth = lineWidth / 2f; - if (path.size == 2) { - var x = path.get(0); - var y = path.get(1); + if (path.length == 2) { + var x = path[0]; + var y = path[1]; if (joinType == JoinType.Round) { addArc(outer, x, y, halfWidth, 0, MathUtils.PI2 - 0.1f, false); } else { @@ -255,9 +286,9 @@ public float[] path(FloatArray path, float lineWidth, JoinType joinType, boolean outer.add(y - halfWidth); } - } else if (path.size == 4) { - A.set(path.get(0), path.get(1)); - B.set(path.get(2), path.get(3)); + } else if (path.length == 4) { + A.set(path[0], path[1]); + B.set(path[2], path[3]); if (joinType == JoinType.Round) { Joiner.prepareFlatEndpoint(B, A, D, E, halfWidth); E0.set(D); @@ -296,10 +327,10 @@ public float[] path(FloatArray path, float lineWidth, JoinType joinType, boolean } } else { - for (int i = 2; i < path.size - 2; i += 2) { - A.set(path.get(i - 2), path.get(i - 1)); - B.set(path.get(i), path.get(i + 1)); - C.set(path.get(i + 2), path.get(i + 3)); + for (int i = 2; i < path.length - 2; i += 2) { + A.set(path[i - 2], path[i - 1]); + B.set(path[i], path[i + 1]); + C.set(path[i + 2], path[i + 3]); if (i == 2) { if (open) { if (joinType == JoinType.Round) { @@ -324,7 +355,7 @@ public float[] path(FloatArray path, float lineWidth, JoinType joinType, boolean inner.add(E.y); } } else { - vec1.set(path.get(path.size - 2), path.get(path.size - 1)); + vec1.set(path[path.length - 2], path[path.length - 1]); if (joinType == JoinType.Pointy) { Joiner.preparePointyJoin(vec1, A, B, D0, E0, halfWidth); } else { @@ -402,7 +433,7 @@ public float[] path(FloatArray path, float lineWidth, JoinType joinType, boolean } else { if (joinType == JoinType.Pointy) { // draw last link on path - A.set(path.get(0), path.get(1)); + A.set(path[0], path[1]); Joiner.preparePointyJoin(B, C, A, D, E, halfWidth); outer.add(D.x); outer.add(D.y); @@ -419,7 +450,7 @@ public float[] path(FloatArray path, float lineWidth, JoinType joinType, boolean // draw last link on path A.set(B); B.set(C); - C.set(path.get(0), path.get(1)); + C.set(path[0], path[1]); var bendsLeft = Joiner.prepareSmoothJoin(A, B, C, D, E, halfWidth, false); if (bendsLeft) { vec1.set(E); @@ -459,7 +490,7 @@ public float[] path(FloatArray path, float lineWidth, JoinType joinType, boolean A.set(B); B.set(C); - C.set(path.get(2), path.get(3)); + C.set(path[2], path[3]); bendsLeft = Joiner.prepareSmoothJoin(A, B, C, D, E, halfWidth, false); if (bendsLeft) { vec1.set(E); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index ab01678d0f..cd36339e72 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -48,6 +48,8 @@ import java.util.List; import java.util.zip.Deflater; import javax.swing.*; + +import com.jogamp.opengl.GL2; import net.rptools.lib.CodeTimer; import net.rptools.lib.MD5Key; import net.rptools.lib.gdx.GifDecoder; @@ -1228,110 +1230,97 @@ private void renderLights(PlayerView view) { if (AppState.isShowLumensOverlay()) { // Lumens overlay enabled. timer.start("renderLights:renderLumensOverlay"); - renderLumensOverlay( - view, - view.isGMView() ? null : ZoneRenderer.LightOverlayClipStyle.CLIP_TO_VISIBLE_AREA, - AppPreferences.getLumensOverlayOpacity() / 255.0f); + renderLumensOverlay(view, AppPreferences.getLumensOverlayOpacity() / 255.0f); timer.stop("renderLights:renderLumensOverlay"); } } - private void renderLumensOverlay( - PlayerView view, - ZoneRenderer.LightOverlayClipStyle lightOverlayClipStyle, - float overlayAlpha) { - /* final var disjointLumensLevels = zoneView.getDisjointObscuredLumensLevels(view); - - timer.start("renderLumensOverlay:allocateBuffer"); - try (final var bufferHandle = tempBufferPool.acquire()) { - BufferedImage lumensOverlay = bufferHandle.get(); - timer.stop("renderLumensOverlay:allocateBuffer"); - - Graphics2D newG = lumensOverlay.createGraphics(); - // At night, show any uncovered areas as dark. In daylight, show them as light (clear). - newG.setComposite(AlphaComposite.Src.derive(overlayOpacity)); - newG.setPaint( - zone.getVisionType() == Zone.VisionType.NIGHT - ? new java.awt.Color(0.f, 0.f, 0.f, 1.f) - : new java.awt.Color(0.f, 0.f, 0.f, 0.f)); - newG.fillRect(0, 0, lumensOverlay.getWidth(), lumensOverlay.getHeight()); - - newG.setComposite(AlphaComposite.SrcOver.derive(overlayOpacity)); - SwingUtil.useAntiAliasing(newG); - - if (clipStyle != null && visibleScreenArea != null) { - timer.start("renderLumensOverlay:setClip"); - Area clip = new Area(g.getClip()); - switch (clipStyle) { - case CLIP_TO_VISIBLE_AREA -> clip.intersect(visibleScreenArea); - case CLIP_TO_NOT_VISIBLE_AREA -> clip.subtract(visibleScreenArea); - } - newG.setClip(clip); - g.setClip(clip); - timer.stop("renderLumensOverlay:setClip"); - } + private void renderLumensOverlay(PlayerView view, float overlayAlpha) { + final var disjointLumensLevels = + zoneRenderer.getZoneView().getDisjointObscuredLumensLevels(view); - timer.start("renderLumensOverlay:setTransform"); - AffineTransform af = new AffineTransform(); - af.translate(getViewOffsetX(), getViewOffsetY()); - af.scale(getScale(), getScale()); - newG.setTransform(af); - timer.stop("renderLumensOverlay:setTransform"); - - timer.start("renderLumensOverlay:drawLumens"); - for (final var lumensLevel : disjointLumensLevels) { - final var lumensStrength = lumensLevel.lumensStrength(); - - // Light is weaker than darkness, so do it first. - float lightOpacity; - float lightShade; - if (lumensStrength == 0) { - // This area represents daylight, so draw it as clear despite the low value. - lightShade = 1.f; - lightOpacity = 0; - } else if (lumensStrength >= 100) { - // Bright light, render mostly clear. - lightShade = 1.f; - lightOpacity = 1.f / 10.f; - } else { - lightShade = Math.max(0.f, Math.min(lumensStrength / 100.f, 1.f)); - lightShade *= lightShade; - lightOpacity = 1.f; - } + timer.start("renderLumensOverlay:allocateBuffer"); + batch.flush(); + backBuffer.begin(); + timer.stop("renderLumensOverlay:allocateBuffer"); - timer.start("renderLumensOverlay:drawLights:fillArea"); - newG.setPaint(new java.awt.Color(lightShade, lightShade, lightShade, lightOpacity)); - newG.fill(lumensLevel.lightArea()); + batch.setBlendFunction(GL20.GL_ONE, GL20.GL_NONE); + var A_d = overlayAlpha; + // At night, show any uncovered areas as dark. In daylight, show them as light (clear). + if (zone.getVisionType() == Zone.VisionType.NIGHT) { + ScreenUtils.clear(0,0,0,overlayAlpha); + } else { + A_d = 0; + ScreenUtils.clear(Color.CLEAR); + } - newG.setPaint(new java.awt.Color(0.f, 0.f, 0.f, 1.f)); - newG.fill(lumensLevel.darknessArea()); - timer.stop("renderLumensOverlay:drawLights:fillArea"); - } + //batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + //batch.setBlendFunctionSeparate(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA, GL20.GL_ONE, GL20.GL_NONE); + + //batch.setBlendFunctionSeparate(GL20.GL_ONE, GL20.GL_ONE_MINUS_SRC_ALPHA, GL20.GL_ONE, GL20.GL_NONE); + batch.setBlendFunctionSeparate(GL20.GL_ONE, GL20.GL_NONE, GL20.GL_ONE, GL20.GL_ONE_MINUS_SRC_ALPHA); + timer.start("renderLumensOverlay:drawLumens"); + for (final var lumensLevel : disjointLumensLevels) { + final var lumensStrength = lumensLevel.lumensStrength(); + + // Light is weaker than darkness, so do it first. + float lightOpacity; + float lightShade; + if (lumensStrength == 0) { + // This area represents daylight, so draw it as clear despite the low value. + lightShade = 1.f; + lightOpacity = 0; + } else if (lumensStrength >= 100) { + // Bright light, render mostly clear. + lightShade = 1.f; + lightOpacity = 1.f / 10.f; + } else { + lightShade = Math.max(0.f, Math.min(lumensStrength / 100.f, 1.f)); + lightShade *= lightShade; + lightOpacity = 1.f; + } - // Now draw borders around each region if configured. - final var borderThickness = AppPreferences.getLumensOverlayBorderThickness(); - if (borderThickness > 0) { - newG.setStroke( - new BasicStroke( - (float) borderThickness, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); - newG.setComposite(AlphaComposite.SrcOver); - newG.setPaint(new java.awt.Color(0.f, 0.f, 0.f, 1.f)); - for (final var lumensLevel : disjointLumensLevels) { - timer.start("renderLumensOverlay:drawLights:drawArea"); - newG.draw(lumensLevel.lightArea()); - newG.draw(lumensLevel.darknessArea()); - timer.stop("renderLumensOverlay:drawLights:drawArea"); - } - } + timer.start("renderLumensOverlay:drawLights:fillArea"); + var A_s = lightOpacity * overlayAlpha; + var A_r = A_s + A_d*(1-A_s); + var C_s = lightShade * A_s; + lightShade = C_s / A_r; - timer.stop("renderLumensOverlay:drawLumens"); - newG.dispose(); + areaRenderer.setColor(tmpColor.set(lightShade, lightShade, lightShade, lightOpacity*overlayAlpha)); + areaRenderer.fillArea(batch, lumensLevel.lightArea()); - timer.start("renderLumensOverlay:drawBuffer"); - g.drawImage(lumensOverlay, null, 0, 0); - timer.stop("renderLumensOverlay:drawBuffer"); - } - */ + areaRenderer.setColor(tmpColor.set(0.f, 0.f, 0.f, overlayAlpha)); + areaRenderer.fillArea(batch, lumensLevel.darknessArea()); + timer.stop("renderLumensOverlay:drawLights:fillArea"); + } + + timer.stop("renderLumensOverlay:drawLumens"); + batch.flush(); + createScreenshot("lumens"); + backBuffer.end(); + + timer.start("renderLumensOverlay:drawBuffer"); + //batch.setColor(1,1,1,overlayAlpha); + batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + setProjectionMatrix(hudCam.combined); + batch.draw(backBuffer.getColorBufferTexture(), 0, 0, width, height, 0, 0, 1, 1); + setProjectionMatrix(cam.combined); + timer.stop("renderLumensOverlay:drawBuffer"); + + // Now draw borders around each region if configured. + batch.setColor(Color.WHITE); + final var borderThickness = AppPreferences.getLumensOverlayBorderThickness(); + if (borderThickness > 0) { + tmpColor.set(0.f, 0.f, 0.f, 1.f); + for (final var lumensLevel : disjointLumensLevels) { + timer.start("renderLumensOverlay:drawLights:drawArea"); + areaRenderer.setColor(tmpColor); + areaRenderer.drawArea(batch, lumensLevel.lightArea(), true, borderThickness); + areaRenderer.setColor(tmpColor); + areaRenderer.drawArea(batch, lumensLevel.darknessArea(), true, borderThickness); + timer.stop("renderLumensOverlay:drawLights:drawArea"); + } + } } private void renderLightOverlay(Collection lights, float alpha) { @@ -1379,7 +1368,6 @@ private void renderLightOverlay(Collection lights, float alpha) { timer.start("renderLightOverlay:drawBuffer"); batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); setProjectionMatrix(hudCam.combined); - // batch.setColor(1, 1, 1, alpha); batch.draw(backBuffer.getColorBufferTexture(), 0, 0, width, height, 0, 0, 1, 1); setProjectionMatrix(cam.combined); // batch.setColor(Color.WHITE); From adc89f407ac49fb5ace5e044e52ab60d0b284c50 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 9 Oct 2023 20:14:47 +0200 Subject: [PATCH 102/139] . --- .../maptool/client/ui/zone/gdx/GdxRenderer.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index cd36339e72..d068f06ca6 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -1207,7 +1207,7 @@ private void renderAuras(PlayerView view) { timer.stop("renderAuras:getAuras"); timer.start("renderAuras:renderAuraOverlay"); - renderLightOverlay(drawableAuras, alpha); + renderLightOverlay(drawableAuras, alpha, GL20.GL_ONE, GL20.GL_ONE_MINUS_SRC_ALPHA); timer.stop("renderAuras:renderAuraOverlay"); } @@ -1223,7 +1223,7 @@ private void renderLights(PlayerView view) { // zone.getLightingStyle() is not supported currently as you would probably need a custom // shader - renderLightOverlay(drawableLights, AppPreferences.getLightOverlayOpacity() / 255.f); + renderLightOverlay(drawableLights, AppPreferences.getLightOverlayOpacity() / 255.f, GL20.GL_SRC_COLOR, GL20.GL_ONE_MINUS_SRC_COLOR); timer.stop("renderLights:renderLightOverlay"); } @@ -1254,10 +1254,6 @@ private void renderLumensOverlay(PlayerView view, float overlayAlpha) { ScreenUtils.clear(Color.CLEAR); } - //batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); - //batch.setBlendFunctionSeparate(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA, GL20.GL_ONE, GL20.GL_NONE); - - //batch.setBlendFunctionSeparate(GL20.GL_ONE, GL20.GL_ONE_MINUS_SRC_ALPHA, GL20.GL_ONE, GL20.GL_NONE); batch.setBlendFunctionSeparate(GL20.GL_ONE, GL20.GL_NONE, GL20.GL_ONE, GL20.GL_ONE_MINUS_SRC_ALPHA); timer.start("renderLumensOverlay:drawLumens"); for (final var lumensLevel : disjointLumensLevels) { @@ -1281,6 +1277,11 @@ private void renderLumensOverlay(PlayerView view, float overlayAlpha) { } timer.start("renderLumensOverlay:drawLights:fillArea"); + + // precalculate the SRC_OVER stuff. Otherwise, we get pre-multiplied colors and would + // have to reverse it before drawing them (probably with a shader). + // See https://apoorvaj.io/alpha-compositing-opengl-blending-and-premultiplied-alpha/ + // Rendering transparency to transparent buffers is a PITA. var A_s = lightOpacity * overlayAlpha; var A_r = A_s + A_d*(1-A_s); var C_s = lightShade * A_s; @@ -1323,7 +1324,7 @@ private void renderLumensOverlay(PlayerView view, float overlayAlpha) { } } - private void renderLightOverlay(Collection lights, float alpha) { + private void renderLightOverlay(Collection lights, float alpha, int srcBlendFunc, int dstBlendFunc) { if (lights.isEmpty()) { // No points spending resources accomplishing nothing. return; @@ -1337,7 +1338,7 @@ private void renderLightOverlay(Collection lights, float alpha) { ScreenUtils.clear(Color.CLEAR); setProjectionMatrix(cam.combined); batch.setBlendFunctionSeparate( - GL20.GL_SRC_COLOR, GL20.GL_ONE_MINUS_SRC_COLOR, GL20.GL_ONE, GL20.GL_NONE); + srcBlendFunc, dstBlendFunc, GL20.GL_ONE, GL20.GL_NONE); timer.stop("renderLightOverlay:allocateBuffer"); // Draw lights onto the buffer image so the map doesn't affect how they blend From 84e6e8d178aa011ad1fa03d4639df8045a7a13aa Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 9 Oct 2023 20:25:00 +0200 Subject: [PATCH 103/139] simplify lumen overlay rendering --- .../client/ui/zone/gdx/GdxRenderer.java | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index d068f06ca6..1343dcda0b 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -1254,7 +1254,7 @@ private void renderLumensOverlay(PlayerView view, float overlayAlpha) { ScreenUtils.clear(Color.CLEAR); } - batch.setBlendFunctionSeparate(GL20.GL_ONE, GL20.GL_NONE, GL20.GL_ONE, GL20.GL_ONE_MINUS_SRC_ALPHA); + batch.setBlendFunction(GL20.GL_ONE, GL20.GL_ONE_MINUS_SRC_ALPHA); timer.start("renderLumensOverlay:drawLumens"); for (final var lumensLevel : disjointLumensLevels) { final var lumensStrength = lumensLevel.lumensStrength(); @@ -1278,16 +1278,14 @@ private void renderLumensOverlay(PlayerView view, float overlayAlpha) { timer.start("renderLumensOverlay:drawLights:fillArea"); - // precalculate the SRC_OVER stuff. Otherwise, we get pre-multiplied colors and would - // have to reverse it before drawing them (probably with a shader). + // for SRC_OVER on transparent destination we need GL_ONE, GL_ONE_MINUS_SRC_ALPHA + // we have to render the fbo with the same blending function to the screen not with + // GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ! // See https://apoorvaj.io/alpha-compositing-opengl-blending-and-premultiplied-alpha/ - // Rendering transparency to transparent buffers is a PITA. - var A_s = lightOpacity * overlayAlpha; - var A_r = A_s + A_d*(1-A_s); - var C_s = lightShade * A_s; - lightShade = C_s / A_r; - areaRenderer.setColor(tmpColor.set(lightShade, lightShade, lightShade, lightOpacity*overlayAlpha)); + lightOpacity *= overlayAlpha; + lightShade *= lightOpacity; + areaRenderer.setColor(tmpColor.set(lightShade, lightShade, lightShade, lightOpacity)); areaRenderer.fillArea(batch, lumensLevel.lightArea()); areaRenderer.setColor(tmpColor.set(0.f, 0.f, 0.f, overlayAlpha)); @@ -1302,12 +1300,12 @@ private void renderLumensOverlay(PlayerView view, float overlayAlpha) { timer.start("renderLumensOverlay:drawBuffer"); //batch.setColor(1,1,1,overlayAlpha); - batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + batch.setBlendFunction(GL20.GL_ONE, GL20.GL_ONE_MINUS_SRC_ALPHA); setProjectionMatrix(hudCam.combined); batch.draw(backBuffer.getColorBufferTexture(), 0, 0, width, height, 0, 0, 1, 1); setProjectionMatrix(cam.combined); timer.stop("renderLumensOverlay:drawBuffer"); - + batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); // Now draw borders around each region if configured. batch.setColor(Color.WHITE); final var borderThickness = AppPreferences.getLumensOverlayBorderThickness(); From 9098f779c3c2b8a9bf07bfb24fd46d606c8dc590 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 9 Oct 2023 20:55:56 +0200 Subject: [PATCH 104/139] spotless --- .../maptool/client/ui/zone/ZoneRenderer.java | 5 +--- .../ui/zone/gdx/AbstractDrawingDrawer.java | 2 +- .../client/ui/zone/gdx/AreaRenderer.java | 23 +++++++++---------- 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index 120e60b023..dffcaa892c 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -39,8 +39,6 @@ import javax.annotation.Nullable; import javax.imageio.ImageIO; import javax.swing.*; - -import net.didion.jwnl.data.Exc; import net.rptools.lib.CodeTimer; import net.rptools.lib.MD5Key; import net.rptools.maptool.client.*; @@ -1626,8 +1624,7 @@ private void renderLumensOverlay( private void screenshot(String name, BufferedImage image) { try { File outputfile = new File("C:\\Users\\tkunze\\OneDrive\\Desktop\\" + name + "_j2d.png"); - if(outputfile.exists()) - return; + if (outputfile.exists()) return; ImageIO.write(image, "png", outputfile); } catch (Exception e) { diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java index 1793ae7288..7f7a49d097 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java @@ -71,7 +71,7 @@ protected void line(PolygonSpriteBatch batch, Pen pen, float x1, float y1, float floats.add(x1, y1, x2, y2); var path = areaRenderer.path( - floats.toArray(), + floats.toArray(), pen.getThickness(), pen.getSquareCap() ? AreaRenderer.JoinType.Pointy : AreaRenderer.JoinType.Round, false); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java index 5799f1b5e0..3e0dcdffdf 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java @@ -21,12 +21,11 @@ import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.FloatArray; +import com.badlogic.gdx.utils.IntArray; import java.awt.geom.Area; import java.awt.geom.PathIterator; import java.util.ArrayList; import java.util.List; - -import com.badlogic.gdx.utils.IntArray; import net.rptools.lib.gdx.Joiner; import space.earlygrey.shapedrawer.DefaultSideEstimator; import space.earlygrey.shapedrawer.ShapeDrawer; @@ -81,7 +80,7 @@ public void fillArea(PolygonSpriteBatch batch, Area area) { pathToFloatArray(area.getPathIterator(null)); while (tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) - && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { + && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { // make sure we don't have last and first point the same tmpFloat.pop(); tmpFloat.pop(); @@ -97,17 +96,17 @@ public void drawArea(PolygonSpriteBatch batch, Area area, boolean rounded, float pathToFloatArray(area.getPathIterator(null)); float[] vertices = null; var floats = tmpFloat.toArray(); - if(segmentIndicies.size == 1) { + if (segmentIndicies.size == 1) { vertices = path(floats, thickness, rounded ? JoinType.Round : JoinType.Pointy, false); paintVertices(batch, vertices); } else { var lastSegmentIndex = 0; var color = this.color; - for(int i=0; i Date: Mon, 9 Oct 2023 23:18:14 +0200 Subject: [PATCH 105/139] add playerdarkness, coordinates and lightbulboverlay. --- maptool.tpproj | 8 +- .../maptool/client/ui/zone/ZoneRenderer.java | 5 +- .../client/ui/zone/gdx/GdxRenderer.java | 159 ++++- .../net/rptools/maptool/client/maptool.atlas | 658 +++--------------- .../net/rptools/maptool/client/maptool.png | Bin 111717 -> 112953 bytes 5 files changed, 246 insertions(+), 584 deletions(-) diff --git a/maptool.tpproj b/maptool.tpproj index 7f99d53641..161726318c 100644 --- a/maptool.tpproj +++ b/maptool.tpproj @@ -30,14 +30,18 @@ square=false bleed=true limitMemory=true useIndexes=true +prettyPrint=false +legacyOutput=false scaleFactors=[{suffix:"",factor:1,resampling:bicubic}] -inputFiles=[{path:src/main/resources/net/rptools/maptool/client/image/blueLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/darkGreyLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/grayLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/border,type:Input,dirFilePrefix:border/,recursive:true,flattenPaths:false},{path:src/main/resources/net/rptools/maptool/client/image/stack.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/whiteBorder.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/hexBorder.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/isoBorder.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/redDot.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/broken.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/unknown.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/block_move.png,type:Input,regionName:null}] +inputFiles=[{path:src/main/resources/net/rptools/maptool/client/image/blueLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/darkGreyLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/grayLabelbox.png,type:Input,regionName:null,ninepatch:{splits:[10,10,10,10],pads:[10,10,10,10]}},{path:src/main/resources/net/rptools/maptool/client/image/border,type:Input,dirFilePrefix:border/,recursive:true,flattenPaths:false},{path:src/main/resources/net/rptools/maptool/client/image/stack.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/whiteBorder.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/hexBorder.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/isoBorder.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/redDot.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/broken.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/unknown.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/block_move.png,type:Input,regionName:null},{path:src/main/resources/net/rptools/maptool/client/image/lightbulb.png,type:Input,regionName:null}] +keepInputFileExtensions=false -PROJ- -version=4.10.0 +version=4.12.0 fileTypeType=png fileTypeData={encoding:RGBA8888} previewBackgroundColor=ffffffff +projectSettings={inputFiles:{}} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index dffcaa892c..12e1b63756 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -1402,7 +1402,10 @@ public void renderZone(Graphics2D g2d, PlayerView view) { timer.stop("renderCoordinates"); timer.start("lightSourceIconOverlay.paintOverlay"); - if (Zone.Layer.TOKEN.isEnabled() && view.isGMView() && AppState.isShowLightSources()) { + if (Zone.Layer.TOKEN.isEnabled() + && view.isGMView() + && AppState.isShowLightSources() + && !skipDrawing) { lightSourceIconOverlay.paintOverlay(this, g2d); } timer.stop("lightSourceIconOverlay.paintOverlay"); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 1343dcda0b..a09693b0b8 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -48,8 +48,6 @@ import java.util.List; import java.util.zip.Deflater; import javax.swing.*; - -import com.jogamp.opengl.GL2; import net.rptools.lib.CodeTimer; import net.rptools.lib.MD5Key; import net.rptools.lib.gdx.GifDecoder; @@ -111,6 +109,7 @@ public class GdxRenderer extends ApplicationAdapter implements AssetAvailableLis // renderFog private final String ATLAS = "net/rptools/maptool/client/maptool.atlas"; private final String FONT_NORMAL = "normalFont.ttf"; + private final String FONT_BOLD = "boldFont.ttf"; private final String FONT_DISTANCE = "distanceFont.ttf"; private PixmapPacker packer; private TextureAtlas tokenAtlas; @@ -141,8 +140,8 @@ public class GdxRenderer extends ApplicationAdapter implements AssetAvailableLis private int width; private int height; private BitmapFont normalFont; - private BitmapFont distanceFont; - private float distanceFontScale = 0; + private BitmapFont boldFont; + private float boldFontScale = 0; private final CodeTimer timer = new CodeTimer("GdxRenderer.renderZone"); private FrameBuffer backBuffer; private Integer fogX; @@ -207,7 +206,7 @@ public void create() { atlas = null; normalFont = null; - distanceFont = null; + boldFont = null; fetchedSprites.clear(); isoSprites.clear(); fetchedRegions.clear(); @@ -353,7 +352,7 @@ public void render() { hudTextRenderer = new TextRenderer(atlas, batch, normalFont, false); } - ensureCorrectDistanceFont(); + ensureTtfFont(); ScreenUtils.clear(Color.BLACK); // boolean stepped = fixedStep(delta); @@ -389,23 +388,23 @@ private PixmapPacker createPacker() { return new PixmapPacker(2048, 2048, Pixmap.Format.RGBA8888, 2, false); } - private void ensureCorrectDistanceFont() { + private void ensureTtfFont() { if (zone == null) return; var fontScale = (float) zone.getGrid().getSize() / 50; // Font size of 12 at grid size 50 is default - if (fontScale == this.distanceFontScale && distanceFont != null) return; + if (fontScale == this.boldFontScale && boldFont != null) return; - if (distanceFont != null) manager.unload(FONT_DISTANCE); + if (boldFont != null) manager.unload(FONT_DISTANCE); var fontParams = new FreetypeFontLoader.FreeTypeFontLoaderParameter(); fontParams.fontFileName = "net/rptools/maptool/client/fonts/OpenSans-Bold.ttf"; fontParams.fontParameters.size = (int) (12 * fontScale); - manager.load(FONT_DISTANCE, BitmapFont.class, fontParams); + manager.load(FONT_BOLD, BitmapFont.class, fontParams); manager.finishLoading(); - distanceFont = manager.get(FONT_DISTANCE, BitmapFont.class); - distanceFontScale = fontScale; + boldFont = manager.get(FONT_BOLD, BitmapFont.class); + boldFontScale = fontScale; } private void loadAssets() { @@ -564,7 +563,7 @@ private void renderZone(PlayerView view) { renderAuras(view); timer.stop("auras"); } - + renderPlayerDarkness(view); /* * The following sections used to handle rendering of the Hidden (i.e. "GM") layer followed by * the Token layer. The problem was that we want all drawables to appear below all tokens, and @@ -687,6 +686,114 @@ private void renderZone(PlayerView view) { renderPlayerVisionOverlay(view); timer.stop("visionOverlayPlayer"); } + + timer.start("renderCoordinates"); + renderCoordinates(view); + timer.stop("renderCoordinates"); + + timer.start("lightSourceIconOverlay.paintOverlay"); + if (Zone.Layer.TOKEN.isEnabled() && view.isGMView() && AppState.isShowLightSources()) { + paintlightSourceIconOverlay(); + } + timer.stop("lightSourceIconOverlay.paintOverlay"); + } + + private void renderCoordinates(PlayerView view) { + if (!AppState.isShowCoordinates() || !(zone.getGrid() instanceof SquareGrid grid)) return; + + var font = boldFont; + + float cellSize = (float) zoneRenderer.getScaledGridSize(); + CellPoint topLeft = grid.convert(new ScreenPoint(0, 0).convertToZone(zoneRenderer)); + + Dimension size = zoneRenderer.getSize(); + glyphLayout.setText(font, "MMM"); + float startX = glyphLayout.width + 10; + + float x = topLeft.x * cellSize + cellSize / 2; // Start at middle of the cell that's on screen + float nextAvailableSpace = -1; + while (x < size.width) { + String coord = Integer.toString(topLeft.x); + glyphLayout.setText(font, coord); + float strWidth = glyphLayout.width; + float strX = (int) x - strWidth / 2; + + if (x > startX && strX > nextAvailableSpace) { + font.setColor(Color.BLACK); + font.draw(batch, coord, strX, -glyphLayout.height / 2 - 1); + font.setColor(Color.ORANGE); + font.draw(batch, coord, strX - 1, -glyphLayout.height / 2); + + nextAvailableSpace = strX + strWidth + 10; + } + x += cellSize; + topLeft.x++; + } + float y = + (float) topLeft.y * cellSize + + cellSize / 2f; // Start at middle of the cell that's on screen + nextAvailableSpace = -1; + while (y < size.height) { + String coord = grid.decimalToAlphaCoord(topLeft.y); + + float strY = y + font.getAscent() / 2; + + if (y > glyphLayout.height && strY > nextAvailableSpace) { + font.setColor(Color.BLACK); + font.draw(batch, coord, 10, -strY + glyphLayout.height / 2 - 1); + font.setColor(Color.YELLOW); + font.draw(batch, coord, 10 - 1, -strY + glyphLayout.height / 2); + + nextAvailableSpace = strY + font.getAscent() / 2 + 10; + } + y += cellSize; + topLeft.y++; + } + } + + private void paintlightSourceIconOverlay() { + var lightbulb = fetch("lightbulb"); + for (Token token : zone.getAllTokens()) { + + if (token.hasLightSources()) { + boolean foundNormalLight = false; + for (AttachedLightSource attachedLightSource : token.getLightSources()) { + LightSource lightSource = + MapTool.getCampaign().getLightSource(attachedLightSource.getLightSourceId()); + if (lightSource != null && lightSource.getType() == LightSource.Type.NORMAL) { + foundNormalLight = true; + break; + } + } + if (!foundNormalLight) { + continue; + } + + Area area = zoneRenderer.getTokenBounds(token); + if (area == null) { + continue; + } + + int x = area.getBounds().x + (area.getBounds().width - lightbulb.getRegionWidth()) / 2; + int y = -area.getBounds().y - (area.getBounds().height + lightbulb.getRegionHeight()) / 2; + batch.draw(lightbulb, x, y); + } + } + } + + private void renderPlayerDarkness(PlayerView view) { + if (view.isGMView()) { + // GMs see the darkness rendered as lights, not as blackness. + return; + } + + final var darkness = zoneRenderer.getZoneView().getIllumination(view).getDarkenedArea(); + if (darkness.isEmpty()) { + // Skip the rendering work if it isn't necessary. + return; + } + areaRenderer.setColor(Color.BLACK); + areaRenderer.fillArea(batch, darkness); } private void renderPlayerVisionOverlay(PlayerView view) { @@ -1223,7 +1330,11 @@ private void renderLights(PlayerView view) { // zone.getLightingStyle() is not supported currently as you would probably need a custom // shader - renderLightOverlay(drawableLights, AppPreferences.getLightOverlayOpacity() / 255.f, GL20.GL_SRC_COLOR, GL20.GL_ONE_MINUS_SRC_COLOR); + renderLightOverlay( + drawableLights, + AppPreferences.getLightOverlayOpacity() / 255.f, + GL20.GL_SRC_COLOR, + GL20.GL_ONE_MINUS_SRC_COLOR); timer.stop("renderLights:renderLightOverlay"); } @@ -1248,7 +1359,7 @@ private void renderLumensOverlay(PlayerView view, float overlayAlpha) { var A_d = overlayAlpha; // At night, show any uncovered areas as dark. In daylight, show them as light (clear). if (zone.getVisionType() == Zone.VisionType.NIGHT) { - ScreenUtils.clear(0,0,0,overlayAlpha); + ScreenUtils.clear(0, 0, 0, overlayAlpha); } else { A_d = 0; ScreenUtils.clear(Color.CLEAR); @@ -1299,7 +1410,7 @@ private void renderLumensOverlay(PlayerView view, float overlayAlpha) { backBuffer.end(); timer.start("renderLumensOverlay:drawBuffer"); - //batch.setColor(1,1,1,overlayAlpha); + // batch.setColor(1,1,1,overlayAlpha); batch.setBlendFunction(GL20.GL_ONE, GL20.GL_ONE_MINUS_SRC_ALPHA); setProjectionMatrix(hudCam.combined); batch.draw(backBuffer.getColorBufferTexture(), 0, 0, width, height, 0, 0, 1, 1); @@ -1322,7 +1433,8 @@ private void renderLumensOverlay(PlayerView view, float overlayAlpha) { } } - private void renderLightOverlay(Collection lights, float alpha, int srcBlendFunc, int dstBlendFunc) { + private void renderLightOverlay( + Collection lights, float alpha, int srcBlendFunc, int dstBlendFunc) { if (lights.isEmpty()) { // No points spending resources accomplishing nothing. return; @@ -1335,8 +1447,7 @@ private void renderLightOverlay(Collection lights, float alpha, i ScreenUtils.clear(Color.CLEAR); setProjectionMatrix(cam.combined); - batch.setBlendFunctionSeparate( - srcBlendFunc, dstBlendFunc, GL20.GL_ONE, GL20.GL_NONE); + batch.setBlendFunctionSeparate(srcBlendFunc, dstBlendFunc, GL20.GL_ONE, GL20.GL_NONE); timer.stop("renderLightOverlay:allocateBuffer"); // Draw lights onto the buffer image so the map doesn't affect how they blend @@ -3153,23 +3264,23 @@ private void addDistanceText( float iheight = cheight * size; var cellX = (point.x - iwidth / 2); - var cellY = (-point.y + iheight / 2) + distanceFont.getLineHeight(); + var cellY = (-point.y + iheight / 2) + boldFont.getLineHeight(); // Draw distance for each cell - var textOffset = 7 * distanceFontScale; // 7 pixels at 100% zoom & grid size of 50 + var textOffset = 7 * boldFontScale; // 7 pixels at 100% zoom & grid size of 50 String distanceText = NumberFormat.getInstance().format(distance); if (log.isDebugEnabled() || showAstarDebugging) { distanceText += " (" + NumberFormat.getInstance().format(distanceWithoutTerrain) + ")"; } - glyphLayout.setText(distanceFont, distanceText); + glyphLayout.setText(boldFont, distanceText); var textWidth = glyphLayout.width; - distanceFont.setColor(Color.BLACK); + boldFont.setColor(Color.BLACK); - distanceFont.draw( + boldFont.draw( batch, distanceText, cellX + cwidth - textWidth - textOffset, diff --git a/src/main/resources/net/rptools/maptool/client/maptool.atlas b/src/main/resources/net/rptools/maptool/client/maptool.atlas index df0a1ccb08..5b810c685c 100644 --- a/src/main/resources/net/rptools/maptool/client/maptool.atlas +++ b/src/main/resources/net/rptools/maptool/client/maptool.atlas @@ -1,649 +1,193 @@ - maptool.png -size: 512, 512 -format: RGBA8888 -filter: Nearest, Nearest -repeat: none +size:512,512 +repeat:none block_move - rotate: false - xy: 2, 254 - size: 256, 256 - orig: 256, 256 - offset: 0, 0 - index: -1 +bounds:2,254,256,256 blueLabelbox - rotate: false - xy: 121, 185 - size: 129, 21 - split: 10, 10, 10, 10 - pad: 10, 10, 10, 10 - orig: 129, 21 - offset: 0, 0 - index: -1 +bounds:121,185,129,21 +split:10,10,10,10 +pad:10,10,10,10 border/blue/bl - rotate: false - xy: 383, 369 - size: 3, 3 - orig: 3, 3 - offset: 0, 0 - index: -1 +bounds:383,369,3,3 border/blue/bottom - rotate: false - xy: 2, 2 - size: 52, 3 - orig: 52, 3 - offset: 0, 0 - index: -1 +bounds:2,2,52,3 border/blue/br - rotate: false - xy: 452, 387 - size: 3, 3 - orig: 3, 3 - offset: 0, 0 - index: -1 +bounds:452,387,3,3 border/blue/right - rotate: false - xy: 480, 463 - size: 3, 47 - orig: 3, 47 - offset: 0, 0 - index: -1 +bounds:480,463,3,47 border/blue/left - rotate: false - xy: 480, 463 - size: 3, 47 - orig: 3, 47 - offset: 0, 0 - index: -1 +bounds:480,463,3,47 border/blue/tl - rotate: false - xy: 284, 308 - size: 3, 3 - orig: 3, 3 - offset: 0, 0 - index: -1 +bounds:485,499,3,3 border/blue/top - rotate: false - xy: 234, 144 - size: 52, 3 - orig: 52, 3 - offset: 0, 0 - index: -1 +bounds:234,144,52,3 border/blue/tr - rotate: false - xy: 329, 340 - size: 3, 3 - orig: 3, 3 - offset: 0, 0 - index: -1 +bounds:143,117,3,3 border/fowtools/bl - rotate: false - xy: 252, 192 - size: 6, 6 - orig: 6, 6 - offset: 0, 0 - index: -1 +bounds:252,192,6,6 border/fowtools/bottom - rotate: false - xy: 329, 374 - size: 52, 6 - orig: 52, 6 - offset: 0, 0 - index: -1 +bounds:329,374,52,6 border/fowtools/br - rotate: false - xy: 284, 313 - size: 6, 6 - orig: 6, 6 - offset: 0, 0 - index: -1 +bounds:485,504,6,6 border/fowtools/left - rotate: false - xy: 121, 88 - size: 6, 52 - orig: 6, 52 - offset: 0, 0 - index: -1 +bounds:121,88,6,52 border/fowtools/right - rotate: false - xy: 260, 214 - size: 6, 52 - orig: 6, 52 - offset: 0, 0 - index: -1 +bounds:260,214,6,52 border/fowtools/tl - rotate: false - xy: 485, 504 - size: 6, 6 - orig: 6, 6 - offset: 0, 0 - index: -1 +bounds:82,48,6,6 border/fowtools/top - rotate: false - xy: 234, 149 - size: 52, 6 - orig: 52, 6 - offset: 0, 0 - index: -1 +bounds:234,149,52,6 border/fowtools/tr - rotate: false - xy: 456, 451 - size: 6, 6 - orig: 6, 6 - offset: 0, 0 - index: -1 +bounds:284,313,6,6 border/gray/bl - rotate: false - xy: 383, 374 - size: 5, 6 - orig: 5, 6 - offset: 0, 0 - index: -1 +bounds:383,374,5,6 border/gray/bottom - rotate: false - xy: 121, 149 - size: 111, 6 - orig: 111, 6 - offset: 0, 0 - index: -1 +bounds:121,149,111,6 border/gray/br - rotate: false - xy: 288, 149 - size: 6, 6 - orig: 6, 6 - offset: 0, 0 - index: -1 +bounds:288,149,6,6 border/gray/left - rotate: false - xy: 114, 53 - size: 5, 199 - orig: 5, 199 - offset: 0, 0 - index: -1 +bounds:114,53,5,199 border/gray/right - rotate: false - xy: 106, 53 - size: 6, 199 - orig: 6, 199 - offset: 0, 0 - index: -1 +bounds:106,53,6,199 border/gray/tl - rotate: false - xy: 321, 321 - size: 5, 5 - orig: 5, 5 - offset: 0, 0 - index: -1 +bounds:321,321,5,5 border/gray/top - rotate: false - xy: 121, 142 - size: 111, 5 - orig: 111, 5 - offset: 0, 0 - index: -1 +bounds:121,142,111,5 border/gray/tr - rotate: false - xy: 252, 185 - size: 6, 5 - orig: 6, 5 - offset: 0, 0 - index: -1 +bounds:252,185,6,5 border/gray2/bl - rotate: false - xy: 96, 69 - size: 3, 3 - orig: 3, 3 - offset: 0, 0 - index: -1 +bounds:70,25,3,3 border/gray2/bottom - rotate: false - xy: 329, 364 - size: 52, 3 - orig: 52, 3 - offset: 0, 0 - index: -1 +bounds:329,364,52,3 border/gray2/br - rotate: false - xy: 292, 316 - size: 3, 3 - orig: 3, 3 - offset: 0, 0 - index: -1 +bounds:493,507,3,3 border/gray2/left - rotate: false - xy: 452, 392 - size: 3, 52 - orig: 3, 52 - offset: 0, 0 - index: -1 +bounds:452,392,3,52 border/gray2/right - rotate: false - xy: 268, 214 - size: 3, 52 - orig: 3, 52 - offset: 0, 0 - index: -1 +bounds:268,214,3,52 border/gray2/tl - rotate: false - xy: 456, 446 - size: 3, 3 - orig: 3, 3 - offset: 0, 0 - index: -1 +bounds:456,446,3,3 border/gray2/top - rotate: false - xy: 2, 7 - size: 52, 3 - orig: 52, 3 - offset: 0, 0 - index: -1 +bounds:2,7,52,3 border/gray2/tr - rotate: false - xy: 260, 201 - size: 3, 3 - orig: 3, 3 - offset: 0, 0 - index: -1 +bounds:260,201,3,3 border/green/bl - rotate: false - xy: 70, 25 - size: 3, 3 - orig: 3, 3 - offset: 0, 0 - index: -1 +bounds:197,137,3,3 border/green/bottom - rotate: false - xy: 329, 359 - size: 52, 3 - orig: 52, 3 - offset: 0, 0 - index: -1 +bounds:329,359,52,3 border/green/br - rotate: false - xy: 82, 55 - size: 3, 3 - orig: 3, 3 - offset: 0, 0 - index: -1 +bounds:100,69,3,3 border/green/left - rotate: false - xy: 274, 272 - size: 3, 47 - orig: 3, 47 - offset: 0, 0 - index: -1 +bounds:274,272,3,47 border/green/right - rotate: false - xy: 274, 272 - size: 3, 47 - orig: 3, 47 - offset: 0, 0 - index: -1 +bounds:274,272,3,47 border/green/tl - rotate: false - xy: 101, 69 - size: 3, 3 - orig: 3, 3 - offset: 0, 0 - index: -1 +bounds:183,123,3,3 border/green/top - rotate: false - xy: 129, 132 - size: 52, 3 - orig: 52, 3 - offset: 0, 0 - index: -1 +bounds:129,132,52,3 border/green/tr - rotate: false - xy: 493, 507 - size: 3, 3 - orig: 3, 3 - offset: 0, 0 - index: -1 +bounds:90,51,3,3 border/highlight/bl - rotate: false - xy: 129, 114 - size: 6, 6 - orig: 6, 6 - offset: 0, 0 - index: -1 +bounds:456,451,6,6 border/highlight/bottom - rotate: false - xy: 390, 384 - size: 52, 6 - orig: 52, 6 - offset: 0, 0 - index: -1 +bounds:390,384,52,6 border/highlight/br - rotate: false - xy: 444, 384 - size: 6, 6 - orig: 6, 6 - offset: 0, 0 - index: -1 +bounds:444,384,6,6 border/highlight/left - rotate: false - xy: 252, 200 - size: 6, 52 - orig: 6, 52 - offset: 0, 0 - index: -1 +bounds:252,200,6,52 border/highlight/right - rotate: false - xy: 321, 328 - size: 6, 52 - orig: 6, 52 - offset: 0, 0 - index: -1 +bounds:321,328,6,52 border/highlight/tl - rotate: false - xy: 260, 206 - size: 6, 6 - orig: 6, 6 - offset: 0, 0 - index: -1 +bounds:260,206,6,6 border/highlight/top - rotate: false - xy: 2, 22 - size: 52, 6 - orig: 52, 6 - offset: 0, 0 - index: -1 +bounds:2,22,52,6 border/highlight/tr - rotate: false - xy: 121, 80 - size: 6, 6 - orig: 6, 6 - offset: 0, 0 - index: -1 +bounds:121,80,6,6 border/purple/bl - rotate: false - xy: 464, 454 - size: 3, 3 - orig: 3, 3 - offset: 0, 0 - index: -1 +bounds:292,316,3,3 border/purple/bottom - rotate: false - xy: 329, 369 - size: 52, 3 - orig: 52, 3 - offset: 0, 0 - index: -1 +bounds:329,369,52,3 border/purple/br - rotate: false - xy: 121, 75 - size: 3, 3 - orig: 3, 3 - offset: 0, 0 - index: -1 +bounds:121,75,3,3 border/purple/left - rotate: false - xy: 470, 463 - size: 3, 47 - orig: 3, 47 - offset: 0, 0 - index: -1 +bounds:470,463,3,47 border/purple/right - rotate: false - xy: 470, 463 - size: 3, 47 - orig: 3, 47 - offset: 0, 0 - index: -1 +bounds:470,463,3,47 border/purple/tl - rotate: false - xy: 268, 209 - size: 3, 3 - orig: 3, 3 - offset: 0, 0 - index: -1 +bounds:268,209,3,3 border/purple/top - rotate: false - xy: 2, 17 - size: 52, 3 - orig: 52, 3 - offset: 0, 0 - index: -1 +bounds:2,17,52,3 border/purple/tr - rotate: false - xy: 197, 137 - size: 3, 3 - orig: 3, 3 - offset: 0, 0 - index: -1 +bounds:329,340,3,3 border/red/bl - rotate: false - xy: 390, 379 - size: 3, 3 - orig: 3, 3 - offset: 0, 0 - index: -1 +bounds:390,379,3,3 border/red/bottom - rotate: false - xy: 129, 122 - size: 52, 3 - orig: 52, 3 - offset: 0, 0 - index: -1 +bounds:129,122,52,3 border/red/br - rotate: false - xy: 129, 109 - size: 3, 3 - orig: 3, 3 - offset: 0, 0 - index: -1 +bounds:464,454,3,3 border/red/left - rotate: false - xy: 475, 463 - size: 3, 47 - orig: 3, 47 - offset: 0, 0 - index: -1 +bounds:475,463,3,47 border/red/right - rotate: false - xy: 475, 463 - size: 3, 47 - orig: 3, 47 - offset: 0, 0 - index: -1 +bounds:475,463,3,47 border/red/tl - rotate: false - xy: 485, 499 - size: 3, 3 - orig: 3, 3 - offset: 0, 0 - index: -1 +bounds:82,43,3,3 border/red/top - rotate: false - xy: 129, 137 - size: 52, 3 - orig: 52, 3 - offset: 0, 0 - index: -1 +bounds:129,137,52,3 border/red/tr - rotate: false - xy: 288, 144 - size: 3, 3 - orig: 3, 3 - offset: 0, 0 - index: -1 +bounds:288,144,3,3 border/shadow/bl - rotate: false - xy: 56, 2 - size: 12, 12 - orig: 12, 12 - offset: 0, 0 - index: -1 +bounds:183,128,12,12 border/shadow/bottom - rotate: false - xy: 121, 171 - size: 217, 12 - orig: 217, 12 - offset: 0, 0 - index: -1 +bounds:121,171,217,12 border/shadow/br - rotate: false - xy: 329, 345 - size: 12, 12 - orig: 12, 12 - offset: 0, 0 - index: -1 +bounds:129,108,12,12 border/shadow/left - rotate: false - xy: 456, 459 - size: 12, 51 - orig: 12, 51 - offset: 0, 0 - index: -1 +bounds:456,459,12,51 border/shadow/right - rotate: false - xy: 260, 268 - size: 12, 51 - orig: 12, 51 - offset: 0, 0 - index: -1 +bounds:260,268,12,51 border/shadow/tl - rotate: false - xy: 82, 60 - size: 12, 12 - orig: 12, 12 - offset: 0, 0 - index: -1 +bounds:56,16,12,12 border/shadow/top - rotate: false - xy: 121, 157 - size: 217, 12 - orig: 217, 12 - offset: 0, 0 - index: -1 +bounds:121,157,217,12 border/shadow/tr - rotate: false - xy: 183, 128 - size: 12, 12 - orig: 12, 12 - offset: 0, 0 - index: -1 +bounds:329,345,12,12 border/yellow/bl - rotate: false - xy: 137, 117 - size: 3, 3 - orig: 3, 3 - offset: 0, 0 - index: -1 +bounds:284,308,3,3 border/yellow/bottom - rotate: false - xy: 129, 127 - size: 52, 3 - orig: 52, 3 - offset: 0, 0 - index: -1 +bounds:129,127,52,3 border/yellow/br - rotate: false - xy: 343, 354 - size: 3, 3 - orig: 3, 3 - offset: 0, 0 - index: -1 +bounds:129,103,3,3 border/yellow/left - rotate: false - xy: 279, 272 - size: 3, 47 - orig: 3, 47 - offset: 0, 0 - index: -1 +bounds:279,272,3,47 border/yellow/right - rotate: false - xy: 279, 272 - size: 3, 47 - orig: 3, 47 - offset: 0, 0 - index: -1 +bounds:279,272,3,47 border/yellow/tl - rotate: false - xy: 296, 152 - size: 3, 3 - orig: 3, 3 - offset: 0, 0 - index: -1 +bounds:296,152,3,3 border/yellow/top - rotate: false - xy: 2, 12 - size: 52, 3 - orig: 52, 3 - offset: 0, 0 - index: -1 +bounds:2,12,52,3 border/yellow/tr - rotate: false - xy: 183, 123 - size: 3, 3 - orig: 3, 3 - offset: 0, 0 - index: -1 +bounds:343,354,3,3 broken - rotate: false - xy: 260, 382 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 +bounds:260,382,128,128 darkGreyLabelbox - rotate: false - xy: 121, 231 - size: 129, 21 - split: 10, 10, 10, 10 - pad: 10, 10, 10, 10 - orig: 129, 21 - offset: 0, 0 - index: -1 +bounds:121,231,129,21 +split:10,10,10,10 +pad:10,10,10,10 grayLabelbox - rotate: false - xy: 121, 208 - size: 129, 21 - split: 10, 10, 10, 10 - pad: 10, 10, 10, 10 - orig: 129, 21 - offset: 0, 0 - index: -1 +bounds:121,208,129,21 +split:10,10,10,10 +pad:10,10,10,10 hexBorder - rotate: false - xy: 390, 392 - size: 60, 52 - orig: 60, 52 - offset: 0, 0 - index: -1 +bounds:390,392,60,52 isoBorder - rotate: false - xy: 2, 30 - size: 78, 42 - orig: 78, 42 - offset: 0, 0 - index: -1 +bounds:2,30,78,42 +lightbulb +bounds:82,56,16,16 redDot - rotate: false - xy: 390, 446 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 +bounds:390,446,64,64 stack - rotate: false - xy: 56, 16 - size: 12, 12 - orig: 12, 12 - offset: 0, 0 - index: -1 +bounds:56,2,12,12 unknown - rotate: false - xy: 2, 74 - size: 102, 178 - orig: 102, 178 - offset: 0, 0 - index: -1 +bounds:2,74,102,178 whiteBorder - rotate: false - xy: 260, 321 - size: 59, 59 - orig: 59, 59 - offset: 0, 0 - index: -1 +bounds:260,321,59,59 diff --git a/src/main/resources/net/rptools/maptool/client/maptool.png b/src/main/resources/net/rptools/maptool/client/maptool.png index c06d080a6fd5fb98b57194115b196c4c3d7ef4ce..816edf917a2f38a2d353b5d8f55565add76a41cb 100644 GIT binary patch literal 112953 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 ZGI@JR<<>kglWqX`y8^n4e>8MW_&?Yeti=ET literal 111717 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 Date: Thu, 12 Oct 2023 00:01:56 +0200 Subject: [PATCH 106/139] add new triangulator. --- src/main/java/net/rptools/lib/gdx/Earcut.java | 717 ++++++++++++++++++ .../client/ui/zone/gdx/AreaRenderer.java | 54 +- .../client/ui/zone/gdx/GdxRenderer.java | 3 +- 3 files changed, 758 insertions(+), 16 deletions(-) create mode 100644 src/main/java/net/rptools/lib/gdx/Earcut.java diff --git a/src/main/java/net/rptools/lib/gdx/Earcut.java b/src/main/java/net/rptools/lib/gdx/Earcut.java new file mode 100644 index 0000000000..5dd7789e18 --- /dev/null +++ b/src/main/java/net/rptools/lib/gdx/Earcut.java @@ -0,0 +1,717 @@ +package net.rptools.lib.gdx; + +import com.badlogic.gdx.utils.ShortArray; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + +/** + * Adapted from https://github.com/earcut4j/earcut4j and modified to use float and short instead of int and float + */ +public final class Earcut { + + private Earcut() { + }; + + /** + * Triangulates the given polygon + * + * @param data is a flat array of vertice coordinates like [x0,y0, x1,y1, x2,y2, ...]. + * @return List containing groups of three vertice indices in the resulting array forms a triangle. + */ + public static ShortArray earcut(float[] data) { + return earcut(data, (short[]) null, (short) 2); + } + + /** + * Triangulates the given polygon + * + * @param data is a flat array of vertice coordinates like [x0,y0, x1,y1, x2,y2, ...]. + * @param holeIndices is an array of hole indices if any (e.g. [5, 8] for a 12-vertice input would mean one hole with vertices 5-7 and another with 8-11). + * @param dim is the number of coordinates per vertice in the input array + * @return List containing groups of three vertice indices in the resulting array forms a triangle. + */ + public static ShortArray earcut(float[] data, short[] holeIndices, short dim) { + + boolean hasHoles = holeIndices != null && holeIndices.length > 0; + short outerLen = (short) (hasHoles ? holeIndices[0] * dim : data.length); + + Node outerNode = linkedList(data, (short) 0, outerLen, dim, true); + + ShortArray triangles = new ShortArray(); + + if (outerNode == null || outerNode.next == outerNode.prev) + return triangles; + + float minX = 0; + float minY = 0; + float maxX = 0; + float maxY = 0; + float invSize = Float.MIN_VALUE; + + if (hasHoles) + outerNode = eliminateHoles(data, holeIndices, outerNode, dim); + + // if the shape is not too simple, we'll use z-order curve hash later; + // calculate polygon bbox + if (data.length > 80 * dim) { + minX = maxX = data[0]; + minY = maxY = data[1]; + + for (int i = dim; i < outerLen; i += dim) { + float x = data[i]; + float y = data[i + 1]; + if (x < minX) + minX = x; + if (y < minY) + minY = y; + if (x > maxX) + maxX = x; + if (y > maxY) + maxY = y; + } + + // minX, minY and size are later used to transform coords into + // Shorts for z-order calculation + invSize = Math.max(maxX - minX, maxY - minY); + invSize = invSize != 0.0f ? 1.0f / invSize : 0.0f; + } + + earcutLinked(outerNode, triangles, dim, minX, minY, invSize, Short.MIN_VALUE); + + return triangles; + } + + private static void earcutLinked(Node ear, ShortArray triangles, int dim, float minX, float minY, float invSize, int pass) { + if (ear == null) + return; + + // interlink polygon nodes in z-order + if (pass == Short.MIN_VALUE && invSize != Float.MIN_VALUE) + indexCurve(ear, minX, minY, invSize); + + Node stop = ear; + + // iterate through ears, slicing them one by one + while (ear.prev != ear.next) { + Node prev = ear.prev; + Node next = ear.next; + + if (invSize != Float.MIN_VALUE ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) { + // cut off the triangle + triangles.add((short) (prev.i / dim)); + triangles.add((short) (ear.i / dim)); + triangles.add((short) (next.i / dim)); + + removeNode(ear); + + // skipping the next vertice leads to less sliver triangles + ear = next.next; + stop = next.next; + + continue; + } + + ear = next; + + // if we looped through the whole remaining polygon and can't find + // any more ears + if (ear == stop) { + // try filtering points and slicing again + if (pass == Short.MIN_VALUE) { + earcutLinked(filterPoints(ear, null), triangles, dim, minX, minY, invSize, 1); + + // if this didn't work, try curing all small + // self-intersections locally + } else if (pass == 1) { + ear = cureLocalIntersections(filterPoints(ear, null), triangles, dim); + earcutLinked(ear, triangles, dim, minX, minY, invSize, 2); + + // as a last resort, try splitting the remaining polygon + // into two + } else if (pass == 2) { + splitEarcut(ear, triangles, dim, minX, minY, invSize); + } + + break; + } + } + } + + private static void splitEarcut(Node start, ShortArray triangles, int dim, float minX, float minY, float size) { + // look for a valid diagonal that divides the polygon into two + Node a = start; + do { + Node b = a.next.next; + while (b != a.prev) { + if (a.i != b.i && isValidDiagonal(a, b)) { + // split the polygon in two by the diagonal + Node c = splitPolygon(a, b); + + // filter colinear points around the cuts + a = filterPoints(a, a.next); + c = filterPoints(c, c.next); + + // run earcut on each half + earcutLinked(a, triangles, dim, minX, minY, size, Short.MIN_VALUE); + earcutLinked(c, triangles, dim, minX, minY, size, Short.MIN_VALUE); + return; + } + b = b.next; + } + a = a.next; + } while (a != start); + } + + private static boolean isValidDiagonal(Node a, Node b) { + //return a.next.i != b.i && a.prev.i != b.i && !intersectsPolygon(a, b) && locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b); + + return a.next.i != b.i && a.prev.i != b.i && !intersectsPolygon(a, b) && // dones't intersect other edges + (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible + (area(a.prev, a, b.prev) != 0 || area(a, b.prev, b) != 0) || // does not create opposite-facing sectors + equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case + } + + private static boolean middleInside(Node a, Node b) { + Node p = a; + boolean inside = false; + float px = (a.x + b.x) / 2; + float py = (a.y + b.y) / 2; + do { + if (((p.y > py) != (p.next.y > py)) && (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x)) + inside = !inside; + p = p.next; + } while (p != a); + + return inside; + } + + private static boolean intersectsPolygon(Node a, Node b) { + Node p = a; + do { + if (p.i != a.i && p.next.i != a.i && p.i != b.i && p.next.i != b.i && intersects(p, p.next, a, b)) + return true; + p = p.next; + } while (p != a); + + return false; + } + + private static boolean intersects(Node p1, Node q1, Node p2, Node q2) { + if ((equals(p1, p2) && equals(q1, q2)) || (equals(p1, q2) && equals(p2, q1))) + return true; + float o1 = sign(area(p1, q1, p2)); + float o2 = sign(area(p1, q1, q2)); + float o3 = sign(area(p2, q2, p1)); + float o4 = sign(area(p2, q2, q1)); + + if (o1 != o2 && o3 != o4) + return true; // general case + + if (o1 == 0 && onSegment(p1, p2, q1)) + return true; // p1, q1 and p2 are collinear and p2 lies on p1q1 + if (o2 == 0 && onSegment(p1, q2, q1)) + return true; // p1, q1 and q2 are collinear and q2 lies on p1q1 + if (o3 == 0 && onSegment(p2, p1, q2)) + return true; // p2, q2 and p1 are collinear and p1 lies on p2q2 + if (o4 == 0 && onSegment(p2, q1, q2)) + return true; // p2, q2 and q1 are collinear and q1 lies on p2q2 + + return false; + } + + // for collinear points p, q, r, check if point q lies on segment pr + private static boolean onSegment(Node p, Node q, Node r) { + return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y); + } + + private static float sign(float num) { + return num > 0 ? 1 : num < 0 ? -1 : 0; + } + + private static Node cureLocalIntersections(Node start, ShortArray triangles, int dim) { + Node p = start; + do { + Node a = p.prev, b = p.next.next; + + if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) { + + triangles.add((short) (a.i / dim)); + triangles.add((short) (p.i / dim)); + triangles.add((short) (b.i / dim)); + + // remove two nodes involved + removeNode(p); + removeNode(p.next); + + p = start = b; + } + p = p.next; + } while (p != start); + + return filterPoints(p, null); + } + + private static boolean isEar(Node ear) { + Node a = ear.prev, b = ear, c = ear.next; + + if (area(a, b, c) >= 0) + return false; // reflex, can't be an ear + + // now make sure we don't have other points inside the potential ear + Node p = ear.next.next; + + while (p != ear.prev) { + if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) + return false; + p = p.next; + } + + return true; + } + + private static boolean isEarHashed(Node ear, float minX, float minY, float invSize) { + Node a = ear.prev; + Node b = ear; + Node c = ear.next; + + if (area(a, b, c) >= 0) + return false; // reflex, can't be an ear + + // triangle bbox; min & max are calculated like this for speed + float minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x), minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y), + maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x), maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y); + + // z-order range for the current triangle bbox; + float minZ = zOrder(minTX, minTY, minX, minY, invSize); + float maxZ = zOrder(maxTX, maxTY, minX, minY, invSize); + + // first look for points inside the triangle in increasing z-order + Node p = ear.prevZ; + Node n = ear.nextZ; + + while (p != null && p.z >= minZ && n != null && n.z <= maxZ) { + if (p != ear.prev && p != ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) + return false; + p = p.prevZ; + + if (n != ear.prev && n != ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) && area(n.prev, n, n.next) >= 0) + return false; + n = n.nextZ; + } + + // look for remaining points in decreasing z-order + while (p != null && p.z >= minZ) { + if (p != ear.prev && p != ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) + return false; + p = p.prevZ; + } + + // look for remaining points in increasing z-order + while (n != null && n.z <= maxZ) { + if (n != ear.prev && n != ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) && area(n.prev, n, n.next) >= 0) + return false; + n = n.nextZ; + } + + return true; + } + + // z-order of a point given coords and inverse of the longer side of data bbox + private static float zOrder(float x, float y, float minX, float minY, float invSize) { + // coords are transformed into non-negative 15-bit Short range + int lx = Float.valueOf(32767 * (x - minX) * invSize).intValue(); + int ly = Float.valueOf(32767 * (y - minY) * invSize).intValue(); + + lx = (lx | (lx << 8)) & 0x00FF00FF; + lx = (lx | (lx << 4)) & 0x0F0F0F0F; + lx = (lx | (lx << 2)) & 0x33333333; + lx = (lx | (lx << 1)) & 0x55555555; + + ly = (ly | (ly << 8)) & 0x00FF00FF; + ly = (ly | (ly << 4)) & 0x0F0F0F0F; + ly = (ly | (ly << 2)) & 0x33333333; + ly = (ly | (ly << 1)) & 0x55555555; + + return lx | (ly << 1); + } + + private static void indexCurve(Node start, float minX, float minY, float invSize) { + Node p = start; + do { + if (p.z == Float.MIN_VALUE) + p.z = zOrder(p.x, p.y, minX, minY, invSize); + p.prevZ = p.prev; + p.nextZ = p.next; + p = p.next; + } while (p != start); + + p.prevZ.nextZ = null; + p.prevZ = null; + + sortLinked(p); + } + + private static Node sortLinked(Node list) { + int inSize = 1; + + + int numMerges; + do { + Node p = list; + list = null; + Node tail = null; + numMerges = 0; + + while (p != null) { + numMerges++; + Node q = p; + int pSize = 0; + for (int i = 0; i < inSize; i++) { + pSize++; + q = q.nextZ; + if (q == null) + break; + } + + int qSize = inSize; + + while (pSize > 0 || (qSize > 0 && q != null)) { + Node e; + if (pSize == 0) { + e = q; + q = q.nextZ; + qSize--; + } else if (qSize == 0 || q == null) { + e = p; + p = p.nextZ; + pSize--; + } else if (p.z <= q.z) { + e = p; + p = p.nextZ; + pSize--; + } else { + e = q; + q = q.nextZ; + qSize--; + } + + if (tail != null) + tail.nextZ = e; + else + list = e; + + e.prevZ = tail; + tail = e; + } + + p = q; + } + + tail.nextZ = null; + inSize *= 2; + + } while (numMerges > 1); + + return list; + } + + private static Node eliminateHoles(float[] data, short[] holeIndices, Node outerNode, short dim) { + List queue = new ArrayList<>(); + + int len = holeIndices.length; + for (int i = 0; i < len; i++) { + short start = (short) (holeIndices[i] * dim); + short end = (short) (i < len - 1 ? holeIndices[i + 1] * dim : data.length); + Node list = linkedList(data, start, end, dim, false); + if (list == list.next) + list.steiner = true; + queue.add(getLeftmost(list)); + } + + queue.sort(new Comparator() { + + @Override + public int compare(Node o1, Node o2) { + if (o1.x - o2.x > 0) + return 1; + else if (o1.x - o2.x < 0) + return -2; + return 0; + } + }); + + for (Node node : queue) { + eliminateHole(node, outerNode); + outerNode = filterPoints(outerNode, outerNode.next); + } + + return outerNode; + } + + private static Node filterPoints(Node start, Node end) { + if (start == null) + return start; + if (end == null) + end = start; + + Node p = start; + boolean again; + + do { + again = false; + + if (!p.steiner && equals(p, p.next) || area(p.prev, p, p.next) == 0) { + removeNode(p); + p = end = p.prev; + if (p == p.next) + break; + again = true; + } else { + p = p.next; + } + } while (again || p != end); + + return end; + } + + private static boolean equals(Node p1, Node p2) { + return p1.x == p2.x && p1.y == p2.y; + } + + private static float area(Node p, Node q, Node r) { + return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y); + } + + private static void eliminateHole(Node hole, Node outerNode) { + outerNode = findHoleBridge(hole, outerNode); + if (outerNode != null) { + Node b = splitPolygon(outerNode, hole); + + // filter collinear points around the cuts + filterPoints(outerNode, outerNode.next); + filterPoints(b, b.next); + } + } + + private static Node splitPolygon(Node a, Node b) { + Node a2 = new Node(a.i, a.x, a.y); + Node b2 = new Node(b.i, b.x, b.y); + Node an = a.next; + Node bp = b.prev; + + a.next = b; + b.prev = a; + + a2.next = an; + an.prev = a2; + + b2.next = a2; + a2.prev = b2; + + bp.next = b2; + b2.prev = bp; + + return b2; + } + + // David Eberly's algorithm for finding a bridge between hole and outer + // polygon + private static Node findHoleBridge(Node hole, Node outerNode) { + Node p = outerNode; + float hx = hole.x; + float hy = hole.y; + float qx = -Float.MAX_VALUE; + Node m = null; + + // find a segment intersected by a ray from the hole's leftmost point to + // the left; + // segment's endpoint with lesser x will be potential connection point + do { + if (hy <= p.y && hy >= p.next.y) { + float x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y); + if (x <= hx && x > qx) { + qx = x; + if (x == hx) { + if (hy == p.y) + return p; + if (hy == p.next.y) + return p.next; + } + m = p.x < p.next.x ? p : p.next; + } + } + p = p.next; + } while (p != outerNode); + + if (m == null) + return null; + + if (hx == qx) + return m; // hole touches outer segment; pick leftmost endpoint + + // look for points inside the triangle of hole point, segment + // intersection and endpoint; + // if there are no points found, we have a valid connection; + // otherwise choose the point of the minimum angle with the ray as + // connection point + + Node stop = m; + float mx = m.x; + float my = m.y; + float tanMin = Float.MAX_VALUE; + float tan; + + p = m; + + do { + if (hx >= p.x && p.x >= mx && pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) { + + tan = Math.abs(hy - p.y) / (hx - p.x); // tangential + + if (locallyInside(p, hole) && (tan < tanMin || (tan == tanMin && (p.x > m.x || (p.x == m.x && sectorContainsSector(m, p)))))) { + m = p; + tanMin = tan; + } + } + + p = p.next; + } while (p != stop); + + return m; + } + + private static boolean locallyInside(Node a, Node b) { + return area(a.prev, a, a.next) < 0 ? area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 : area(a, b, a.prev) < 0 || area(a, a.next, b) < 0; + } + + // whether sector in vertex m contains sector in vertex p in the same + // coordinates + private static boolean sectorContainsSector(Node m, Node p) { + return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0; + } + + private static boolean pointInTriangle(float ax, float ay, float bx, float by, float cx, float cy, float px, float py) { + return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 && (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 + && (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0; + } + + private static Node getLeftmost(Node start) { + Node p = start; + Node leftmost = start; + do { + if (p.x < leftmost.x || (p.x == leftmost.x && p.y < leftmost.y)) + leftmost = p; + p = p.next; + } while (p != start); + return leftmost; + } + + private static Node linkedList(float[] data, short start, short end, short dim, boolean clockwise) { + Node last = null; + if (clockwise == (signedArea(data, start, end, dim) > 0)) { + for (short i = start; i < end; i += dim) { + last = insertNode(i, data[i], data[i + 1], last); + } + } else { + for (short i = (short)(end - dim); i >= start; i -= dim) { + last = insertNode(i, data[i], data[i + 1], last); + } + } + + if (last != null && equals(last, last.next)) { + removeNode(last); + last = last.next; + } + return last; + } + + private static void removeNode(Node p) { + p.next.prev = p.prev; + p.prev.next = p.next; + + if (p.prevZ != null) { + p.prevZ.nextZ = p.nextZ; + } + if (p.nextZ != null) { + p.nextZ.prevZ = p.prevZ; + } + } + + private static Node insertNode(short i, float x, float y, Node last) { + Node p = new Node(i, x, y); + + if (last == null) { + p.prev = p; + p.next = p; + } else { + p.next = last.next; + p.prev = last; + last.next.prev = p; + last.next = p; + } + return p; + } + + private static float signedArea(float[] data, int start, int end, int dim) { + float sum = 0; + int j = end - dim; + for (int i = start; i < end; i += dim) { + sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]); + j = i; + } + return sum; + } + + private static class Node { + + short i; + float x; + float y; + float z; + boolean steiner; + + Node prev; + Node next; + Node prevZ; + Node nextZ; + + Node(short i, float x, float y) { + // vertice index in coordinates array + this.i = i; + + // vertex coordinates + this.x = x; + this.y = y; + + // previous and next vertice nodes in a polygon ring + this.prev = null; + this.next = null; + + // z-order curve value + this.z = Float.MIN_VALUE; + + // previous and next nodes in z-order + this.prevZ = null; + this.nextZ = null; + + // indicates whether this is a steiner point + this.steiner = false; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("{i: ").append(i).append(", x: ").append(x).append(", y: ").append(y).append(", prev: ").append(toString(prev)).append(", next: ").append(toString(next)).append("}"); + return sb.toString(); + } + + public String toString(Node node){ + if(node == null){ + return "null"; + } + return "{i: " + node.i + ", x: " + node.x + ", y: " + node.y + "}"; + } + } +} \ No newline at end of file diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java index 3e0dcdffdf..14dae7067f 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java @@ -19,14 +19,20 @@ import com.badlogic.gdx.math.Bezier; import com.badlogic.gdx.math.EarClippingTriangulator; import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Polygon; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.FloatArray; import com.badlogic.gdx.utils.IntArray; + import java.awt.geom.Area; import java.awt.geom.PathIterator; import java.util.ArrayList; import java.util.List; + +import net.rptools.lib.gdx.Earcut; import net.rptools.lib.gdx.Joiner; +import org.locationtech.jts.awt.ShapeReader; +import org.locationtech.jts.geom.GeometryFactory; import space.earlygrey.shapedrawer.DefaultSideEstimator; import space.earlygrey.shapedrawer.ShapeDrawer; import space.earlygrey.shapedrawer.ShapeUtils; @@ -34,9 +40,7 @@ public class AreaRenderer { - public AreaRenderer( - EarClippingTriangulator triangulator, TextureRegion whitePixelRegion, ShapeDrawer drawer) { - this.triangulator = triangulator; + public AreaRenderer(TextureRegion whitePixelRegion, ShapeDrawer drawer) { this.whitePixel = whitePixelRegion; this.drawer = drawer; } @@ -55,8 +59,6 @@ public void setColor(Color value) { textureRegion = whitePixel; } - public EarClippingTriangulator triangulator; - private float[] floatsFromArea = new float[6]; private Vector2 tmpVector = new Vector2(); private Vector2 tmpVector0 = new Vector2(); @@ -79,13 +81,36 @@ public void fillArea(PolygonSpriteBatch batch, Area area) { if (area == null || area.isEmpty()) return; pathToFloatArray(area.getPathIterator(null)); - while (tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) - && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { - // make sure we don't have last and first point the same - tmpFloat.pop(); - tmpFloat.pop(); + + if (segmentIndicies.size == 1) { + while (tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) + && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { + // make sure we don't have last and first point the same + tmpFloat.pop(); + tmpFloat.pop(); + } + paintVertices(batch, tmpFloat.toArray()); + } else { + var lastSegmentIndex = 0; + var color = this.color; + for (int i = 0; i < segmentIndicies.size; i++) { + var floats = tmpFloat.toArray(); + var idx = segmentIndicies.get(i); + var vertexCount = idx - lastSegmentIndex; + var vertices = new FloatArray(true, floats, 2 * lastSegmentIndex, 2 * vertexCount); + while (vertices.get(0) == vertices.get(vertices.size - 2) + && vertices.get(1) == vertices.get(vertices.size - 1)) { + // make sure we don't have last and first point the same + vertices.pop(); + vertices.pop(); + } + paintVertices(batch, vertices.toArray()); + this.color = color; + + lastSegmentIndex = idx + 1; + } + this.color = null; } - paintVertices(batch, tmpFloat.toArray()); } private boolean debug = false; @@ -151,13 +176,14 @@ private void drawDebug(float[] vertices, short[] indicies) { } protected void paintVertices(PolygonSpriteBatch batch, float[] vertices) { - var indicies = triangulator.computeTriangles(vertices).toArray(); - var polyreg = new PolygonRegion(textureRegion, vertices, indicies); + + var indices = Earcut.earcut(vertices).toArray(); + var polyreg = new PolygonRegion(textureRegion, vertices, indices); var poly = new PolygonSprite(polyreg); if (color != null) { poly.setColor(color); } - if (debug) drawDebug(vertices, indicies); + if (debug) drawDebug(vertices, indices); else poly.draw(batch); color = null; } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index a09693b0b8..a90062564c 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -179,7 +179,6 @@ public class GdxRenderer extends ApplicationAdapter implements AssetAvailableLis private final Area tmpArea = new Area(); private final TiledDrawable tmpTile = new TiledDrawable(); - private final EarClippingTriangulator triangulator = new EarClippingTriangulator(); private World world; private Box2DDebugRenderer debugRenderer; private RayHandler rayHandler; @@ -267,7 +266,7 @@ public void create() { TextureRegion region = new TextureRegion(onePixel, 0, 0, 1, 1); drawer = new ShapeDrawer(batch, region); - areaRenderer = new AreaRenderer(triangulator, region, drawer); + areaRenderer = new AreaRenderer(region, drawer); lineTemplateDrawer = new LineTemplateDrawer(areaRenderer); lineCellTemplateDrawer = new LineCellTemplateDrawer(areaRenderer); radiusTemplateDrawer = new RadiusTemplateDrawer(areaRenderer); From 90b88c9d82b128e75a894a7c1a387587a4e03549 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 12 Oct 2023 22:34:15 +0200 Subject: [PATCH 107/139] AreaRenderer works now for complex Areas --- src/main/java/net/rptools/lib/gdx/Earcut.java | 1396 +++++++++-------- .../ui/zone/gdx/AbstractDrawingDrawer.java | 2 +- .../ui/zone/gdx/AbstractTemplateDrawer.java | 2 +- .../client/ui/zone/gdx/AreaRenderer.java | 71 +- .../ui/zone/gdx/RadiusCellTemplateDrawer.java | 2 +- 5 files changed, 770 insertions(+), 703 deletions(-) diff --git a/src/main/java/net/rptools/lib/gdx/Earcut.java b/src/main/java/net/rptools/lib/gdx/Earcut.java index 5dd7789e18..c1aff2d306 100644 --- a/src/main/java/net/rptools/lib/gdx/Earcut.java +++ b/src/main/java/net/rptools/lib/gdx/Earcut.java @@ -1,717 +1,757 @@ +/* + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. + * + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . + */ package net.rptools.lib.gdx; import com.badlogic.gdx.utils.ShortArray; - import java.util.ArrayList; import java.util.Comparator; import java.util.List; /** - * Adapted from https://github.com/earcut4j/earcut4j and modified to use float and short instead of int and float + * Adapted from https://github.com/earcut4j/earcut4j and modified to use float and short instead of + * int and float */ public final class Earcut { - private Earcut() { - }; - - /** - * Triangulates the given polygon - * - * @param data is a flat array of vertice coordinates like [x0,y0, x1,y1, x2,y2, ...]. - * @return List containing groups of three vertice indices in the resulting array forms a triangle. - */ - public static ShortArray earcut(float[] data) { - return earcut(data, (short[]) null, (short) 2); - } - - /** - * Triangulates the given polygon - * - * @param data is a flat array of vertice coordinates like [x0,y0, x1,y1, x2,y2, ...]. - * @param holeIndices is an array of hole indices if any (e.g. [5, 8] for a 12-vertice input would mean one hole with vertices 5-7 and another with 8-11). - * @param dim is the number of coordinates per vertice in the input array - * @return List containing groups of three vertice indices in the resulting array forms a triangle. - */ - public static ShortArray earcut(float[] data, short[] holeIndices, short dim) { - - boolean hasHoles = holeIndices != null && holeIndices.length > 0; - short outerLen = (short) (hasHoles ? holeIndices[0] * dim : data.length); - - Node outerNode = linkedList(data, (short) 0, outerLen, dim, true); - - ShortArray triangles = new ShortArray(); - - if (outerNode == null || outerNode.next == outerNode.prev) - return triangles; - - float minX = 0; - float minY = 0; - float maxX = 0; - float maxY = 0; - float invSize = Float.MIN_VALUE; - - if (hasHoles) - outerNode = eliminateHoles(data, holeIndices, outerNode, dim); - - // if the shape is not too simple, we'll use z-order curve hash later; - // calculate polygon bbox - if (data.length > 80 * dim) { - minX = maxX = data[0]; - minY = maxY = data[1]; - - for (int i = dim; i < outerLen; i += dim) { - float x = data[i]; - float y = data[i + 1]; - if (x < minX) - minX = x; - if (y < minY) - minY = y; - if (x > maxX) - maxX = x; - if (y > maxY) - maxY = y; - } - - // minX, minY and size are later used to transform coords into - // Shorts for z-order calculation - invSize = Math.max(maxX - minX, maxY - minY); - invSize = invSize != 0.0f ? 1.0f / invSize : 0.0f; + private Earcut() {} + ; + + /** + * Triangulates the given polygon + * + * @param data is a flat array of vertice coordinates like [x0,y0, x1,y1, x2,y2, ...]. + * @return List containing groups of three vertice indices in the resulting array forms a + * triangle. + */ + public static ShortArray earcut(float[] data) { + return earcut(data, (short[]) null, (short) 2); + } + + /** + * Triangulates the given polygon + * + * @param data is a flat array of vertice coordinates like [x0,y0, x1,y1, x2,y2, ...]. + * @param holeIndices is an array of hole indices if any (e.g. [5, 8] for a 12-vertice input would + * mean one hole with vertices 5-7 and another with 8-11). + * @param dim is the number of coordinates per vertice in the input array + * @return List containing groups of three vertice indices in the resulting array forms a + * triangle. + */ + public static ShortArray earcut(float[] data, short[] holeIndices, short dim) { + + boolean hasHoles = holeIndices != null && holeIndices.length > 0; + short outerLen = (short) (hasHoles ? holeIndices[0] * dim : data.length); + + Node outerNode = linkedList(data, (short) 0, outerLen, dim, true); + + ShortArray triangles = new ShortArray(); + + if (outerNode == null || outerNode.next == outerNode.prev) return triangles; + + float minX = 0; + float minY = 0; + float maxX = 0; + float maxY = 0; + float invSize = Float.MIN_VALUE; + + if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim); + + // if the shape is not too simple, we'll use z-order curve hash later; + // calculate polygon bbox + if (data.length > 80 * dim) { + minX = maxX = data[0]; + minY = maxY = data[1]; + + for (int i = dim; i < outerLen; i += dim) { + float x = data[i]; + float y = data[i + 1]; + if (x < minX) minX = x; + if (y < minY) minY = y; + if (x > maxX) maxX = x; + if (y > maxY) maxY = y; + } + + // minX, minY and size are later used to transform coords into + // Shorts for z-order calculation + invSize = Math.max(maxX - minX, maxY - minY); + invSize = invSize != 0.0f ? 1.0f / invSize : 0.0f; + } + + earcutLinked(outerNode, triangles, dim, minX, minY, invSize, Short.MIN_VALUE); + + return triangles; + } + + private static void earcutLinked( + Node ear, ShortArray triangles, int dim, float minX, float minY, float invSize, int pass) { + if (ear == null) return; + + // interlink polygon nodes in z-order + if (pass == Short.MIN_VALUE && invSize != Float.MIN_VALUE) indexCurve(ear, minX, minY, invSize); + + Node stop = ear; + + // iterate through ears, slicing them one by one + while (ear.prev != ear.next) { + Node prev = ear.prev; + Node next = ear.next; + + if (invSize != Float.MIN_VALUE ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) { + // cut off the triangle + triangles.add((short) (prev.i / dim)); + triangles.add((short) (ear.i / dim)); + triangles.add((short) (next.i / dim)); + + removeNode(ear); + + // skipping the next vertice leads to less sliver triangles + ear = next.next; + stop = next.next; + + continue; + } + + ear = next; + + // if we looped through the whole remaining polygon and can't find + // any more ears + if (ear == stop) { + // try filtering points and slicing again + if (pass == Short.MIN_VALUE) { + earcutLinked(filterPoints(ear, null), triangles, dim, minX, minY, invSize, 1); + + // if this didn't work, try curing all small + // self-intersections locally + } else if (pass == 1) { + ear = cureLocalIntersections(filterPoints(ear, null), triangles, dim); + earcutLinked(ear, triangles, dim, minX, minY, invSize, 2); + + // as a last resort, try splitting the remaining polygon + // into two + } else if (pass == 2) { + splitEarcut(ear, triangles, dim, minX, minY, invSize); } - earcutLinked(outerNode, triangles, dim, minX, minY, invSize, Short.MIN_VALUE); - - return triangles; - } - - private static void earcutLinked(Node ear, ShortArray triangles, int dim, float minX, float minY, float invSize, int pass) { - if (ear == null) - return; - - // interlink polygon nodes in z-order - if (pass == Short.MIN_VALUE && invSize != Float.MIN_VALUE) - indexCurve(ear, minX, minY, invSize); - - Node stop = ear; - - // iterate through ears, slicing them one by one - while (ear.prev != ear.next) { - Node prev = ear.prev; - Node next = ear.next; - - if (invSize != Float.MIN_VALUE ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) { - // cut off the triangle - triangles.add((short) (prev.i / dim)); - triangles.add((short) (ear.i / dim)); - triangles.add((short) (next.i / dim)); - - removeNode(ear); - - // skipping the next vertice leads to less sliver triangles - ear = next.next; - stop = next.next; - - continue; - } - - ear = next; - - // if we looped through the whole remaining polygon and can't find - // any more ears - if (ear == stop) { - // try filtering points and slicing again - if (pass == Short.MIN_VALUE) { - earcutLinked(filterPoints(ear, null), triangles, dim, minX, minY, invSize, 1); - - // if this didn't work, try curing all small - // self-intersections locally - } else if (pass == 1) { - ear = cureLocalIntersections(filterPoints(ear, null), triangles, dim); - earcutLinked(ear, triangles, dim, minX, minY, invSize, 2); - - // as a last resort, try splitting the remaining polygon - // into two - } else if (pass == 2) { - splitEarcut(ear, triangles, dim, minX, minY, invSize); - } - - break; - } + break; + } + } + } + + private static void splitEarcut( + Node start, ShortArray triangles, int dim, float minX, float minY, float size) { + // look for a valid diagonal that divides the polygon into two + Node a = start; + do { + Node b = a.next.next; + while (b != a.prev) { + if (a.i != b.i && isValidDiagonal(a, b)) { + // split the polygon in two by the diagonal + Node c = splitPolygon(a, b); + + // filter colinear points around the cuts + a = filterPoints(a, a.next); + c = filterPoints(c, c.next); + + // run earcut on each half + earcutLinked(a, triangles, dim, minX, minY, size, Short.MIN_VALUE); + earcutLinked(c, triangles, dim, minX, minY, size, Short.MIN_VALUE); + return; } - } - - private static void splitEarcut(Node start, ShortArray triangles, int dim, float minX, float minY, float size) { - // look for a valid diagonal that divides the polygon into two - Node a = start; - do { - Node b = a.next.next; - while (b != a.prev) { - if (a.i != b.i && isValidDiagonal(a, b)) { - // split the polygon in two by the diagonal - Node c = splitPolygon(a, b); - - // filter colinear points around the cuts - a = filterPoints(a, a.next); - c = filterPoints(c, c.next); - - // run earcut on each half - earcutLinked(a, triangles, dim, minX, minY, size, Short.MIN_VALUE); - earcutLinked(c, triangles, dim, minX, minY, size, Short.MIN_VALUE); - return; - } - b = b.next; - } - a = a.next; - } while (a != start); - } - - private static boolean isValidDiagonal(Node a, Node b) { - //return a.next.i != b.i && a.prev.i != b.i && !intersectsPolygon(a, b) && locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b); - - return a.next.i != b.i && a.prev.i != b.i && !intersectsPolygon(a, b) && // dones't intersect other edges - (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible - (area(a.prev, a, b.prev) != 0 || area(a, b.prev, b) != 0) || // does not create opposite-facing sectors - equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case - } - - private static boolean middleInside(Node a, Node b) { - Node p = a; - boolean inside = false; - float px = (a.x + b.x) / 2; - float py = (a.y + b.y) / 2; - do { - if (((p.y > py) != (p.next.y > py)) && (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x)) - inside = !inside; - p = p.next; - } while (p != a); - - return inside; - } - - private static boolean intersectsPolygon(Node a, Node b) { - Node p = a; - do { - if (p.i != a.i && p.next.i != a.i && p.i != b.i && p.next.i != b.i && intersects(p, p.next, a, b)) - return true; - p = p.next; - } while (p != a); - - return false; - } - - private static boolean intersects(Node p1, Node q1, Node p2, Node q2) { - if ((equals(p1, p2) && equals(q1, q2)) || (equals(p1, q2) && equals(p2, q1))) - return true; - float o1 = sign(area(p1, q1, p2)); - float o2 = sign(area(p1, q1, q2)); - float o3 = sign(area(p2, q2, p1)); - float o4 = sign(area(p2, q2, q1)); - - if (o1 != o2 && o3 != o4) - return true; // general case - - if (o1 == 0 && onSegment(p1, p2, q1)) - return true; // p1, q1 and p2 are collinear and p2 lies on p1q1 - if (o2 == 0 && onSegment(p1, q2, q1)) - return true; // p1, q1 and q2 are collinear and q2 lies on p1q1 - if (o3 == 0 && onSegment(p2, p1, q2)) - return true; // p2, q2 and p1 are collinear and p1 lies on p2q2 - if (o4 == 0 && onSegment(p2, q1, q2)) - return true; // p2, q2 and q1 are collinear and q1 lies on p2q2 - + b = b.next; + } + a = a.next; + } while (a != start); + } + + private static boolean isValidDiagonal(Node a, Node b) { + // return a.next.i != b.i && a.prev.i != b.i && !intersectsPolygon(a, b) && locallyInside(a, b) + // && locallyInside(b, a) && middleInside(a, b); + + return a.next.i != b.i + && a.prev.i != b.i + && !intersectsPolygon(a, b) + && // dones't intersect other edges + (locallyInside(a, b) + && locallyInside(b, a) + && middleInside(a, b) + && // locally visible + (area(a.prev, a, b.prev) != 0 || area(a, b.prev, b) != 0) + || // does not create opposite-facing sectors + equals(a, b) + && area(a.prev, a, a.next) > 0 + && area(b.prev, b, b.next) > 0); // special zero-length case + } + + private static boolean middleInside(Node a, Node b) { + Node p = a; + boolean inside = false; + float px = (a.x + b.x) / 2; + float py = (a.y + b.y) / 2; + do { + if (((p.y > py) != (p.next.y > py)) + && (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x)) inside = !inside; + p = p.next; + } while (p != a); + + return inside; + } + + private static boolean intersectsPolygon(Node a, Node b) { + Node p = a; + do { + if (p.i != a.i + && p.next.i != a.i + && p.i != b.i + && p.next.i != b.i + && intersects(p, p.next, a, b)) return true; + p = p.next; + } while (p != a); + + return false; + } + + private static boolean intersects(Node p1, Node q1, Node p2, Node q2) { + if ((equals(p1, p2) && equals(q1, q2)) || (equals(p1, q2) && equals(p2, q1))) return true; + float o1 = sign(area(p1, q1, p2)); + float o2 = sign(area(p1, q1, q2)); + float o3 = sign(area(p2, q2, p1)); + float o4 = sign(area(p2, q2, q1)); + + if (o1 != o2 && o3 != o4) return true; // general case + + if (o1 == 0 && onSegment(p1, p2, q1)) + return true; // p1, q1 and p2 are collinear and p2 lies on p1q1 + if (o2 == 0 && onSegment(p1, q2, q1)) + return true; // p1, q1 and q2 are collinear and q2 lies on p1q1 + if (o3 == 0 && onSegment(p2, p1, q2)) + return true; // p2, q2 and p1 are collinear and p1 lies on p2q2 + if (o4 == 0 && onSegment(p2, q1, q2)) + return true; // p2, q2 and q1 are collinear and q1 lies on p2q2 + + return false; + } + + // for collinear points p, q, r, check if point q lies on segment pr + private static boolean onSegment(Node p, Node q, Node r) { + return q.x <= Math.max(p.x, r.x) + && q.x >= Math.min(p.x, r.x) + && q.y <= Math.max(p.y, r.y) + && q.y >= Math.min(p.y, r.y); + } + + private static float sign(float num) { + return num > 0 ? 1 : num < 0 ? -1 : 0; + } + + private static Node cureLocalIntersections(Node start, ShortArray triangles, int dim) { + Node p = start; + do { + Node a = p.prev, b = p.next.next; + + if (!equals(a, b) + && intersects(a, p, p.next, b) + && locallyInside(a, b) + && locallyInside(b, a)) { + + triangles.add((short) (a.i / dim)); + triangles.add((short) (p.i / dim)); + triangles.add((short) (b.i / dim)); + + // remove two nodes involved + removeNode(p); + removeNode(p.next); + + p = start = b; + } + p = p.next; + } while (p != start); + + return filterPoints(p, null); + } + + private static boolean isEar(Node ear) { + Node a = ear.prev, b = ear, c = ear.next; + + if (area(a, b, c) >= 0) return false; // reflex, can't be an ear + + // now make sure we don't have other points inside the potential ear + Node p = ear.next.next; + + while (p != ear.prev) { + if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false; - } - - // for collinear points p, q, r, check if point q lies on segment pr - private static boolean onSegment(Node p, Node q, Node r) { - return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y); - } - - private static float sign(float num) { - return num > 0 ? 1 : num < 0 ? -1 : 0; - } - - private static Node cureLocalIntersections(Node start, ShortArray triangles, int dim) { - Node p = start; - do { - Node a = p.prev, b = p.next.next; - - if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) { - - triangles.add((short) (a.i / dim)); - triangles.add((short) (p.i / dim)); - triangles.add((short) (b.i / dim)); - - // remove two nodes involved - removeNode(p); - removeNode(p.next); - - p = start = b; - } - p = p.next; - } while (p != start); - - return filterPoints(p, null); - } - - private static boolean isEar(Node ear) { - Node a = ear.prev, b = ear, c = ear.next; - - if (area(a, b, c) >= 0) - return false; // reflex, can't be an ear - - // now make sure we don't have other points inside the potential ear - Node p = ear.next.next; - - while (p != ear.prev) { - if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) - return false; - p = p.next; - } - - return true; - } - - private static boolean isEarHashed(Node ear, float minX, float minY, float invSize) { - Node a = ear.prev; - Node b = ear; - Node c = ear.next; - - if (area(a, b, c) >= 0) - return false; // reflex, can't be an ear - - // triangle bbox; min & max are calculated like this for speed - float minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x), minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y), - maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x), maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y); - - // z-order range for the current triangle bbox; - float minZ = zOrder(minTX, minTY, minX, minY, invSize); - float maxZ = zOrder(maxTX, maxTY, minX, minY, invSize); - - // first look for points inside the triangle in increasing z-order - Node p = ear.prevZ; - Node n = ear.nextZ; - - while (p != null && p.z >= minZ && n != null && n.z <= maxZ) { - if (p != ear.prev && p != ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) - return false; - p = p.prevZ; - - if (n != ear.prev && n != ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) && area(n.prev, n, n.next) >= 0) - return false; - n = n.nextZ; - } - - // look for remaining points in decreasing z-order - while (p != null && p.z >= minZ) { - if (p != ear.prev && p != ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) - return false; - p = p.prevZ; + p = p.next; + } + + return true; + } + + private static boolean isEarHashed(Node ear, float minX, float minY, float invSize) { + Node a = ear.prev; + Node b = ear; + Node c = ear.next; + + if (area(a, b, c) >= 0) return false; // reflex, can't be an ear + + // triangle bbox; min & max are calculated like this for speed + float minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x), + minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y), + maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x), + maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y); + + // z-order range for the current triangle bbox; + float minZ = zOrder(minTX, minTY, minX, minY, invSize); + float maxZ = zOrder(maxTX, maxTY, minX, minY, invSize); + + // first look for points inside the triangle in increasing z-order + Node p = ear.prevZ; + Node n = ear.nextZ; + + while (p != null && p.z >= minZ && n != null && n.z <= maxZ) { + if (p != ear.prev + && p != ear.next + && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) + && area(p.prev, p, p.next) >= 0) return false; + p = p.prevZ; + + if (n != ear.prev + && n != ear.next + && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) + && area(n.prev, n, n.next) >= 0) return false; + n = n.nextZ; + } + + // look for remaining points in decreasing z-order + while (p != null && p.z >= minZ) { + if (p != ear.prev + && p != ear.next + && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) + && area(p.prev, p, p.next) >= 0) return false; + p = p.prevZ; + } + + // look for remaining points in increasing z-order + while (n != null && n.z <= maxZ) { + if (n != ear.prev + && n != ear.next + && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) + && area(n.prev, n, n.next) >= 0) return false; + n = n.nextZ; + } + + return true; + } + + // z-order of a point given coords and inverse of the longer side of data bbox + private static float zOrder(float x, float y, float minX, float minY, float invSize) { + // coords are transformed into non-negative 15-bit Short range + int lx = Float.valueOf(32767 * (x - minX) * invSize).intValue(); + int ly = Float.valueOf(32767 * (y - minY) * invSize).intValue(); + + lx = (lx | (lx << 8)) & 0x00FF00FF; + lx = (lx | (lx << 4)) & 0x0F0F0F0F; + lx = (lx | (lx << 2)) & 0x33333333; + lx = (lx | (lx << 1)) & 0x55555555; + + ly = (ly | (ly << 8)) & 0x00FF00FF; + ly = (ly | (ly << 4)) & 0x0F0F0F0F; + ly = (ly | (ly << 2)) & 0x33333333; + ly = (ly | (ly << 1)) & 0x55555555; + + return lx | (ly << 1); + } + + private static void indexCurve(Node start, float minX, float minY, float invSize) { + Node p = start; + do { + if (p.z == Float.MIN_VALUE) p.z = zOrder(p.x, p.y, minX, minY, invSize); + p.prevZ = p.prev; + p.nextZ = p.next; + p = p.next; + } while (p != start); + + p.prevZ.nextZ = null; + p.prevZ = null; + + sortLinked(p); + } + + private static Node sortLinked(Node list) { + int inSize = 1; + + int numMerges; + do { + Node p = list; + list = null; + Node tail = null; + numMerges = 0; + + while (p != null) { + numMerges++; + Node q = p; + int pSize = 0; + for (int i = 0; i < inSize; i++) { + pSize++; + q = q.nextZ; + if (q == null) break; } - // look for remaining points in increasing z-order - while (n != null && n.z <= maxZ) { - if (n != ear.prev && n != ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) && area(n.prev, n, n.next) >= 0) - return false; - n = n.nextZ; + int qSize = inSize; + + while (pSize > 0 || (qSize > 0 && q != null)) { + Node e; + if (pSize == 0) { + e = q; + q = q.nextZ; + qSize--; + } else if (qSize == 0 || q == null) { + e = p; + p = p.nextZ; + pSize--; + } else if (p.z <= q.z) { + e = p; + p = p.nextZ; + pSize--; + } else { + e = q; + q = q.nextZ; + qSize--; + } + + if (tail != null) tail.nextZ = e; + else list = e; + + e.prevZ = tail; + tail = e; } - return true; - } - - // z-order of a point given coords and inverse of the longer side of data bbox - private static float zOrder(float x, float y, float minX, float minY, float invSize) { - // coords are transformed into non-negative 15-bit Short range - int lx = Float.valueOf(32767 * (x - minX) * invSize).intValue(); - int ly = Float.valueOf(32767 * (y - minY) * invSize).intValue(); - - lx = (lx | (lx << 8)) & 0x00FF00FF; - lx = (lx | (lx << 4)) & 0x0F0F0F0F; - lx = (lx | (lx << 2)) & 0x33333333; - lx = (lx | (lx << 1)) & 0x55555555; + p = q; + } - ly = (ly | (ly << 8)) & 0x00FF00FF; - ly = (ly | (ly << 4)) & 0x0F0F0F0F; - ly = (ly | (ly << 2)) & 0x33333333; - ly = (ly | (ly << 1)) & 0x55555555; + tail.nextZ = null; + inSize *= 2; - return lx | (ly << 1); - } - - private static void indexCurve(Node start, float minX, float minY, float invSize) { - Node p = start; - do { - if (p.z == Float.MIN_VALUE) - p.z = zOrder(p.x, p.y, minX, minY, invSize); - p.prevZ = p.prev; - p.nextZ = p.next; - p = p.next; - } while (p != start); + } while (numMerges > 1); - p.prevZ.nextZ = null; - p.prevZ = null; + return list; + } - sortLinked(p); - } + private static Node eliminateHoles(float[] data, short[] holeIndices, Node outerNode, short dim) { + List queue = new ArrayList<>(); - private static Node sortLinked(Node list) { - int inSize = 1; - - - int numMerges; - do { - Node p = list; - list = null; - Node tail = null; - numMerges = 0; - - while (p != null) { - numMerges++; - Node q = p; - int pSize = 0; - for (int i = 0; i < inSize; i++) { - pSize++; - q = q.nextZ; - if (q == null) - break; - } - - int qSize = inSize; - - while (pSize > 0 || (qSize > 0 && q != null)) { - Node e; - if (pSize == 0) { - e = q; - q = q.nextZ; - qSize--; - } else if (qSize == 0 || q == null) { - e = p; - p = p.nextZ; - pSize--; - } else if (p.z <= q.z) { - e = p; - p = p.nextZ; - pSize--; - } else { - e = q; - q = q.nextZ; - qSize--; - } - - if (tail != null) - tail.nextZ = e; - else - list = e; - - e.prevZ = tail; - tail = e; - } - - p = q; - } - - tail.nextZ = null; - inSize *= 2; - - } while (numMerges > 1); - - return list; + int len = holeIndices.length; + for (int i = 0; i < len; i++) { + short start = (short) (holeIndices[i] * dim); + short end = (short) (i < len - 1 ? holeIndices[i + 1] * dim : data.length); + Node list = linkedList(data, start, end, dim, false); + if (list == list.next) list.steiner = true; + queue.add(getLeftmost(list)); } - private static Node eliminateHoles(float[] data, short[] holeIndices, Node outerNode, short dim) { - List queue = new ArrayList<>(); - - int len = holeIndices.length; - for (int i = 0; i < len; i++) { - short start = (short) (holeIndices[i] * dim); - short end = (short) (i < len - 1 ? holeIndices[i + 1] * dim : data.length); - Node list = linkedList(data, start, end, dim, false); - if (list == list.next) - list.steiner = true; - queue.add(getLeftmost(list)); - } + queue.sort( + new Comparator() { - queue.sort(new Comparator() { - - @Override - public int compare(Node o1, Node o2) { - if (o1.x - o2.x > 0) - return 1; - else if (o1.x - o2.x < 0) - return -2; - return 0; - } + @Override + public int compare(Node o1, Node o2) { + if (o1.x - o2.x > 0) return 1; + else if (o1.x - o2.x < 0) return -2; + return 0; + } }); - for (Node node : queue) { - eliminateHole(node, outerNode); - outerNode = filterPoints(outerNode, outerNode.next); - } - - return outerNode; - } - - private static Node filterPoints(Node start, Node end) { - if (start == null) - return start; - if (end == null) - end = start; - - Node p = start; - boolean again; - - do { - again = false; - - if (!p.steiner && equals(p, p.next) || area(p.prev, p, p.next) == 0) { - removeNode(p); - p = end = p.prev; - if (p == p.next) - break; - again = true; - } else { - p = p.next; - } - } while (again || p != end); - - return end; - } - - private static boolean equals(Node p1, Node p2) { - return p1.x == p2.x && p1.y == p2.y; - } - - private static float area(Node p, Node q, Node r) { - return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y); - } - - private static void eliminateHole(Node hole, Node outerNode) { - outerNode = findHoleBridge(hole, outerNode); - if (outerNode != null) { - Node b = splitPolygon(outerNode, hole); - - // filter collinear points around the cuts - filterPoints(outerNode, outerNode.next); - filterPoints(b, b.next); - } - } - - private static Node splitPolygon(Node a, Node b) { - Node a2 = new Node(a.i, a.x, a.y); - Node b2 = new Node(b.i, b.x, b.y); - Node an = a.next; - Node bp = b.prev; - - a.next = b; - b.prev = a; - - a2.next = an; - an.prev = a2; - - b2.next = a2; - a2.prev = b2; - - bp.next = b2; - b2.prev = bp; - - return b2; - } - - // David Eberly's algorithm for finding a bridge between hole and outer - // polygon - private static Node findHoleBridge(Node hole, Node outerNode) { - Node p = outerNode; - float hx = hole.x; - float hy = hole.y; - float qx = -Float.MAX_VALUE; - Node m = null; - - // find a segment intersected by a ray from the hole's leftmost point to - // the left; - // segment's endpoint with lesser x will be potential connection point - do { - if (hy <= p.y && hy >= p.next.y) { - float x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y); - if (x <= hx && x > qx) { - qx = x; - if (x == hx) { - if (hy == p.y) - return p; - if (hy == p.next.y) - return p.next; - } - m = p.x < p.next.x ? p : p.next; - } - } - p = p.next; - } while (p != outerNode); - - if (m == null) - return null; - - if (hx == qx) - return m; // hole touches outer segment; pick leftmost endpoint - - // look for points inside the triangle of hole point, segment - // intersection and endpoint; - // if there are no points found, we have a valid connection; - // otherwise choose the point of the minimum angle with the ray as - // connection point - - Node stop = m; - float mx = m.x; - float my = m.y; - float tanMin = Float.MAX_VALUE; - float tan; - - p = m; - - do { - if (hx >= p.x && p.x >= mx && pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) { - - tan = Math.abs(hy - p.y) / (hx - p.x); // tangential - - if (locallyInside(p, hole) && (tan < tanMin || (tan == tanMin && (p.x > m.x || (p.x == m.x && sectorContainsSector(m, p)))))) { - m = p; - tanMin = tan; - } - } - - p = p.next; - } while (p != stop); - - return m; - } - - private static boolean locallyInside(Node a, Node b) { - return area(a.prev, a, a.next) < 0 ? area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 : area(a, b, a.prev) < 0 || area(a, a.next, b) < 0; - } - - // whether sector in vertex m contains sector in vertex p in the same - // coordinates - private static boolean sectorContainsSector(Node m, Node p) { - return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0; - } - - private static boolean pointInTriangle(float ax, float ay, float bx, float by, float cx, float cy, float px, float py) { - return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 && (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 - && (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0; - } - - private static Node getLeftmost(Node start) { - Node p = start; - Node leftmost = start; - do { - if (p.x < leftmost.x || (p.x == leftmost.x && p.y < leftmost.y)) - leftmost = p; - p = p.next; - } while (p != start); - return leftmost; - } - - private static Node linkedList(float[] data, short start, short end, short dim, boolean clockwise) { - Node last = null; - if (clockwise == (signedArea(data, start, end, dim) > 0)) { - for (short i = start; i < end; i += dim) { - last = insertNode(i, data[i], data[i + 1], last); - } - } else { - for (short i = (short)(end - dim); i >= start; i -= dim) { - last = insertNode(i, data[i], data[i + 1], last); - } - } - - if (last != null && equals(last, last.next)) { - removeNode(last); - last = last.next; - } - return last; - } - - private static void removeNode(Node p) { - p.next.prev = p.prev; - p.prev.next = p.next; - - if (p.prevZ != null) { - p.prevZ.nextZ = p.nextZ; - } - if (p.nextZ != null) { - p.nextZ.prevZ = p.prevZ; - } - } - - private static Node insertNode(short i, float x, float y, Node last) { - Node p = new Node(i, x, y); - - if (last == null) { - p.prev = p; - p.next = p; - } else { - p.next = last.next; - p.prev = last; - last.next.prev = p; - last.next = p; + for (Node node : queue) { + eliminateHole(node, outerNode); + outerNode = filterPoints(outerNode, outerNode.next); + } + + return outerNode; + } + + private static Node filterPoints(Node start, Node end) { + if (start == null) return start; + if (end == null) end = start; + + Node p = start; + boolean again; + + do { + again = false; + + if (!p.steiner && equals(p, p.next) || area(p.prev, p, p.next) == 0) { + removeNode(p); + p = end = p.prev; + if (p == p.next) break; + again = true; + } else { + p = p.next; + } + } while (again || p != end); + + return end; + } + + private static boolean equals(Node p1, Node p2) { + return p1.x == p2.x && p1.y == p2.y; + } + + private static float area(Node p, Node q, Node r) { + return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y); + } + + private static void eliminateHole(Node hole, Node outerNode) { + outerNode = findHoleBridge(hole, outerNode); + if (outerNode != null) { + Node b = splitPolygon(outerNode, hole); + + // filter collinear points around the cuts + filterPoints(outerNode, outerNode.next); + filterPoints(b, b.next); + } + } + + private static Node splitPolygon(Node a, Node b) { + Node a2 = new Node(a.i, a.x, a.y); + Node b2 = new Node(b.i, b.x, b.y); + Node an = a.next; + Node bp = b.prev; + + a.next = b; + b.prev = a; + + a2.next = an; + an.prev = a2; + + b2.next = a2; + a2.prev = b2; + + bp.next = b2; + b2.prev = bp; + + return b2; + } + + // David Eberly's algorithm for finding a bridge between hole and outer + // polygon + private static Node findHoleBridge(Node hole, Node outerNode) { + Node p = outerNode; + float hx = hole.x; + float hy = hole.y; + float qx = -Float.MAX_VALUE; + Node m = null; + + // find a segment intersected by a ray from the hole's leftmost point to + // the left; + // segment's endpoint with lesser x will be potential connection point + do { + if (hy <= p.y && hy >= p.next.y) { + float x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y); + if (x <= hx && x > qx) { + qx = x; + if (x == hx) { + if (hy == p.y) return p; + if (hy == p.next.y) return p.next; + } + m = p.x < p.next.x ? p : p.next; } - return p; - } + } + p = p.next; + } while (p != outerNode); - private static float signedArea(float[] data, int start, int end, int dim) { - float sum = 0; - int j = end - dim; - for (int i = start; i < end; i += dim) { - sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]); - j = i; - } - return sum; - } + if (m == null) return null; - private static class Node { + if (hx == qx) return m; // hole touches outer segment; pick leftmost endpoint - short i; - float x; - float y; - float z; - boolean steiner; + // look for points inside the triangle of hole point, segment + // intersection and endpoint; + // if there are no points found, we have a valid connection; + // otherwise choose the point of the minimum angle with the ray as + // connection point - Node prev; - Node next; - Node prevZ; - Node nextZ; + Node stop = m; + float mx = m.x; + float my = m.y; + float tanMin = Float.MAX_VALUE; + float tan; - Node(short i, float x, float y) { - // vertice index in coordinates array - this.i = i; + p = m; - // vertex coordinates - this.x = x; - this.y = y; + do { + if (hx >= p.x + && p.x >= mx + && pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) { - // previous and next vertice nodes in a polygon ring - this.prev = null; - this.next = null; + tan = Math.abs(hy - p.y) / (hx - p.x); // tangential - // z-order curve value - this.z = Float.MIN_VALUE; - - // previous and next nodes in z-order - this.prevZ = null; - this.nextZ = null; - - // indicates whether this is a steiner point - this.steiner = false; - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("{i: ").append(i).append(", x: ").append(x).append(", y: ").append(y).append(", prev: ").append(toString(prev)).append(", next: ").append(toString(next)).append("}"); - return sb.toString(); + if (locallyInside(p, hole) + && (tan < tanMin + || (tan == tanMin && (p.x > m.x || (p.x == m.x && sectorContainsSector(m, p)))))) { + m = p; + tanMin = tan; } - - public String toString(Node node){ - if(node == null){ - return "null"; - } - return "{i: " + node.i + ", x: " + node.x + ", y: " + node.y + "}"; - } - } -} \ No newline at end of file + } + + p = p.next; + } while (p != stop); + + return m; + } + + private static boolean locallyInside(Node a, Node b) { + return area(a.prev, a, a.next) < 0 + ? area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 + : area(a, b, a.prev) < 0 || area(a, a.next, b) < 0; + } + + // whether sector in vertex m contains sector in vertex p in the same + // coordinates + private static boolean sectorContainsSector(Node m, Node p) { + return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0; + } + + private static boolean pointInTriangle( + float ax, float ay, float bx, float by, float cx, float cy, float px, float py) { + return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 + && (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 + && (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0; + } + + private static Node getLeftmost(Node start) { + Node p = start; + Node leftmost = start; + do { + if (p.x < leftmost.x || (p.x == leftmost.x && p.y < leftmost.y)) leftmost = p; + p = p.next; + } while (p != start); + return leftmost; + } + + private static Node linkedList( + float[] data, short start, short end, short dim, boolean clockwise) { + Node last = null; + if (clockwise == (signedArea(data, start, end, dim) > 0)) { + for (short i = start; i < end; i += dim) { + last = insertNode(i, data[i], data[i + 1], last); + } + } else { + for (short i = (short) (end - dim); i >= start; i -= dim) { + last = insertNode(i, data[i], data[i + 1], last); + } + } + + if (last != null && equals(last, last.next)) { + removeNode(last); + last = last.next; + } + return last; + } + + private static void removeNode(Node p) { + p.next.prev = p.prev; + p.prev.next = p.next; + + if (p.prevZ != null) { + p.prevZ.nextZ = p.nextZ; + } + if (p.nextZ != null) { + p.nextZ.prevZ = p.prevZ; + } + } + + private static Node insertNode(short i, float x, float y, Node last) { + Node p = new Node(i, x, y); + + if (last == null) { + p.prev = p; + p.next = p; + } else { + p.next = last.next; + p.prev = last; + last.next.prev = p; + last.next = p; + } + return p; + } + + private static float signedArea(float[] data, int start, int end, int dim) { + float sum = 0; + int j = end - dim; + for (int i = start; i < end; i += dim) { + sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]); + j = i; + } + return sum; + } + + private static class Node { + + short i; + float x; + float y; + float z; + boolean steiner; + + Node prev; + Node next; + Node prevZ; + Node nextZ; + + Node(short i, float x, float y) { + // vertice index in coordinates array + this.i = i; + + // vertex coordinates + this.x = x; + this.y = y; + + // previous and next vertice nodes in a polygon ring + this.prev = null; + this.next = null; + + // z-order curve value + this.z = Float.MIN_VALUE; + + // previous and next nodes in z-order + this.prevZ = null; + this.nextZ = null; + + // indicates whether this is a steiner point + this.steiner = false; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("{i: ") + .append(i) + .append(", x: ") + .append(x) + .append(", y: ") + .append(y) + .append(", prev: ") + .append(toString(prev)) + .append(", next: ") + .append(toString(next)) + .append("}"); + return sb.toString(); + } + + public String toString(Node node) { + if (node == null) { + return "null"; + } + return "{i: " + node.i + ", x: " + node.x + ", y: " + node.y + "}"; + } + } +} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java index 7f7a49d097..7575ae75c9 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java @@ -75,7 +75,7 @@ protected void line(PolygonSpriteBatch batch, Pen pen, float x1, float y1, float pen.getThickness(), pen.getSquareCap() ? AreaRenderer.JoinType.Pointy : AreaRenderer.JoinType.Round, false); - areaRenderer.paintVertices(batch, path); + areaRenderer.paintVertices(batch, path, null); } protected FloatArray pathToFloatArray(PathIterator pathIterator) { diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractTemplateDrawer.java index e3ea47c768..e89cb37a86 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractTemplateDrawer.java @@ -76,7 +76,7 @@ protected void paintArea( int y = vertex.y + getYMult(q) * yOff + ((getYMult(q) - 1) / 2) * gridSize; var floats = new float[] {x, -y - gridSize, x, -y, x + gridSize, -y, x + gridSize, -y - gridSize}; - areaRenderer.paintVertices(batch, floats); + areaRenderer.paintVertices(batch, floats, null); } protected int getXMult(AbstractTemplate.Quadrant q) { diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java index 14dae7067f..15fd1ba3b3 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java @@ -17,22 +17,17 @@ import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.*; import com.badlogic.gdx.math.Bezier; -import com.badlogic.gdx.math.EarClippingTriangulator; import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.Polygon; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.FloatArray; import com.badlogic.gdx.utils.IntArray; - import java.awt.geom.Area; import java.awt.geom.PathIterator; import java.util.ArrayList; import java.util.List; - import net.rptools.lib.gdx.Earcut; import net.rptools.lib.gdx.Joiner; -import org.locationtech.jts.awt.ShapeReader; -import org.locationtech.jts.geom.GeometryFactory; import space.earlygrey.shapedrawer.DefaultSideEstimator; import space.earlygrey.shapedrawer.ShapeDrawer; import space.earlygrey.shapedrawer.ShapeUtils; @@ -84,31 +79,63 @@ public void fillArea(PolygonSpriteBatch batch, Area area) { if (segmentIndicies.size == 1) { while (tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) - && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { + && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { // make sure we don't have last and first point the same tmpFloat.pop(); tmpFloat.pop(); } - paintVertices(batch, tmpFloat.toArray()); + paintVertices(batch, tmpFloat.toArray(), null); } else { var lastSegmentIndex = 0; var color = this.color; + var polygons = new ArrayList(); + // Polygons in a PathIterator are ordered. If polygon p contains q, q comes first. + // So we draw polygons that contains others, those others are the holes. + var floats = tmpFloat.toArray(); for (int i = 0; i < segmentIndicies.size; i++) { - var floats = tmpFloat.toArray(); var idx = segmentIndicies.get(i); var vertexCount = idx - lastSegmentIndex; - var vertices = new FloatArray(true, floats, 2 * lastSegmentIndex, 2 * vertexCount); - while (vertices.get(0) == vertices.get(vertices.size - 2) - && vertices.get(1) == vertices.get(vertices.size - 1)) { - // make sure we don't have last and first point the same - vertices.pop(); - vertices.pop(); + var vertices = new float[2 * vertexCount]; + System.arraycopy(floats, 2 * lastSegmentIndex, vertices, 0, 2 * vertexCount); + lastSegmentIndex = idx + 1; + + var poly = new Polygon(vertices); + var holes = new ArrayList(); + + for (int j = 0; j < polygons.size(); j++) { + var prevPoly = polygons.get(j); + var prevVertices = prevPoly.getVertices(); + if (poly.contains(prevVertices[0], prevVertices[1])) { + holes.add(prevPoly); + } + } + if (holes.isEmpty()) { + polygons.add(poly); + continue; } - paintVertices(batch, vertices.toArray()); + tmpFloat.clear(); + tmpFloat.addAll(poly.getVertices()); + + short[] holeIndices = new short[holes.size()]; + var lastPoly = poly; + var lastHoleIndex = 0; + for (int j = 0; j < holes.size(); j++) { + lastHoleIndex += lastPoly.getVertices().length; + holeIndices[j] = (short) (lastHoleIndex / 2); + lastPoly = holes.get(j); + polygons.remove(lastPoly); + tmpFloat.addAll(lastPoly.getVertices()); + } + + paintVertices(batch, tmpFloat.toArray(), holeIndices); this.color = color; + } - lastSegmentIndex = idx + 1; + for (var poly : polygons) { + paintVertices(batch, poly.getVertices(), null); + this.color = color; } + this.color = null; } } @@ -123,7 +150,7 @@ public void drawArea(PolygonSpriteBatch batch, Area area, boolean rounded, float var floats = tmpFloat.toArray(); if (segmentIndicies.size == 1) { vertices = path(floats, thickness, rounded ? JoinType.Round : JoinType.Pointy, false); - paintVertices(batch, vertices); + paintVertices(batch, vertices, null); } else { var lastSegmentIndex = 0; var color = this.color; @@ -134,7 +161,7 @@ public void drawArea(PolygonSpriteBatch batch, Area area, boolean rounded, float System.arraycopy(floats, 2 * lastSegmentIndex, array, 0, 2 * vertexCount); vertices = path(array, thickness, rounded ? JoinType.Round : JoinType.Pointy, false); this.color = color; - paintVertices(batch, vertices); + paintVertices(batch, vertices, null); lastSegmentIndex = idx + 1; } this.color = null; @@ -175,11 +202,11 @@ private void drawDebug(float[] vertices, short[] indicies) { drawer.setColor(oldColor); } - protected void paintVertices(PolygonSpriteBatch batch, float[] vertices) { + protected void paintVertices(PolygonSpriteBatch batch, float[] vertices, short[] holeIndices) { - var indices = Earcut.earcut(vertices).toArray(); - var polyreg = new PolygonRegion(textureRegion, vertices, indices); - var poly = new PolygonSprite(polyreg); + var indices = Earcut.earcut(vertices, holeIndices, (short) 2).toArray(); + var polyReg = new PolygonRegion(textureRegion, vertices, indices); + var poly = new PolygonSprite(polyReg); if (color != null) { poly.setColor(color); } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusCellTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusCellTemplateDrawer.java index 9472d7658a..42eb04b2ed 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusCellTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusCellTemplateDrawer.java @@ -72,7 +72,7 @@ protected void paintArea( new float[] { x, -y - gridSize, x, -y, x + gridSize, -y, x + gridSize, -y - gridSize, }; - areaRenderer.paintVertices(batch, floats); + areaRenderer.paintVertices(batch, floats, null); } @Override From 07476918896bf731ec61ff4d796eb058036b5b6e Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 14 Oct 2023 20:44:58 +0200 Subject: [PATCH 108/139] build --- build.gradle | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 61a1c38a43..d38d7669fa 100644 --- a/build.gradle +++ b/build.gradle @@ -502,14 +502,14 @@ dependencies { implementation 'com.miglayout:miglayout-swing:11.0' // libgdx - //implementation 'com.github.thelsing:libgdx-jogl-backend:1.12.0' + implementation 'com.github.thelsing:libgdx-jogl-backend:1.12.0' //maven local for development - implementation 'com.thelsing.gdx:gdx-backend-jogl:1.12.0' + //implementation 'com.thelsing.gdx:gdx-backend-jogl:1.12.0' implementation "com.badlogicgames.gdx:gdx:1.12.0" implementation "com.badlogicgames.gdx:gdx-platform:1.12.0:natives-desktop" - //implementation "space.earlygrey:shapedrawer:2.4.0" - implementation 'com.github.earlygrey:shapedrawer:extract-vertices-SNAPSHOT' + implementation "space.earlygrey:shapedrawer:2.4.0" + //implementation 'com.github.earlygrey:shapedrawer:extract-vertices-SNAPSHOT' implementation "com.badlogicgames.gdx:gdx-freetype:1.12.0" implementation "com.badlogicgames.gdx:gdx-freetype-platform:1.12.0:natives-desktop" implementation "com.badlogicgames.gdx-video:gdx-video:1.3.2-SNAPSHOT" From eb798e54f4f1e59b09b2293a145e5ee36037f123 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 14 Oct 2023 21:42:43 +0200 Subject: [PATCH 109/139] build --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index d38d7669fa..07a76931c8 100644 --- a/build.gradle +++ b/build.gradle @@ -508,8 +508,8 @@ dependencies { implementation "com.badlogicgames.gdx:gdx:1.12.0" implementation "com.badlogicgames.gdx:gdx-platform:1.12.0:natives-desktop" - implementation "space.earlygrey:shapedrawer:2.4.0" - //implementation 'com.github.earlygrey:shapedrawer:extract-vertices-SNAPSHOT' + //implementation "space.earlygrey:shapedrawer:2.4.0" + implementation 'com.github.earlygrey:shapedrawer:extract-vertices-SNAPSHOT' implementation "com.badlogicgames.gdx:gdx-freetype:1.12.0" implementation "com.badlogicgames.gdx:gdx-freetype-platform:1.12.0:natives-desktop" implementation "com.badlogicgames.gdx-video:gdx-video:1.3.2-SNAPSHOT" From c3b3a72bc58d4e92a0fc5486c0cd4d64a502d004 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 23 Oct 2023 00:35:04 +0200 Subject: [PATCH 110/139] fix grid and coordinate errors --- build.gradle | 6 +-- gradle/wrapper/gradle-wrapper.properties | 2 +- .../client/ui/zone/gdx/GdxRenderer.java | 38 +++++++++---------- .../client/ui/zone/gdx/TextRenderer.java | 9 +---- .../rptools/maptool/server/MapToolServer.java | 2 +- 5 files changed, 26 insertions(+), 31 deletions(-) diff --git a/build.gradle b/build.gradle index 07a76931c8..5a0012a939 100644 --- a/build.gradle +++ b/build.gradle @@ -190,7 +190,7 @@ tasks.register('deleteUiClasses') { } compileJava { - dependsOn(deleteUiClasses) + dependsOn(deleteUiClasses) } // Badass Runtime Plugin Options @@ -502,9 +502,9 @@ dependencies { implementation 'com.miglayout:miglayout-swing:11.0' // libgdx - implementation 'com.github.thelsing:libgdx-jogl-backend:1.12.0' + implementation 'com.github.thelsing:libgdx-jogl-backend:1.12.1' //maven local for development - //implementation 'com.thelsing.gdx:gdx-backend-jogl:1.12.0' + //implementation 'com.thelsing.gdx:gdx-backend-jogl:1.12.1' implementation "com.badlogicgames.gdx:gdx:1.12.0" implementation "com.badlogicgames.gdx:gdx-platform:1.12.0:natives-desktop" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 17a8ddce2d..744c64d127 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index a90062564c..f78fc53cc2 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -297,6 +297,8 @@ public void dispose() { @Override public void resize(int width, int height) { + System.out.println("Gdx: resize " + height + "x" + width); + System.out.println("Gdx: zr " + zoneRenderer.getHeight() + "x" + zoneRenderer.getWidth()); this.width = width; this.height = height; backBuffer.dispose(); @@ -411,7 +413,7 @@ private void loadAssets() { var mySmallFont = new FreetypeFontLoader.FreeTypeFontLoaderParameter(); mySmallFont.fontFileName = "net/rptools/maptool/client/fonts/OpenSans-Regular.ttf"; - mySmallFont.fontParameters.size = (int) (12 * Gdx.graphics.getBackBufferScale()); + mySmallFont.fontParameters.size = 12; manager.load(FONT_NORMAL, BitmapFont.class, mySmallFont); } @@ -445,11 +447,11 @@ private void doRendering() { else if (MapTool.getCampaign().isBeingSerialized()) hudTextRenderer.drawBoxedString(" Please Wait ", width / 2f, height / 2f); - float noteVPos = 20 * Gdx.graphics.getBackBufferScale(); + float noteVPos = 20; if (!zone.isVisible() && playerView.isGMView()) { hudTextRenderer.drawBoxedString( I18N.getText("zone.map_not_visible"), width / 2f, height - noteVPos); - noteVPos += 20 * Gdx.graphics.getBackBufferScale(); + noteVPos += 20; } if (AppState.isShowAsPlayer()) { hudTextRenderer.drawBoxedString( @@ -700,16 +702,18 @@ private void renderZone(PlayerView view) { private void renderCoordinates(PlayerView view) { if (!AppState.isShowCoordinates() || !(zone.getGrid() instanceof SquareGrid grid)) return; + batch.setProjectionMatrix(hudCam.combined); var font = boldFont; float cellSize = (float) zoneRenderer.getScaledGridSize(); CellPoint topLeft = grid.convert(new ScreenPoint(0, 0).convertToZone(zoneRenderer)); + ScreenPoint sp = ScreenPoint.fromZonePoint(zoneRenderer, grid.convert(topLeft)); Dimension size = zoneRenderer.getSize(); glyphLayout.setText(font, "MMM"); float startX = glyphLayout.width + 10; - float x = topLeft.x * cellSize + cellSize / 2; // Start at middle of the cell that's on screen + float x = (float) (sp.x + cellSize / 2); // Start at middle of the cell that's on screen float nextAvailableSpace = -1; while (x < size.width) { String coord = Integer.toString(topLeft.x); @@ -719,9 +723,9 @@ private void renderCoordinates(PlayerView view) { if (x > startX && strX > nextAvailableSpace) { font.setColor(Color.BLACK); - font.draw(batch, coord, strX, -glyphLayout.height / 2 - 1); + font.draw(batch, coord, strX, height-glyphLayout.height / 2 - 1); font.setColor(Color.ORANGE); - font.draw(batch, coord, strX - 1, -glyphLayout.height / 2); + font.draw(batch, coord, strX - 1, height-glyphLayout.height / 2); nextAvailableSpace = strX + strWidth + 10; } @@ -729,8 +733,7 @@ private void renderCoordinates(PlayerView view) { topLeft.x++; } float y = - (float) topLeft.y * cellSize - + cellSize / 2f; // Start at middle of the cell that's on screen + (float) sp.y + cellSize / 2f; // Start at middle of the cell that's on screen nextAvailableSpace = -1; while (y < size.height) { String coord = grid.decimalToAlphaCoord(topLeft.y); @@ -739,15 +742,16 @@ private void renderCoordinates(PlayerView view) { if (y > glyphLayout.height && strY > nextAvailableSpace) { font.setColor(Color.BLACK); - font.draw(batch, coord, 10, -strY + glyphLayout.height / 2 - 1); + font.draw(batch, coord, 10, height-strY + glyphLayout.height / 2 - 1); font.setColor(Color.YELLOW); - font.draw(batch, coord, 10 - 1, -strY + glyphLayout.height / 2); + font.draw(batch, coord, 10 - 1, height-strY + glyphLayout.height / 2); nextAvailableSpace = strY + font.getAscent() / 2 + 10; } y += cellSize; topLeft.y++; } + batch.setProjectionMatrix(cam.combined); } private void paintlightSourceIconOverlay() { @@ -1521,7 +1525,7 @@ private void renderGrid(HexGrid grid) { drawer.setColor(tmpColor); var path = grid.createShape(zoneRenderer.getScale()); - areaRenderer.pathToFloatArray(path.getPathIterator(null)); + var floats = areaRenderer.pathToFloatArray(path.getPathIterator(null)); int offU = grid.getOffU(zoneRenderer); int offV = grid.getOffV(zoneRenderer); @@ -1563,7 +1567,7 @@ private void renderGrid(HexGrid grid) { batch.setTransformMatrix(tmpMatrix); drawer.update(); - drawer.path(tmpFloat.toArray(), lineWidth, JoinType.SMOOTH, true); + drawer.path(floats, lineWidth, JoinType.SMOOTH, true); tmpMatrix.idt(); batch.setTransformMatrix(tmpMatrix); drawer.update(); @@ -2034,9 +2038,6 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure tmpWorldCoord.set(gdxTokenRectangle.x, gdxTokenRectangle.y, 0); cam.project(tmpWorldCoord); - tmpWorldCoord.x *= Gdx.graphics.getBackBufferScale(); - tmpWorldCoord.y *= Gdx.graphics.getBackBufferScale(); - gdxTokenRectangle.set( tmpWorldCoord.x, tmpWorldCoord.y, @@ -3487,10 +3488,9 @@ public void setScale(Scale scale) { return; } - var dpiScale = Gdx.graphics.getBackBufferScale(); - offsetX = (int) (scale.getOffsetX() * dpiScale * -1); - offsetY = (int) (scale.getOffsetY() * dpiScale); - zoom = (float) (1f / scale.getScale() / dpiScale); + offsetX = (int) (scale.getOffsetX() * -1); + offsetY = (int) (scale.getOffsetY()); + zoom = (float) (1f / scale.getScale()); updateCam(); } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TextRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TextRenderer.java index ff88f6f82b..553925bc3e 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TextRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TextRenderer.java @@ -14,7 +14,6 @@ */ package net.rptools.maptool.client.ui.zone.gdx; -import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.*; import javax.swing.*; @@ -89,12 +88,8 @@ public void drawBoxedString( } } - var dpiScale = scaling ? Gdx.graphics.getBackBufferScale() : 1.0f; - x *= dpiScale; - y *= dpiScale; - - var BOX_PADDINGX = 10 * dpiScale; - var BOX_PADDINGY = 2 * dpiScale; + var BOX_PADDINGX = 10; + var BOX_PADDINGY = 2; if (text == null) text = ""; diff --git a/src/main/java/net/rptools/maptool/server/MapToolServer.java b/src/main/java/net/rptools/maptool/server/MapToolServer.java index be03bd4393..2ab1bd2e39 100644 --- a/src/main/java/net/rptools/maptool/server/MapToolServer.java +++ b/src/main/java/net/rptools/maptool/server/MapToolServer.java @@ -76,7 +76,7 @@ public MapToolServer(ServerConfig config, ServerPolicy policy, PlayerDatabase pl assetProducerThread.start(); // Start a heartbeat if requested - if (config.isServerRegistered()) { + if (!config.isPersonalServer()) { heartbeatThread = new HeartbeatThread(); heartbeatThread.start(); } From e294f7b80cefbbdfc6bd53305ece6783661103cb Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 23 Oct 2023 23:03:39 +0200 Subject: [PATCH 111/139] fix templates --- build.gradle | 4 +- gradle/wrapper/gradle-wrapper.jar | Bin 62076 -> 63721 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 22 ++++---- .../ui/zone/gdx/AbstractDrawingDrawer.java | 49 +++++++++--------- .../ui/zone/gdx/AbstractTemplateDrawer.java | 7 ++- .../client/ui/zone/gdx/AreaRenderer.java | 27 ++++++---- .../ui/zone/gdx/BlastTemplateDrawer.java | 4 +- .../ui/zone/gdx/BurstTemplateDrawer.java | 4 +- .../ui/zone/gdx/ConeTemplateDrawer.java | 3 +- .../client/ui/zone/gdx/GdxRenderer.java | 11 ++-- .../ui/zone/gdx/LineCellTemplateDrawer.java | 11 ++-- .../ui/zone/gdx/LineTemplateDrawer.java | 6 ++- .../ui/zone/gdx/RadiusCellTemplateDrawer.java | 13 +++-- .../ui/zone/gdx/RadiusTemplateDrawer.java | 3 +- .../ui/zone/gdx/ShapeDrawableDrawer.java | 2 +- 16 files changed, 95 insertions(+), 73 deletions(-) diff --git a/build.gradle b/build.gradle index 5a0012a939..4dccacb5f7 100644 --- a/build.gradle +++ b/build.gradle @@ -613,9 +613,9 @@ test { } task createWrapper(type: Wrapper) { - gradleVersion = '8.2.1' + gradleVersion = '8.4' } // Configure current release tag in Sentry.io properties processResources.dependsOn configSentryRelease -//configSentryRelease.dependsOn 'spotlessCheck' \ No newline at end of file +configSentryRelease.dependsOn 'spotlessCheck' \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index c1962a79e29d3e0ab67b14947c167a862655af9b..7f93135c49b765f8051ef9d0a6055ff8e46073d8 100644 GIT binary patch delta 37652 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 delta 36122 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 Ac-xW1# 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 Q>rd#Eb%7 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 744c64d127..d96634c165 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip -networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index aeb74cbb43..1aa94a4269 100755 --- a/gradlew +++ b/gradlew @@ -83,7 +83,8 @@ done # This is normally unused # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -130,10 +131,13 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. @@ -141,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -149,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -198,11 +202,11 @@ fi # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java index 7575ae75c9..3f8baa89dc 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java @@ -21,12 +21,12 @@ import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.utils.FloatArray; import java.awt.geom.Area; -import java.awt.geom.PathIterator; import net.rptools.maptool.model.drawing.*; public abstract class AbstractDrawingDrawer { protected Color tmpColor = new Color(); - protected TextureRegion whitePixelRegion; + + protected Float alpha = null; protected AreaRenderer areaRenderer; public AbstractDrawingDrawer(AreaRenderer areaRenderer) { @@ -34,59 +34,58 @@ public AbstractDrawingDrawer(AreaRenderer areaRenderer) { } public void draw(PolygonSpriteBatch batch, Drawable element, Pen pen) { - if (pen.getBackgroundPaint() instanceof DrawableColorPaint colorPaint) { - Color.argb8888ToColor(tmpColor, colorPaint.getColor()); - areaRenderer.setColor(tmpColor); - } else if (pen.getBackgroundPaint() instanceof DrawableTexturePaint texturePaint) { - var image = texturePaint.getAsset().getData(); - var pix = new Pixmap(image, 0, image.length); - var tex = new Texture(pix); - tex.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat); - // FIXME properly dispose - var region = new TextureRegion(tex); - areaRenderer.setTextureRegion(region); - pix.dispose(); - } + applyColor(pen.getBackgroundPaint(), true); drawBackground(batch, element, pen); - if (pen.getPaint() instanceof DrawableColorPaint colorPaint) { + applyColor(pen.getPaint(), false); + drawBorder(batch, element, pen); + } + + protected void applyColor(DrawablePaint paint, boolean applyAlpha) { + if (paint instanceof DrawableColorPaint colorPaint) { Color.argb8888ToColor(tmpColor, colorPaint.getColor()); + + if (alpha != null && applyAlpha) { + tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, alpha); + } areaRenderer.setColor(tmpColor); - } else if (pen.getPaint() instanceof DrawableTexturePaint texturePaint) { + } else if (paint instanceof DrawableTexturePaint texturePaint) { var image = texturePaint.getAsset().getData(); var pix = new Pixmap(image, 0, image.length); var tex = new Texture(pix); tex.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat); // FIXME properly dispose var region = new TextureRegion(tex); + if (alpha != null) { + tmpColor.set(1, 1, 1, alpha); + areaRenderer.setColor(tmpColor); + } areaRenderer.setTextureRegion(region); pix.dispose(); } - - drawBorder(batch, element, pen); } protected void line(PolygonSpriteBatch batch, Pen pen, float x1, float y1, float x2, float y2) { var floats = new FloatArray(); - floats.add(x1, y1, x2, y2); + // negate y values because we are y-up + floats.add(x1, -y1, x2, -y2); var path = areaRenderer.path( floats.toArray(), pen.getThickness(), pen.getSquareCap() ? AreaRenderer.JoinType.Pointy : AreaRenderer.JoinType.Round, false); + applyColor(pen.getPaint(), false); areaRenderer.paintVertices(batch, path, null); } - protected FloatArray pathToFloatArray(PathIterator pathIterator) { - return areaRenderer.pathToFloatArray(pathIterator); - } - - protected void fillArea(PolygonSpriteBatch batch, Area area) { + protected void fillArea(PolygonSpriteBatch batch, Area area, Pen pen) { + applyColor(pen.getBackgroundPaint(), true); areaRenderer.fillArea(batch, area); } protected void drawArea(PolygonSpriteBatch batch, Area area, Pen pen) { + applyColor(pen.getPaint(), false); areaRenderer.drawArea(batch, area, !pen.getSquareCap(), pen.getThickness()); } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractTemplateDrawer.java index e89cb37a86..7990d10c97 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractTemplateDrawer.java @@ -29,7 +29,7 @@ public AbstractTemplateDrawer(AreaRenderer renderer) { @Override protected void drawBackground(PolygonSpriteBatch batch, Drawable element, Pen pen) { - tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, AbstractTemplate.DEFAULT_BG_ALPHA); + alpha = AbstractTemplate.DEFAULT_BG_ALPHA; paint(batch, pen, (AbstractTemplate) element, false, true); } @@ -59,13 +59,14 @@ protected void paint( if (border) paintBorder(batch, pen, template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); if (area) - paintArea(batch, template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); + paintArea(batch, pen, template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); } // endfor } // endfor } protected void paintArea( PolygonSpriteBatch batch, + Pen pen, AbstractTemplate template, int xOff, int yOff, @@ -76,6 +77,7 @@ protected void paintArea( int y = vertex.y + getYMult(q) * yOff + ((getYMult(q) - 1) / 2) * gridSize; var floats = new float[] {x, -y - gridSize, x, -y, x + gridSize, -y, x + gridSize, -y - gridSize}; + applyColor(pen.getBackgroundPaint(), true); areaRenderer.paintVertices(batch, floats, null); } @@ -149,6 +151,7 @@ protected void paintCloseHorizontalBorder( protected abstract void paintArea( PolygonSpriteBatch batch, + Pen pen, AbstractTemplate template, int x, int y, diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java index 15fd1ba3b3..f023427d61 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java @@ -50,7 +50,11 @@ public AreaRenderer(TextureRegion whitePixelRegion, ShapeDrawer drawer) { private Color color; public void setColor(Color value) { - color = value; + if (value == null) { + color = Color.WHITE; + } else { + color = value; + } textureRegion = whitePixel; } @@ -146,12 +150,19 @@ public void drawArea(PolygonSpriteBatch batch, Area area, boolean rounded, float if (area == null || area.isEmpty()) return; pathToFloatArray(area.getPathIterator(null)); - float[] vertices = null; - var floats = tmpFloat.toArray(); + if (segmentIndicies.size == 1) { - vertices = path(floats, thickness, rounded ? JoinType.Round : JoinType.Pointy, false); + while (tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) + && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { + // make sure we don't have last and first point the same + tmpFloat.pop(); + tmpFloat.pop(); + } + var floats = tmpFloat.toArray(); + var vertices = path(floats, thickness, rounded ? JoinType.Round : JoinType.Pointy, false); paintVertices(batch, vertices, null); } else { + var floats = tmpFloat.toArray(); var lastSegmentIndex = 0; var color = this.color; for (int i = 0; i < segmentIndicies.size; i++) { @@ -159,7 +170,7 @@ public void drawArea(PolygonSpriteBatch batch, Area area, boolean rounded, float var vertexCount = idx - lastSegmentIndex; float[] array = new float[2 * vertexCount]; System.arraycopy(floats, 2 * lastSegmentIndex, array, 0, 2 * vertexCount); - vertices = path(array, thickness, rounded ? JoinType.Round : JoinType.Pointy, false); + var vertices = path(array, thickness, rounded ? JoinType.Round : JoinType.Pointy, false); this.color = color; paintVertices(batch, vertices, null); lastSegmentIndex = idx + 1; @@ -207,12 +218,10 @@ protected void paintVertices(PolygonSpriteBatch batch, float[] vertices, short[] var indices = Earcut.earcut(vertices, holeIndices, (short) 2).toArray(); var polyReg = new PolygonRegion(textureRegion, vertices, indices); var poly = new PolygonSprite(polyReg); - if (color != null) { - poly.setColor(color); - } + poly.setColor(color); if (debug) drawDebug(vertices, indices); else poly.draw(batch); - color = null; + color = Color.WHITE; } public FloatArray pathToFloatArray(PathIterator it) { diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BlastTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BlastTemplateDrawer.java index 986029a123..01159fb157 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BlastTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BlastTemplateDrawer.java @@ -29,8 +29,8 @@ public BlastTemplateDrawer(AreaRenderer renderer) { @Override protected void drawBackground(PolygonSpriteBatch batch, Drawable element, Pen pen) { var template = (BlastTemplate) element; - tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, AbstractTemplate.DEFAULT_BG_ALPHA); - fillArea(batch, template.getArea()); + alpha = AbstractTemplate.DEFAULT_BG_ALPHA; + fillArea(batch, template.getArea(), pen); } @Override diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BurstTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BurstTemplateDrawer.java index 7c8e4a6248..ec23828584 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BurstTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BurstTemplateDrawer.java @@ -29,8 +29,8 @@ public BurstTemplateDrawer(AreaRenderer renderer) { @Override protected void drawBackground(PolygonSpriteBatch batch, Drawable element, Pen pen) { var template = (BurstTemplate) element; - tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, AbstractTemplate.DEFAULT_BG_ALPHA); - fillArea(batch, template.getArea()); + alpha = AbstractTemplate.DEFAULT_BG_ALPHA; + fillArea(batch, template.getArea(), pen); } @Override diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ConeTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ConeTemplateDrawer.java index 0bcd7b2d92..102ea36f18 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ConeTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ConeTemplateDrawer.java @@ -28,6 +28,7 @@ public ConeTemplateDrawer(AreaRenderer renderer) { @Override protected void paintArea( PolygonSpriteBatch batch, + Pen pen, AbstractTemplate template, int x, int y, @@ -53,7 +54,7 @@ protected void paintArea( } for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { if (coneTemplate.withinQuadrant(q)) { - paintArea(batch, template, xOff, yOff, gridSize, q); + paintArea(batch, pen, template, xOff, yOff, gridSize, q); } } } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index f78fc53cc2..ddbd2262af 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -723,17 +723,16 @@ private void renderCoordinates(PlayerView view) { if (x > startX && strX > nextAvailableSpace) { font.setColor(Color.BLACK); - font.draw(batch, coord, strX, height-glyphLayout.height / 2 - 1); + font.draw(batch, coord, strX, height - glyphLayout.height / 2 - 1); font.setColor(Color.ORANGE); - font.draw(batch, coord, strX - 1, height-glyphLayout.height / 2); + font.draw(batch, coord, strX - 1, height - glyphLayout.height / 2); nextAvailableSpace = strX + strWidth + 10; } x += cellSize; topLeft.x++; } - float y = - (float) sp.y + cellSize / 2f; // Start at middle of the cell that's on screen + float y = (float) sp.y + cellSize / 2f; // Start at middle of the cell that's on screen nextAvailableSpace = -1; while (y < size.height) { String coord = grid.decimalToAlphaCoord(topLeft.y); @@ -742,9 +741,9 @@ private void renderCoordinates(PlayerView view) { if (y > glyphLayout.height && strY > nextAvailableSpace) { font.setColor(Color.BLACK); - font.draw(batch, coord, 10, height-strY + glyphLayout.height / 2 - 1); + font.draw(batch, coord, 10, height - strY + glyphLayout.height / 2 - 1); font.setColor(Color.YELLOW); - font.draw(batch, coord, 10 - 1, height-strY + glyphLayout.height / 2); + font.draw(batch, coord, 10 - 1, height - strY + glyphLayout.height / 2); nextAvailableSpace = strY + font.getAscent() / 2 + 10; } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineCellTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineCellTemplateDrawer.java index d80b01ad91..3812b2913c 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineCellTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineCellTemplateDrawer.java @@ -31,6 +31,7 @@ public LineCellTemplateDrawer(AreaRenderer renderer) { @Override protected void paintArea( PolygonSpriteBatch batch, + Pen pen, AbstractTemplate template, int x, int y, @@ -39,7 +40,7 @@ protected void paintArea( int gridSize, int distance) { var lineCellTemplate = (LineCellTemplate) template; - paintArea(batch, template, xOff, yOff, gridSize, lineCellTemplate.getQuadrant()); + paintArea(batch, pen, template, xOff, yOff, gridSize, lineCellTemplate.getQuadrant()); } @Override @@ -104,18 +105,18 @@ protected void paint( int yOff = p.y * gridSize; int distance = template.getDistance(p.x, p.y); - if (quadrant.equals(AbstractTemplate.Quadrant.NORTH_EAST.name())) { + if (quadrant == AbstractTemplate.Quadrant.NORTH_EAST) { yOff = yOff - gridSize; - } else if (quadrant.equals(AbstractTemplate.Quadrant.SOUTH_WEST.name())) { + } else if (quadrant == AbstractTemplate.Quadrant.SOUTH_WEST) { xOff = xOff - gridSize; - } else if (quadrant.equals(AbstractTemplate.Quadrant.NORTH_WEST.name())) { + } else if (quadrant == AbstractTemplate.Quadrant.NORTH_WEST) { xOff = xOff - gridSize; yOff = yOff - gridSize; } // Paint what is needed. if (area) { - paintArea(batch, template, p.x, p.y, xOff, yOff, gridSize, distance); + paintArea(batch, pen, template, p.x, p.y, xOff, yOff, gridSize, distance); } // endif if (border) { paintBorder(batch, pen, template, p.x, p.y, xOff, yOff, gridSize, i.previousIndex()); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineTemplateDrawer.java index 8d630c5e7a..3cf75ed0c8 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineTemplateDrawer.java @@ -51,7 +51,7 @@ protected void paint( // Paint what is needed. if (area) { - paintArea(batch, template, p.x, p.y, xOff, yOff, gridSize, distance); + paintArea(batch, pen, template, p.x, p.y, xOff, yOff, gridSize, distance); } // endif if (border) { paintBorder(batch, pen, template, p.x, p.y, xOff, yOff, gridSize, i.previousIndex()); @@ -62,6 +62,7 @@ protected void paint( @Override protected void paintArea( PolygonSpriteBatch batch, + Pen pen, AbstractTemplate template, int x, int y, @@ -70,7 +71,8 @@ protected void paintArea( int gridSize, int distance) { var lineTemplate = (LineTemplate) template; - paintArea(batch, template, xOff, yOff, gridSize, lineTemplate.getQuadrant()); + + paintArea(batch, pen, template, xOff, yOff, gridSize, lineTemplate.getQuadrant()); } @Override diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusCellTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusCellTemplateDrawer.java index 42eb04b2ed..a46be60bf5 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusCellTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusCellTemplateDrawer.java @@ -31,6 +31,7 @@ public RadiusCellTemplateDrawer(AreaRenderer renderer) { @Override protected void paintArea( PolygonSpriteBatch batch, + Pen pen, AbstractTemplate template, int x, int y, @@ -41,25 +42,26 @@ protected void paintArea( // Only squares w/in the radius int radius = template.getRadius(); if (distance <= radius) { - paintArea(batch, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); + paintArea(batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_EAST); } if (template.getDistance(x, y + 1) <= radius) { - paintArea(batch, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); + paintArea(batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_EAST); } if (template.getDistance(x + 1, y) <= radius) { - paintArea(batch, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); + paintArea(batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.SOUTH_WEST); } if (template.getDistance(x + 1, y + 1) <= radius) { - paintArea(batch, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); + paintArea(batch, pen, template, xOff, yOff, gridSize, AbstractTemplate.Quadrant.NORTH_WEST); } } @Override protected void paintArea( PolygonSpriteBatch batch, + Pen pen, AbstractTemplate template, int xOff, int yOff, @@ -72,6 +74,7 @@ protected void paintArea( new float[] { x, -y - gridSize, x, -y, x + gridSize, -y, x + gridSize, -y - gridSize, }; + applyColor(pen.getBackgroundPaint(), true); areaRenderer.paintVertices(batch, floats, null); } @@ -219,7 +222,7 @@ protected void paint( if (border) paintBorder(batch, pen, template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); if (area) - paintArea(batch, template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); + paintArea(batch, pen, template, x, y, xOff, yOff, gridSize, template.getDistance(x, y)); } // endfor } // endfor } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusTemplateDrawer.java index d99cb9ae5e..ee2cef0da1 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusTemplateDrawer.java @@ -27,6 +27,7 @@ public RadiusTemplateDrawer(AreaRenderer renderer) { @Override protected void paintArea( PolygonSpriteBatch batch, + Pen pen, AbstractTemplate template, int x, int y, @@ -39,7 +40,7 @@ protected void paintArea( if (distance <= radiusTemplate.getRadius()) { // Paint the squares for (AbstractTemplate.Quadrant q : AbstractTemplate.Quadrant.values()) { - paintArea(batch, template, xOff, yOff, gridSize, q); + paintArea(batch, pen, template, xOff, yOff, gridSize, q); } } } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ShapeDrawableDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ShapeDrawableDrawer.java index c0ec084e9c..09f2af122c 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ShapeDrawableDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ShapeDrawableDrawer.java @@ -28,7 +28,7 @@ public ShapeDrawableDrawer(AreaRenderer renderer) { @Override protected void drawBackground(PolygonSpriteBatch batch, Drawable element, Pen pen) { var shape = (ShapeDrawable) element; - fillArea(batch, shape.getArea()); + fillArea(batch, shape.getArea(), pen); } @Override From a9946dcce00902222a82066b59ce6ce68205b261 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 23 Oct 2023 23:05:11 +0200 Subject: [PATCH 112/139] no heartbeat on personal server --- src/main/java/net/rptools/maptool/server/MapToolServer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/rptools/maptool/server/MapToolServer.java b/src/main/java/net/rptools/maptool/server/MapToolServer.java index 2ab1bd2e39..e80c695aa3 100644 --- a/src/main/java/net/rptools/maptool/server/MapToolServer.java +++ b/src/main/java/net/rptools/maptool/server/MapToolServer.java @@ -76,7 +76,7 @@ public MapToolServer(ServerConfig config, ServerPolicy policy, PlayerDatabase pl assetProducerThread.start(); // Start a heartbeat if requested - if (!config.isPersonalServer()) { + if (config.isServerRegistered() && !config.isPersonalServer()) { heartbeatThread = new HeartbeatThread(); heartbeatThread.start(); } From a11e02a332090a2a9d3482c0bcc547acfcffeb05 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Fri, 3 Nov 2023 23:18:33 +0100 Subject: [PATCH 113/139] refactor to reuse triangulation of Areas --- .../client/ui/zone/gdx/AreaRenderer.java | 139 ++++++++++-------- 1 file changed, 81 insertions(+), 58 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java index f023427d61..5caec26ae0 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java @@ -16,10 +16,7 @@ import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.*; -import com.badlogic.gdx.math.Bezier; -import com.badlogic.gdx.math.MathUtils; -import com.badlogic.gdx.math.Polygon; -import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.math.*; import com.badlogic.gdx.utils.FloatArray; import com.badlogic.gdx.utils.IntArray; import java.awt.geom.Area; @@ -34,6 +31,7 @@ import space.earlygrey.shapedrawer.SideEstimator; public class AreaRenderer { + public record TriangledPolygon(float[] vertices, short[] indices) {} public AreaRenderer(TextureRegion whitePixelRegion, ShapeDrawer drawer) { this.whitePixel = whitePixelRegion; @@ -76,8 +74,10 @@ public void setTextureRegion(TextureRegion textureRegion) { this.textureRegion = textureRegion; } - public void fillArea(PolygonSpriteBatch batch, Area area) { - if (area == null || area.isEmpty()) return; + public List triangulate(Area area) { + if (area == null || area.isEmpty()) return new ArrayList<>(); + + var result = new ArrayList(); pathToFloatArray(area.getPathIterator(null)); @@ -88,60 +88,72 @@ public void fillArea(PolygonSpriteBatch batch, Area area) { tmpFloat.pop(); tmpFloat.pop(); } - paintVertices(batch, tmpFloat.toArray(), null); - } else { - var lastSegmentIndex = 0; - var color = this.color; - var polygons = new ArrayList(); - // Polygons in a PathIterator are ordered. If polygon p contains q, q comes first. - // So we draw polygons that contains others, those others are the holes. - var floats = tmpFloat.toArray(); - for (int i = 0; i < segmentIndicies.size; i++) { - var idx = segmentIndicies.get(i); - var vertexCount = idx - lastSegmentIndex; - var vertices = new float[2 * vertexCount]; - System.arraycopy(floats, 2 * lastSegmentIndex, vertices, 0, 2 * vertexCount); - lastSegmentIndex = idx + 1; - - var poly = new Polygon(vertices); - var holes = new ArrayList(); + var vertices = tmpFloat.toArray(); + var indices = Earcut.earcut(vertices).toArray(); + result.add(new TriangledPolygon(vertices, indices)); + return result; + } - for (int j = 0; j < polygons.size(); j++) { - var prevPoly = polygons.get(j); - var prevVertices = prevPoly.getVertices(); - if (poly.contains(prevVertices[0], prevVertices[1])) { - holes.add(prevPoly); - } - } - if (holes.isEmpty()) { - polygons.add(poly); - continue; + var lastSegmentIndex = 0; + var color = this.color; + var polygons = new ArrayList(); + // Polygons in a PathIterator are ordered. If polygon p contains q, q comes first. + // So we draw polygons that contains others, those others are the holes. + var floats = tmpFloat.toArray(); + for (int i = 0; i < segmentIndicies.size; i++) { + var idx = segmentIndicies.get(i); + var vertexCount = idx - lastSegmentIndex; + var currentPolyVertices = new float[2 * vertexCount]; + System.arraycopy(floats, 2 * lastSegmentIndex, currentPolyVertices, 0, 2 * vertexCount); + lastSegmentIndex = idx + 1; + + var poly = new Polygon(currentPolyVertices); + var holes = new ArrayList(); + + for (int j = 0; j < polygons.size(); j++) { + var prevPoly = polygons.get(j); + var prevVertices = prevPoly.getVertices(); + if (poly.contains(prevVertices[0], prevVertices[1])) { + holes.add(prevPoly); } - tmpFloat.clear(); - tmpFloat.addAll(poly.getVertices()); - - short[] holeIndices = new short[holes.size()]; - var lastPoly = poly; - var lastHoleIndex = 0; - for (int j = 0; j < holes.size(); j++) { - lastHoleIndex += lastPoly.getVertices().length; - holeIndices[j] = (short) (lastHoleIndex / 2); - lastPoly = holes.get(j); - polygons.remove(lastPoly); - tmpFloat.addAll(lastPoly.getVertices()); - } - - paintVertices(batch, tmpFloat.toArray(), holeIndices); - this.color = color; } - - for (var poly : polygons) { - paintVertices(batch, poly.getVertices(), null); - this.color = color; + if (holes.isEmpty()) { + polygons.add(poly); + continue; + } + tmpFloat.clear(); + tmpFloat.addAll(poly.getVertices()); + + short[] holeIndices = new short[holes.size()]; + var lastPoly = poly; + var lastHoleIndex = 0; + for (int j = 0; j < holes.size(); j++) { + lastHoleIndex += lastPoly.getVertices().length; + holeIndices[j] = (short) (lastHoleIndex / 2); + lastPoly = holes.get(j); + polygons.remove(lastPoly); + tmpFloat.addAll(lastPoly.getVertices()); } - this.color = null; + var indices = Earcut.earcut(tmpFloat.toArray(), holeIndices, (short) 2); + result.add(new TriangledPolygon(tmpFloat.toArray(), indices.toArray())); + } + + for (var poly : polygons) { + var indices = Earcut.earcut(poly.getVertices()); + result.add(new TriangledPolygon(poly.getVertices(), indices.toArray())); + } + return result; + } + + public void fillArea(PolygonSpriteBatch batch, Area area) { + for (var poly : triangulate(area)) { + var polyRegion = new PolygonRegion(textureRegion, poly.vertices, poly.indices); + var color = this.color; + paintRegion(batch, polyRegion); + this.color = color; } + this.color = Color.WHITE; } private boolean debug = false; @@ -214,13 +226,24 @@ private void drawDebug(float[] vertices, short[] indicies) { } protected void paintVertices(PolygonSpriteBatch batch, float[] vertices, short[] holeIndices) { - var indices = Earcut.earcut(vertices, holeIndices, (short) 2).toArray(); var polyReg = new PolygonRegion(textureRegion, vertices, indices); - var poly = new PolygonSprite(polyReg); - poly.setColor(color); + if (debug) drawDebug(vertices, indices); - else poly.draw(batch); + else paintRegion(batch, polyReg); + color = Color.WHITE; + } + + private PolygonSprite sprite = null; + + protected void paintRegion(PolygonSpriteBatch batch, PolygonRegion polygonRegion) { + if (sprite == null) { + sprite = new PolygonSprite(polygonRegion); + } else { + sprite.setRegion(polygonRegion); + } + sprite.setColor(color); + sprite.draw(batch); color = Color.WHITE; } From 30e43377417389e372f5440b3152651c22df2d0c Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 4 Nov 2023 23:22:09 +0100 Subject: [PATCH 114/139] refactor use of ZoneCache --- .../client/ui/zone/gdx/GdxRenderer.java | 844 ++++++------------ .../maptool/client/ui/zone/gdx/ZoneCache.java | 304 +++++++ 2 files changed, 559 insertions(+), 589 deletions(-) create mode 100644 src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index ddbd2262af..3b748a1c07 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -33,25 +33,17 @@ import com.badlogic.gdx.physics.box2d.World; import com.badlogic.gdx.scenes.scene2d.utils.TiledDrawable; import com.badlogic.gdx.utils.FloatArray; -import com.badlogic.gdx.utils.GdxRuntimeException; import com.badlogic.gdx.utils.ScreenUtils; -import com.badlogic.gdx.video.VideoPlayer; -import com.badlogic.gdx.video.VideoPlayerCreator; import com.google.common.eventbus.Subscribe; import java.awt.*; import java.awt.Shape; import java.awt.geom.*; -import java.io.ByteArrayInputStream; -import java.io.FileNotFoundException; import java.text.NumberFormat; import java.util.*; import java.util.List; import java.util.zip.Deflater; import javax.swing.*; import net.rptools.lib.CodeTimer; -import net.rptools.lib.MD5Key; -import net.rptools.lib.gdx.GifDecoder; -import net.rptools.lib.image.ImageUtil; import net.rptools.maptool.client.*; import net.rptools.maptool.client.events.ZoneActivated; import net.rptools.maptool.client.swing.ImageBorder; @@ -77,10 +69,8 @@ import net.rptools.maptool.model.drawing.*; import net.rptools.maptool.util.FunctionUtil; import net.rptools.maptool.util.GraphicsUtil; -import net.rptools.maptool.util.ImageManager; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.jetbrains.annotations.NotNull; import space.earlygrey.shapedrawer.JoinType; import space.earlygrey.shapedrawer.ShapeDrawer; @@ -91,28 +81,19 @@ * *

    */ -public class GdxRenderer extends ApplicationAdapter implements AssetAvailableListener { +public class GdxRenderer extends ApplicationAdapter { private static final Logger log = LogManager.getLogger(GdxRenderer.class); public static final float POINTS_PER_BEZIER = 10f; - private static GdxRenderer _instance; - private final Map fetchedSprites = new HashMap<>(); - private final Map isoSprites = new HashMap<>(); - private final Map fetchedRegions = new HashMap<>(); - private final Map bigSprites = new HashMap<>(); - private final Map> animationMap = new HashMap<>(); - private final Map videoPlayerMap = new HashMap<>(); - // renderFog private final String ATLAS = "net/rptools/maptool/client/maptool.atlas"; private final String FONT_NORMAL = "normalFont.ttf"; private final String FONT_BOLD = "boldFont.ttf"; private final String FONT_DISTANCE = "distanceFont.ttf"; - private PixmapPacker packer; - private TextureAtlas tokenAtlas; + private boolean flushFog = true; // from renderToken: private Area visibleScreenArea; @@ -121,8 +102,7 @@ public class GdxRenderer extends ApplicationAdapter implements AssetAvailableLis private final List itemRenderList = new LinkedList<>(); // zone specific resources - private Zone zone; - private ZoneRenderer zoneRenderer; + private ZoneCache zoneCache; private int offsetX = 0; private int offsetY = 0; @@ -149,8 +129,7 @@ public class GdxRenderer extends ApplicationAdapter implements AssetAvailableLis private com.badlogic.gdx.assets.AssetManager manager; private TextureAtlas atlas; private Texture onePixel; - private Texture fog; - private Texture background; + private ShapeDrawer drawer; private final GlyphLayout glyphLayout = new GlyphLayout(); private LineTemplateDrawer lineTemplateDrawer; @@ -206,11 +185,6 @@ public void create() { atlas = null; normalFont = null; boldFont = null; - fetchedSprites.clear(); - isoSprites.clear(); - fetchedRegions.clear(); - bigSprites.clear(); - animationMap.clear(); } /* world = new World(new Vector2(0, 0), true); @@ -228,10 +202,8 @@ public void create() { new PointLight(rayHandler, 128, Color.BLUE, 600, 350, -350); */ - tokenAtlas = new TextureAtlas(); manager = new com.badlogic.gdx.assets.AssetManager(); loadAssets(); - packer = createPacker(); var resolver = new InternalFileHandleResolver(); manager.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver)); @@ -277,28 +249,22 @@ public void create() { shapeDrawableDrawer = new ShapeDrawableDrawer(areaRenderer); initialized = true; - initializeZoneResources(zone); } @Override public void dispose() { manager.dispose(); batch.dispose(); - disposeZoneResources(); - disposeZoneTextures(); + if (zoneCache != null) { + zoneCache.dispose(); + } onePixel.dispose(); - packer.updateTextureAtlas( - atlas, Texture.TextureFilter.Linear, Texture.TextureFilter.Linear, false); - packer.dispose(); - tokenAtlas.dispose(); rayHandler.dispose(); world.dispose(); } @Override public void resize(int width, int height) { - System.out.println("Gdx: resize " + height + "x" + width); - System.out.println("Gdx: zr " + zoneRenderer.getHeight() + "x" + zoneRenderer.getWidth()); this.width = width; this.height = height; backBuffer.dispose(); @@ -340,8 +306,6 @@ public void render() { var delta = Gdx.graphics.getDeltaTime(); stateTime += delta; manager.finishLoading(); - packer.updateTextureAtlas( - tokenAtlas, Texture.TextureFilter.Linear, Texture.TextureFilter.Linear, false); if (atlas == null) { atlas = manager.get(ATLAS, TextureAtlas.class); @@ -384,16 +348,12 @@ private boolean fixedStep(float deltaTime) { return stepped; } - @NotNull - private PixmapPacker createPacker() { - return new PixmapPacker(2048, 2048, Pixmap.Format.RGBA8888, 2, false); - } - private void ensureTtfFont() { - if (zone == null) return; + if (zoneCache == null) return; var fontScale = - (float) zone.getGrid().getSize() / 50; // Font size of 12 at grid size 50 is default + (float) zoneCache.getZone().getGrid().getSize() + / 50; // Font size of 12 at grid size 50 is default if (fontScale == this.boldFontScale && boldFont != null) return; @@ -425,15 +385,15 @@ private void doRendering() { if (batch.isDrawing()) batch.end(); batch.begin(); - if (zone == null || !renderZone) return; + if (zoneCache == null || !renderZone) return; initializeTimer(); - if (zoneRenderer == null) return; + if (zoneCache.getZoneRenderer() == null) return; - setScale(zoneRenderer.getZoneScale()); + setScale(zoneCache.getZoneRenderer().getZoneScale()); timer.start("paintComponent:createView"); - PlayerView playerView = zoneRenderer.getPlayerView(); + PlayerView playerView = zoneCache.getZoneRenderer().getPlayerView(); timer.stop("paintComponent:createView"); setProjectionMatrix(cam.combined); @@ -442,13 +402,14 @@ private void doRendering() { setProjectionMatrix(hudCam.combined); - if (zoneRenderer.isLoading()) - hudTextRenderer.drawBoxedString(zoneRenderer.getLoadingProgress(), width / 2f, height / 2f); + if (zoneCache.getZoneRenderer().isLoading()) + hudTextRenderer.drawBoxedString( + zoneCache.getZoneRenderer().getLoadingProgress(), width / 2f, height / 2f); else if (MapTool.getCampaign().isBeingSerialized()) hudTextRenderer.drawBoxedString(" Please Wait ", width / 2f, height / 2f); float noteVPos = 20; - if (!zone.isVisible() && playerView.isGMView()) { + if (!zoneCache.getZone().isVisible() && playerView.isGMView()) { hudTextRenderer.drawBoxedString( I18N.getText("zone.map_not_visible"), width / 2f, height - noteVPos); noteVPos += 20; @@ -487,14 +448,15 @@ public void invalidateCurrentViewCache() { visibleScreenArea = null; lastView = null; - var zoneView = zoneRenderer.getZoneView(); + var zoneView = zoneCache.getZoneRenderer().getZoneView(); if (zoneView != null) { zoneView.flush(); } } private void renderZone(PlayerView view) { - if (zoneRenderer.isLoading() || MapTool.getCampaign().isBeingSerialized()) return; + if (zoneCache.getZoneRenderer().isLoading() || MapTool.getCampaign().isBeingSerialized()) + return; if (lastView != null && !lastView.equals(view)) { invalidateCurrentViewCache(); @@ -506,25 +468,29 @@ private void renderZone(PlayerView view) { timer.start("calcs-1"); timer.start("ZoneRenderer-getVisibleArea"); if (visibleScreenArea == null) { - visibleScreenArea = zoneRenderer.getZoneView().getVisibleArea(zoneRenderer.getPlayerView()); + visibleScreenArea = + zoneCache + .getZoneRenderer() + .getZoneView() + .getVisibleArea(zoneCache.getZoneRenderer().getPlayerView()); } timer.stop("ZoneRenderer-getVisibleArea"); timer.stop("calcs-1"); timer.start("calcs-2"); - exposedFogArea = new Area(zone.getExposedArea()); + exposedFogArea = new Area(zoneCache.getZone().getExposedArea()); timer.stop("calcs-2"); renderBoard(); if (Zone.Layer.BACKGROUND.isEnabled()) { - List drawables = zone.getBackgroundDrawnElements(); + List drawables = zoneCache.getZone().getBackgroundDrawnElements(); timer.start("drawableBackground"); renderDrawableOverlay(view, drawables); timer.stop("drawableBackground"); - List background = zone.getBackgroundStamps(false); + List background = zoneCache.getZone().getBackgroundStamps(false); if (!background.isEmpty()) { timer.start("tokensBackground"); renderTokens(background, view, false); @@ -533,7 +499,7 @@ private void renderZone(PlayerView view) { } if (Zone.Layer.OBJECT.isEnabled()) { // Drawables on the object layer are always below the grid, and... - List drawables = zone.getObjectDrawnElements(); + List drawables = zoneCache.getZone().getObjectDrawnElements(); // if (!drawables.isEmpty()) { timer.start("drawableObjects"); renderDrawableOverlay(view, drawables); @@ -548,7 +514,7 @@ private void renderZone(PlayerView view) { if (Zone.Layer.OBJECT.isEnabled()) { // ... Images on the object layer are always ABOVE the grid. - List stamps = zone.getStampTokens(false); + List stamps = zoneCache.getZone().getStampTokens(false); if (!stamps.isEmpty()) { timer.start("tokensStamp"); renderTokens(stamps, view, false); @@ -587,7 +553,7 @@ private void renderZone(PlayerView view) { * */ if (Zone.Layer.TOKEN.isEnabled()) { - List drawables = zone.getDrawnElements(); + List drawables = zoneCache.getZone().getDrawnElements(); // if (!drawables.isEmpty()) { timer.start("drawableTokens"); renderDrawableOverlay(view, drawables); @@ -595,27 +561,27 @@ private void renderZone(PlayerView view) { // } if (view.isGMView() && Zone.Layer.GM.isEnabled()) { - drawables = zone.getGMDrawnElements(); + drawables = zoneCache.getZone().getGMDrawnElements(); // if (!drawables.isEmpty()) { timer.start("drawableGM"); renderDrawableOverlay(view, drawables); timer.stop("drawableGM"); // } - List stamps = zone.getGMStamps(false); + List stamps = zoneCache.getZone().getGMStamps(false); if (!stamps.isEmpty()) { timer.start("tokensGM"); renderTokens(stamps, view, false); timer.stop("tokensGM"); } } - List tokens = zone.getTokens(false); + List tokens = zoneCache.getZone().getTokens(false); if (!tokens.isEmpty()) { timer.start("tokens"); renderTokens(tokens, view, false); timer.stop("tokens"); } timer.start("unowned movement"); - showBlockedMoves(view, zoneRenderer.getUnOwnedMovementSet(view)); + showBlockedMoves(view, zoneCache.getZoneRenderer().getUnOwnedMovementSet(view)); timer.stop("unowned movement"); } @@ -633,7 +599,7 @@ private void renderZone(PlayerView view) { } // (This method has it's own 'timer' calls) - if (zone.hasFog()) { + if (zoneCache.getZone().hasFog()) { renderFog(view); } @@ -641,7 +607,7 @@ private void renderZone(PlayerView view) { // Jamz: If there is fog or vision we may need to re-render vision-blocking type tokens // For example. this allows a "door" stamp to block vision but still allow you to see the // door. - List vblTokens = zone.getTokensAlwaysVisible(); + List vblTokens = zoneCache.getZone().getTokensAlwaysVisible(); if (!vblTokens.isEmpty()) { timer.start("tokens - always visible"); renderTokens(vblTokens, view, true); @@ -650,9 +616,9 @@ private void renderZone(PlayerView view) { // if there is fog or vision we may need to re-render figure type tokens // and figure tokens need sorting via alternative logic. - List tokens = zone.getFigureTokens(); + List tokens = zoneCache.getZone().getFigureTokens(); List sortedTokens = new ArrayList<>(tokens); - sortedTokens.sort(zone.getFigureZOrderComparator()); + sortedTokens.sort(zoneCache.getZone().getFigureZOrderComparator()); if (!tokens.isEmpty()) { timer.start("tokens - figures"); renderTokens(sortedTokens, view, true); @@ -660,7 +626,7 @@ private void renderZone(PlayerView view) { } timer.start("owned movement"); - showBlockedMoves(view, zoneRenderer.getOwnedMovementSet(view)); + showBlockedMoves(view, zoneCache.getZoneRenderer().getOwnedMovementSet(view)); timer.stop("owned movement"); // Text associated with tokens being moved is added to a list to be drawn after, i.e. on top @@ -677,7 +643,7 @@ private void renderZone(PlayerView view) { setProjectionMatrix(cam.combined); } - // if (zone.visionType ...) + // if (zoneCache.getZone().visionType ...) if (view.isGMView()) { timer.start("visionOverlayGM"); renderGMVisionOverlay(view); @@ -700,16 +666,18 @@ private void renderZone(PlayerView view) { } private void renderCoordinates(PlayerView view) { - if (!AppState.isShowCoordinates() || !(zone.getGrid() instanceof SquareGrid grid)) return; + if (!AppState.isShowCoordinates() + || !(zoneCache.getZone().getGrid() instanceof SquareGrid grid)) return; batch.setProjectionMatrix(hudCam.combined); var font = boldFont; - float cellSize = (float) zoneRenderer.getScaledGridSize(); - CellPoint topLeft = grid.convert(new ScreenPoint(0, 0).convertToZone(zoneRenderer)); - ScreenPoint sp = ScreenPoint.fromZonePoint(zoneRenderer, grid.convert(topLeft)); + float cellSize = (float) zoneCache.getZoneRenderer().getScaledGridSize(); + CellPoint topLeft = + grid.convert(new ScreenPoint(0, 0).convertToZone(zoneCache.getZoneRenderer())); + ScreenPoint sp = ScreenPoint.fromZonePoint(zoneCache.getZoneRenderer(), grid.convert(topLeft)); - Dimension size = zoneRenderer.getSize(); + Dimension size = zoneCache.getZoneRenderer().getSize(); glyphLayout.setText(font, "MMM"); float startX = glyphLayout.width + 10; @@ -754,8 +722,8 @@ private void renderCoordinates(PlayerView view) { } private void paintlightSourceIconOverlay() { - var lightbulb = fetch("lightbulb"); - for (Token token : zone.getAllTokens()) { + var lightbulb = zoneCache.fetch("lightbulb"); + for (Token token : zoneCache.getZone().getAllTokens()) { if (token.hasLightSources()) { boolean foundNormalLight = false; @@ -771,7 +739,7 @@ private void paintlightSourceIconOverlay() { continue; } - Area area = zoneRenderer.getTokenBounds(token); + Area area = zoneCache.getZoneRenderer().getTokenBounds(token); if (area == null) { continue; } @@ -789,7 +757,8 @@ private void renderPlayerDarkness(PlayerView view) { return; } - final var darkness = zoneRenderer.getZoneView().getIllumination(view).getDarkenedArea(); + final var darkness = + zoneCache.getZoneRenderer().getZoneView().getIllumination(view).getDarkenedArea(); if (darkness.isEmpty()) { // Skip the rendering work if it isn't necessary. return; @@ -800,14 +769,14 @@ private void renderPlayerDarkness(PlayerView view) { private void renderPlayerVisionOverlay(PlayerView view) { /* // This doesn't seem to have any effect ?? - if (zone.hasFog()) { + if (zoneCache.getZone().hasFog()) { Area clip = new Area(new Rectangle(getSize().width, getSize().height)); Area viewArea = new Area(exposedFogArea); List tokens = view.getTokens(); if (tokens != null && !tokens.isEmpty()) { for (Token tok : tokens) { - ExposedAreaMetaData exposedMeta = zone.getExposedAreaMetaData(tok.getExposedAreaGUID()); + ExposedAreaMetaData exposedMeta = zoneCache.getZone().getExposedAreaMetaData(tok.getExposedAreaGUID()); viewArea.add(exposedMeta.getExposedAreaHistory()); } } @@ -826,17 +795,19 @@ private void renderGMVisionOverlay(PlayerView view) { } private void renderVisionOverlay(PlayerView view) { - var tokenUnderMouse = zoneRenderer.getTokenUnderMouse(); - Area currentTokenVisionArea = zoneRenderer.getZoneView().getVisibleArea(tokenUnderMouse, view); + var tokenUnderMouse = zoneCache.getZoneRenderer().getTokenUnderMouse(); + Area currentTokenVisionArea = + zoneCache.getZoneRenderer().getZoneView().getVisibleArea(tokenUnderMouse, view); if (currentTokenVisionArea == null) { return; } Area combined = new Area(currentTokenVisionArea); - ExposedAreaMetaData meta = zone.getExposedAreaMetaData(tokenUnderMouse.getExposedAreaGUID()); + ExposedAreaMetaData meta = + zoneCache.getZone().getExposedAreaMetaData(tokenUnderMouse.getExposedAreaGUID()); Area tmpArea = new Area(meta.getExposedAreaHistory()); - tmpArea.add(zone.getExposedArea()); - if (zone.hasFog()) { + tmpArea.add(zoneCache.getZone().getExposedArea()); + if (zoneCache.getZone().hasFog()) { if (tmpArea.isEmpty()) { return; } @@ -860,7 +831,7 @@ private void renderVisionOverlay(PlayerView view) { } private void renderHaloArea(Area visible) { - var tokenUnderMouse = zoneRenderer.getTokenUnderMouse(); + var tokenUnderMouse = zoneCache.getZoneRenderer().getTokenUnderMouse(); if (tokenUnderMouse == null) return; boolean useHaloColor = @@ -891,7 +862,8 @@ private void renderFog(PlayerView view) { if (!flushFog && fogX != null && fogY != null - && (fogX != zoneRenderer.getViewOffsetX() || fogY != zoneRenderer.getViewOffsetY())) { + && (fogX != zoneCache.getZoneRenderer().getViewOffsetX() + || fogY != zoneCache.getZoneRenderer().getViewOffsetY())) { flushFog = true; } boolean cacheNotValid = @@ -910,37 +882,21 @@ private void renderFog(PlayerView view) { timer.start("renderFog-allocateBufferedImage"); timer.stop("renderFog-allocateBufferedImage"); - fogX = zoneRenderer.getViewOffsetX(); - fogY = zoneRenderer.getViewOffsetY(); + fogX = zoneCache.getZoneRenderer().getViewOffsetX(); + fogY = zoneCache.getZoneRenderer().getViewOffsetY(); timer.start("renderFog-fill"); // Fill batch.setColor(Color.WHITE); - var paint = zone.getFogPaint(); - if (paint instanceof DrawableColorPaint) { - Color.argb8888ToColor(tmpColor, ((DrawableColorPaint) paint).getColor()); - tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, view.isGMView() ? .6f : 1f); - drawer.setColor(tmpColor); - drawer.filledRectangle( - cam.position.x - width * zoom / 2f, - cam.position.y - height * zoom / 2f, - width * zoom, - height * zoom); - } else { - if (fog == null) { - var texturePaint = (DrawableTexturePaint) paint; - var image = texturePaint.getAsset().getData(); - var pix = new Pixmap(image, 0, image.length); - fog = new Texture(pix); - fog.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat); - pix.dispose(); - } - fillViewportWith(fog); - } + var paint = zoneCache.getZone().getFogPaint(); + var fogPaint = zoneCache.getPaint(paint); + var fogColor = fogPaint.color(); + fogPaint.color().set(fogColor.r, fogColor.g, fogColor.b, view.isGMView() ? .6f : 1f); + fillViewportWith(fogPaint); timer.start("renderFog-visibleArea"); - Area visibleArea = zoneRenderer.getZoneView().getVisibleArea(view); + Area visibleArea = zoneCache.getZoneRenderer().getZoneView().getVisibleArea(view); timer.stop("renderFog-visibleArea"); String msg = null; @@ -949,14 +905,14 @@ private void renderFog(PlayerView view) { msg = "renderFog-combined(" + (list == null ? 0 : list.size()) + ")"; } timer.start(msg); - combined = zone.getExposedArea(view); + combined = zoneCache.getZone().getExposedArea(view); timer.stop(msg); timer.start("renderFogArea"); Area exposedArea = null; Area tempArea = new Area(); boolean combinedView = - !zoneRenderer.getZoneView().isUsingVision() + !zoneCache.getZoneRenderer().getZoneView().isUsingVision() || MapTool.isPersonalServer() || !MapTool.getServerPolicy().isUseIndividualFOW() || view.isGMView(); @@ -965,7 +921,8 @@ private void renderFog(PlayerView view) { // if there are tokens selected combine the areas, then, if individual FOW is enabled // we pass the combined exposed area to build the soft FOW and visible area. for (Token tok : view.getTokens()) { - ExposedAreaMetaData meta = zone.getExposedAreaMetaData(tok.getExposedAreaGUID()); + ExposedAreaMetaData meta = + zoneCache.getZone().getExposedAreaMetaData(tok.getExposedAreaGUID()); exposedArea = meta.getExposedAreaHistory(); tempArea.add(new Area(exposedArea)); } @@ -988,7 +945,7 @@ private void renderFog(PlayerView view) { // exposed area's to build the soft FOW. if (combinedView) { if (combined.isEmpty()) { - combined = zone.getExposedArea(); + combined = zoneCache.getZone().getExposedArea(); } areaRenderer.setColor(Color.CLEAR); areaRenderer.fillArea(batch, combined); @@ -996,14 +953,15 @@ private void renderFog(PlayerView view) { renderFogOutline(); } else { Area myCombined = new Area(); - List myToks = zone.getTokens(); + List myToks = zoneCache.getZone().getTokens(); for (Token tok : myToks) { if (!AppUtil.playerOwns( tok)) { // Only here if !isGMview() so should the tokens already be in // PlayerView.getTokens()? continue; } - ExposedAreaMetaData meta = zone.getExposedAreaMetaData(tok.getExposedAreaGUID()); + ExposedAreaMetaData meta = + zoneCache.getZone().getExposedAreaMetaData(tok.getExposedAreaGUID()); exposedArea = meta.getExposedAreaHistory(); myCombined.add(new Area(exposedArea)); } @@ -1036,7 +994,7 @@ private void setProjectionMatrix(Matrix4 matrix) { } private void renderFogArea(Area softFog, Area visibleArea) { - if (zoneRenderer.getZoneView().isUsingVision()) { + if (zoneCache.getZoneRenderer().getZoneView().isUsingVision()) { if (visibleArea != null && !visibleArea.isEmpty()) { tmpColor.set(0, 0, 0, AppPreferences.getFogOverlayOpacity() / 255.0f); areaRenderer.setColor(tmpColor); @@ -1066,7 +1024,7 @@ private void renderFogOutline() { private void renderLabels(PlayerView view) { timer.start("labels-1"); - for (Label label : zone.getLabels()) { + for (Label label : zoneCache.getZone().getLabels()) { timer.start("labels-1.1"); Color.argb8888ToColor(tmpColor, label.getForegroundColor().getRGB()); if (label.isShowBackground()) { @@ -1086,14 +1044,14 @@ private void renderLabels(PlayerView view) { } private void showBlockedMoves(PlayerView view, Set movementSet) { - var selectionSetMap = zoneRenderer.getSelectionSetMap(); + var selectionSetMap = zoneCache.getZoneRenderer().getSelectionSetMap(); if (selectionSetMap.isEmpty()) { return; } boolean clipInstalled = false; for (ZoneRenderer.SelectionSet set : movementSet) { - Token keyToken = zone.getToken(set.getKeyToken()); + Token keyToken = zoneCache.getZone().getToken(set.getKeyToken()); if (keyToken == null) { // It was removed ? selectionSetMap.remove(set.getKeyToken()); @@ -1106,7 +1064,7 @@ private void showBlockedMoves(PlayerView view, Set mo ZoneWalker walker = set.getWalker(); for (GUID tokenGUID : set.getTokens()) { - Token token = zone.getToken(tokenGUID); + Token token = zoneCache.getZone().getToken(tokenGUID); // Perhaps deleted? if (token == null) { @@ -1128,8 +1086,8 @@ private void showBlockedMoves(PlayerView view, Set mo if (!view.isGMView() && !AppUtil.playerOwns(token) && visibleScreenArea == null - && zone.hasFog() - && zoneRenderer.getZoneView().isUsingVision()) { + && zoneCache.getZone().hasFog() + && zoneCache.getZoneRenderer().getZoneView().isUsingVision()) { continue; } @@ -1140,10 +1098,10 @@ private void showBlockedMoves(PlayerView view, Set mo } // OPTIMIZE: combine this with the code in renderTokens() - java.awt.Rectangle footprintBounds = token.getBounds(zone); + java.awt.Rectangle footprintBounds = token.getBounds(zoneCache.getZone()); // get token image, using image table if present - Sprite image = getSprite(token.getImageAssetId()); + Sprite image = zoneCache.getSprite(token.getImageAssetId(), stateTime); if (image == null) continue; // Vision visibility @@ -1169,7 +1127,7 @@ private void showBlockedMoves(PlayerView view, Set mo if (token == keyToken && !token.isStamp()) { renderPath( walker != null ? walker.getPath() : set.getGridlessPath(), - token.getFootprint(zone.getGrid())); + token.getFootprint(zoneCache.getZone().getGrid())); } // Show current Blocked Movement directions for A* @@ -1181,9 +1139,10 @@ private void showBlockedMoves(PlayerView view, Set mo var blockedMoves = entry.getValue(); for (CellPoint point : blockedMoves) { - ZonePoint zp = point.midZonePoint(zoneRenderer.getZone().getGrid(), position); + ZonePoint zp = + point.midZonePoint(zoneCache.getZoneRenderer().getZone().getGrid(), position); double r = (zp.x - 1) * 45; - showBlockedMoves(zp, r, getSprite("block_move"), 1.0f); + showBlockedMoves(zp, r, zoneCache.getSprite("block_move"), 1.0f); } } } @@ -1201,10 +1160,10 @@ private void showBlockedMoves(PlayerView view, Set mo var w = footprintBounds.width; var h = footprintBounds.height; - Grid grid = zone.getGrid(); + Grid grid = zoneCache.getZone().getGrid(); boolean checkForFog = MapTool.getServerPolicy().isUseIndividualFOW() - && zoneRenderer.getZoneView().isUsingVision(); + && zoneCache.getZoneRenderer().getZoneView().isUsingVision(); boolean showLabels = isOwner; if (checkForFog) { Path path = @@ -1225,7 +1184,7 @@ private void showBlockedMoves(PlayerView view, Set mo if (lastPoint instanceof CellPoint) { tokenRectangle = token.getFootprint(grid).getBounds(grid, (CellPoint) lastPoint); } else { - java.awt.Rectangle tokBounds = token.getBounds(zone); + java.awt.Rectangle tokBounds = token.getBounds(zoneCache.getZone()); tokenRectangle = new java.awt.Rectangle(); tokenRectangle.setBounds( lastPoint.x, @@ -1235,10 +1194,14 @@ private void showBlockedMoves(PlayerView view, Set mo } showLabels = showLabels - || zoneRenderer.getZoneView().getVisibleArea(view).intersects(tokenRectangle); + || zoneCache + .getZoneRenderer() + .getZoneView() + .getVisibleArea(view) + .intersects(tokenRectangle); } } else { - boolean hasFog = zone.hasFog(); + boolean hasFog = zoneCache.getZone().hasFog(); boolean fogIntersects = exposedFogArea.intersects(footprintBounds); showLabels = showLabels || (visibleScreenArea == null && !hasFog); // no vision - fog showLabels = @@ -1276,8 +1239,8 @@ private void showBlockedMoves(PlayerView view, Set mo c += Math.hypot(a, b); lastPoint = zp; } - c /= zone.getGrid().getSize(); // Number of "cells" - c *= zone.getUnitsPerCell(); // "actual" distance traveled + c /= zoneCache.getZone().getGrid().getSize(); // Number of "cells" + c *= zoneCache.getZone().getUnitsPerCell(); // "actual" distance traveled distance = NumberFormat.getInstance().format(c); } if (!distance.isEmpty()) { @@ -1296,8 +1259,10 @@ private void showBlockedMoves(PlayerView view, Set mo private void showBlockedMoves(ZonePoint zp, double angle, Sprite image, float size) { // Resize image to size of 1/4 size of grid - var resizeWidth = (float) zone.getGrid().getCellWidth() / image.getWidth() * .25f; - var resizeHeight = (float) zone.getGrid().getCellHeight() / image.getHeight() * .25f; + var resizeWidth = + (float) zoneCache.getZone().getGrid().getCellWidth() / image.getWidth() * .25f; + var resizeHeight = + (float) zoneCache.getZone().getGrid().getCellHeight() / image.getHeight() * .25f; var w = image.getWidth() * resizeWidth * size; var h = image.getHeight() * resizeHeight * size; @@ -1312,7 +1277,7 @@ private void renderAuras(PlayerView view) { // Setup timer.start("renderAuras:getAuras"); - final var drawableAuras = zoneRenderer.getZoneView().getDrawableAuras(); + final var drawableAuras = zoneCache.getZoneRenderer().getZoneView().getDrawableAuras(); timer.stop("renderAuras:getAuras"); timer.start("renderAuras:renderAuraOverlay"); @@ -1323,13 +1288,14 @@ private void renderAuras(PlayerView view) { private void renderLights(PlayerView view) { // Collect and organize lights timer.start("renderLights:getLights"); - final var drawableLights = zoneRenderer.getZoneView().getDrawableLights(view); + final var drawableLights = zoneCache.getZoneRenderer().getZoneView().getDrawableLights(view); timer.stop("renderLights:getLights"); if (AppState.isShowLights()) { // Lighting enabled. timer.start("renderLights:renderLightOverlay"); - // zone.getLightingStyle() is not supported currently as you would probably need a custom + // zoneCache.getZone().getLightingStyle() is not supported currently as you would probably + // need a custom // shader renderLightOverlay( @@ -1350,7 +1316,7 @@ private void renderLights(PlayerView view) { private void renderLumensOverlay(PlayerView view, float overlayAlpha) { final var disjointLumensLevels = - zoneRenderer.getZoneView().getDisjointObscuredLumensLevels(view); + zoneCache.getZoneRenderer().getZoneView().getDisjointObscuredLumensLevels(view); timer.start("renderLumensOverlay:allocateBuffer"); batch.flush(); @@ -1360,7 +1326,7 @@ private void renderLumensOverlay(PlayerView view, float overlayAlpha) { batch.setBlendFunction(GL20.GL_ONE, GL20.GL_NONE); var A_d = overlayAlpha; // At night, show any uncovered areas as dark. In daylight, show them as light (clear). - if (zone.getVisionType() == Zone.VisionType.NIGHT) { + if (zoneCache.getZone().getVisionType() == Zone.VisionType.NIGHT) { ScreenUtils.clear(0, 0, 0, overlayAlpha); } else { A_d = 0; @@ -1496,8 +1462,8 @@ private void createScreenshot(String name) { } private void renderGrid(PlayerView view) { - var grid = zone.getGrid(); - var scale = (float) zoneRenderer.getScale(); + var grid = zoneCache.getZone().getGrid(); + var scale = (float) zoneCache.getZoneRenderer().getScale(); int gridSize = (int) (grid.getSize() * scale); if (!AppState.isShowGrid() || gridSize < ZoneRenderer.MIN_GRID_SIZE) { @@ -1520,21 +1486,21 @@ private void renderGrid(PlayerView view) { private void renderGrid(HexGrid grid) { - Color.argb8888ToColor(tmpColor, zone.getGridColor()); + Color.argb8888ToColor(tmpColor, zoneCache.getZone().getGridColor()); drawer.setColor(tmpColor); - var path = grid.createShape(zoneRenderer.getScale()); + var path = grid.createShape(zoneCache.getZoneRenderer().getScale()); var floats = areaRenderer.pathToFloatArray(path.getPathIterator(null)); - int offU = grid.getOffU(zoneRenderer); - int offV = grid.getOffV(zoneRenderer); + int offU = grid.getOffU(zoneCache.getZoneRenderer()); + int offV = grid.getOffV(zoneCache.getZoneRenderer()); int count = 0; var lineWidth = AppState.getGridSize(); for (double v = offV % (grid.getScaledMinorRadius() * 2) - (grid.getScaledMinorRadius() * 2); - v < grid.getRendererSizeV(zoneRenderer); + v < grid.getRendererSizeV(zoneCache.getZoneRenderer()); v += grid.getScaledMinorRadius()) { double offsetU = (int) @@ -1547,7 +1513,7 @@ private void renderGrid(HexGrid grid) { offU % (2 * grid.getScaledEdgeLength() + 2 * grid.getScaledEdgeProjection()) - (2 * grid.getScaledEdgeLength() + 2 * grid.getScaledEdgeProjection()); double end = - grid.getRendererSizeU(zoneRenderer) + grid.getRendererSizeU(zoneCache.getZoneRenderer()) + 2 * grid.getScaledEdgeLength() + 2 * grid.getScaledEdgeProjection(); double incr = 2 * grid.getScaledEdgeLength() + 2 * grid.getScaledEdgeProjection(); @@ -1575,10 +1541,10 @@ private void renderGrid(HexGrid grid) { } private void renderGrid(IsometricGrid grid) { - var scale = (float) zoneRenderer.getScale(); + var scale = (float) zoneCache.getZoneRenderer().getScale(); int gridSize = (int) (grid.getSize() * scale); - Color.argb8888ToColor(tmpColor, zone.getGridColor()); + Color.argb8888ToColor(tmpColor, zoneCache.getZone().getGridColor()); drawer.setColor(tmpColor); @@ -1590,8 +1556,12 @@ private void renderGrid(IsometricGrid grid) { double isoHeight = grid.getSize() * scale; double isoWidth = grid.getSize() * 2 * scale; - int offX = (int) (zoneRenderer.getViewOffsetX() % isoWidth + grid.getOffsetX() * scale) + 1; - int offY = (int) (zoneRenderer.getViewOffsetY() % gridSize + grid.getOffsetY() * scale) + 1; + int offX = + (int) (zoneCache.getZoneRenderer().getViewOffsetX() % isoWidth + grid.getOffsetX() * scale) + + 1; + int offY = + (int) (zoneCache.getZoneRenderer().getViewOffsetY() % gridSize + grid.getOffsetY() * scale) + + 1; int startCol = (int) ((int) (x / isoWidth) * isoWidth); int startRow = (int) ((int) (y / gridSize) * gridSize); @@ -1610,7 +1580,7 @@ private void renderGrid(IsometricGrid grid) { } private void drawHatch(IsometricGrid grid, float x, float y) { - double isoWidth = grid.getSize() * zoneRenderer.getScale(); + double isoWidth = grid.getSize() * zoneCache.getZoneRenderer().getScale(); int hatchSize = isoWidth > 10 ? (int) isoWidth / 8 : 2; var lineWidth = AppState.getGridSize(); @@ -1620,9 +1590,9 @@ private void drawHatch(IsometricGrid grid, float x, float y) { } private void renderGrid(SquareGrid grid) { - var scale = (float) zoneRenderer.getScale(); + var scale = (float) zoneCache.getZoneRenderer().getScale(); float gridSize = (grid.getSize() * scale); - Color.argb8888ToColor(tmpColor, zone.getGridColor()); + Color.argb8888ToColor(tmpColor, zoneCache.getZone().getGridColor()); drawer.setColor(tmpColor); @@ -1631,8 +1601,12 @@ private void renderGrid(SquareGrid grid) { var w = hudCam.viewportWidth; var h = hudCam.viewportHeight; - var offX = Math.round(zoneRenderer.getViewOffsetX() % gridSize + grid.getOffsetX() * scale); - var offY = Math.round(zoneRenderer.getViewOffsetY() % gridSize + grid.getOffsetY() * scale); + var offX = + Math.round( + zoneCache.getZoneRenderer().getViewOffsetX() % gridSize + grid.getOffsetX() * scale); + var offY = + Math.round( + zoneCache.getZoneRenderer().getViewOffsetY() % gridSize + grid.getOffsetY() * scale); var startCol = ((int) (x / gridSize) * gridSize); var startRow = ((int) (y / gridSize) * gridSize); @@ -1670,47 +1644,39 @@ else if (drawable instanceof LineCellTemplate) } private void renderBoard() { - if (!zone.drawBoard()) return; - - var paint = zone.getBackgroundPaint(); - if (paint instanceof DrawableColorPaint) { - Color.argb8888ToColor(tmpColor, ((DrawableColorPaint) paint).getColor()); - drawer.setColor(tmpColor); - drawer.filledRectangle( - cam.position.x - width * zoom / 2f, - cam.position.y - height * zoom / 2f, - width * zoom, - height * zoom); - } else { - if (background == null) { - var texturePaint = (DrawableTexturePaint) paint; - var image = texturePaint.getAsset().getData(); - var pix = new Pixmap(image, 0, image.length); - background = new Texture(pix); - background.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat); - pix.dispose(); - } - fillViewportWith(background); - } + if (!zoneCache.getZone().drawBoard()) return; - var map = getSprite(zone.getMapAssetId()); + var paint = zoneCache.getZone().getBackgroundPaint(); + fillViewportWith(zoneCache.getPaint(paint)); + + var map = zoneCache.getSprite(zoneCache.getZone().getMapAssetId(), stateTime); if (map != null) { - map.setPosition(zone.getBoardX(), zone.getBoardY() - map.getHeight()); + map.setPosition( + zoneCache.getZone().getBoardX(), zoneCache.getZone().getBoardY() - map.getHeight()); map.draw(batch); } } - private void fillViewportWith(Texture texture) { - var w = ((int) (cam.viewportWidth * zoom / texture.getWidth()) + 4) * texture.getWidth(); - var h = ((int) (cam.viewportHeight * zoom / texture.getHeight()) + 4) * texture.getHeight(); + private void fillViewportWith(ZoneCache.GdxPaint paint) { + // var w = ((int) (cam.viewportWidth * zoom / texture.getWidth()) + 4) * texture.getWidth(); + // var h = ((int) (cam.viewportHeight * zoom / texture.getHeight()) + 4) * texture.getHeight(); + var w = cam.viewportWidth * zoom; + var h = cam.viewportHeight * zoom; var startX = (cam.position.x - cam.viewportWidth * zoom / 2); - startX = (((int) startX) / texture.getWidth()) * texture.getWidth() - texture.getWidth(); + // startX = (((int) startX) / texture.getWidth()) * texture.getWidth() - texture.getWidth(); var startY = (cam.position.y - cam.viewportHeight * zoom / 2); - startY = (((int) startY) / texture.getHeight()) * texture.getHeight() - texture.getHeight(); + // startY = (((int) startY) / texture.getHeight()) * texture.getHeight() - texture.getHeight(); + var vertices = + new float[] { + startX, startY, startX, startY + h, startX + w, startY + h, startX + w, startY, + }; + var indices = new short[] {0, 1, 2, 0, 2, 4}; - batch.draw(texture, startX, startY, 0, 0, w, h); + var polySprite = new PolygonSprite(new PolygonRegion(paint.textureRegion(), vertices, indices)); + polySprite.setColor(paint.color()); + polySprite.draw(batch); } private void renderTokens(List tokenList, PlayerView view, boolean figuresOnly) { @@ -1725,11 +1691,12 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure timer.start("tokenlist-1"); try { - if (token.isStamp() && zoneRenderer.isTokenMoving(token)) { + if (token.isStamp() && zoneCache.getZoneRenderer().isTokenMoving(token)) { continue; } // Don't bother if it's not visible - // NOTE: Not going to use zone.isTokenVisible as it is very slow. In fact, it's faster + // NOTE: Not going to use zoneCache.getZone().isTokenVisible as it is very slow. In fact, + // it's faster // to just draw the tokens and let them be clipped if ((!token.isVisible() || token.isGMStamp()) && !isGMView) { continue; @@ -1742,7 +1709,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure timer.stop("tokenlist-1"); } - java.awt.Rectangle footprintBounds = token.getBounds(zone); + java.awt.Rectangle footprintBounds = token.getBounds(zoneCache.getZone()); java.awt.Rectangle origBounds = (java.awt.Rectangle) footprintBounds.clone(); Area tokenBounds = new Area(footprintBounds); @@ -1761,7 +1728,9 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure try { // Vision visibility - if (!isGMView && token.isToken() && zoneRenderer.getZoneView().isUsingVision()) { + if (!isGMView + && token.isToken() + && zoneCache.getZoneRenderer().getZoneView().isUsingVision()) { if (!GraphicsUtil.intersects(visibleScreenArea, tokenBounds)) { continue; } @@ -1773,14 +1742,15 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure // Previous path timer.start("renderTokens:ShowPath"); - if (zoneRenderer.getShowPathList().contains(token) && token.getLastPath() != null) { - renderPath(token.getLastPath(), token.getFootprint(zone.getGrid())); + if (zoneCache.getZoneRenderer().getShowPathList().contains(token) + && token.getLastPath() != null) { + renderPath(token.getLastPath(), token.getFootprint(zoneCache.getZone().getGrid())); } timer.stop("renderTokens:ShowPath"); // get token image sprite, using image table if present var imageKey = token.getTokenImageAssetId(); - Sprite image = getSprite(imageKey); + Sprite image = zoneCache.getSprite(imageKey, stateTime); prepareTokenSprite(image, token, footprintBounds); @@ -1790,16 +1760,16 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure areaRenderer.setColor(tmpColor); areaRenderer.drawArea( batch, - zone.getGrid().getTokenCellArea(tokenBounds), + zoneCache.getZone().getGrid().getTokenCellArea(tokenBounds), false, AppPreferences.getHaloLineWidth()); } // Calculate alpha Transparency from token and use opacity for indicating that token is moving float opacity = token.getTokenOpacity(); - if (zoneRenderer.isTokenMoving(token)) opacity = opacity / 2.0f; + if (zoneCache.getZoneRenderer().isTokenMoving(token)) opacity = opacity / 2.0f; - Area tokenCellArea = zone.getGrid().getTokenCellArea(tokenBounds); + Area tokenCellArea = zoneCache.getZone().getGrid().getTokenCellArea(tokenBounds); Area cellArea = new Area(visibleScreenArea); cellArea.intersect(tokenCellArea); @@ -1807,9 +1777,12 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure timer.start("tokenlist-7"); image.setColor(1, 1, 1, opacity); if (!isGMView - && zoneRenderer.getZoneView().isUsingVision() + && zoneCache.getZoneRenderer().getZoneView().isUsingVision() && (token.getShape() == Token.TokenShape.FIGURE)) { - if (zone.getGrid().checkCenterRegion(tokenCellArea.getBounds(), visibleScreenArea)) { + if (zoneCache + .getZone() + .getGrid() + .checkCenterRegion(tokenCellArea.getBounds(), visibleScreenArea)) { // if we can see the centre, draw the whole token image.draw(batch); } else { @@ -1817,12 +1790,14 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure paintClipped(image, tokenCellArea, cellArea); } } else if (!isGMView - && zoneRenderer.getZoneView().isUsingVision() + && zoneCache.getZoneRenderer().getZoneView().isUsingVision() && token.isAlwaysVisible()) { // Jamz: Always Visible tokens will get rendered again here to place on top of FoW if (GraphicsUtil.intersects(visibleScreenArea, tokenCellArea)) { // if we can see a portion of the stamp/token, draw the whole thing, defaults to 2/9ths - if (zone.getGrid() + if (zoneCache + .getZone() + .getGrid() .checkRegion( tokenCellArea.getBounds(), visibleScreenArea, @@ -1840,7 +1815,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure } else { // fallthrough normal token rendered against visible area - if (zoneRenderer.isTokenInNeedOfClipping(token, tokenCellArea, isGMView)) { + if (zoneCache.getZoneRenderer().isTokenInNeedOfClipping(token, tokenCellArea, isGMView)) { paintClipped(image, tokenCellArea, cellArea); } else image.draw(batch); } @@ -1862,7 +1837,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure java.awt.Shape arrow = getFigureFacingArrow(token.getFacing(), footprintBounds.width / 2); - if (!zone.getGrid().isIsometric()) { + if (!zoneCache.getZone().getGrid().isIsometric()) { arrow = getCircleFacingArrow(token.getFacing(), footprintBounds.width / 2); } @@ -1894,7 +1869,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure } case CIRCLE: arrow = getCircleFacingArrow(token.getFacing(), footprintBounds.width / 2); - if (zone.getGrid().isIsometric()) { + if (zoneCache.getZone().getGrid().isIsometric()) { arrow = getFigureFacingArrow(token.getFacing(), footprintBounds.width / 2); } arrowArea = new Area(arrow); @@ -1914,7 +1889,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure batch.setTransformMatrix(tmpMatrix); break; case SQUARE: - if (zone.getGrid().isIsometric()) { + if (zoneCache.getZone().getGrid().isIsometric()) { arrow = getFigureFacingArrow(token.getFacing(), footprintBounds.width / 2); cx = origBounds.x + origBounds.width / 2f; cy = origBounds.y + origBounds.height / 2f; @@ -1970,7 +1945,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure overlay = (AbstractTokenOverlay) stateValue; } if (overlay == null - || overlay.isMouseover() && token != zoneRenderer.getTokenUnderMouse() + || overlay.isMouseover() && token != zoneCache.getZoneRenderer().getTokenUnderMouse() || !overlay.showPlayer(token, MapTool.getPlayer())) { continue; } @@ -1984,7 +1959,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure Object barValue = token.getState(bar); BarTokenOverlay overlay = MapTool.getCampaign().getTokenBarsMap().get(bar); if (overlay == null - || overlay.isMouseover() && token != zoneRenderer.getTokenUnderMouse() + || overlay.isMouseover() && token != zoneCache.getZoneRenderer().getTokenUnderMouse() || !overlay.showPlayer(token, MapTool.getPlayer())) { continue; } @@ -1995,7 +1970,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure timer.start("tokenlist-11"); // Keep track of which tokens have been drawn so we can perform post-processing on them later // (such as selection borders and names/labels) - if (!zoneRenderer.getActiveLayer().equals(token.getLayer())) continue; + if (!zoneCache.getZoneRenderer().getActiveLayer().equals(token.getLayer())) continue; timer.stop("tokenlist-11"); timer.start("tokenlist-12"); @@ -2004,24 +1979,27 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure // Selection and labels - var tokenRectangle = token.getBounds(zone); + var tokenRectangle = token.getBounds(zoneCache.getZone()); var gdxTokenRectangle = new Rectangle( tokenRectangle.x, -tokenRectangle.y - tokenRectangle.height, tokenRectangle.width, tokenRectangle.height); - boolean isSelected = zoneRenderer.getSelectedTokenSet().contains(token.getId()); + boolean isSelected = + zoneCache.getZoneRenderer().getSelectedTokenSet().contains(token.getId()); if (isSelected) { ImageBorder selectedBorder = token.isStamp() ? AppStyle.selectedStampBorder : AppStyle.selectedBorder; - if (zoneRenderer.getHighlightCommonMacros().contains(token)) { + if (zoneCache.getZoneRenderer().getHighlightCommonMacros().contains(token)) { selectedBorder = AppStyle.commonMacroBorder; } if (!AppUtil.playerOwns(token)) { selectedBorder = AppStyle.selectedUnownedBorder; } - if (useIF && !token.isStamp() && zoneRenderer.getZoneView().isUsingVision()) { + if (useIF + && !token.isStamp() + && zoneCache.getZoneRenderer().getZoneView().isUsingVision()) { Tool tool = MapTool.getFrame().getToolbox().getSelectedTool(); if (tool instanceof @@ -2069,33 +2047,34 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure // Token names and labels boolean showCurrentTokenLabel = - AppState.isShowTokenNames() || token == zoneRenderer.getTokenUnderMouse(); + AppState.isShowTokenNames() || token == zoneCache.getZoneRenderer().getTokenUnderMouse(); // if policy does not auto-reveal FoW, check if fog covers the token (slow) if (showCurrentTokenLabel && !isGMView - && (!zoneRenderer.getZoneView().isUsingVision() + && (!zoneCache.getZoneRenderer().getZoneView().isUsingVision() || !MapTool.getServerPolicy().isAutoRevealOnMovement()) - && !zone.isTokenVisible(token)) { + && !zoneCache.getZone().isTokenVisible(token)) { showCurrentTokenLabel = false; } if (showCurrentTokenLabel) { - itemRenderList.add(new TokenLabelRenderer(token, zone, isGMView, textRenderer)); + itemRenderList.add( + new TokenLabelRenderer(token, zoneCache.getZone(), isGMView, textRenderer)); } timer.stop("tokenlist-12"); } timer.start("tokenlist-13"); - var tokenStackMap = zoneRenderer.getTokenStackMap(); + var tokenStackMap = zoneCache.getZoneRenderer().getTokenStackMap(); // Stacks if (!tokenList.isEmpty() && !tokenList.get(0).isStamp()) { // TODO: find a cleaner way to indicate token layer if (tokenStackMap != null) { // FIXME Needed to prevent NPE but how can it be null? for (Token token : tokenStackMap.keySet()) { - var tokenRectangle = token.getBounds(zone); - var stackImage = fetch("stack"); + var tokenRectangle = token.getBounds(zoneCache.getZone()); + var stackImage = zoneCache.fetch("stack"); batch.draw( stackImage, tokenRectangle.x + tokenRectangle.width - stackImage.getRegionWidth() + 2, @@ -2123,23 +2102,10 @@ private void prepareTokenSprite(Sprite image, Token token, java.awt.Rectangle fo timer.start("tokenlist-5a"); if (token.isFlippedIso()) { - var assetId = token.getImageAssetId(); - if (!isoSprites.containsKey(assetId)) { - var workImage = IsometricGrid.isoImage(ImageManager.getImage(assetId)); - try { - var bytes = ImageUtil.imageToBytes(workImage, "png"); - var pix = new Pixmap(bytes, 0, bytes.length); - image = new Sprite(new Texture(pix)); - pix.dispose(); - } catch (Exception e) { - } - isoSprites.put(assetId, image); - } else { - image = isoSprites.get(assetId); - } + image = zoneCache.getIsoSprite(token.getImageAssetId()); token.setHeight((int) image.getHeight()); token.setWidth((int) image.getWidth()); - footprintBounds = token.getBounds(zone); + footprintBounds = token.getBounds(zoneCache.getZone()); } timer.stop("tokenlist-5a"); @@ -2207,98 +2173,19 @@ private void prepareTokenSprite(Sprite image, Token token, java.awt.Rectangle fo timer.stop("tokenlist-6"); } - private Sprite getSprite(MD5Key key) { - if (key == null) return null; - - var videoPlayer = videoPlayerMap.get(key); - if (videoPlayer != null) { - boolean skip = false; - if (!videoPlayer.isPlaying()) { - try { - var file = AssetManager.getAssetCacheFile(key); - if (file != null) { - videoPlayer.play(Gdx.files.absolute(file.getAbsolutePath())); - videoPlayer.setVolume(0); - } else skip = true; - - } catch (FileNotFoundException ex) { - log.warn(ex.toString()); - } - } - if (!skip) { - videoPlayer.update(); - var texture = videoPlayer.getTexture(); - if (texture != null) { - var sprite = new Sprite(texture); - sprite.setSize(texture.getWidth(), texture.getHeight()); - return sprite; - } - } - } - - var animation = animationMap.get(key); - if (animation != null) { - var currentFrame = animation.getKeyFrame(stateTime, true); - var sprite = new Sprite(currentFrame); - sprite.setSize(currentFrame.getRegionWidth(), currentFrame.getRegionHeight()); - return sprite; - } - - var sprite = bigSprites.get(key); - if (sprite != null) { - sprite.setSize(sprite.getTexture().getWidth(), sprite.getTexture().getHeight()); - return sprite; - } - - return getSprite(key.toString()); - } - - private Sprite getSprite(String name) { - var sprite = fetchedSprites.get(name); - if (sprite != null) { - var region = fetchedRegions.get(name); - sprite.setSize(region.getRegionWidth(), region.getRegionHeight()); - return sprite; - } - - var region = fetch(name); - - if (name != "unknown" && region == null) { - AssetManager.getAssetAsynchronously(new MD5Key(name), this); - return getSprite("unknown"); - } - - sprite = new Sprite(region); - sprite.setSize(region.getRegionWidth(), region.getRegionHeight()); - - fetchedSprites.put(name, sprite); - return sprite; - } - - private TextureRegion fetch(String regionName) { - var region = fetchedRegions.get(regionName); - if (region != null) return region; - - region = tokenAtlas.findRegion(regionName); - if (region == null) region = atlas.findRegion(regionName); - - fetchedRegions.put(regionName, region); - return region; - } - private void renderImageBorderAround(ImageBorder border, Rectangle bounds) { var imagePath = border.getImagePath(); var index = imagePath.indexOf("border/"); var bordername = imagePath.substring(index); - var topRight = fetch(bordername + "/tr"); - var top = fetch(bordername + "/top"); - var topLeft = fetch(bordername + "/tl"); - var left = fetch(bordername + "/left"); - var bottomLeft = fetch(bordername + "/bl"); - var bottom = fetch(bordername + "/bottom"); - var bottomRight = fetch(bordername + "/br"); - var right = fetch(bordername + "/right"); + var topRight = zoneCache.fetch(bordername + "/tr"); + var top = zoneCache.fetch(bordername + "/top"); + var topLeft = zoneCache.fetch(bordername + "/tl"); + var left = zoneCache.fetch(bordername + "/left"); + var bottomLeft = zoneCache.fetch(bordername + "/bl"); + var bottom = zoneCache.fetch(bordername + "/bottom"); + var bottomRight = zoneCache.fetch(bordername + "/br"); + var right = zoneCache.fetch(bordername + "/right"); // x,y is bottom left of the rectangle var leftMargin = border.getLeftMargin(); @@ -2393,12 +2280,12 @@ private void renderTokenOverlay( MultipleImageBarTokenOverlay overlay, Token token, double barValue) { int incr = overlay.findIncrement(barValue); - var bounds = token.getBounds(zone); + var bounds = token.getBounds(zoneCache.getZone()); var x = bounds.x; var y = -bounds.y - bounds.height; // Get the images - var image = getSprite(overlay.getAssetIds()[incr]); + var image = zoneCache.getSprite(overlay.getAssetIds()[incr], stateTime); Dimension d = bounds.getSize(); Dimension size = new Dimension((int) image.getWidth(), (int) image.getHeight()); @@ -2423,12 +2310,12 @@ private void renderTokenOverlay( private void renderTokenOverlay( SingleImageBarTokenOverlay overlay, Token token, double barValue) { - var bounds = token.getBounds(zone); + var bounds = token.getBounds(zoneCache.getZone()); var x = bounds.x; var y = -bounds.y - bounds.height; // Get the images - var image = getSprite(overlay.getAssetId()); + var image = zoneCache.getSprite(overlay.getAssetId(), stateTime); Dimension d = bounds.getSize(); Dimension size = new Dimension((int) image.getWidth(), (int) image.getHeight()); @@ -2488,7 +2375,7 @@ private void renderTokenOverlay( } private void renderTokenOverlay(DrawnBarTokenOverlay overlay, Token token, double barValue) { - var bounds = token.getBounds(zone); + var bounds = token.getBounds(zoneCache.getZone()); var x = bounds.x; var y = -bounds.y - bounds.height; var w = bounds.width; @@ -2530,7 +2417,7 @@ private void renderTokenOverlay(DrawnBarTokenOverlay overlay, Token token, doubl } private void renderTokenOverlay(TwoToneBarTokenOverlay overlay, Token token, double barValue) { - var bounds = token.getBounds(zone); + var bounds = token.getBounds(zoneCache.getZone()); var x = bounds.x; var y = -bounds.y - bounds.height; var w = bounds.width; @@ -2585,13 +2472,13 @@ private void renderTokenOverlay(TwoToneBarTokenOverlay overlay, Token token, dou } private void renderTokenOverlay(TwoImageBarTokenOverlay overlay, Token token, double barValue) { - var bounds = token.getBounds(zone); + var bounds = token.getBounds(zoneCache.getZone()); var x = bounds.x; var y = -bounds.y - bounds.height; // Get the images - var topImage = getSprite(overlay.getTopAssetId()); - var bottomImage = getSprite(overlay.getBottomAssetId()); + var topImage = zoneCache.getSprite(overlay.getTopAssetId(), stateTime); + var bottomImage = zoneCache.getSprite(overlay.getBottomAssetId(), stateTime); Dimension d = bounds.getSize(); Dimension size = new Dimension((int) topImage.getWidth(), (int) topImage.getHeight()); @@ -2686,7 +2573,7 @@ else if (overlay instanceof ShadedTokenOverlay) } private void renderTokenOverlay(ShadedTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zone); + var bounds = token.getBounds(zoneCache.getZone()); var x = bounds.x; var y = -bounds.y - bounds.height; var w = bounds.width; @@ -2701,7 +2588,7 @@ private void renderTokenOverlay(ShadedTokenOverlay overlay, Token token) { } private void renderTokenOverlay(ImageTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zone); + var bounds = token.getBounds(zoneCache.getZone()); var x = bounds.x; var y = -bounds.y; @@ -2709,7 +2596,7 @@ private void renderTokenOverlay(ImageTokenOverlay overlay, Token token) { java.awt.Rectangle iBounds = overlay.getImageBounds(bounds, token); Dimension d = iBounds.getSize(); - var image = getSprite(overlay.getAssetId()); + var image = zoneCache.getSprite(overlay.getAssetId(), stateTime); Dimension size = new Dimension((int) image.getWidth(), (int) image.getHeight()); SwingUtil.constrainTo(size, d.width, d.height); @@ -2732,7 +2619,7 @@ private void renderTokenOverlay(ImageTokenOverlay overlay, Token token) { } private void renderTokenOverlay(XTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zone); + var bounds = token.getBounds(zoneCache.getZone()); var x = bounds.x; var y = -bounds.y - bounds.height; var w = bounds.width; @@ -2755,7 +2642,7 @@ private void renderTokenOverlay(XTokenOverlay overlay, Token token) { } private void renderTokenOverlay(FlowColorDotTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zone); + var bounds = token.getBounds(zoneCache.getZone()); var x = bounds.x; var y = -bounds.y - bounds.height; var w = bounds.width; @@ -2775,7 +2662,7 @@ private void renderTokenOverlay(FlowColorDotTokenOverlay overlay, Token token) { } private void renderTokenOverlay(YieldTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zone); + var bounds = token.getBounds(zoneCache.getZone()); var x = bounds.x; var y = -bounds.y - bounds.height; var w = bounds.width; @@ -2804,7 +2691,7 @@ private void renderTokenOverlay(YieldTokenOverlay overlay, Token token) { } private void renderTokenOverlay(OTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zone); + var bounds = token.getBounds(zoneCache.getZone()); var x = bounds.x; var y = -bounds.y - bounds.height; var w = bounds.width; @@ -2832,7 +2719,7 @@ private void renderTokenOverlay(OTokenOverlay overlay, Token token) { } private void renderTokenOverlay(ColorDotTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zone); + var bounds = token.getBounds(zoneCache.getZone()); var x = bounds.x; var y = -bounds.y - bounds.height; var w = bounds.width; @@ -2872,7 +2759,7 @@ private void renderTokenOverlay(ColorDotTokenOverlay overlay, Token token) { } private void renderTokenOverlay(DiamondTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zone); + var bounds = token.getBounds(zoneCache.getZone()); var x = bounds.x; var y = -bounds.y - bounds.height; var w = bounds.width; @@ -2901,7 +2788,7 @@ private void renderTokenOverlay(DiamondTokenOverlay overlay, Token token) { } private void renderTokenOverlay(TriangleTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zone); + var bounds = token.getBounds(zoneCache.getZone()); var x = bounds.x; var y = -bounds.y - bounds.height; var w = bounds.width; @@ -2930,7 +2817,7 @@ private void renderTokenOverlay(TriangleTokenOverlay overlay, Token token) { } private void renderTokenOverlay(CrossTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zone); + var bounds = token.getBounds(zoneCache.getZone()); var x = bounds.x; var y = -bounds.y - bounds.height; var w = bounds.width; @@ -3048,7 +2935,7 @@ private void renderPath(Path path, TokenFootprint footprint) { if (path.getCellPath().isEmpty()) { return; } - Grid grid = zone.getGrid(); + Grid grid = zoneCache.getZone().getGrid(); // log.info("Rendering path..." + System.currentTimeMillis()); @@ -3083,7 +2970,7 @@ private void renderPath(Path path, TokenFootprint footprint) { // log.info("pathSet size: " + pathSet.size()); timer.start("renderPath-2"); - Dimension cellOffset = zone.getGrid().getCellOffset(); + Dimension cellOffset = zoneCache.getZone().getGrid().getCellOffset(); for (CellPoint p : pathSet) { ZonePoint zp = grid.convert(p); zp.x += grid.getCellWidth() / 2 + cellOffset.width; @@ -3099,14 +2986,14 @@ private void renderPath(Path path, TokenFootprint footprint) { addDistanceText( zp, 1.0f, - (float) p.getDistanceTraveled(zone), + (float) p.getDistanceTraveled(zoneCache.getZone()), (float) p.getDistanceTraveledWithoutTerrain()); } } int w = 0; for (ZonePoint p : waypointList) { ZonePoint zp = new ZonePoint(p.x + cellOffset.width, p.y + cellOffset.height); - highlightCell(zp, fetch("redDot"), .333f); + highlightCell(zp, zoneCache.fetch("redDot"), .333f); } // Line path @@ -3192,14 +3079,14 @@ private void renderPath(Path path, TokenFootprint footprint) { if (lastPoint == null) { lastPoint = ScreenPoint.fromZonePointRnd( - zoneRenderer, + zoneCache.getZoneRenderer(), zp.x + (footprintBounds.width / 2) * footprint.getScale(), zp.y + (footprintBounds.height / 2) * footprint.getScale()); continue; } ScreenPoint nextPoint = ScreenPoint.fromZonePoint( - zoneRenderer, + zoneCache.getZoneRenderer(), zp.x + (footprintBounds.width / 2) * footprint.getScale(), zp.y + (footprintBounds.height / 2) * footprint.getScale()); @@ -3237,16 +3124,16 @@ private void renderPath(Path path, TokenFootprint footprint) { p = new ZonePoint( (p.x + (footprintBounds.width / 2)), (p.y + (footprintBounds.height / 2))); - highlightCell(p, fetch("redDot"), .333f); + highlightCell(p, zoneCache.fetch("redDot"), .333f); } timer.stop("renderPath-3"); } } private TextureRegion getCellHighlight() { - if (zone.getGrid() instanceof SquareGrid) return fetch("whiteBorder"); - if (zone.getGrid() instanceof HexGrid) return fetch("hexBorder"); - if (zone.getGrid() instanceof IsometricGrid) return fetch("isoBorder"); + if (zoneCache.getZone().getGrid() instanceof SquareGrid) return zoneCache.fetch("whiteBorder"); + if (zoneCache.getZone().getGrid() instanceof HexGrid) return zoneCache.fetch("hexBorder"); + if (zoneCache.getZone().getGrid() instanceof IsometricGrid) return zoneCache.fetch("isoBorder"); return null; } @@ -3255,7 +3142,7 @@ private void addDistanceText( ZonePoint point, float size, float distance, float distanceWithoutTerrain) { if (distance == 0) return; - Grid grid = zone.getGrid(); + Grid grid = zoneCache.getZone().getGrid(); float cwidth = (float) grid.getCellWidth(); float cheight = (float) grid.getCellHeight(); @@ -3287,198 +3174,28 @@ private void addDistanceText( } private void highlightCell(ZonePoint zp, TextureRegion image, float size) { - Grid grid = zone.getGrid(); + Grid grid = zoneCache.getZone().getGrid(); float cwidth = (float) grid.getCellWidth() * size; float cheight = (float) grid.getCellHeight() * size; float rotation = 0; - if (zone.getGrid() instanceof HexGridHorizontal) rotation = 90; + if (zoneCache.getZone().getGrid() instanceof HexGridHorizontal) rotation = 90; batch.draw( image, zp.x - cwidth / 2, -zp.y - cheight / 2, 0, 0, cwidth, cheight, 1f, 1f, rotation); } - private void disposeZoneResources() { - if (!initialized) return; - - // cam.zoom = 1.0f; - offsetX = 0; - offsetY = 0; - fogX = null; - fogY = null; - fetchedRegions.clear(); - fetchedSprites.clear(); - var oldPacker = packer; - packer = createPacker(); - oldPacker.dispose(); - - Gdx.app.postRunnable( - () -> { - disposeZoneTextures(); - }); - } - - private void disposeZoneTextures() { - updateCam(); - var background = this.background; - this.background = null; - if (background != null) { - background.dispose(); - } - - var fog = this.fog; - this.fog = null; - if (fog != null) { - fog.dispose(); - } - - for (var sprite : isoSprites.values()) { - sprite.getTexture().dispose(); - } - isoSprites.clear(); - - for (var sprite : bigSprites.values()) { - sprite.getTexture().dispose(); - } - bigSprites.clear(); - animationMap.clear(); - } - - private void initializeZoneResources(Zone newZone) { - if (newZone == null || !initialized) { - return; - } - - zoneRenderer = MapTool.getFrame().getZoneRenderer(newZone); - - for (var assetId : newZone.getAllAssetIds()) { - AssetManager.getAssetAsynchronously(assetId, this); - } - zone = newZone; - } - - /* - @Override - public void modelChanged(ModelChangeEvent event) { - - Object evt = event.getEvent(); - System.out.println("ModelChangend: " + evt); - if (!(evt instanceof Zone.Event)) return; - var eventType = (Zone.Event) evt; - switch (eventType) { - case TOPOLOGY_CHANGED: - flushFog(); - // flushLight(); - break; - case FOG_CHANGED: - flushFog = true; - break; - case TOKEN_CHANGED: - { - updateVisibleArea(); - var token = (Token) event.getArg(); - break; - } - case TOKEN_ADDED: - { - var token = (Token) event.getArg(); - System.out.println(); - break; - } - } - */ - /* - if (evt == Zone.Event.TOKEN_CHANGED - || evt == Zone.Event.TOKEN_REMOVED - || evt == Zone.Event.TOKEN_ADDED) { - if (event.getArg() instanceof List) { - @SuppressWarnings("unchecked") - List list = (List) (event.getArg()); - for (Token token : list) { - zoneRenderer.flush(token); - } - } else { - zoneRenderer.flush((Token) event.getArg()); - } - }*/ - /* - var currentZone = zone; - - // for now quick and dirty - disposeZoneResources(); - initializeZoneResources(currentZone); - - } - */ - - // shapedrawer has to learn how to draw with texturePaint first. - private Texture paintToTexture(DrawablePaint paint) { - if (paint instanceof DrawableTexturePaint) { - var texturePaint = (DrawableTexturePaint) paint; - var image = texturePaint.getAsset().getData(); - var pix = new Pixmap(image, 0, image.length); - var texture = new Texture(pix); - pix.dispose(); - return texture; - } - if (paint instanceof DrawableColorPaint) { - var colorPaint = (DrawableColorPaint) paint; - var colorValue = colorPaint.getColor(); - var color = new Color(); - Color.argb8888ToColor(color, colorValue); - var pix = new Pixmap(1, 1, Pixmap.Format.RGBA8888); - - pix.setColor(color); - pix.fill(); - var texture = new Texture(pix); - pix.dispose(); - return texture; - } - return null; - } - - private Sprite paintToSprite(DrawablePaint paint) { - if (paint instanceof DrawableTexturePaint) { - var texturePaint = (DrawableTexturePaint) paint; - var image = texturePaint.getAsset().getData(); - var pix = new Pixmap(image, 0, image.length); - var sprite = new Sprite(new Texture(pix)); - sprite.setSize(pix.getWidth(), pix.getHeight()); - sprite.setPosition(0, -1 * sprite.getHeight()); - pix.dispose(); - return sprite; - } - if (paint instanceof DrawableColorPaint) { - var colorPaint = (DrawableColorPaint) paint; - var colorValue = colorPaint.getColor(); - var color = new Color(); - Color.argb8888ToColor(color, colorValue); - var pix = new Pixmap(64, 64, Pixmap.Format.RGBA8888); - - pix.setColor(color); - pix.fill(); - var sprite = new Sprite(new Texture(pix)); - sprite.setSize(pix.getWidth(), pix.getHeight()); - sprite.setPosition(0, -1 * sprite.getHeight()); - pix.dispose(); - return sprite; - } - return null; - } - @Subscribe void onZoneActivated(ZoneActivated event) { + if (!initialized) return; - var oldZone = zone; renderZone = false; - if (oldZone != null) { - disposeZoneResources(); - } + fogX = null; + fogY = null; var newZone = event.zone(); - initializeZoneResources(newZone); - zone = newZone; + zoneCache = new ZoneCache(newZone, atlas); renderZone = true; } @@ -3499,55 +3216,4 @@ public void flushFog() { flushFog = true; visibleScreenArea = null; } - - @Override - public void assetAvailable(MD5Key key) { - try { - var asset = AssetManager.getAsset(key); - if (asset.getExtension().equals("gif")) { - - Gdx.app.postRunnable( - () -> { - // var ass = AssetManager.getAsset(key); - var is = new ByteArrayInputStream(asset.getData()); - var animation = GifDecoder.loadGIFAnimation(Animation.PlayMode.LOOP, is); - animationMap.put(key, animation); - }); - return; - } - if (asset.getExtension().equals("data")) { - var videoPlayer = VideoPlayerCreator.createVideoPlayer(); - videoPlayerMap.put(key, videoPlayer); - return; - } - var img = - ImageUtil.createCompatibleImage( - ImageUtil.bytesToImage(asset.getData(), asset.getName()), null); - // var img = ImageManager.getImage(key); - var bytes = ImageUtil.imageToBytes(img, "png"); - // without imageutil there seem to be some issues with tranparency for some images. - // (black background instead of tranparent) - // var bytes = AssetManager.getAsset(key).getImage(); - var pix = new Pixmap(bytes, 0, bytes.length); - - try { - var name = key.toString(); - synchronized (packer) { - if (packer.getRect(name) == null) packer.pack(name, pix); - - pix.dispose(); - } - } catch (GdxRuntimeException x) { - // this means that the pixmap is to big for the atlas. - Gdx.app.postRunnable( - () -> { - synchronized (bigSprites) { - if (!bigSprites.containsKey(key)) bigSprites.put(key, new Sprite(new Texture(pix))); - } - pix.dispose(); - }); - } - } catch (Exception e) { - } - } } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java new file mode 100644 index 0000000000..862a737ede --- /dev/null +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java @@ -0,0 +1,304 @@ +/* + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. + * + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . + */ +package net.rptools.maptool.client.ui.zone.gdx; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.*; +import com.badlogic.gdx.utils.Disposable; +import com.badlogic.gdx.utils.GdxRuntimeException; +import com.badlogic.gdx.video.VideoPlayer; +import com.badlogic.gdx.video.VideoPlayerCreator; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import javax.annotation.Nonnull; +import net.rptools.lib.MD5Key; +import net.rptools.lib.gdx.GifDecoder; +import net.rptools.lib.image.ImageUtil; +import net.rptools.maptool.client.MapTool; +import net.rptools.maptool.client.ui.zone.ZoneRenderer; +import net.rptools.maptool.model.AssetAvailableListener; +import net.rptools.maptool.model.AssetManager; +import net.rptools.maptool.model.IsometricGrid; +import net.rptools.maptool.model.Zone; +import net.rptools.maptool.model.drawing.DrawableColorPaint; +import net.rptools.maptool.model.drawing.DrawablePaint; +import net.rptools.maptool.model.drawing.DrawableTexturePaint; +import net.rptools.maptool.util.ImageManager; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class ZoneCache implements Disposable, AssetAvailableListener { + public record GdxPaint(Color color, TextureRegion textureRegion) {} + ; + + private static final Logger log = LogManager.getLogger(ZoneCache.class); + private final Zone zone; + private final ZoneRenderer zoneRenderer; + private final PixmapPacker packer = + new PixmapPacker(2048, 2048, Pixmap.Format.RGBA8888, 2, false); + + private final TextureAtlas tokenAtlas = new TextureAtlas(); + + // this atlas is shared by all zones and must not be disposed here. + private final TextureAtlas sharedAtlas; + + private final Map> animationMap = new HashMap<>(); + private final Map videoPlayerMap = new HashMap<>(); + + private final Map fetchedSprites = new HashMap<>(); + private final Map isoSprites = new HashMap<>(); + private final Map fetchedRegions = new HashMap<>(); + private final Map bigSprites = new HashMap<>(); + + private final Map paintTextures = new HashMap<>(); + private final Texture whitePixel; + private final TextureRegion whitePixelRegion; + + public Zone getZone() { + return zone; + } + + public ZoneRenderer getZoneRenderer() { + return zoneRenderer; + } + + public ZoneCache(@Nonnull Zone zone, @Nonnull TextureAtlas sharedAtlas) { + this.zone = zone; + this.sharedAtlas = sharedAtlas; + zoneRenderer = MapTool.getFrame().getZoneRenderer(zone); + + for (var assetId : zone.getAllAssetIds()) { + AssetManager.getAssetAsynchronously(assetId, this); + } + + Pixmap pixmap = new Pixmap(1, 1, Pixmap.Format.RGBA8888); + pixmap.setColor(Color.WHITE); + pixmap.drawPixel(0, 0); + whitePixel = new Texture(pixmap); + pixmap.dispose(); + whitePixelRegion = new TextureRegion(whitePixel, 0, 0, 1, 1); + } + + @Override + public void assetAvailable(MD5Key key) { + var asset = AssetManager.getAsset(key); + if (asset.getExtension().equals("gif")) { + + Gdx.app.postRunnable( + () -> { + // var ass = AssetManager.getAsset(key); + var is = new ByteArrayInputStream(asset.getData()); + var animation = GifDecoder.loadGIFAnimation(Animation.PlayMode.LOOP, is); + animationMap.put(key, animation); + }); + return; + } + if (asset.getExtension().equals("data")) { + var videoPlayer = VideoPlayerCreator.createVideoPlayer(); + videoPlayerMap.put(key, videoPlayer); + return; + } + BufferedImage img; + byte[] bytes; + try { + img = + ImageUtil.createCompatibleImage( + ImageUtil.bytesToImage(asset.getData(), asset.getName()), null); + bytes = ImageUtil.imageToBytes(img, "png"); + } catch (IOException e) { + throw new RuntimeException(e); + } + // without ImageUtil there seem to be some issues with transparency for some images. + // (black background instead of transparent) + var pix = new Pixmap(bytes, 0, bytes.length); + + try { + var name = key.toString(); + synchronized (packer) { + if (packer.getRect(name) == null) packer.pack(name, pix); + + pix.dispose(); + } + } catch (GdxRuntimeException x) { + // this means that the pixmap is too big for the atlas. + Gdx.app.postRunnable( + () -> { + synchronized (bigSprites) { + if (!bigSprites.containsKey(key)) bigSprites.put(key, new Sprite(new Texture(pix))); + } + pix.dispose(); + }); + } + packer.updateTextureAtlas( + tokenAtlas, Texture.TextureFilter.Linear, Texture.TextureFilter.Linear, false); + } + + public TextureRegion fetch(String regionName) { + var region = fetchedRegions.get(regionName); + if (region != null) return region; + + region = tokenAtlas.findRegion(regionName); + if (region == null) region = sharedAtlas.findRegion(regionName); + + fetchedRegions.put(regionName, region); + return region; + } + + public Sprite getSprite(String name) { + var sprite = fetchedSprites.get(name); + if (sprite != null) { + var region = fetchedRegions.get(name); + sprite.setSize(region.getRegionWidth(), region.getRegionHeight()); + return sprite; + } + + var region = fetch(name); + + if (!"unknown".equals(name) && region == null) { + AssetManager.getAssetAsynchronously(new MD5Key(name), this); + return getSprite("unknown"); + } + + sprite = new Sprite(region); + sprite.setSize(region.getRegionWidth(), region.getRegionHeight()); + + fetchedSprites.put(name, sprite); + return sprite; + } + + public Sprite getIsoSprite(MD5Key key) { + if (isoSprites.containsKey(key)) { + return isoSprites.get(key); + } + + var workImage = IsometricGrid.isoImage(ImageManager.getImage(key)); + + byte[] bytes; + try { + bytes = ImageUtil.imageToBytes(workImage, "png"); + } catch (IOException e) { + throw new RuntimeException(e); + } + var pix = new Pixmap(bytes, 0, bytes.length); + var image = new Sprite(new Texture(pix)); + pix.dispose(); + isoSprites.put(key, image); + return image; + } + + public Sprite getSprite(MD5Key key, float stateTime) { + if (key == null) return null; + + var videoPlayer = videoPlayerMap.get(key); + if (videoPlayer != null) { + boolean skip = false; + if (!videoPlayer.isPlaying()) { + try { + var file = AssetManager.getAssetCacheFile(key); + if (file.exists()) { + videoPlayer.play(Gdx.files.absolute(file.getAbsolutePath())); + videoPlayer.setVolume(0); + } else skip = true; + + } catch (FileNotFoundException ex) { + log.warn(ex.toString()); + skip = true; + } + } + if (!skip) { + videoPlayer.update(); + var texture = videoPlayer.getTexture(); + if (texture != null) { + var sprite = new Sprite(texture); + sprite.setSize(texture.getWidth(), texture.getHeight()); + return sprite; + } + } + } + + var animation = animationMap.get(key); + if (animation != null) { + var currentFrame = animation.getKeyFrame(stateTime, true); + var sprite = new Sprite(currentFrame); + sprite.setSize(currentFrame.getRegionWidth(), currentFrame.getRegionHeight()); + return sprite; + } + + var sprite = bigSprites.get(key); + if (sprite != null) { + sprite.setSize(sprite.getTexture().getWidth(), sprite.getTexture().getHeight()); + return sprite; + } + + return getSprite(key.toString()); + } + + public GdxPaint getPaint(DrawablePaint paint) { + + if (paint instanceof DrawableColorPaint) { + var color = new Color(); + Color.argb8888ToColor(color, ((DrawableColorPaint) paint).getColor()); + return new GdxPaint(color, whitePixelRegion); + } + + var texturePaint = (DrawableTexturePaint) paint; + var asset = texturePaint.getAsset(); + if (!paintTextures.containsKey(asset.getMD5Key())) { + var image = asset.getData(); + var pix = new Pixmap(image, 0, image.length); + var texture = new Texture(pix); + texture.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat); + pix.dispose(); + paintTextures.put(asset.getMD5Key(), texture); + } + return new GdxPaint(Color.WHITE, new TextureRegion(paintTextures.get(asset.getMD5Key()))); + } + + @Override + public void dispose() { + fetchedRegions.clear(); + animationMap.clear(); + fetchedSprites.clear(); + + Gdx.app.postRunnable( + () -> { + packer.dispose(); + tokenAtlas.dispose(); + whitePixel.dispose(); + + for (var sprite : isoSprites.values()) { + sprite.getTexture().dispose(); + } + isoSprites.clear(); + + for (var texture : paintTextures.values()) { + texture.dispose(); + } + paintTextures.clear(); + + for (var sprite : bigSprites.values()) { + sprite.getTexture().dispose(); + } + bigSprites.clear(); + }); + } +} From 49acfe4bab531fda00d4c91796f55e3105c7104b Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 4 Nov 2023 23:33:23 +0100 Subject: [PATCH 115/139] refactor use of ZoneCache --- .../ui/zone/gdx/AbstractDrawingDrawer.java | 35 +++++++------------ .../client/ui/zone/gdx/GdxRenderer.java | 8 +++++ 2 files changed, 20 insertions(+), 23 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java index 3f8baa89dc..223feb1048 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java @@ -15,10 +15,7 @@ package net.rptools.maptool.client.ui.zone.gdx; import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.Pixmap; -import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; -import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.utils.FloatArray; import java.awt.geom.Area; import net.rptools.maptool.model.drawing.*; @@ -29,6 +26,12 @@ public abstract class AbstractDrawingDrawer { protected Float alpha = null; protected AreaRenderer areaRenderer; + protected ZoneCache zoneCache; + + public void setZoneCache(ZoneCache zoneCache) { + this.zoneCache = zoneCache; + } + public AbstractDrawingDrawer(AreaRenderer areaRenderer) { this.areaRenderer = areaRenderer; } @@ -42,27 +45,13 @@ public void draw(PolygonSpriteBatch batch, Drawable element, Pen pen) { } protected void applyColor(DrawablePaint paint, boolean applyAlpha) { - if (paint instanceof DrawableColorPaint colorPaint) { - Color.argb8888ToColor(tmpColor, colorPaint.getColor()); - - if (alpha != null && applyAlpha) { - tmpColor.set(tmpColor.r, tmpColor.g, tmpColor.b, alpha); - } - areaRenderer.setColor(tmpColor); - } else if (paint instanceof DrawableTexturePaint texturePaint) { - var image = texturePaint.getAsset().getData(); - var pix = new Pixmap(image, 0, image.length); - var tex = new Texture(pix); - tex.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat); - // FIXME properly dispose - var region = new TextureRegion(tex); - if (alpha != null) { - tmpColor.set(1, 1, 1, alpha); - areaRenderer.setColor(tmpColor); - } - areaRenderer.setTextureRegion(region); - pix.dispose(); + var gdxPaint = zoneCache.getPaint(paint); + if (alpha != null && applyAlpha) { + var color = gdxPaint.color(); + gdxPaint.color().set(color.r, color.g, color.b, alpha); } + areaRenderer.setTextureRegion(gdxPaint.textureRegion()); + areaRenderer.setColor(gdxPaint.color()); } protected void line(PolygonSpriteBatch batch, Pen pen, float x1, float y1, float x2, float y2) { diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 3b748a1c07..a342aed42c 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -3196,6 +3196,14 @@ void onZoneActivated(ZoneActivated event) { var newZone = event.zone(); zoneCache = new ZoneCache(newZone, atlas); + lineTemplateDrawer.setZoneCache(zoneCache); + lineCellTemplateDrawer.setZoneCache(zoneCache); + radiusTemplateDrawer.setZoneCache(zoneCache); + burstTemplateDrawer.setZoneCache(zoneCache); + coneTemplateDrawer.setZoneCache(zoneCache); + blastTemplateDrawer.setZoneCache(zoneCache); + radiusCellTemplateDrawer.setZoneCache(zoneCache); + shapeDrawableDrawer.setZoneCache(zoneCache); renderZone = true; } From b81e7b5d0e9c7b2035ce6b77ba9d2a0297f7f42b Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Tue, 7 Nov 2023 21:44:43 +0100 Subject: [PATCH 116/139] refactor use of ZoneCache --- .../client/ui/zone/gdx/GdxRenderer.java | 42 ++++++++++--------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index a342aed42c..eddd6d69ce 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -1670,9 +1670,10 @@ private void fillViewportWith(ZoneCache.GdxPaint paint) { // startY = (((int) startY) / texture.getHeight()) * texture.getHeight() - texture.getHeight(); var vertices = new float[] { - startX, startY, startX, startY + h, startX + w, startY + h, startX + w, startY, + startX, startY, startX, startY + h, startX + w, startY + h, startX + w, startY }; - var indices = new short[] {0, 1, 2, 0, 2, 4}; + + var indices = new short[] {1, 0, 3, 3, 2, 1}; var polySprite = new PolygonSprite(new PolygonRegion(paint.textureRegion(), vertices, indices)); polySprite.setColor(paint.color()); @@ -3187,24 +3188,25 @@ private void highlightCell(ZonePoint zp, TextureRegion image, float size) { @Subscribe void onZoneActivated(ZoneActivated event) { - if (!initialized) return; - - renderZone = false; - - fogX = null; - fogY = null; - - var newZone = event.zone(); - zoneCache = new ZoneCache(newZone, atlas); - lineTemplateDrawer.setZoneCache(zoneCache); - lineCellTemplateDrawer.setZoneCache(zoneCache); - radiusTemplateDrawer.setZoneCache(zoneCache); - burstTemplateDrawer.setZoneCache(zoneCache); - coneTemplateDrawer.setZoneCache(zoneCache); - blastTemplateDrawer.setZoneCache(zoneCache); - radiusCellTemplateDrawer.setZoneCache(zoneCache); - shapeDrawableDrawer.setZoneCache(zoneCache); - renderZone = true; + Gdx.app.postRunnable( + () -> { + renderZone = false; + + fogX = null; + fogY = null; + + var newZone = event.zone(); + zoneCache = new ZoneCache(newZone, atlas); + lineTemplateDrawer.setZoneCache(zoneCache); + lineCellTemplateDrawer.setZoneCache(zoneCache); + radiusTemplateDrawer.setZoneCache(zoneCache); + burstTemplateDrawer.setZoneCache(zoneCache); + coneTemplateDrawer.setZoneCache(zoneCache); + blastTemplateDrawer.setZoneCache(zoneCache); + radiusCellTemplateDrawer.setZoneCache(zoneCache); + shapeDrawableDrawer.setZoneCache(zoneCache); + renderZone = true; + }); } public void setScale(Scale scale) { From 7184b4f8cde2dc47ac3ecb4e4ad3f03f6033205d Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Tue, 7 Nov 2023 23:30:09 +0100 Subject: [PATCH 117/139] fix artifacts when drawing path --- .../client/ui/zone/gdx/GdxRenderer.java | 11 +++-------- .../maptool/client/ui/zone/gdx/ZoneCache.java | 19 +++++++++++-------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index eddd6d69ce..67a8386174 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -309,6 +309,7 @@ public void render() { if (atlas == null) { atlas = manager.get(ATLAS, TextureAtlas.class); + zoneCache.setSharedAtlas(atlas); } if (normalFont == null) { @@ -728,8 +729,7 @@ private void paintlightSourceIconOverlay() { if (token.hasLightSources()) { boolean foundNormalLight = false; for (AttachedLightSource attachedLightSource : token.getLightSources()) { - LightSource lightSource = - MapTool.getCampaign().getLightSource(attachedLightSource.getLightSourceId()); + LightSource lightSource = attachedLightSource.resolve(token, MapTool.getCampaign()); if (lightSource != null && lightSource.getType() == LightSource.Type.NORMAL) { foundNormalLight = true; break; @@ -1658,16 +1658,11 @@ private void renderBoard() { } private void fillViewportWith(ZoneCache.GdxPaint paint) { - // var w = ((int) (cam.viewportWidth * zoom / texture.getWidth()) + 4) * texture.getWidth(); - // var h = ((int) (cam.viewportHeight * zoom / texture.getHeight()) + 4) * texture.getHeight(); - var w = cam.viewportWidth * zoom; var h = cam.viewportHeight * zoom; var startX = (cam.position.x - cam.viewportWidth * zoom / 2); - // startX = (((int) startX) / texture.getWidth()) * texture.getWidth() - texture.getWidth(); var startY = (cam.position.y - cam.viewportHeight * zoom / 2); - // startY = (((int) startY) / texture.getHeight()) * texture.getHeight() - texture.getHeight(); var vertices = new float[] { startX, startY, startX, startY + h, startX + w, startY + h, startX + w, startY @@ -3059,7 +3054,7 @@ private void renderPath(Path path, TokenFootprint footprint) { } previousPoint = p; } - drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.SMOOTH, true); + drawer.path(tmpFloat.toArray(), drawer.getDefaultLineWidth(), JoinType.NONE, true); } drawer.setColor(Color.WHITE); timer.stop("renderPath-2"); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java index 862a737ede..c7eb7820aa 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java @@ -47,28 +47,24 @@ import org.apache.logging.log4j.Logger; public class ZoneCache implements Disposable, AssetAvailableListener { + public record GdxPaint(Color color, TextureRegion textureRegion) {} - ; private static final Logger log = LogManager.getLogger(ZoneCache.class); private final Zone zone; private final ZoneRenderer zoneRenderer; private final PixmapPacker packer = new PixmapPacker(2048, 2048, Pixmap.Format.RGBA8888, 2, false); - private final TextureAtlas tokenAtlas = new TextureAtlas(); // this atlas is shared by all zones and must not be disposed here. - private final TextureAtlas sharedAtlas; - + private TextureAtlas sharedAtlas; private final Map> animationMap = new HashMap<>(); private final Map videoPlayerMap = new HashMap<>(); - private final Map fetchedSprites = new HashMap<>(); private final Map isoSprites = new HashMap<>(); private final Map fetchedRegions = new HashMap<>(); private final Map bigSprites = new HashMap<>(); - private final Map paintTextures = new HashMap<>(); private final Texture whitePixel; private final TextureRegion whitePixelRegion; @@ -81,6 +77,10 @@ public ZoneRenderer getZoneRenderer() { return zoneRenderer; } + public void setSharedAtlas(TextureAtlas atlas) { + sharedAtlas = atlas; + } + public ZoneCache(@Nonnull Zone zone, @Nonnull TextureAtlas sharedAtlas) { this.zone = zone; this.sharedAtlas = sharedAtlas; @@ -148,8 +148,11 @@ public void assetAvailable(MD5Key key) { pix.dispose(); }); } - packer.updateTextureAtlas( - tokenAtlas, Texture.TextureFilter.Linear, Texture.TextureFilter.Linear, false); + Gdx.app.postRunnable( + () -> { + packer.updateTextureAtlas( + tokenAtlas, Texture.TextureFilter.Linear, Texture.TextureFilter.Linear, false); + }); } public TextureRegion fetch(String regionName) { From 521dfb98f7a91e5fd76ba3d7a71401dcc4a3eda6 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Tue, 14 Nov 2023 20:28:42 +0100 Subject: [PATCH 118/139] fix artifacts when drawing path --- src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java | 2 +- .../net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index 0eeeeadd2f..04d4adcce4 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -96,8 +96,8 @@ import net.rptools.maptool.client.ui.zone.PointerOverlay; import net.rptools.maptool.client.ui.zone.PointerToolOverlay; import net.rptools.maptool.client.ui.zone.ZoneMiniMapPanel; -import net.rptools.maptool.client.ui.zone.renderer.ZoneRenderer; import net.rptools.maptool.client.ui.zone.gdx.GdxRenderer; +import net.rptools.maptool.client.ui.zone.renderer.ZoneRenderer; import net.rptools.maptool.events.MapToolEventBus; import net.rptools.maptool.language.I18N; import net.rptools.maptool.model.Asset; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 67a8386174..3e7ab541f5 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -975,7 +975,7 @@ private void renderFog(PlayerView view) { flushFog = false; batch.flush(); - createScreenshot("fog"); + // createScreenshot("fog"); backBuffer.end(); } @@ -1374,7 +1374,7 @@ private void renderLumensOverlay(PlayerView view, float overlayAlpha) { timer.stop("renderLumensOverlay:drawLumens"); batch.flush(); - createScreenshot("lumens"); + // createScreenshot("lumens"); backBuffer.end(); timer.start("renderLumensOverlay:drawBuffer"); From 75ba041c778b5e022aa6acd3dcfe76259a97890c Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Tue, 14 Nov 2023 20:56:44 +0100 Subject: [PATCH 119/139] fix build --- .../rptools/maptool/client/ui/zone/gdx/GdxRenderer.java | 7 ++++--- .../net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java | 2 +- .../maptool/client/ui/zone/renderer/ZoneRenderer.java | 1 + 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 3e7ab541f5..171c6f5211 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -59,7 +59,8 @@ import net.rptools.maptool.client.ui.token.*; import net.rptools.maptool.client.ui.zone.DrawableLight; import net.rptools.maptool.client.ui.zone.PlayerView; -import net.rptools.maptool.client.ui.zone.ZoneRenderer; +import net.rptools.maptool.client.ui.zone.renderer.SelectionSet; +import net.rptools.maptool.client.ui.zone.renderer.ZoneRenderer; import net.rptools.maptool.client.walker.ZoneWalker; import net.rptools.maptool.events.MapToolEventBus; import net.rptools.maptool.language.I18N; @@ -1043,14 +1044,14 @@ private void renderLabels(PlayerView view) { timer.stop("labels-1"); } - private void showBlockedMoves(PlayerView view, Set movementSet) { + private void showBlockedMoves(PlayerView view, Set movementSet) { var selectionSetMap = zoneCache.getZoneRenderer().getSelectionSetMap(); if (selectionSetMap.isEmpty()) { return; } boolean clipInstalled = false; - for (ZoneRenderer.SelectionSet set : movementSet) { + for (SelectionSet set : movementSet) { Token keyToken = zoneCache.getZone().getToken(set.getKeyToken()); if (keyToken == null) { // It was removed ? diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java index c7eb7820aa..2f586cf1d9 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java @@ -34,7 +34,7 @@ import net.rptools.lib.gdx.GifDecoder; import net.rptools.lib.image.ImageUtil; import net.rptools.maptool.client.MapTool; -import net.rptools.maptool.client.ui.zone.ZoneRenderer; +import net.rptools.maptool.client.ui.zone.renderer.ZoneRenderer; import net.rptools.maptool.model.AssetAvailableListener; import net.rptools.maptool.model.AssetManager; import net.rptools.maptool.model.IsometricGrid; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/renderer/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/renderer/ZoneRenderer.java index 5cbaf545d1..c2448e3457 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/renderer/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/renderer/ZoneRenderer.java @@ -60,6 +60,7 @@ import net.rptools.maptool.client.ui.token.BarTokenOverlay; import net.rptools.maptool.client.ui.token.dialog.create.NewTokenDialog; import net.rptools.maptool.client.ui.zone.*; +import net.rptools.maptool.client.ui.zone.gdx.GdxRenderer; import net.rptools.maptool.client.walker.ZoneWalker; import net.rptools.maptool.events.MapToolEventBus; import net.rptools.maptool.language.I18N; From b72fe954a729697ff906ed7362d96bb1805d7008 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Tue, 14 Nov 2023 22:03:17 +0100 Subject: [PATCH 120/139] fix fogArea --- .../client/ui/zone/gdx/GdxRenderer.java | 213 +++++------------- .../maptool/client/ui/zone/gdx/ZoneCache.java | 5 + 2 files changed, 64 insertions(+), 154 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 171c6f5211..de33af6f68 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -95,7 +95,6 @@ public class GdxRenderer extends ApplicationAdapter { private final String FONT_BOLD = "boldFont.ttf"; private final String FONT_DISTANCE = "distanceFont.ttf"; - private boolean flushFog = true; // from renderToken: private Area visibleScreenArea; private Area exposedFogArea; @@ -125,8 +124,6 @@ public class GdxRenderer extends ApplicationAdapter { private float boldFontScale = 0; private final CodeTimer timer = new CodeTimer("GdxRenderer.renderZone"); private FrameBuffer backBuffer; - private Integer fogX; - private Integer fogY; private com.badlogic.gdx.assets.AssetManager manager; private TextureAtlas atlas; private Texture onePixel; @@ -446,14 +443,8 @@ private void initializeTimer() { } public void invalidateCurrentViewCache() { - flushFog = true; visibleScreenArea = null; lastView = null; - - var zoneView = zoneCache.getZoneRenderer().getZoneView(); - if (zoneView != null) { - zoneView.flush(); - } } private void renderZone(PlayerView view) { @@ -471,10 +462,7 @@ private void renderZone(PlayerView view) { timer.start("ZoneRenderer-getVisibleArea"); if (visibleScreenArea == null) { visibleScreenArea = - zoneCache - .getZoneRenderer() - .getZoneView() - .getVisibleArea(zoneCache.getZoneRenderer().getPlayerView()); + zoneCache.getZoneView().getVisibleArea(zoneCache.getZoneRenderer().getPlayerView()); } timer.stop("ZoneRenderer-getVisibleArea"); @@ -758,8 +746,7 @@ private void renderPlayerDarkness(PlayerView view) { return; } - final var darkness = - zoneCache.getZoneRenderer().getZoneView().getIllumination(view).getDarkenedArea(); + final var darkness = zoneCache.getZoneView().getIllumination(view).getDarkenedArea(); if (darkness.isEmpty()) { // Skip the rendering work if it isn't necessary. return; @@ -797,8 +784,7 @@ private void renderGMVisionOverlay(PlayerView view) { private void renderVisionOverlay(PlayerView view) { var tokenUnderMouse = zoneCache.getZoneRenderer().getTokenUnderMouse(); - Area currentTokenVisionArea = - zoneCache.getZoneRenderer().getZoneView().getVisibleArea(tokenUnderMouse, view); + Area currentTokenVisionArea = zoneCache.getZoneView().getVisibleArea(tokenUnderMouse, view); if (currentTokenVisionArea == null) { return; } @@ -860,126 +846,55 @@ private void renderRenderables() { private void renderFog(PlayerView view) { Area combined = null; - if (!flushFog - && fogX != null - && fogY != null - && (fogX != zoneCache.getZoneRenderer().getViewOffsetX() - || fogY != zoneCache.getZoneRenderer().getViewOffsetY())) { - flushFog = true; - } - boolean cacheNotValid = - (backBuffer.getColorBufferTexture().getWidth() != width - || backBuffer.getColorBufferTexture().getHeight() != height); timer.start("renderFog"); - // if (flushFog || cacheNotValid) - { - batch.flush(); - backBuffer.begin(); - ScreenUtils.clear(Color.CLEAR); + batch.flush(); - batch.setBlendFunction(GL20.GL_ONE, GL20.GL_NONE); - setProjectionMatrix(cam.combined); + backBuffer.begin(); + ScreenUtils.clear(Color.CLEAR); - timer.start("renderFog-allocateBufferedImage"); - timer.stop("renderFog-allocateBufferedImage"); - fogX = zoneCache.getZoneRenderer().getViewOffsetX(); - fogY = zoneCache.getZoneRenderer().getViewOffsetY(); - - timer.start("renderFog-fill"); - - // Fill - batch.setColor(Color.WHITE); - var paint = zoneCache.getZone().getFogPaint(); - var fogPaint = zoneCache.getPaint(paint); - var fogColor = fogPaint.color(); - fogPaint.color().set(fogColor.r, fogColor.g, fogColor.b, view.isGMView() ? .6f : 1f); - fillViewportWith(fogPaint); - - timer.start("renderFog-visibleArea"); - Area visibleArea = zoneCache.getZoneRenderer().getZoneView().getVisibleArea(view); - timer.stop("renderFog-visibleArea"); - - String msg = null; - if (timer.isEnabled()) { - List list = view.getTokens(); - msg = "renderFog-combined(" + (list == null ? 0 : list.size()) + ")"; - } - timer.start(msg); - combined = zoneCache.getZone().getExposedArea(view); - timer.stop(msg); - - timer.start("renderFogArea"); - Area exposedArea = null; - Area tempArea = new Area(); - boolean combinedView = - !zoneCache.getZoneRenderer().getZoneView().isUsingVision() - || MapTool.isPersonalServer() - || !MapTool.getServerPolicy().isUseIndividualFOW() - || view.isGMView(); - - if (view.getTokens() != null) { - // if there are tokens selected combine the areas, then, if individual FOW is enabled - // we pass the combined exposed area to build the soft FOW and visible area. - for (Token tok : view.getTokens()) { - ExposedAreaMetaData meta = - zoneCache.getZone().getExposedAreaMetaData(tok.getExposedAreaGUID()); - exposedArea = meta.getExposedAreaHistory(); - tempArea.add(new Area(exposedArea)); - } - if (combinedView) { - areaRenderer.setColor(Color.CLEAR); - areaRenderer.fillArea(batch, combined); - renderFogArea(combined, visibleArea); - renderFogOutline(); - } else { - // 'combined' already includes the area encompassed by 'tempArea', so just - // use 'combined' instead in this block of code? - tempArea.add(combined); - areaRenderer.setColor(Color.CLEAR); - areaRenderer.fillArea(batch, tempArea); - renderFogArea(tempArea, visibleArea); - renderFogOutline(); - } - } else { - // No tokens selected, so if we are using Individual FOW, we build up all the owned tokens - // exposed area's to build the soft FOW. - if (combinedView) { - if (combined.isEmpty()) { - combined = zoneCache.getZone().getExposedArea(); - } - areaRenderer.setColor(Color.CLEAR); - areaRenderer.fillArea(batch, combined); - renderFogArea(combined, visibleArea); - renderFogOutline(); - } else { - Area myCombined = new Area(); - List myToks = zoneCache.getZone().getTokens(); - for (Token tok : myToks) { - if (!AppUtil.playerOwns( - tok)) { // Only here if !isGMview() so should the tokens already be in - // PlayerView.getTokens()? - continue; - } - ExposedAreaMetaData meta = - zoneCache.getZone().getExposedAreaMetaData(tok.getExposedAreaGUID()); - exposedArea = meta.getExposedAreaHistory(); - myCombined.add(new Area(exposedArea)); - } - areaRenderer.setColor(Color.CLEAR); - areaRenderer.fillArea(batch, myCombined); - renderFogArea(myCombined, visibleArea); - renderFogOutline(); - } - } - timer.stop("renderFogArea"); + batch.setBlendFunction(GL20.GL_ONE, GL20.GL_NONE); + setProjectionMatrix(cam.combined); + + timer.start("renderFog-allocateBufferedImage"); + timer.stop("renderFog-allocateBufferedImage"); + + timer.start("renderFog-fill"); + + // Fill + batch.setColor(Color.WHITE); + var paint = zoneCache.getZone().getFogPaint(); + var fogPaint = zoneCache.getPaint(paint); + var fogColor = fogPaint.color(); + fogPaint.color().set(fogColor.r, fogColor.g, fogColor.b, view.isGMView() ? .6f : 1f); + fillViewportWith(fogPaint); + + var zoneView = zoneCache.getZoneView(); - flushFog = false; - batch.flush(); - // createScreenshot("fog"); + timer.start("renderFog-visibleArea"); + Area visibleArea = zoneView.getVisibleArea(view); + timer.stop("renderFog-visibleArea"); - backBuffer.end(); + String msg = null; + if (timer.isEnabled()) { + msg = "renderFog-combined(" + (view.isUsingTokenView() ? view.getTokens().size() : 0) + ")"; } + timer.start(msg); + combined = zoneView.getExposedArea(view); + timer.stop(msg); + + timer.start("renderFogArea"); + areaRenderer.setColor(Color.CLEAR); + areaRenderer.fillArea(batch, combined); + renderFogArea(combined, visibleArea); + renderFogOutline(); + timer.stop("renderFogArea"); + + batch.flush(); + // createScreenshot("fog"); + + backBuffer.end(); + batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); setProjectionMatrix(hudCam.combined); batch.setColor(Color.WHITE); @@ -995,7 +910,7 @@ private void setProjectionMatrix(Matrix4 matrix) { } private void renderFogArea(Area softFog, Area visibleArea) { - if (zoneCache.getZoneRenderer().getZoneView().isUsingVision()) { + if (zoneCache.getZoneView().isUsingVision()) { if (visibleArea != null && !visibleArea.isEmpty()) { tmpColor.set(0, 0, 0, AppPreferences.getFogOverlayOpacity() / 255.0f); areaRenderer.setColor(tmpColor); @@ -1003,6 +918,9 @@ private void renderFogArea(Area softFog, Area visibleArea) { areaRenderer.fillArea(batch, softFog); areaRenderer.setColor(Color.CLEAR); + + visibleArea.intersect(softFog); + areaRenderer.fillArea(batch, visibleArea); } else { tmpColor.set(0, 0, 0, AppPreferences.getFogOverlayOpacity() / 255.0f); @@ -1088,7 +1006,7 @@ private void showBlockedMoves(PlayerView view, Set movementSet) { && !AppUtil.playerOwns(token) && visibleScreenArea == null && zoneCache.getZone().hasFog() - && zoneCache.getZoneRenderer().getZoneView().isUsingVision()) { + && zoneCache.getZoneView().isUsingVision()) { continue; } @@ -1164,7 +1082,7 @@ private void showBlockedMoves(PlayerView view, Set movementSet) { Grid grid = zoneCache.getZone().getGrid(); boolean checkForFog = MapTool.getServerPolicy().isUseIndividualFOW() - && zoneCache.getZoneRenderer().getZoneView().isUsingVision(); + && zoneCache.getZoneView().isUsingVision(); boolean showLabels = isOwner; if (checkForFog) { Path path = @@ -1278,7 +1196,7 @@ private void renderAuras(PlayerView view) { // Setup timer.start("renderAuras:getAuras"); - final var drawableAuras = zoneCache.getZoneRenderer().getZoneView().getDrawableAuras(); + final var drawableAuras = zoneCache.getZoneView().getDrawableAuras(); timer.stop("renderAuras:getAuras"); timer.start("renderAuras:renderAuraOverlay"); @@ -1289,7 +1207,7 @@ private void renderAuras(PlayerView view) { private void renderLights(PlayerView view) { // Collect and organize lights timer.start("renderLights:getLights"); - final var drawableLights = zoneCache.getZoneRenderer().getZoneView().getDrawableLights(view); + final var drawableLights = zoneCache.getZoneView().getDrawableLights(view); timer.stop("renderLights:getLights"); if (AppState.isShowLights()) { @@ -1316,8 +1234,7 @@ private void renderLights(PlayerView view) { } private void renderLumensOverlay(PlayerView view, float overlayAlpha) { - final var disjointLumensLevels = - zoneCache.getZoneRenderer().getZoneView().getDisjointObscuredLumensLevels(view); + final var disjointLumensLevels = zoneCache.getZoneView().getDisjointObscuredLumensLevels(view); timer.start("renderLumensOverlay:allocateBuffer"); batch.flush(); @@ -1725,9 +1642,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure try { // Vision visibility - if (!isGMView - && token.isToken() - && zoneCache.getZoneRenderer().getZoneView().isUsingVision()) { + if (!isGMView && token.isToken() && zoneCache.getZoneView().isUsingVision()) { if (!GraphicsUtil.intersects(visibleScreenArea, tokenBounds)) { continue; } @@ -1774,7 +1689,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure timer.start("tokenlist-7"); image.setColor(1, 1, 1, opacity); if (!isGMView - && zoneCache.getZoneRenderer().getZoneView().isUsingVision() + && zoneCache.getZoneView().isUsingVision() && (token.getShape() == Token.TokenShape.FIGURE)) { if (zoneCache .getZone() @@ -1786,9 +1701,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure // else draw the clipped token paintClipped(image, tokenCellArea, cellArea); } - } else if (!isGMView - && zoneCache.getZoneRenderer().getZoneView().isUsingVision() - && token.isAlwaysVisible()) { + } else if (!isGMView && zoneCache.getZoneView().isUsingVision() && token.isAlwaysVisible()) { // Jamz: Always Visible tokens will get rendered again here to place on top of FoW if (GraphicsUtil.intersects(visibleScreenArea, tokenCellArea)) { // if we can see a portion of the stamp/token, draw the whole thing, defaults to 2/9ths @@ -1994,9 +1907,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure if (!AppUtil.playerOwns(token)) { selectedBorder = AppStyle.selectedUnownedBorder; } - if (useIF - && !token.isStamp() - && zoneCache.getZoneRenderer().getZoneView().isUsingVision()) { + if (useIF && !token.isStamp() && zoneCache.getZoneView().isUsingVision()) { Tool tool = MapTool.getFrame().getToolbox().getSelectedTool(); if (tool instanceof @@ -2049,7 +1960,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure // if policy does not auto-reveal FoW, check if fog covers the token (slow) if (showCurrentTokenLabel && !isGMView - && (!zoneCache.getZoneRenderer().getZoneView().isUsingVision() + && (!zoneCache.getZoneView().isUsingVision() || !MapTool.getServerPolicy().isAutoRevealOnMovement()) && !zoneCache.getZone().isTokenVisible(token)) { showCurrentTokenLabel = false; @@ -3188,9 +3099,6 @@ void onZoneActivated(ZoneActivated event) { () -> { renderZone = false; - fogX = null; - fogY = null; - var newZone = event.zone(); zoneCache = new ZoneCache(newZone, atlas); lineTemplateDrawer.setZoneCache(zoneCache); @@ -3217,9 +3125,6 @@ public void setScale(Scale scale) { } public void flushFog() { - if (!initialized) return; - - flushFog = true; visibleScreenArea = null; } } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java index 2f586cf1d9..5243bd71dd 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java @@ -34,6 +34,7 @@ import net.rptools.lib.gdx.GifDecoder; import net.rptools.lib.image.ImageUtil; import net.rptools.maptool.client.MapTool; +import net.rptools.maptool.client.ui.zone.ZoneView; import net.rptools.maptool.client.ui.zone.renderer.ZoneRenderer; import net.rptools.maptool.model.AssetAvailableListener; import net.rptools.maptool.model.AssetManager; @@ -77,6 +78,10 @@ public ZoneRenderer getZoneRenderer() { return zoneRenderer; } + public ZoneView getZoneView() { + return zoneRenderer.getZoneView(); + } + public void setSharedAtlas(TextureAtlas atlas) { sharedAtlas = atlas; } From b8f673c2cc32833a5f9b4223f5c615f9d5076825 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Wed, 15 Nov 2023 00:07:05 +0100 Subject: [PATCH 121/139] some box2dlight experiments --- .../client/ui/zone/gdx/GdxRenderer.java | 106 ++++++++++++++---- 1 file changed, 85 insertions(+), 21 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index de33af6f68..ed45105547 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -14,6 +14,7 @@ */ package net.rptools.maptool.client.ui.zone.gdx; +import box2dLight.ChainLight; import box2dLight.PointLight; import box2dLight.RayHandler; import com.badlogic.gdx.ApplicationAdapter; @@ -28,9 +29,7 @@ import com.badlogic.gdx.graphics.glutils.FrameBuffer; import com.badlogic.gdx.math.*; import com.badlogic.gdx.math.Rectangle; -import com.badlogic.gdx.physics.box2d.Box2D; -import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer; -import com.badlogic.gdx.physics.box2d.World; +import com.badlogic.gdx.physics.box2d.*; import com.badlogic.gdx.scenes.scene2d.utils.TiledDrawable; import com.badlogic.gdx.utils.FloatArray; import com.badlogic.gdx.utils.ScreenUtils; @@ -157,6 +156,9 @@ public class GdxRenderer extends ApplicationAdapter { private final TiledDrawable tmpTile = new TiledDrawable(); private World world; + + private ArrayList bodies = new ArrayList(); + private Area vbl; private Box2DDebugRenderer debugRenderer; private RayHandler rayHandler; @@ -184,22 +186,34 @@ public void create() { normalFont = null; boldFont = null; } - /* - world = new World(new Vector2(0, 0), true); - debugRenderer = new Box2DDebugRenderer(); - RayHandler.setGammaCorrection(true); - RayHandler.useDiffuseLight(true); - - rayHandler = new RayHandler(world); - rayHandler.setAmbientLight(0f, 0f, 0f, 0.5f); - rayHandler.setBlurNum(3); - //light = - new PointLight(rayHandler, 128, Color.RED, 600, 50, -50); - new PointLight(rayHandler, 128, Color.GREEN, 600, 50, -350); - new PointLight(rayHandler, 128, Color.BLUE, 600, 350, -350); + world = new World(new Vector2(0, 0), true); + debugRenderer = new Box2DDebugRenderer(); + RayHandler.setGammaCorrection(true); + RayHandler.useDiffuseLight(true); + + rayHandler = new RayHandler(world); + rayHandler.setAmbientLight(0f, 0f, 0f, 0.5f); + rayHandler.setBlurNum(3); + + // light = + var red = new PointLight(rayHandler, 128, Color.RED, 600, 50, -50); + red.setSoft(false); + var green = new PointLight(rayHandler, 128, Color.GREEN, 600, 50, -350); + green.setSoft(false); + var blue = new PointLight(rayHandler, 128, Color.BLUE, 600, 350, -350); + blue.setSoft(false); + + var chain = + new ChainLight( + rayHandler, + 128, + Color.WHITE, + 600, + 1, + new float[] {700, -600, 1000, -600, 800, -800, 600, -600, 725, -600}); + chain.setSoft(false); - */ manager = new com.badlogic.gdx.assets.AssetManager(); loadAssets(); @@ -318,14 +332,64 @@ public void render() { ensureTtfFont(); ScreenUtils.clear(Color.BLACK); - // boolean stepped = fixedStep(delta); + // boolean stepped = fixedStep(delta); + + updateVbl(); doRendering(); - /* rayHandler.setCombinedMatrix(cam); + rayHandler.setCombinedMatrix(cam); - if (stepped) rayHandler.update(); + // if (stepped) + rayHandler.update(); rayHandler.render(); - debugRenderer.render(world, cam.combined);*/ + debugRenderer.render(world, cam.combined); + } + + private void updateVbl() { + var currentVbl = zoneCache.getZone().getTopology(Zone.TopologyType.WALL_VBL); + // if (currentVbl.equals(vbl)) return; + + vbl = currentVbl; + + for (Body body : bodies) { + world.destroyBody(body); + } + bodies.clear(); + + var polys = areaRenderer.triangulate(currentVbl); + for (var poly : polys) { + var vblDef = new BodyDef(); + vblDef.type = BodyDef.BodyType.StaticBody; + var vblBody = world.createBody(vblDef); + + var triangles = poly.indices(); + var polygon = poly.vertices(); + + for (int i = 0; i < triangles.length; i += 3) { + PolygonShape vblShape = new PolygonShape(); + FloatArray triangleOutlines = new FloatArray(); + + float ax = polygon[triangles[i] * 2]; + float ay = polygon[triangles[i] * 2 + 1]; + float bx = polygon[triangles[i + 1] * 2]; + float by = polygon[triangles[i + 1] * 2 + 1]; + float cx = polygon[triangles[i + 2] * 2]; + float cy = polygon[triangles[i + 2] * 2 + 1]; + + triangleOutlines.add(ax); + triangleOutlines.add(ay); + triangleOutlines.add(bx); + triangleOutlines.add(by); + triangleOutlines.add(cx); + triangleOutlines.add(cy); + + vblShape.set(triangleOutlines.toArray()); + vblBody.createFixture(vblShape, 0f); + + vblShape.dispose(); + } + bodies.add(vblBody); + } } private float TIME_STEP = 1 / 60f; From fe7b9a34a3bf1aeedbc10f022a0d88b0f98e558d Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Wed, 15 Nov 2023 23:14:52 +0100 Subject: [PATCH 122/139] refactor drawing classes --- .../client/ui/zone/gdx/AreaRenderer.java | 18 +- .../client/ui/zone/gdx/GdxRenderer.java | 849 +----------------- .../client/ui/zone/gdx/GridRenderer.java | 211 +++++ .../ui/zone/gdx/TokenOverlayRenderer.java | 619 +++++++++++++ .../{ => drawing}/AbstractDrawingDrawer.java | 6 +- .../{ => drawing}/AbstractTemplateDrawer.java | 3 +- .../{ => drawing}/BlastTemplateDrawer.java | 3 +- .../{ => drawing}/BurstTemplateDrawer.java | 3 +- .../gdx/{ => drawing}/ConeTemplateDrawer.java | 3 +- .../gdx/drawing/DrawnElementRenderer.java | 77 ++ .../{ => drawing}/LineCellTemplateDrawer.java | 3 +- .../gdx/{ => drawing}/LineTemplateDrawer.java | 3 +- .../RadiusCellTemplateDrawer.java | 3 +- .../{ => drawing}/RadiusTemplateDrawer.java | 3 +- .../{ => drawing}/ShapeDrawableDrawer.java | 3 +- .../ui/zone/gdx/{ => label}/ItemRenderer.java | 2 +- .../zone/gdx/{ => label}/LabelRenderer.java | 2 +- .../ui/zone/gdx/{ => label}/TextRenderer.java | 2 +- .../gdx/{ => label}/TokenLabelRenderer.java | 2 +- 19 files changed, 969 insertions(+), 846 deletions(-) create mode 100644 src/main/java/net/rptools/maptool/client/ui/zone/gdx/GridRenderer.java create mode 100644 src/main/java/net/rptools/maptool/client/ui/zone/gdx/TokenOverlayRenderer.java rename src/main/java/net/rptools/maptool/client/ui/zone/gdx/{ => drawing}/AbstractDrawingDrawer.java (94%) rename src/main/java/net/rptools/maptool/client/ui/zone/gdx/{ => drawing}/AbstractTemplateDrawer.java (97%) rename src/main/java/net/rptools/maptool/client/ui/zone/gdx/{ => drawing}/BlastTemplateDrawer.java (92%) rename src/main/java/net/rptools/maptool/client/ui/zone/gdx/{ => drawing}/BurstTemplateDrawer.java (92%) rename src/main/java/net/rptools/maptool/client/ui/zone/gdx/{ => drawing}/ConeTemplateDrawer.java (98%) create mode 100644 src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/DrawnElementRenderer.java rename src/main/java/net/rptools/maptool/client/ui/zone/gdx/{ => drawing}/LineCellTemplateDrawer.java (97%) rename src/main/java/net/rptools/maptool/client/ui/zone/gdx/{ => drawing}/LineTemplateDrawer.java (97%) rename src/main/java/net/rptools/maptool/client/ui/zone/gdx/{ => drawing}/RadiusCellTemplateDrawer.java (98%) rename src/main/java/net/rptools/maptool/client/ui/zone/gdx/{ => drawing}/RadiusTemplateDrawer.java (96%) rename src/main/java/net/rptools/maptool/client/ui/zone/gdx/{ => drawing}/ShapeDrawableDrawer.java (92%) rename src/main/java/net/rptools/maptool/client/ui/zone/gdx/{ => label}/ItemRenderer.java (93%) rename src/main/java/net/rptools/maptool/client/ui/zone/gdx/{ => label}/LabelRenderer.java (96%) rename src/main/java/net/rptools/maptool/client/ui/zone/gdx/{ => label}/TextRenderer.java (98%) rename src/main/java/net/rptools/maptool/client/ui/zone/gdx/{ => label}/TokenLabelRenderer.java (98%) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java index 5caec26ae0..062684ec40 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java @@ -33,11 +33,6 @@ public class AreaRenderer { public record TriangledPolygon(float[] vertices, short[] indices) {} - public AreaRenderer(TextureRegion whitePixelRegion, ShapeDrawer drawer) { - this.whitePixel = whitePixelRegion; - this.drawer = drawer; - } - private ShapeDrawer drawer; private TextureRegion whitePixel; @@ -47,6 +42,15 @@ public AreaRenderer(TextureRegion whitePixelRegion, ShapeDrawer drawer) { private Color color; + public AreaRenderer(ShapeDrawer drawer) { + this.drawer = drawer; + this.whitePixel = drawer.getRegion(); + } + + public ShapeDrawer getShapeDrawer() { + return drawer; + } + public void setColor(Color value) { if (value == null) { color = Color.WHITE; @@ -225,7 +229,7 @@ private void drawDebug(float[] vertices, short[] indicies) { drawer.setColor(oldColor); } - protected void paintVertices(PolygonSpriteBatch batch, float[] vertices, short[] holeIndices) { + public void paintVertices(PolygonSpriteBatch batch, float[] vertices, short[] holeIndices) { var indices = Earcut.earcut(vertices, holeIndices, (short) 2).toArray(); var polyReg = new PolygonRegion(textureRegion, vertices, indices); @@ -342,7 +346,7 @@ public FloatArray pathToFloatArray(PathIterator it) { private Vector2 BC = new Vector2(); private Vector2 vec1 = new Vector2(); - enum JoinType { + public enum JoinType { Pointy, Smooth, Round diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index ed45105547..566a0772e1 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -35,7 +35,6 @@ import com.badlogic.gdx.utils.ScreenUtils; import com.google.common.eventbus.Subscribe; import java.awt.*; -import java.awt.Shape; import java.awt.geom.*; import java.text.NumberFormat; import java.util.*; @@ -58,8 +57,12 @@ import net.rptools.maptool.client.ui.token.*; import net.rptools.maptool.client.ui.zone.DrawableLight; import net.rptools.maptool.client.ui.zone.PlayerView; +import net.rptools.maptool.client.ui.zone.gdx.drawing.DrawnElementRenderer; +import net.rptools.maptool.client.ui.zone.gdx.label.ItemRenderer; +import net.rptools.maptool.client.ui.zone.gdx.label.LabelRenderer; +import net.rptools.maptool.client.ui.zone.gdx.label.TextRenderer; +import net.rptools.maptool.client.ui.zone.gdx.label.TokenLabelRenderer; import net.rptools.maptool.client.ui.zone.renderer.SelectionSet; -import net.rptools.maptool.client.ui.zone.renderer.ZoneRenderer; import net.rptools.maptool.client.walker.ZoneWalker; import net.rptools.maptool.events.MapToolEventBus; import net.rptools.maptool.language.I18N; @@ -67,7 +70,6 @@ import net.rptools.maptool.model.Label; import net.rptools.maptool.model.Path; import net.rptools.maptool.model.drawing.*; -import net.rptools.maptool.util.FunctionUtil; import net.rptools.maptool.util.GraphicsUtil; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -102,7 +104,6 @@ public class GdxRenderer extends ApplicationAdapter { // zone specific resources private ZoneCache zoneCache; - private int offsetX = 0; private int offsetY = 0; private float zoom = 1.0f; @@ -126,21 +127,14 @@ public class GdxRenderer extends ApplicationAdapter { private com.badlogic.gdx.assets.AssetManager manager; private TextureAtlas atlas; private Texture onePixel; - private ShapeDrawer drawer; private final GlyphLayout glyphLayout = new GlyphLayout(); - private LineTemplateDrawer lineTemplateDrawer; - private LineCellTemplateDrawer lineCellTemplateDrawer; - private RadiusTemplateDrawer radiusTemplateDrawer; - private BurstTemplateDrawer burstTemplateDrawer; - private ConeTemplateDrawer coneTemplateDrawer; - private BlastTemplateDrawer blastTemplateDrawer; - private RadiusCellTemplateDrawer radiusCellTemplateDrawer; - private ShapeDrawableDrawer shapeDrawableDrawer; private TextRenderer textRenderer; - private TextRenderer hudTextRenderer; private AreaRenderer areaRenderer; + private DrawnElementRenderer drawnElementRenderer; + private TokenOverlayRenderer tokenOverlayRenderer; + private GridRenderer gridRenderer; // temorary objects. Stored here to avoid garbage collection; private final Vector3 tmpWorldCoord = new Vector3(); @@ -154,16 +148,12 @@ public class GdxRenderer extends ApplicationAdapter { private final Matrix4 tmpMatrix = new Matrix4(); private final Area tmpArea = new Area(); private final TiledDrawable tmpTile = new TiledDrawable(); - private World world; - private ArrayList bodies = new ArrayList(); private Area vbl; private Box2DDebugRenderer debugRenderer; private RayHandler rayHandler; - private PointLight light; - public GdxRenderer() { Box2D.init(); new MapToolEventBus().getMainEventBus().register(this); @@ -210,8 +200,8 @@ public void create() { 128, Color.WHITE, 600, - 1, - new float[] {700, -600, 1000, -600, 800, -800, 600, -600, 725, -600}); + -1, + new float[] {700, -600, 1000, -600, 1000, -800, 700, -800, 700, -600}); chain.setSoft(false); manager = new com.badlogic.gdx.assets.AssetManager(); @@ -250,15 +240,10 @@ public void create() { TextureRegion region = new TextureRegion(onePixel, 0, 0, 1, 1); drawer = new ShapeDrawer(batch, region); - areaRenderer = new AreaRenderer(region, drawer); - lineTemplateDrawer = new LineTemplateDrawer(areaRenderer); - lineCellTemplateDrawer = new LineCellTemplateDrawer(areaRenderer); - radiusTemplateDrawer = new RadiusTemplateDrawer(areaRenderer); - burstTemplateDrawer = new BurstTemplateDrawer(areaRenderer); - coneTemplateDrawer = new ConeTemplateDrawer(areaRenderer); - blastTemplateDrawer = new BlastTemplateDrawer(areaRenderer); - radiusCellTemplateDrawer = new RadiusCellTemplateDrawer(areaRenderer); - shapeDrawableDrawer = new ShapeDrawableDrawer(areaRenderer); + areaRenderer = new AreaRenderer(drawer); + drawnElementRenderer = new DrawnElementRenderer(areaRenderer); + tokenOverlayRenderer = new TokenOverlayRenderer(areaRenderer); + gridRenderer = new GridRenderer(areaRenderer, hudCam); initialized = true; } @@ -541,7 +526,7 @@ private void renderZone(PlayerView view) { List drawables = zoneCache.getZone().getBackgroundDrawnElements(); timer.start("drawableBackground"); - renderDrawableOverlay(view, drawables); + drawnElementRenderer.render(batch, drawables); timer.stop("drawableBackground"); List background = zoneCache.getZone().getBackgroundStamps(false); @@ -556,13 +541,14 @@ private void renderZone(PlayerView view) { List drawables = zoneCache.getZone().getObjectDrawnElements(); // if (!drawables.isEmpty()) { timer.start("drawableObjects"); - renderDrawableOverlay(view, drawables); + drawnElementRenderer.render(batch, drawables); timer.stop("drawableObjects"); // } } timer.start("grid"); - - renderGrid(view); + setProjectionMatrix(hudCam.combined); + gridRenderer.render(); + setProjectionMatrix(cam.combined); timer.stop("grid"); @@ -610,7 +596,7 @@ private void renderZone(PlayerView view) { List drawables = zoneCache.getZone().getDrawnElements(); // if (!drawables.isEmpty()) { timer.start("drawableTokens"); - renderDrawableOverlay(view, drawables); + drawnElementRenderer.render(batch, drawables); timer.stop("drawableTokens"); // } @@ -618,7 +604,7 @@ private void renderZone(PlayerView view) { drawables = zoneCache.getZone().getGMDrawnElements(); // if (!drawables.isEmpty()) { timer.start("drawableGM"); - renderDrawableOverlay(view, drawables); + drawnElementRenderer.render(batch, drawables); timer.stop("drawableGM"); // } List stamps = zoneCache.getZone().getGMStamps(false); @@ -1443,188 +1429,6 @@ private void createScreenshot(String name) { } } - private void renderGrid(PlayerView view) { - var grid = zoneCache.getZone().getGrid(); - var scale = (float) zoneCache.getZoneRenderer().getScale(); - int gridSize = (int) (grid.getSize() * scale); - - if (!AppState.isShowGrid() || gridSize < ZoneRenderer.MIN_GRID_SIZE) { - return; - } - - setProjectionMatrix(hudCam.combined); - - if (grid instanceof GridlessGrid) { - // do nothing - } else if (grid instanceof HexGrid) { - renderGrid((HexGrid) grid); - } else if (grid instanceof SquareGrid) { - renderGrid((SquareGrid) grid); - } else if (grid instanceof IsometricGrid) { - renderGrid((IsometricGrid) grid); - } - setProjectionMatrix(cam.combined); - } - - private void renderGrid(HexGrid grid) { - - Color.argb8888ToColor(tmpColor, zoneCache.getZone().getGridColor()); - - drawer.setColor(tmpColor); - var path = grid.createShape(zoneCache.getZoneRenderer().getScale()); - var floats = areaRenderer.pathToFloatArray(path.getPathIterator(null)); - - int offU = grid.getOffU(zoneCache.getZoneRenderer()); - int offV = grid.getOffV(zoneCache.getZoneRenderer()); - - int count = 0; - - var lineWidth = AppState.getGridSize(); - - for (double v = offV % (grid.getScaledMinorRadius() * 2) - (grid.getScaledMinorRadius() * 2); - v < grid.getRendererSizeV(zoneCache.getZoneRenderer()); - v += grid.getScaledMinorRadius()) { - double offsetU = - (int) - ((count & 1) == 0 - ? 0 - : -(grid.getScaledEdgeProjection() + grid.getScaledEdgeLength())); - count++; - - double start = - offU % (2 * grid.getScaledEdgeLength() + 2 * grid.getScaledEdgeProjection()) - - (2 * grid.getScaledEdgeLength() + 2 * grid.getScaledEdgeProjection()); - double end = - grid.getRendererSizeU(zoneCache.getZoneRenderer()) - + 2 * grid.getScaledEdgeLength() - + 2 * grid.getScaledEdgeProjection(); - double incr = 2 * grid.getScaledEdgeLength() + 2 * grid.getScaledEdgeProjection(); - for (double u = start; u < end; u += incr) { - float transX = 0; - float transY = 0; - if (grid instanceof HexGridVertical) { - transX = (float) (u + offsetU); - transY = height - (float) v; - } else { - transX = (float) v; - transY = (float) (-u - offsetU) + height; - } - - tmpMatrix.translate(transX, transY, 0); - batch.setTransformMatrix(tmpMatrix); - drawer.update(); - - drawer.path(floats, lineWidth, JoinType.SMOOTH, true); - tmpMatrix.idt(); - batch.setTransformMatrix(tmpMatrix); - drawer.update(); - } - } - } - - private void renderGrid(IsometricGrid grid) { - var scale = (float) zoneCache.getZoneRenderer().getScale(); - int gridSize = (int) (grid.getSize() * scale); - - Color.argb8888ToColor(tmpColor, zoneCache.getZone().getGridColor()); - - drawer.setColor(tmpColor); - - var x = hudCam.position.x - hudCam.viewportWidth / 2; - var y = hudCam.position.y - hudCam.viewportHeight / 2; - var w = hudCam.viewportWidth; - var h = hudCam.viewportHeight; - - double isoHeight = grid.getSize() * scale; - double isoWidth = grid.getSize() * 2 * scale; - - int offX = - (int) (zoneCache.getZoneRenderer().getViewOffsetX() % isoWidth + grid.getOffsetX() * scale) - + 1; - int offY = - (int) (zoneCache.getZoneRenderer().getViewOffsetY() % gridSize + grid.getOffsetY() * scale) - + 1; - - int startCol = (int) ((int) (x / isoWidth) * isoWidth); - int startRow = (int) ((int) (y / gridSize) * gridSize); - - for (double row = startRow; row < y + h + gridSize; row += gridSize) { - for (double col = startCol; col < x + w + isoWidth; col += isoWidth) { - drawHatch(grid, (int) (col + offX), h - (int) (row + offY)); - } - } - - for (double row = startRow - (isoHeight / 2); row < y + h + gridSize; row += gridSize) { - for (double col = startCol - (isoWidth / 2); col < x + w + isoWidth; col += isoWidth) { - drawHatch(grid, (int) (col + offX), h - (int) (row + offY)); - } - } - } - - private void drawHatch(IsometricGrid grid, float x, float y) { - double isoWidth = grid.getSize() * zoneCache.getZoneRenderer().getScale(); - int hatchSize = isoWidth > 10 ? (int) isoWidth / 8 : 2; - - var lineWidth = AppState.getGridSize(); - - drawer.line(x - (hatchSize * 2), y - hatchSize, x + (hatchSize * 2), y + hatchSize, lineWidth); - drawer.line(x - (hatchSize * 2), y + hatchSize, x + (hatchSize * 2), y - hatchSize, lineWidth); - } - - private void renderGrid(SquareGrid grid) { - var scale = (float) zoneCache.getZoneRenderer().getScale(); - float gridSize = (grid.getSize() * scale); - Color.argb8888ToColor(tmpColor, zoneCache.getZone().getGridColor()); - - drawer.setColor(tmpColor); - - var x = hudCam.position.x - hudCam.viewportWidth / 2; - var y = hudCam.position.y - hudCam.viewportHeight / 2; - var w = hudCam.viewportWidth; - var h = hudCam.viewportHeight; - - var offX = - Math.round( - zoneCache.getZoneRenderer().getViewOffsetX() % gridSize + grid.getOffsetX() * scale); - var offY = - Math.round( - zoneCache.getZoneRenderer().getViewOffsetY() % gridSize + grid.getOffsetY() * scale); - - var startCol = ((int) (x / gridSize) * gridSize); - var startRow = ((int) (y / gridSize) * gridSize); - - var lineWidth = AppState.getGridSize(); - - for (float row = startRow; row < y + h + gridSize; row += gridSize) - drawer.line(x, Math.round(h - (row + offY)), x + w, Math.round(h - (row + offY)), lineWidth); - - for (float col = startCol; col < x + w + gridSize; col += gridSize) - drawer.line(Math.round(col + offX), y, Math.round(col + offX), y + h, lineWidth); - } - - private void renderDrawableOverlay(PlayerView view, List drawables) { - for (var drawable : drawables.toArray()) renderDrawable((DrawnElement) drawable); - } - - private void renderDrawable(DrawnElement element) { - var pen = element.getPen(); - var drawable = element.getDrawable(); - - if (drawable instanceof ShapeDrawable) shapeDrawableDrawer.draw(batch, drawable, pen); - else if (drawable instanceof DrawablesGroup) - for (var groupElement : ((DrawablesGroup) drawable).getDrawableList()) - renderDrawable(groupElement); - else if (drawable instanceof RadiusCellTemplate) - radiusCellTemplateDrawer.draw(batch, drawable, pen); - else if (drawable instanceof LineCellTemplate) - lineCellTemplateDrawer.draw(batch, drawable, pen); - else if (drawable instanceof BlastTemplate) blastTemplateDrawer.draw(batch, drawable, pen); - else if (drawable instanceof ConeTemplate) coneTemplateDrawer.draw(batch, drawable, pen); - else if (drawable instanceof BurstTemplate) burstTemplateDrawer.draw(batch, drawable, pen); - else if (drawable instanceof RadiusTemplate) radiusTemplateDrawer.draw(batch, drawable, pen); - else if (drawable instanceof LineTemplate) lineTemplateDrawer.draw(batch, drawable, pen); - } - private void renderBoard() { if (!zoneCache.getZone().drawBoard()) return; @@ -1923,7 +1727,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure || !overlay.showPlayer(token, MapTool.getPlayer())) { continue; } - renderTokenOverlay(overlay, token, stateValue); + tokenOverlayRenderer.render(stateTime, overlay, token, stateValue); } timer.stop("tokenlist-9"); @@ -1937,7 +1741,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure || !overlay.showPlayer(token, MapTool.getPlayer())) { continue; } - renderTokenOverlay(overlay, token, barValue); + tokenOverlayRenderer.render(stateTime, overlay, token, barValue); } // endfor timer.stop("tokenlist-10"); @@ -2214,602 +2018,6 @@ private void renderImageBorderAround(ImageBorder border, Rectangle bounds) { height - topMargin - bottomMargin); } - private void renderTokenOverlay(AbstractTokenOverlay overlay, Token token, Object value) { - if (overlay instanceof BarTokenOverlay) - renderTokenOverlay((BarTokenOverlay) overlay, token, value); - else if (overlay instanceof BooleanTokenOverlay) - renderTokenOverlay((BooleanTokenOverlay) overlay, token, value); - } - - private void renderTokenOverlay(BarTokenOverlay overlay, Token token, Object value) { - if (value == null) return; - double val = 0; - if (value instanceof Number) { - val = ((Number) value).doubleValue(); - } else { - try { - val = Double.parseDouble(value.toString()); - } catch (NumberFormatException e) { - return; // Bad value so don't paint. - } // endtry - } // endif - if (val < 0) val = 0; - if (val > 1) val = 1; - - if (overlay instanceof MultipleImageBarTokenOverlay) - renderTokenOverlay((MultipleImageBarTokenOverlay) overlay, token, val); - else if (overlay instanceof SingleImageBarTokenOverlay) - renderTokenOverlay((SingleImageBarTokenOverlay) overlay, token, val); - else if (overlay instanceof TwoToneBarTokenOverlay) - renderTokenOverlay((TwoToneBarTokenOverlay) overlay, token, val); - else if (overlay instanceof DrawnBarTokenOverlay) - renderTokenOverlay((DrawnBarTokenOverlay) overlay, token, val); - else if (overlay instanceof TwoImageBarTokenOverlay) - renderTokenOverlay((TwoImageBarTokenOverlay) overlay, token, val); - } - - private void renderTokenOverlay( - MultipleImageBarTokenOverlay overlay, Token token, double barValue) { - int incr = overlay.findIncrement(barValue); - - var bounds = token.getBounds(zoneCache.getZone()); - var x = bounds.x; - var y = -bounds.y - bounds.height; - - // Get the images - var image = zoneCache.getSprite(overlay.getAssetIds()[incr], stateTime); - - Dimension d = bounds.getSize(); - Dimension size = new Dimension((int) image.getWidth(), (int) image.getHeight()); - SwingUtil.constrainTo(size, d.width, d.height); - - // Find the position of the image according to the size and side where they are placed - switch (overlay.getSide()) { - case LEFT: - case TOP: - y += d.height - size.height; - break; - case RIGHT: - x += d.width - size.width; - y += d.height - size.height; - break; - } - - image.setPosition(x, y); - image.setSize(size.width, size.height); - image.draw(batch, overlay.getOpacity() / 100f); - } - - private void renderTokenOverlay( - SingleImageBarTokenOverlay overlay, Token token, double barValue) { - var bounds = token.getBounds(zoneCache.getZone()); - var x = bounds.x; - var y = -bounds.y - bounds.height; - - // Get the images - var image = zoneCache.getSprite(overlay.getAssetId(), stateTime); - - Dimension d = bounds.getSize(); - Dimension size = new Dimension((int) image.getWidth(), (int) image.getHeight()); - SwingUtil.constrainTo(size, d.width, d.height); - - var side = overlay.getSide(); - // Find the position of the images according to the size and side where they are placed - switch (side) { - case LEFT: - case TOP: - y += d.height - size.height; - break; - case RIGHT: - x += d.width - size.width; - y += d.height - size.height; - break; - } - - int width = - (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) - ? overlay.calcBarSize((int) image.getWidth(), barValue) - : (int) image.getWidth(); - int height = - (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) - ? overlay.calcBarSize((int) image.getHeight(), barValue) - : (int) image.getHeight(); - - int screenWidth = - (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) - ? overlay.calcBarSize(size.width, barValue) - : size.width; - int screenHeight = - (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) - ? overlay.calcBarSize(size.height, barValue) - : size.height; - - image.setPosition(x + size.width - screenWidth, y + size.height - screenHeight); - image.setSize(screenWidth, screenHeight); - - var u = image.getU(); - var v = image.getV(); - var u2 = image.getU2(); - var v2 = image.getV2(); - - var wfactor = screenWidth * 1.0f / size.width; - var uDiff = (u2 - u) * wfactor; - image.setU(u2 - uDiff); - - var vfactor = screenHeight * 1.0f / size.height; - var vDiff = (v2 - v) * vfactor; - image.setV(v2 - vDiff); - - image.draw(batch, overlay.getOpacity() / 100f); - - image.setU(u); - image.setV(v); - } - - private void renderTokenOverlay(DrawnBarTokenOverlay overlay, Token token, double barValue) { - var bounds = token.getBounds(zoneCache.getZone()); - var x = bounds.x; - var y = -bounds.y - bounds.height; - var w = bounds.width; - var h = bounds.height; - - var side = overlay.getSide(); - var thickness = overlay.getThickness(); - - int width = - (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) ? w : thickness; - int height = - (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) ? h : thickness; - - switch (side) { - case LEFT: - case TOP: - y += h - height; - break; - case RIGHT: - x += w - width; - y += h - height; - break; - } - - if (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) { - width = overlay.calcBarSize(width, barValue); - } else { - height = overlay.calcBarSize(height, barValue); - y += bounds.height - height; - } - - var barColor = overlay.getBarColor(); - tmpColor.set( - barColor.getRed() / 255f, - barColor.getGreen() / 255f, - barColor.getBlue() / 255f, - barColor.getAlpha() / 255f); - drawer.filledRectangle(x, y, width, height, tmpColor); - } - - private void renderTokenOverlay(TwoToneBarTokenOverlay overlay, Token token, double barValue) { - var bounds = token.getBounds(zoneCache.getZone()); - var x = bounds.x; - var y = -bounds.y - bounds.height; - var w = bounds.width; - var h = bounds.height; - - var side = overlay.getSide(); - var thickness = overlay.getThickness(); - - int width = - (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) ? w : thickness; - int height = - (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) ? h : thickness; - - switch (side) { - case LEFT: - case TOP: - y += h - height; - break; - case RIGHT: - x += w - width; - y += h - height; - break; - } - - var color = overlay.getBgColor(); - tmpColor.set( - color.getRed() / 255f, - color.getGreen() / 255f, - color.getBlue() / 255f, - color.getAlpha() / 255f); - drawer.filledRectangle(x, y, width, height, tmpColor); - - // Draw the bar - int borderSize = thickness > 5 ? 2 : 1; - x += borderSize; - y += borderSize; - width -= borderSize * 2; - height -= borderSize * 2; - if (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) { - width = overlay.calcBarSize(width, barValue); - } else { - height = overlay.calcBarSize(height, barValue); - } - - color = overlay.getBarColor(); - tmpColor.set( - color.getRed() / 255f, - color.getGreen() / 255f, - color.getBlue() / 255f, - color.getAlpha() / 255f); - drawer.filledRectangle(x, y, width, height, tmpColor); - } - - private void renderTokenOverlay(TwoImageBarTokenOverlay overlay, Token token, double barValue) { - var bounds = token.getBounds(zoneCache.getZone()); - var x = bounds.x; - var y = -bounds.y - bounds.height; - - // Get the images - var topImage = zoneCache.getSprite(overlay.getTopAssetId(), stateTime); - var bottomImage = zoneCache.getSprite(overlay.getBottomAssetId(), stateTime); - - Dimension d = bounds.getSize(); - Dimension size = new Dimension((int) topImage.getWidth(), (int) topImage.getHeight()); - SwingUtil.constrainTo(size, d.width, d.height); - - var side = overlay.getSide(); - // Find the position of the images according to the size and side where they are placed - switch (side) { - case LEFT: - case TOP: - y += d.height - size.height; - break; - case RIGHT: - x += d.width - size.width; - y += d.height - size.height; - break; - } - - var width = - (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) - ? overlay.calcBarSize((int) topImage.getWidth(), barValue) - : topImage.getWidth(); - var height = - (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) - ? overlay.calcBarSize((int) topImage.getHeight(), barValue) - : topImage.getHeight(); - - var screenWidth = - (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) - ? overlay.calcBarSize(size.width, barValue) - : size.width; - var screenHeight = - (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) - ? overlay.calcBarSize(size.height, barValue) - : size.height; - - bottomImage.setPosition(x, y); - bottomImage.setSize(size.width, size.height); - bottomImage.draw(batch, overlay.getOpacity() / 100f); - - var u = topImage.getU(); - var v = topImage.getV(); - var u2 = topImage.getU2(); - var v2 = topImage.getV2(); - - var wFactor = screenWidth * 1.0f / size.width; - var uDiff = (u2 - u) * wFactor; - - var vFactor = screenHeight * 1.0f / size.height; - var vDiff = (v2 - v) * vFactor; - - topImage.setPosition(x, y); - topImage.setSize(screenWidth, screenHeight); - - if (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) { - topImage.setU(u2 - uDiff); - topImage.setV(v2 - vDiff); - } else { - - topImage.setU2(u + uDiff); - topImage.setV2(v + vDiff); - } - topImage.draw(batch, overlay.getOpacity() / 100f); - - topImage.setU(u); - topImage.setV(v); - topImage.setU2(u2); - topImage.setV2(v2); - } - - private void renderTokenOverlay(BooleanTokenOverlay overlay, Token token, Object value) { - if (!FunctionUtil.getBooleanValue(value)) return; - - if (overlay instanceof ImageTokenOverlay) - renderTokenOverlay((ImageTokenOverlay) overlay, token); - else if (overlay instanceof FlowColorDotTokenOverlay) - renderTokenOverlay((FlowColorDotTokenOverlay) overlay, token); - else if (overlay instanceof YieldTokenOverlay) - renderTokenOverlay((YieldTokenOverlay) overlay, token); - else if (overlay instanceof OTokenOverlay) renderTokenOverlay((OTokenOverlay) overlay, token); - else if (overlay instanceof ColorDotTokenOverlay) - renderTokenOverlay((ColorDotTokenOverlay) overlay, token); - else if (overlay instanceof DiamondTokenOverlay) - renderTokenOverlay((DiamondTokenOverlay) overlay, token); - else if (overlay instanceof TriangleTokenOverlay) - renderTokenOverlay((TriangleTokenOverlay) overlay, token); - else if (overlay instanceof CrossTokenOverlay) - renderTokenOverlay((CrossTokenOverlay) overlay, token); - else if (overlay instanceof XTokenOverlay) renderTokenOverlay((XTokenOverlay) overlay, token); - else if (overlay instanceof ShadedTokenOverlay) - renderTokenOverlay((ShadedTokenOverlay) overlay, token); - } - - private void renderTokenOverlay(ShadedTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zoneCache.getZone()); - var x = bounds.x; - var y = -bounds.y - bounds.height; - var w = bounds.width; - var h = bounds.height; - - tmpColor.set(1, 1, 1, overlay.getOpacity() / 100); - // FIXME: this should change the transparency of the token. Test this when tokendrawing is moved - // to backbuffer - drawer.setColor(tmpColor); - drawer.filledRectangle(x, y, w, h); - drawer.setColor(Color.WHITE); - } - - private void renderTokenOverlay(ImageTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zoneCache.getZone()); - var x = bounds.x; - var y = -bounds.y; - - // Get the image - java.awt.Rectangle iBounds = overlay.getImageBounds(bounds, token); - Dimension d = iBounds.getSize(); - - var image = zoneCache.getSprite(overlay.getAssetId(), stateTime); - - Dimension size = new Dimension((int) image.getWidth(), (int) image.getHeight()); - SwingUtil.constrainTo(size, d.width, d.height); - - // Paint it at the right location - int width = size.width; - int height = size.height; - - if (overlay instanceof CornerImageTokenOverlay) { - x += iBounds.x + (d.width - width) / 2; - y -= iBounds.y + (d.height - height) / 2 + iBounds.height; - } else { - x = iBounds.x + (d.width - width) / 2; - y = -(iBounds.y + (d.height - height) / 2) - iBounds.height; - } - - image.setPosition(x, y); - image.setSize(size.width, size.height); - image.draw(batch, overlay.getOpacity() / 100f); - } - - private void renderTokenOverlay(XTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zoneCache.getZone()); - var x = bounds.x; - var y = -bounds.y - bounds.height; - var w = bounds.width; - var h = bounds.height; - - var color = overlay.getColor(); - Color.argb8888ToColor(tmpColor, color.getRGB()); - tmpColor.set( - color.getRed() / 255f, - color.getGreen() / 255f, - color.getBlue() / 255f, - overlay.getOpacity() / 100); - - var stroke = overlay.getStroke(); - - drawer.setColor(tmpColor); - drawer.line(x, y, x + w, y + h, stroke.getLineWidth()); - drawer.line(x, y + h, x + w, y, stroke.getLineWidth()); - drawer.setColor(Color.WHITE); - } - - private void renderTokenOverlay(FlowColorDotTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zoneCache.getZone()); - var x = bounds.x; - var y = -bounds.y - bounds.height; - var w = bounds.width; - var h = bounds.height; - - var color = overlay.getColor(); - Color.argb8888ToColor(tmpColor, color.getRGB()); - tmpColor.set( - color.getRed() / 255f, - color.getGreen() / 255f, - color.getBlue() / 255f, - overlay.getOpacity() / 100); - drawer.setColor(tmpColor); - Shape s = overlay.getShape(bounds, token); - areaRenderer.fillArea(batch, new Area(s)); - drawer.setColor(Color.WHITE); - } - - private void renderTokenOverlay(YieldTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zoneCache.getZone()); - var x = bounds.x; - var y = -bounds.y - bounds.height; - var w = bounds.width; - var h = bounds.height; - - var color = overlay.getColor(); - Color.argb8888ToColor(tmpColor, color.getRGB()); - tmpColor.set( - color.getRed() / 255f, - color.getGreen() / 255f, - color.getBlue() / 255f, - overlay.getOpacity() / 100); - - var stroke = overlay.getStroke(); - var hc = w / 2f; - var vc = h * (1 - 0.134f); - - var floats = - new float[] { - x, y + vc, x + w, y + vc, x + hc, y, - }; - - drawer.setColor(tmpColor); - drawer.path(floats, stroke.getLineWidth(), JoinType.POINTY, false); - drawer.setColor(Color.WHITE); - } - - private void renderTokenOverlay(OTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zoneCache.getZone()); - var x = bounds.x; - var y = -bounds.y - bounds.height; - var w = bounds.width; - var h = bounds.height; - - var color = overlay.getColor(); - Color.argb8888ToColor(tmpColor, color.getRGB()); - tmpColor.set( - color.getRed() / 255f, - color.getGreen() / 255f, - color.getBlue() / 255f, - overlay.getOpacity() / 100); - - var stroke = overlay.getStroke(); - var lineWidth = stroke.getLineWidth(); - - var centerX = x + w / 2f; - var centerY = y + h / 2f; - var radiusX = w / 2f - lineWidth / 2f; - var radiusY = h / 2f - lineWidth / 2f; - - drawer.setColor(tmpColor); - drawer.ellipse(centerX, centerY, radiusX, radiusY, 0, lineWidth); - drawer.setColor(Color.WHITE); - } - - private void renderTokenOverlay(ColorDotTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zoneCache.getZone()); - var x = bounds.x; - var y = -bounds.y - bounds.height; - var w = bounds.width; - - var color = overlay.getColor(); - Color.argb8888ToColor(tmpColor, color.getRGB()); - tmpColor.set( - color.getRed() / 255f, - color.getGreen() / 255f, - color.getBlue() / 255f, - overlay.getOpacity() / 100); - - var size = w * 0.1f; - var offset = w * 0.8f; - - var posX = x + size; - var posY = y + size; - - switch (overlay.getCorner()) { - case SOUTH_EAST: - posX += offset; - break; - case SOUTH_WEST: - break; - case NORTH_EAST: - posX += offset; - posY += offset; - break; - case NORTH_WEST: - posY += offset; - break; - } - - drawer.setColor(tmpColor); - drawer.filledEllipse(posX, posY, size, size); - drawer.setColor(Color.WHITE); - } - - private void renderTokenOverlay(DiamondTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zoneCache.getZone()); - var x = bounds.x; - var y = -bounds.y - bounds.height; - var w = bounds.width; - var h = bounds.height; - - var color = overlay.getColor(); - Color.argb8888ToColor(tmpColor, color.getRGB()); - tmpColor.set( - color.getRed() / 255f, - color.getGreen() / 255f, - color.getBlue() / 255f, - overlay.getOpacity() / 100); - var stroke = overlay.getStroke(); - - var hc = w / 2f; - var vc = h / 2f; - - var floats = - new float[] { - x, y + vc, x + hc, y, x + w, y + vc, x + hc, y + h, - }; - - drawer.setColor(tmpColor); - drawer.path(floats, stroke.getLineWidth(), JoinType.POINTY, false); - drawer.setColor(Color.WHITE); - } - - private void renderTokenOverlay(TriangleTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zoneCache.getZone()); - var x = bounds.x; - var y = -bounds.y - bounds.height; - var w = bounds.width; - var h = bounds.height; - - var color = overlay.getColor(); - Color.argb8888ToColor(tmpColor, color.getRGB()); - tmpColor.set( - color.getRed() / 255f, - color.getGreen() / 255f, - color.getBlue() / 255f, - overlay.getOpacity() / 100); - var stroke = overlay.getStroke(); - - var hc = w / 2f; - var vc = h * (1 - 0.866f); - - var floats = - new float[] { - x, y + vc, x + w, y + vc, x + hc, y + h, - }; - - drawer.setColor(tmpColor); - drawer.path(floats, stroke.getLineWidth(), JoinType.POINTY, false); - drawer.setColor(Color.WHITE); - } - - private void renderTokenOverlay(CrossTokenOverlay overlay, Token token) { - var bounds = token.getBounds(zoneCache.getZone()); - var x = bounds.x; - var y = -bounds.y - bounds.height; - var w = bounds.width; - var h = bounds.height; - - var color = overlay.getColor(); - Color.argb8888ToColor(tmpColor, color.getRGB()); - tmpColor.set( - color.getRed() / 255f, - color.getGreen() / 255f, - color.getBlue() / 255f, - overlay.getOpacity() / 100); - var stroke = overlay.getStroke(); - - drawer.setColor(tmpColor); - drawer.line(x, y + h / 2f, x + w, y + h / 2f, stroke.getLineWidth()); - drawer.line(x + w / 2f, y, x + w / 2f, y + h, stroke.getLineWidth()); - drawer.setColor(Color.WHITE); - } - // FIXME: I don't like this hardwiring protected java.awt.Shape getFigureFacingArrow(int angle, int size) { int base = (int) (size * .75); @@ -3165,14 +2373,9 @@ void onZoneActivated(ZoneActivated event) { var newZone = event.zone(); zoneCache = new ZoneCache(newZone, atlas); - lineTemplateDrawer.setZoneCache(zoneCache); - lineCellTemplateDrawer.setZoneCache(zoneCache); - radiusTemplateDrawer.setZoneCache(zoneCache); - burstTemplateDrawer.setZoneCache(zoneCache); - coneTemplateDrawer.setZoneCache(zoneCache); - blastTemplateDrawer.setZoneCache(zoneCache); - radiusCellTemplateDrawer.setZoneCache(zoneCache); - shapeDrawableDrawer.setZoneCache(zoneCache); + drawnElementRenderer.setZoneCache(zoneCache); + tokenOverlayRenderer.setZoneCache(zoneCache); + gridRenderer.setZoneCache(zoneCache); renderZone = true; }); } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GridRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GridRenderer.java new file mode 100644 index 0000000000..e320216df3 --- /dev/null +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GridRenderer.java @@ -0,0 +1,211 @@ +/* + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. + * + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . + */ +package net.rptools.maptool.client.ui.zone.gdx; + +import com.badlogic.gdx.graphics.Camera; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.Batch; +import com.badlogic.gdx.math.Matrix4; +import com.badlogic.gdx.utils.Pools; +import net.rptools.maptool.client.AppState; +import net.rptools.maptool.client.ui.zone.renderer.ZoneRenderer; +import net.rptools.maptool.model.*; +import space.earlygrey.shapedrawer.JoinType; +import space.earlygrey.shapedrawer.ShapeDrawer; + +public class GridRenderer { + private ZoneCache zoneCache; + private final AreaRenderer areaRenderer; + private final ShapeDrawer drawer; + private final Batch batch; + private final Camera hudCam; + + public GridRenderer(AreaRenderer areaRenderer, Camera hudCam) { + this.areaRenderer = areaRenderer; + this.drawer = areaRenderer.getShapeDrawer(); + batch = drawer.getBatch(); + this.hudCam = hudCam; + } + + public void setZoneCache(ZoneCache zoneCache) { + this.zoneCache = zoneCache; + } + + public void render() { + var grid = zoneCache.getZone().getGrid(); + var scale = (float) zoneCache.getZoneRenderer().getScale(); + int gridSize = (int) (grid.getSize() * scale); + + if (!AppState.isShowGrid() || gridSize < ZoneRenderer.MIN_GRID_SIZE) { + return; + } + + // Do nothing for GridlessGrid + if (grid instanceof HexGrid hexGrid) { + renderGrid(hexGrid); + } else if (grid instanceof SquareGrid squareGrid) { + renderGrid(squareGrid); + } else if (grid instanceof IsometricGrid isometricGrid) { + renderGrid(isometricGrid); + } + } + + private void renderGrid(HexGrid grid) { + var tmpColor = Pools.obtain(Color.class); + Color.argb8888ToColor(tmpColor, zoneCache.getZone().getGridColor()); + + drawer.setColor(tmpColor); + var path = grid.createShape(zoneCache.getZoneRenderer().getScale()); + var floats = areaRenderer.pathToFloatArray(path.getPathIterator(null)); + + int offU = grid.getOffU(zoneCache.getZoneRenderer()); + int offV = grid.getOffV(zoneCache.getZoneRenderer()); + + int count = 0; + + var lineWidth = AppState.getGridSize(); + + for (double v = offV % (grid.getScaledMinorRadius() * 2) - (grid.getScaledMinorRadius() * 2); + v < grid.getRendererSizeV(zoneCache.getZoneRenderer()); + v += grid.getScaledMinorRadius()) { + double offsetU = + (int) + ((count & 1) == 0 + ? 0 + : -(grid.getScaledEdgeProjection() + grid.getScaledEdgeLength())); + count++; + + double start = + offU % (2 * grid.getScaledEdgeLength() + 2 * grid.getScaledEdgeProjection()) + - (2 * grid.getScaledEdgeLength() + 2 * grid.getScaledEdgeProjection()); + double end = + grid.getRendererSizeU(zoneCache.getZoneRenderer()) + + 2 * grid.getScaledEdgeLength() + + 2 * grid.getScaledEdgeProjection(); + double increment = 2 * grid.getScaledEdgeLength() + 2 * grid.getScaledEdgeProjection(); + for (double u = start; u < end; u += increment) { + float transX; + float transY; + if (grid instanceof HexGridVertical) { + transX = (float) (u + offsetU); + transY = hudCam.viewportHeight - (float) v; + } else { + transX = (float) v; + transY = (float) (-u - offsetU) + hudCam.viewportHeight; + } + + var tmpMatrix = Pools.obtain(Matrix4.class); + tmpMatrix.translate(transX, transY, 0); + batch.setTransformMatrix(tmpMatrix); + drawer.update(); + + drawer.path(floats, lineWidth, JoinType.SMOOTH, true); + tmpMatrix.idt(); + batch.setTransformMatrix(tmpMatrix); + Pools.free(tmpMatrix); + drawer.update(); + } + } + Pools.free(tmpColor); + } + + private void renderGrid(IsometricGrid grid) { + var scale = (float) zoneCache.getZoneRenderer().getScale(); + int gridSize = (int) (grid.getSize() * scale); + + var tmpColor = Pools.obtain(Color.class); + Color.argb8888ToColor(tmpColor, zoneCache.getZone().getGridColor()); + + drawer.setColor(tmpColor); + + var x = hudCam.position.x - hudCam.viewportWidth / 2; + var y = hudCam.position.y - hudCam.viewportHeight / 2; + var w = hudCam.viewportWidth; + var h = hudCam.viewportHeight; + + double isoHeight = grid.getSize() * scale; + double isoWidth = grid.getSize() * 2 * scale; + + int offX = + (int) (zoneCache.getZoneRenderer().getViewOffsetX() % isoWidth + grid.getOffsetX() * scale) + + 1; + int offY = + (int) (zoneCache.getZoneRenderer().getViewOffsetY() % gridSize + grid.getOffsetY() * scale) + + 1; + + int startCol = (int) ((int) (x / isoWidth) * isoWidth); + int startRow = (int) (y / gridSize) * gridSize; + + for (double row = startRow; row < y + h + gridSize; row += gridSize) { + for (double col = startCol; col < x + w + isoWidth; col += isoWidth) { + drawHatch(grid, (int) (col + offX), h - (int) (row + offY)); + } + } + + for (double row = startRow - (isoHeight / 2); row < y + h + gridSize; row += gridSize) { + for (double col = startCol - (isoWidth / 2); col < x + w + isoWidth; col += isoWidth) { + drawHatch(grid, (int) (col + offX), h - (int) (row + offY)); + } + } + Pools.free(tmpColor); + } + + private void drawHatch(IsometricGrid grid, float x, float y) { + double isoWidth = grid.getSize() * zoneCache.getZoneRenderer().getScale(); + int hatchSize = isoWidth > 10 ? (int) isoWidth / 8 : 2; + + var lineWidth = AppState.getGridSize(); + + drawer.line(x - (hatchSize * 2), y - hatchSize, x + (hatchSize * 2), y + hatchSize, lineWidth); + drawer.line(x - (hatchSize * 2), y + hatchSize, x + (hatchSize * 2), y - hatchSize, lineWidth); + } + + private void renderGrid(SquareGrid grid) { + var scale = (float) zoneCache.getZoneRenderer().getScale(); + float gridSize = (grid.getSize() * scale); + var tmpColor = Pools.obtain(Color.class); + Color.argb8888ToColor(tmpColor, zoneCache.getZone().getGridColor()); + + drawer.setColor(tmpColor); + + var x = hudCam.position.x - hudCam.viewportWidth / 2; + var y = hudCam.position.y - hudCam.viewportHeight / 2; + var w = hudCam.viewportWidth; + var h = hudCam.viewportHeight; + + var offX = + Math.round( + zoneCache.getZoneRenderer().getViewOffsetX() % gridSize + grid.getOffsetX() * scale); + var offY = + Math.round( + zoneCache.getZoneRenderer().getViewOffsetY() % gridSize + grid.getOffsetY() * scale); + + var startCol = ((int) (x / gridSize) * gridSize); + var startRow = ((int) (y / gridSize) * gridSize); + + var lineWidth = AppState.getGridSize(); + + for (float row = startRow; row < y + h + gridSize; row += gridSize) { + var rounded = Math.round(h - (row + offY)); + drawer.line(x, rounded, x + w, rounded, lineWidth); + } + + for (float col = startCol; col < x + w + gridSize; col += gridSize) { + var rounded = Math.round(col + offX); + drawer.line(rounded, y, rounded, y + h, lineWidth); + } + Pools.free(tmpColor); + } +} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TokenOverlayRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TokenOverlayRenderer.java new file mode 100644 index 0000000000..3f28d1412d --- /dev/null +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TokenOverlayRenderer.java @@ -0,0 +1,619 @@ +/* + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. + * + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . + */ +package net.rptools.maptool.client.ui.zone.gdx; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; +import java.awt.*; +import java.awt.geom.Area; +import net.rptools.maptool.client.swing.SwingUtil; +import net.rptools.maptool.client.ui.token.*; +import net.rptools.maptool.model.Token; +import net.rptools.maptool.util.FunctionUtil; +import space.earlygrey.shapedrawer.JoinType; +import space.earlygrey.shapedrawer.ShapeDrawer; + +public class TokenOverlayRenderer { + private final Color tmpColor = Color.WHITE; + private ZoneCache zoneCache; + private final AreaRenderer areaRenderer; + private final ShapeDrawer drawer; + private final PolygonSpriteBatch batch; + + public TokenOverlayRenderer(AreaRenderer areaRenderer) { + this.areaRenderer = areaRenderer; + drawer = areaRenderer.getShapeDrawer(); + batch = (PolygonSpriteBatch) drawer.getBatch(); + } + + public void setZoneCache(ZoneCache zoneCache) { + this.zoneCache = zoneCache; + } + + public void render(float stateTime, AbstractTokenOverlay overlay, Token token, Object value) { + if (overlay instanceof BarTokenOverlay barTokenOverlay) + renderBarTokenOverlay(stateTime, barTokenOverlay, token, value); + else if (overlay instanceof BooleanTokenOverlay booleanTokenOverlay) + renderTokenOverlay(stateTime, booleanTokenOverlay, token, value); + } + + private void renderBarTokenOverlay( + float stateTime, BarTokenOverlay overlay, Token token, Object value) { + if (value == null) return; + double val; + if (value instanceof Number) { + val = ((Number) value).doubleValue(); + } else { + try { + val = Double.parseDouble(value.toString()); + } catch (NumberFormatException e) { + return; // Bad value so don't paint. + } + } // endif + if (val < 0) val = 0; + if (val > 1) val = 1; + + if (overlay instanceof MultipleImageBarTokenOverlay actualOverlay) + renderTokenOverlay(stateTime, actualOverlay, token, val); + else if (overlay instanceof SingleImageBarTokenOverlay actualOverlay) + renderTokenOverlay(stateTime, actualOverlay, token, val); + else if (overlay instanceof TwoToneBarTokenOverlay actualOverlay) + renderTokenOverlay(actualOverlay, token, val); + else if (overlay instanceof DrawnBarTokenOverlay actualOverlay) + renderTokenOverlay(actualOverlay, token, val); + else if (overlay instanceof TwoImageBarTokenOverlay actualOverlay) + renderTokenOverlay(stateTime, actualOverlay, token, val); + } + + private void renderTokenOverlay( + float stateTime, MultipleImageBarTokenOverlay overlay, Token token, double barValue) { + int increment = overlay.findIncrement(barValue); + + var bounds = token.getBounds(zoneCache.getZone()); + var x = bounds.x; + var y = -bounds.y - bounds.height; + + // Get the images + var image = zoneCache.getSprite(overlay.getAssetIds()[increment], stateTime); + + Dimension d = bounds.getSize(); + Dimension size = new Dimension((int) image.getWidth(), (int) image.getHeight()); + SwingUtil.constrainTo(size, d.width, d.height); + + // Find the position of the image according to the size and side where they are placed + switch (overlay.getSide()) { + case LEFT: + case TOP: + y += d.height - size.height; + break; + case RIGHT: + x += d.width - size.width; + y += d.height - size.height; + break; + } + + image.setPosition(x, y); + image.setSize(size.width, size.height); + image.draw(batch, overlay.getOpacity() / 100f); + } + + private void renderTokenOverlay( + float stateTime, SingleImageBarTokenOverlay overlay, Token token, double barValue) { + var bounds = token.getBounds(zoneCache.getZone()); + var x = bounds.x; + var y = -bounds.y - bounds.height; + + // Get the images + var image = zoneCache.getSprite(overlay.getAssetId(), stateTime); + + Dimension d = bounds.getSize(); + Dimension size = new Dimension((int) image.getWidth(), (int) image.getHeight()); + SwingUtil.constrainTo(size, d.width, d.height); + + var side = overlay.getSide(); + // Find the position of the images according to the size and side where they are placed + switch (side) { + case LEFT: + case TOP: + y += d.height - size.height; + break; + case RIGHT: + x += d.width - size.width; + y += d.height - size.height; + break; + } + + int screenWidth = + (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) + ? overlay.calcBarSize(size.width, barValue) + : size.width; + int screenHeight = + (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) + ? overlay.calcBarSize(size.height, barValue) + : size.height; + + image.setPosition(x + size.width - screenWidth, y + size.height - screenHeight); + image.setSize(screenWidth, screenHeight); + + var u = image.getU(); + var v = image.getV(); + var u2 = image.getU2(); + var v2 = image.getV2(); + + var uFactor = screenWidth * 1.0f / size.width; + var uDiff = (u2 - u) * uFactor; + image.setU(u2 - uDiff); + + var vFactor = screenHeight * 1.0f / size.height; + var vDiff = (v2 - v) * vFactor; + image.setV(v2 - vDiff); + + image.draw(batch, overlay.getOpacity() / 100f); + + image.setU(u); + image.setV(v); + } + + private void renderTokenOverlay(DrawnBarTokenOverlay overlay, Token token, double barValue) { + var bounds = token.getBounds(zoneCache.getZone()); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + var side = overlay.getSide(); + var thickness = overlay.getThickness(); + + int width = + (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) ? w : thickness; + int height = + (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) ? h : thickness; + + switch (side) { + case LEFT: + case TOP: + y += h - height; + break; + case RIGHT: + x += w - width; + break; + } + + if (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) { + width = overlay.calcBarSize(width, barValue); + } else { + height = overlay.calcBarSize(height, barValue); + y += bounds.height - height; + } + + var barColor = overlay.getBarColor(); + tmpColor.set( + barColor.getRed() / 255f, + barColor.getGreen() / 255f, + barColor.getBlue() / 255f, + barColor.getAlpha() / 255f); + drawer.filledRectangle(x, y, width, height, tmpColor); + } + + private void renderTokenOverlay(TwoToneBarTokenOverlay overlay, Token token, double barValue) { + var bounds = token.getBounds(zoneCache.getZone()); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + var side = overlay.getSide(); + var thickness = overlay.getThickness(); + + int width = + (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) ? w : thickness; + int height = + (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) ? h : thickness; + + switch (side) { + case LEFT: + case TOP: + y += h - height; + break; + case RIGHT: + x += w - width; + break; + } + + var color = overlay.getBgColor(); + tmpColor.set( + color.getRed() / 255f, + color.getGreen() / 255f, + color.getBlue() / 255f, + color.getAlpha() / 255f); + drawer.filledRectangle(x, y, width, height, tmpColor); + + // Draw the bar + int borderSize = thickness > 5 ? 2 : 1; + x += borderSize; + y += borderSize; + width -= borderSize * 2; + height -= borderSize * 2; + if (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) { + width = overlay.calcBarSize(width, barValue); + } else { + height = overlay.calcBarSize(height, barValue); + } + + color = overlay.getBarColor(); + tmpColor.set( + color.getRed() / 255f, + color.getGreen() / 255f, + color.getBlue() / 255f, + color.getAlpha() / 255f); + drawer.filledRectangle(x, y, width, height, tmpColor); + } + + private void renderTokenOverlay( + float stateTime, TwoImageBarTokenOverlay overlay, Token token, double barValue) { + var bounds = token.getBounds(zoneCache.getZone()); + var x = bounds.x; + var y = -bounds.y - bounds.height; + + // Get the images + var topImage = zoneCache.getSprite(overlay.getTopAssetId(), stateTime); + var bottomImage = zoneCache.getSprite(overlay.getBottomAssetId(), stateTime); + + Dimension d = bounds.getSize(); + Dimension size = new Dimension((int) topImage.getWidth(), (int) topImage.getHeight()); + SwingUtil.constrainTo(size, d.width, d.height); + + var side = overlay.getSide(); + // Find the position of the images according to the size and side where they are placed + switch (side) { + case LEFT: + case TOP: + y += d.height - size.height; + break; + case RIGHT: + x += d.width - size.width; + y += d.height - size.height; + break; + } + + var screenWidth = + (side == BarTokenOverlay.Side.TOP || side == BarTokenOverlay.Side.BOTTOM) + ? overlay.calcBarSize(size.width, barValue) + : size.width; + var screenHeight = + (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) + ? overlay.calcBarSize(size.height, barValue) + : size.height; + + bottomImage.setPosition(x, y); + bottomImage.setSize(size.width, size.height); + bottomImage.draw(batch, overlay.getOpacity() / 100f); + + var u = topImage.getU(); + var v = topImage.getV(); + var u2 = topImage.getU2(); + var v2 = topImage.getV2(); + + var wFactor = screenWidth * 1.0f / size.width; + var uDiff = (u2 - u) * wFactor; + + var vFactor = screenHeight * 1.0f / size.height; + var vDiff = (v2 - v) * vFactor; + + topImage.setPosition(x, y); + topImage.setSize(screenWidth, screenHeight); + + if (side == BarTokenOverlay.Side.LEFT || side == BarTokenOverlay.Side.RIGHT) { + topImage.setU(u2 - uDiff); + topImage.setV(v2 - vDiff); + } else { + + topImage.setU2(u + uDiff); + topImage.setV2(v + vDiff); + } + topImage.draw(batch, overlay.getOpacity() / 100f); + + topImage.setU(u); + topImage.setV(v); + topImage.setU2(u2); + topImage.setV2(v2); + } + + private void renderTokenOverlay( + float stateTime, BooleanTokenOverlay overlay, Token token, Object value) { + if (!FunctionUtil.getBooleanValue(value)) return; + + if (overlay instanceof ImageTokenOverlay actualOverlay) + renderTokenOverlay(stateTime, actualOverlay, token); + else if (overlay instanceof FlowColorDotTokenOverlay actualOverlay) + renderTokenOverlay(actualOverlay, token); + else if (overlay instanceof YieldTokenOverlay actualOverlay) + renderTokenOverlay(actualOverlay, token); + else if (overlay instanceof OTokenOverlay actualOverlay) + renderTokenOverlay(actualOverlay, token); + else if (overlay instanceof ColorDotTokenOverlay actualOverlay) + renderTokenOverlay(actualOverlay, token); + else if (overlay instanceof DiamondTokenOverlay actualOverlay) + renderTokenOverlay(actualOverlay, token); + else if (overlay instanceof TriangleTokenOverlay actualOverlay) + renderTokenOverlay(actualOverlay, token); + else if (overlay instanceof CrossTokenOverlay actualOverlay) + renderTokenOverlay(actualOverlay, token); + else if (overlay instanceof XTokenOverlay actualOverlay) + renderTokenOverlay(actualOverlay, token); + else if (overlay instanceof ShadedTokenOverlay actualOverlay) + renderTokenOverlay(actualOverlay, token); + } + + private void renderTokenOverlay(ShadedTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zoneCache.getZone()); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + tmpColor.set(1, 1, 1, overlay.getOpacity() / 100f); + drawer.setColor(tmpColor); + drawer.filledRectangle(x, y, w, h); + drawer.setColor(com.badlogic.gdx.graphics.Color.WHITE); + } + + private void renderTokenOverlay(float stateTime, ImageTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zoneCache.getZone()); + var x = bounds.x; + var y = -bounds.y; + + // Get the image + java.awt.Rectangle iBounds = overlay.getImageBounds(bounds, token); + Dimension d = iBounds.getSize(); + + var image = zoneCache.getSprite(overlay.getAssetId(), stateTime); + + Dimension size = new Dimension((int) image.getWidth(), (int) image.getHeight()); + SwingUtil.constrainTo(size, d.width, d.height); + + // Paint it at the right location + int width = size.width; + int height = size.height; + + if (overlay instanceof CornerImageTokenOverlay) { + x += iBounds.x + (d.width - width) / 2; + y -= iBounds.y + (d.height - height) / 2 + iBounds.height; + } else { + x = iBounds.x + (d.width - width) / 2; + y = -(iBounds.y + (d.height - height) / 2) - iBounds.height; + } + + image.setPosition(x, y); + image.setSize(size.width, size.height); + image.draw(batch, overlay.getOpacity() / 100f); + } + + private void renderTokenOverlay(XTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zoneCache.getZone()); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + var color = overlay.getColor(); + com.badlogic.gdx.graphics.Color.argb8888ToColor(tmpColor, color.getRGB()); + tmpColor.set( + color.getRed() / 255f, + color.getGreen() / 255f, + color.getBlue() / 255f, + overlay.getOpacity() / 100f); + + var stroke = overlay.getStroke(); + + drawer.setColor(tmpColor); + drawer.line(x, y, x + w, y + h, stroke.getLineWidth()); + drawer.line(x, y + h, x + w, y, stroke.getLineWidth()); + drawer.setColor(com.badlogic.gdx.graphics.Color.WHITE); + } + + private void renderTokenOverlay(FlowColorDotTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zoneCache.getZone()); + + var color = overlay.getColor(); + com.badlogic.gdx.graphics.Color.argb8888ToColor(tmpColor, color.getRGB()); + tmpColor.set( + color.getRed() / 255f, + color.getGreen() / 255f, + color.getBlue() / 255f, + overlay.getOpacity() / 100f); + drawer.setColor(tmpColor); + Shape s = overlay.getShape(bounds, token); + areaRenderer.fillArea(batch, new Area(s)); + drawer.setColor(com.badlogic.gdx.graphics.Color.WHITE); + } + + private void renderTokenOverlay(YieldTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zoneCache.getZone()); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + var color = overlay.getColor(); + com.badlogic.gdx.graphics.Color.argb8888ToColor(tmpColor, color.getRGB()); + tmpColor.set( + color.getRed() / 255f, + color.getGreen() / 255f, + color.getBlue() / 255f, + overlay.getOpacity() / 100f); + + var stroke = overlay.getStroke(); + var hc = w / 2f; + var vc = h * (1 - 0.134f); + + var floats = + new float[] { + x, y + vc, x + w, y + vc, x + hc, y, + }; + + drawer.setColor(tmpColor); + drawer.path(floats, stroke.getLineWidth(), JoinType.POINTY, false); + drawer.setColor(com.badlogic.gdx.graphics.Color.WHITE); + } + + private void renderTokenOverlay(OTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zoneCache.getZone()); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + var color = overlay.getColor(); + com.badlogic.gdx.graphics.Color.argb8888ToColor(tmpColor, color.getRGB()); + tmpColor.set( + color.getRed() / 255f, + color.getGreen() / 255f, + color.getBlue() / 255f, + overlay.getOpacity() / 100f); + + var stroke = overlay.getStroke(); + var lineWidth = stroke.getLineWidth(); + + var centerX = x + w / 2f; + var centerY = y + h / 2f; + var radiusX = w / 2f - lineWidth / 2f; + var radiusY = h / 2f - lineWidth / 2f; + + drawer.setColor(tmpColor); + drawer.ellipse(centerX, centerY, radiusX, radiusY, 0, lineWidth); + drawer.setColor(com.badlogic.gdx.graphics.Color.WHITE); + } + + private void renderTokenOverlay(ColorDotTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zoneCache.getZone()); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + + var color = overlay.getColor(); + com.badlogic.gdx.graphics.Color.argb8888ToColor(tmpColor, color.getRGB()); + tmpColor.set( + color.getRed() / 255f, + color.getGreen() / 255f, + color.getBlue() / 255f, + overlay.getOpacity() / 100f); + + var size = w * 0.1f; + var offset = w * 0.8f; + + var posX = x + size; + var posY = y + size; + + switch (overlay.getCorner()) { + case SOUTH_EAST: + posX += offset; + break; + case SOUTH_WEST: + break; + case NORTH_EAST: + posX += offset; + posY += offset; + break; + case NORTH_WEST: + posY += offset; + break; + } + + drawer.setColor(tmpColor); + drawer.filledEllipse(posX, posY, size, size); + drawer.setColor(com.badlogic.gdx.graphics.Color.WHITE); + } + + private void renderTokenOverlay(DiamondTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zoneCache.getZone()); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + var color = overlay.getColor(); + com.badlogic.gdx.graphics.Color.argb8888ToColor(tmpColor, color.getRGB()); + tmpColor.set( + color.getRed() / 255f, + color.getGreen() / 255f, + color.getBlue() / 255f, + overlay.getOpacity() / 100f); + var stroke = overlay.getStroke(); + + var hc = w / 2f; + var vc = h / 2f; + + var floats = + new float[] { + x, y + vc, x + hc, y, x + w, y + vc, x + hc, y + h, + }; + + drawer.setColor(tmpColor); + drawer.path(floats, stroke.getLineWidth(), JoinType.POINTY, false); + drawer.setColor(com.badlogic.gdx.graphics.Color.WHITE); + } + + private void renderTokenOverlay(TriangleTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zoneCache.getZone()); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + var color = overlay.getColor(); + com.badlogic.gdx.graphics.Color.argb8888ToColor(tmpColor, color.getRGB()); + tmpColor.set( + color.getRed() / 255f, + color.getGreen() / 255f, + color.getBlue() / 255f, + overlay.getOpacity() / 100f); + var stroke = overlay.getStroke(); + + var hc = w / 2f; + var vc = h * (1 - 0.866f); + + var floats = + new float[] { + x, y + vc, x + w, y + vc, x + hc, y + h, + }; + + drawer.setColor(tmpColor); + drawer.path(floats, stroke.getLineWidth(), JoinType.POINTY, false); + drawer.setColor(com.badlogic.gdx.graphics.Color.WHITE); + } + + private void renderTokenOverlay(CrossTokenOverlay overlay, Token token) { + var bounds = token.getBounds(zoneCache.getZone()); + var x = bounds.x; + var y = -bounds.y - bounds.height; + var w = bounds.width; + var h = bounds.height; + + var color = overlay.getColor(); + com.badlogic.gdx.graphics.Color.argb8888ToColor(tmpColor, color.getRGB()); + tmpColor.set( + color.getRed() / 255f, + color.getGreen() / 255f, + color.getBlue() / 255f, + overlay.getOpacity() / 100f); + var stroke = overlay.getStroke(); + + drawer.setColor(tmpColor); + drawer.line(x, y + h / 2f, x + w, y + h / 2f, stroke.getLineWidth()); + drawer.line(x + w / 2f, y, x + w / 2f, y + h, stroke.getLineWidth()); + drawer.setColor(Color.WHITE); + } +} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractDrawingDrawer.java similarity index 94% rename from src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java rename to src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractDrawingDrawer.java index 223feb1048..27372da5d6 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractDrawingDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractDrawingDrawer.java @@ -12,16 +12,16 @@ * and specifically the Affero license * text at . */ -package net.rptools.maptool.client.ui.zone.gdx; +package net.rptools.maptool.client.ui.zone.gdx.drawing; -import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; import com.badlogic.gdx.utils.FloatArray; import java.awt.geom.Area; +import net.rptools.maptool.client.ui.zone.gdx.AreaRenderer; +import net.rptools.maptool.client.ui.zone.gdx.ZoneCache; import net.rptools.maptool.model.drawing.*; public abstract class AbstractDrawingDrawer { - protected Color tmpColor = new Color(); protected Float alpha = null; protected AreaRenderer areaRenderer; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractTemplateDrawer.java similarity index 97% rename from src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractTemplateDrawer.java rename to src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractTemplateDrawer.java index 7990d10c97..95c09c4bc1 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AbstractTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractTemplateDrawer.java @@ -12,10 +12,11 @@ * and specifically the Affero license * text at . */ -package net.rptools.maptool.client.ui.zone.gdx; +package net.rptools.maptool.client.ui.zone.gdx.drawing; import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; import net.rptools.maptool.client.MapTool; +import net.rptools.maptool.client.ui.zone.gdx.AreaRenderer; import net.rptools.maptool.model.Zone; import net.rptools.maptool.model.drawing.AbstractTemplate; import net.rptools.maptool.model.drawing.Drawable; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BlastTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/BlastTemplateDrawer.java similarity index 92% rename from src/main/java/net/rptools/maptool/client/ui/zone/gdx/BlastTemplateDrawer.java rename to src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/BlastTemplateDrawer.java index 01159fb157..711308c778 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BlastTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/BlastTemplateDrawer.java @@ -12,9 +12,10 @@ * and specifically the Affero license * text at . */ -package net.rptools.maptool.client.ui.zone.gdx; +package net.rptools.maptool.client.ui.zone.gdx.drawing; import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; +import net.rptools.maptool.client.ui.zone.gdx.AreaRenderer; import net.rptools.maptool.model.drawing.AbstractTemplate; import net.rptools.maptool.model.drawing.BlastTemplate; import net.rptools.maptool.model.drawing.Drawable; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BurstTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/BurstTemplateDrawer.java similarity index 92% rename from src/main/java/net/rptools/maptool/client/ui/zone/gdx/BurstTemplateDrawer.java rename to src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/BurstTemplateDrawer.java index ec23828584..0542f400cc 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/BurstTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/BurstTemplateDrawer.java @@ -12,9 +12,10 @@ * and specifically the Affero license * text at . */ -package net.rptools.maptool.client.ui.zone.gdx; +package net.rptools.maptool.client.ui.zone.gdx.drawing; import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; +import net.rptools.maptool.client.ui.zone.gdx.AreaRenderer; import net.rptools.maptool.model.drawing.AbstractTemplate; import net.rptools.maptool.model.drawing.BurstTemplate; import net.rptools.maptool.model.drawing.Drawable; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ConeTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/ConeTemplateDrawer.java similarity index 98% rename from src/main/java/net/rptools/maptool/client/ui/zone/gdx/ConeTemplateDrawer.java rename to src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/ConeTemplateDrawer.java index 102ea36f18..7d47fc7f15 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ConeTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/ConeTemplateDrawer.java @@ -12,9 +12,10 @@ * and specifically the Affero license * text at . */ -package net.rptools.maptool.client.ui.zone.gdx; +package net.rptools.maptool.client.ui.zone.gdx.drawing; import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; +import net.rptools.maptool.client.ui.zone.gdx.AreaRenderer; import net.rptools.maptool.model.drawing.AbstractTemplate; import net.rptools.maptool.model.drawing.ConeTemplate; import net.rptools.maptool.model.drawing.Pen; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/DrawnElementRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/DrawnElementRenderer.java new file mode 100644 index 0000000000..7bfee9b8db --- /dev/null +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/DrawnElementRenderer.java @@ -0,0 +1,77 @@ +/* + * This software Copyright by the RPTools.net development team, and + * licensed under the Affero GPL Version 3 or, at your option, any later + * version. + * + * MapTool Source Code is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public + * License * along with this source Code. If not, please visit + * and specifically the Affero license + * text at . + */ +package net.rptools.maptool.client.ui.zone.gdx.drawing; + +import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; +import java.util.List; +import net.rptools.maptool.client.ui.zone.gdx.AreaRenderer; +import net.rptools.maptool.client.ui.zone.gdx.ZoneCache; +import net.rptools.maptool.model.drawing.*; + +public class DrawnElementRenderer { + private final LineTemplateDrawer lineTemplateDrawer; + private final LineCellTemplateDrawer lineCellTemplateDrawer; + private final RadiusTemplateDrawer radiusTemplateDrawer; + private final BurstTemplateDrawer burstTemplateDrawer; + private final ConeTemplateDrawer coneTemplateDrawer; + private final BlastTemplateDrawer blastTemplateDrawer; + private final RadiusCellTemplateDrawer radiusCellTemplateDrawer; + private final ShapeDrawableDrawer shapeDrawableDrawer; + + public DrawnElementRenderer(AreaRenderer areaRenderer) { + lineTemplateDrawer = new LineTemplateDrawer(areaRenderer); + lineCellTemplateDrawer = new LineCellTemplateDrawer(areaRenderer); + radiusTemplateDrawer = new RadiusTemplateDrawer(areaRenderer); + burstTemplateDrawer = new BurstTemplateDrawer(areaRenderer); + coneTemplateDrawer = new ConeTemplateDrawer(areaRenderer); + blastTemplateDrawer = new BlastTemplateDrawer(areaRenderer); + radiusCellTemplateDrawer = new RadiusCellTemplateDrawer(areaRenderer); + shapeDrawableDrawer = new ShapeDrawableDrawer(areaRenderer); + } + + public void render(PolygonSpriteBatch batch, List drawables) { + for (var drawable : drawables) renderDrawable(batch, drawable); + } + + private void renderDrawable(PolygonSpriteBatch batch, DrawnElement element) { + var pen = element.getPen(); + var drawable = element.getDrawable(); + + if (drawable instanceof ShapeDrawable) shapeDrawableDrawer.draw(batch, drawable, pen); + else if (drawable instanceof DrawablesGroup) + for (var groupElement : ((DrawablesGroup) drawable).getDrawableList()) + renderDrawable(batch, groupElement); + else if (drawable instanceof RadiusCellTemplate) + radiusCellTemplateDrawer.draw(batch, drawable, pen); + else if (drawable instanceof LineCellTemplate) + lineCellTemplateDrawer.draw(batch, drawable, pen); + else if (drawable instanceof BlastTemplate) blastTemplateDrawer.draw(batch, drawable, pen); + else if (drawable instanceof ConeTemplate) coneTemplateDrawer.draw(batch, drawable, pen); + else if (drawable instanceof BurstTemplate) burstTemplateDrawer.draw(batch, drawable, pen); + else if (drawable instanceof RadiusTemplate) radiusTemplateDrawer.draw(batch, drawable, pen); + else if (drawable instanceof LineTemplate) lineTemplateDrawer.draw(batch, drawable, pen); + } + + public void setZoneCache(ZoneCache zoneCache) { + lineTemplateDrawer.setZoneCache(zoneCache); + lineCellTemplateDrawer.setZoneCache(zoneCache); + radiusTemplateDrawer.setZoneCache(zoneCache); + burstTemplateDrawer.setZoneCache(zoneCache); + coneTemplateDrawer.setZoneCache(zoneCache); + blastTemplateDrawer.setZoneCache(zoneCache); + radiusCellTemplateDrawer.setZoneCache(zoneCache); + shapeDrawableDrawer.setZoneCache(zoneCache); + } +} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineCellTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/LineCellTemplateDrawer.java similarity index 97% rename from src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineCellTemplateDrawer.java rename to src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/LineCellTemplateDrawer.java index 3812b2913c..bc981706bb 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineCellTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/LineCellTemplateDrawer.java @@ -12,11 +12,12 @@ * and specifically the Affero license * text at . */ -package net.rptools.maptool.client.ui.zone.gdx; +package net.rptools.maptool.client.ui.zone.gdx.drawing; import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; import java.util.ListIterator; import net.rptools.maptool.client.MapTool; +import net.rptools.maptool.client.ui.zone.gdx.AreaRenderer; import net.rptools.maptool.model.CellPoint; import net.rptools.maptool.model.drawing.AbstractTemplate; import net.rptools.maptool.model.drawing.LineCellTemplate; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/LineTemplateDrawer.java similarity index 97% rename from src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineTemplateDrawer.java rename to src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/LineTemplateDrawer.java index 3cf75ed0c8..085398c7ad 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LineTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/LineTemplateDrawer.java @@ -12,11 +12,12 @@ * and specifically the Affero license * text at . */ -package net.rptools.maptool.client.ui.zone.gdx; +package net.rptools.maptool.client.ui.zone.gdx.drawing; import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; import java.util.ListIterator; import net.rptools.maptool.client.MapTool; +import net.rptools.maptool.client.ui.zone.gdx.AreaRenderer; import net.rptools.maptool.model.CellPoint; import net.rptools.maptool.model.drawing.AbstractTemplate; import net.rptools.maptool.model.drawing.LineTemplate; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusCellTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/RadiusCellTemplateDrawer.java similarity index 98% rename from src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusCellTemplateDrawer.java rename to src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/RadiusCellTemplateDrawer.java index a46be60bf5..d87251dc60 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusCellTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/RadiusCellTemplateDrawer.java @@ -12,10 +12,11 @@ * and specifically the Affero license * text at . */ -package net.rptools.maptool.client.ui.zone.gdx; +package net.rptools.maptool.client.ui.zone.gdx.drawing; import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; import net.rptools.maptool.client.MapTool; +import net.rptools.maptool.client.ui.zone.gdx.AreaRenderer; import net.rptools.maptool.model.GUID; import net.rptools.maptool.model.Zone; import net.rptools.maptool.model.ZonePoint; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/RadiusTemplateDrawer.java similarity index 96% rename from src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusTemplateDrawer.java rename to src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/RadiusTemplateDrawer.java index ee2cef0da1..01a69048b0 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/RadiusTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/RadiusTemplateDrawer.java @@ -12,9 +12,10 @@ * and specifically the Affero license * text at . */ -package net.rptools.maptool.client.ui.zone.gdx; +package net.rptools.maptool.client.ui.zone.gdx.drawing; import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; +import net.rptools.maptool.client.ui.zone.gdx.AreaRenderer; import net.rptools.maptool.model.drawing.AbstractTemplate; import net.rptools.maptool.model.drawing.Pen; import net.rptools.maptool.model.drawing.RadiusTemplate; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ShapeDrawableDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/ShapeDrawableDrawer.java similarity index 92% rename from src/main/java/net/rptools/maptool/client/ui/zone/gdx/ShapeDrawableDrawer.java rename to src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/ShapeDrawableDrawer.java index 09f2af122c..2ddaa4f63d 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ShapeDrawableDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/ShapeDrawableDrawer.java @@ -12,9 +12,10 @@ * and specifically the Affero license * text at . */ -package net.rptools.maptool.client.ui.zone.gdx; +package net.rptools.maptool.client.ui.zone.gdx.drawing; import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; +import net.rptools.maptool.client.ui.zone.gdx.AreaRenderer; import net.rptools.maptool.model.drawing.Drawable; import net.rptools.maptool.model.drawing.Pen; import net.rptools.maptool.model.drawing.ShapeDrawable; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ItemRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/label/ItemRenderer.java similarity index 93% rename from src/main/java/net/rptools/maptool/client/ui/zone/gdx/ItemRenderer.java rename to src/main/java/net/rptools/maptool/client/ui/zone/gdx/label/ItemRenderer.java index b7f18099e3..af1699f825 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ItemRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/label/ItemRenderer.java @@ -12,7 +12,7 @@ * and specifically the Affero license * text at . */ -package net.rptools.maptool.client.ui.zone.gdx; +package net.rptools.maptool.client.ui.zone.gdx.label; import com.badlogic.gdx.graphics.Camera; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LabelRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/label/LabelRenderer.java similarity index 96% rename from src/main/java/net/rptools/maptool/client/ui/zone/gdx/LabelRenderer.java rename to src/main/java/net/rptools/maptool/client/ui/zone/gdx/label/LabelRenderer.java index 4d2cc12023..c3f05d703a 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/LabelRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/label/LabelRenderer.java @@ -12,7 +12,7 @@ * and specifically the Affero license * text at . */ -package net.rptools.maptool.client.ui.zone.gdx; +package net.rptools.maptool.client.ui.zone.gdx.label; import com.badlogic.gdx.graphics.Camera; import com.badlogic.gdx.math.Vector3; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TextRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/label/TextRenderer.java similarity index 98% rename from src/main/java/net/rptools/maptool/client/ui/zone/gdx/TextRenderer.java rename to src/main/java/net/rptools/maptool/client/ui/zone/gdx/label/TextRenderer.java index 553925bc3e..8af9c82b38 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TextRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/label/TextRenderer.java @@ -12,7 +12,7 @@ * and specifically the Affero license * text at . */ -package net.rptools.maptool.client.ui.zone.gdx; +package net.rptools.maptool.client.ui.zone.gdx.label; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.*; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TokenLabelRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/label/TokenLabelRenderer.java similarity index 98% rename from src/main/java/net/rptools/maptool/client/ui/zone/gdx/TokenLabelRenderer.java rename to src/main/java/net/rptools/maptool/client/ui/zone/gdx/label/TokenLabelRenderer.java index dcb1743b82..327d60a7b2 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/TokenLabelRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/label/TokenLabelRenderer.java @@ -12,7 +12,7 @@ * and specifically the Affero license * text at . */ -package net.rptools.maptool.client.ui.zone.gdx; +package net.rptools.maptool.client.ui.zone.gdx.label; import com.badlogic.gdx.graphics.Camera; import com.badlogic.gdx.graphics.Color; From 3cccf979d38b935ebd0f7d1f0daf350584898866 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Fri, 17 Nov 2023 21:29:42 +0100 Subject: [PATCH 123/139] fix build after merge --- build.gradle | 9 +- .../client/ui/zone/gdx/Box2DLightsTest.java | 18 ++-- .../client/ui/zone/gdx/GdxRenderer.java | 87 +++++++++++-------- .../client/ui/zone/renderer/ZoneRenderer.java | 2 +- 4 files changed, 68 insertions(+), 48 deletions(-) diff --git a/build.gradle b/build.gradle index 3427ba385c..24cf507492 100644 --- a/build.gradle +++ b/build.gradle @@ -39,7 +39,9 @@ def javaArgs = [ "-DMAPTOOL_DATADIR=.maptool-" + vendor.toLowerCase(), "-XX:+ShowCodeDetailsInExceptionMessages", "--add-opens=java.desktop/java.awt=ALL-UNNAMED", "--add-opens=java.desktop/java.awt.geom=ALL-UNNAMED", "--add-opens=java.desktop/sun.awt.geom=ALL-UNNAMED", "--add-opens=java.base/java.util=ALL-UNNAMED", - "--add-opens=javafx.web/javafx.scene.web=ALL-UNNAMED", "--add-opens=javafx.web/com.sun.webkit=ALL-UNNAMED", "--add-opens=javafx.web/com.sun.webkit.dom=ALL-UNNAMED", + "--add-opens=javafx.web/javafx.scene.web=ALL-UNNAMED", "--add-opens=javafx.web/com.sun.webkit=ALL-UNNAMED", + "--add-opens=javafx.web/com.sun.webkit.dom=ALL-UNNAMED","--add-opens=java.base/java.lang=ALL-UNNAMED", + "--add-opens=java.desktop/sun.awt=ALL-UNNAMED", "--add-opens=java.desktop/sun.java2d=ALL-UNNAMED", "--add-opens=java.desktop/javax.swing=ALL-UNNAMED","--add-opens=java.desktop/sun.awt.shell=ALL-UNNAMED", "--add-opens=java.desktop/com.sun.java.swing.plaf.windows=ALL-UNNAMED"] @@ -525,7 +527,10 @@ dependencies { implementation "com.badlogicgames.gdx:gdx-freetype-platform:1.12.0:natives-desktop" implementation "com.badlogicgames.gdx-video:gdx-video:1.3.2-SNAPSHOT" implementation "com.badlogicgames.gdx-video:gdx-video-lwjgl3:1.3.2-SNAPSHOT" - implementation 'com.badlogicgames.box2dlights:box2dlights:1.5' + //implementation 'com.badlogicgames.box2dlights:box2dlights:1.5' + //implementation 'com.github.thelsing:box2dlights:master-SNAPSHOT' + implementation 'com.github.fgnm:box2dlights:master-SNAPSHOT' + //implementation 'com.github.voodoosoft:box2dlights:master-SNAPSHOT' implementation 'com.badlogicgames.gdx:gdx-box2d:1.12.0' implementation "com.badlogicgames.gdx:gdx-box2d-platform:1.12.0:natives-desktop"} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/Box2DLightsTest.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/Box2DLightsTest.java index 91ffdc8899..2d05b967b0 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/Box2DLightsTest.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/Box2DLightsTest.java @@ -14,12 +14,7 @@ */ package net.rptools.maptool.client.ui.zone.gdx; -import box2dLight.ChainLight; -import box2dLight.ConeLight; -import box2dLight.DirectionalLight; -import box2dLight.Light; -import box2dLight.PointLight; -import box2dLight.RayHandler; +import box2dLight.*; import com.badlogic.gdx.ApplicationListener; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input; @@ -114,10 +109,13 @@ public void create() { normalProjection.setToOrtho2D(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); /** BOX2D LIGHT STUFF BEGIN */ - RayHandler.setGammaCorrection(true); - RayHandler.useDiffuseLight(true); - - rayHandler = new RayHandler(world); + var options = new RayHandlerOptions(); + options.setDiffuse(true); + options.setGammaCorrection(true); + rayHandler = new RayHandler(world, options); + // RayHandler.setGammaCorrection(true); + // RayHandler.useDiffuseLight(true); + // rayHandler = new RayHandler(world); rayHandler.setAmbientLight(0f, 0f, 0f, 0.5f); rayHandler.setBlurNum(3); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 566a0772e1..1fadfb92f0 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -14,9 +14,7 @@ */ package net.rptools.maptool.client.ui.zone.gdx; -import box2dLight.ChainLight; -import box2dLight.PointLight; -import box2dLight.RayHandler; +import box2dLight.*; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver; @@ -179,10 +177,13 @@ public void create() { world = new World(new Vector2(0, 0), true); debugRenderer = new Box2DDebugRenderer(); - RayHandler.setGammaCorrection(true); - RayHandler.useDiffuseLight(true); - - rayHandler = new RayHandler(world); + var options = new RayHandlerOptions(); + options.setDiffuse(true); + options.setGammaCorrection(true); + rayHandler = new RayHandler(world, options); + // RayHandler.setGammaCorrection(true); + // RayHandler.useDiffuseLight(true); + // rayHandler = new RayHandler(world); rayHandler.setAmbientLight(0f, 0f, 0f, 0.5f); rayHandler.setBlurNum(3); @@ -200,8 +201,16 @@ public void create() { 128, Color.WHITE, 600, - -1, + 1, + new float[] {700, -600, 1000, -600, 1000, -800, 700, -800, 700, -600}); + /* + rayHandler, + 128, + Color.WHITE, + 600, + 1, new float[] {700, -600, 1000, -600, 1000, -800, 700, -800, 700, -600}); + */ chain.setSoft(false); manager = new com.badlogic.gdx.assets.AssetManager(); @@ -522,23 +531,23 @@ private void renderZone(PlayerView view) { renderBoard(); - if (Zone.Layer.BACKGROUND.isEnabled()) { - List drawables = zoneCache.getZone().getBackgroundDrawnElements(); + if (zoneCache.getZoneRenderer().shouldRenderLayer(Zone.Layer.BACKGROUND, view)) { + List drawables = zoneCache.getZone().getDrawnElements(Zone.Layer.BACKGROUND); timer.start("drawableBackground"); drawnElementRenderer.render(batch, drawables); timer.stop("drawableBackground"); - List background = zoneCache.getZone().getBackgroundStamps(false); + List background = zoneCache.getZone().getTokensOnLayer(Zone.Layer.BACKGROUND, false); if (!background.isEmpty()) { timer.start("tokensBackground"); renderTokens(background, view, false); timer.stop("tokensBackground"); } } - if (Zone.Layer.OBJECT.isEnabled()) { + if (zoneCache.getZoneRenderer().shouldRenderLayer(Zone.Layer.OBJECT, view)) { // Drawables on the object layer are always below the grid, and... - List drawables = zoneCache.getZone().getObjectDrawnElements(); + List drawables = zoneCache.getZone().getDrawnElements(Zone.Layer.OBJECT); // if (!drawables.isEmpty()) { timer.start("drawableObjects"); drawnElementRenderer.render(batch, drawables); @@ -552,16 +561,16 @@ private void renderZone(PlayerView view) { timer.stop("grid"); - if (Zone.Layer.OBJECT.isEnabled()) { + if (zoneCache.getZoneRenderer().shouldRenderLayer(Zone.Layer.OBJECT, view)) { // ... Images on the object layer are always ABOVE the grid. - List stamps = zoneCache.getZone().getStampTokens(false); + List stamps = zoneCache.getZone().getTokensOnLayer(Zone.Layer.OBJECT, false); if (!stamps.isEmpty()) { timer.start("tokensStamp"); renderTokens(stamps, view, false); timer.stop("tokensStamp"); } } - if (Zone.Layer.TOKEN.isEnabled()) { + if (zoneCache.getZoneRenderer().shouldRenderLayer(Zone.Layer.TOKEN, view)) { timer.start("lights"); renderLights(view); timer.stop("lights"); @@ -592,29 +601,29 @@ private void renderZone(PlayerView view) { *

  1. Render Token-layer tokens * */ - if (Zone.Layer.TOKEN.isEnabled()) { - List drawables = zoneCache.getZone().getDrawnElements(); + if (zoneCache.getZoneRenderer().shouldRenderLayer(Zone.Layer.TOKEN, view)) { + List drawables = zoneCache.getZone().getDrawnElements(Zone.Layer.TOKEN); // if (!drawables.isEmpty()) { timer.start("drawableTokens"); drawnElementRenderer.render(batch, drawables); timer.stop("drawableTokens"); // } - if (view.isGMView() && Zone.Layer.GM.isEnabled()) { - drawables = zoneCache.getZone().getGMDrawnElements(); + if (zoneCache.getZoneRenderer().shouldRenderLayer(Zone.Layer.GM, view)) { + drawables = zoneCache.getZone().getDrawnElements(Zone.Layer.GM); // if (!drawables.isEmpty()) { timer.start("drawableGM"); drawnElementRenderer.render(batch, drawables); timer.stop("drawableGM"); // } - List stamps = zoneCache.getZone().getGMStamps(false); + List stamps = zoneCache.getZone().getTokensOnLayer(Zone.Layer.GM, false); if (!stamps.isEmpty()) { timer.start("tokensGM"); renderTokens(stamps, view, false); timer.stop("tokensGM"); } } - List tokens = zoneCache.getZone().getTokens(false); + List tokens = zoneCache.getZone().getTokensOnLayer(Zone.Layer.TOKEN, false); if (!tokens.isEmpty()) { timer.start("tokens"); renderTokens(tokens, view, false); @@ -643,7 +652,7 @@ private void renderZone(PlayerView view) { renderFog(view); } - if (Zone.Layer.TOKEN.isEnabled()) { + if (zoneCache.getZoneRenderer().shouldRenderLayer(Zone.Layer.TOKEN, view)) { // Jamz: If there is fog or vision we may need to re-render vision-blocking type tokens // For example. this allows a "door" stamp to block vision but still allow you to see the // door. @@ -699,7 +708,9 @@ private void renderZone(PlayerView view) { timer.stop("renderCoordinates"); timer.start("lightSourceIconOverlay.paintOverlay"); - if (Zone.Layer.TOKEN.isEnabled() && view.isGMView() && AppState.isShowLightSources()) { + if (zoneCache.getZoneRenderer().shouldRenderLayer(Zone.Layer.TOKEN, view) + && view.isGMView() + && AppState.isShowLightSources()) { paintlightSourceIconOverlay(); } timer.stop("lightSourceIconOverlay.paintOverlay"); @@ -1093,7 +1104,7 @@ private void showBlockedMoves(PlayerView view, Set movementSet) { } // Show path only on the key token on token layer that are visible to the owner or gm while // fow and vision is on - if (token == keyToken && !token.isStamp()) { + if (token == keyToken && token.getLayer().supportsWalker()) { renderPath( walker != null ? walker.getPath() : set.getGridlessPath(), token.getFootprint(zoneCache.getZone().getGrid())); @@ -1187,7 +1198,7 @@ private void showBlockedMoves(PlayerView view, Set movementSet) { y += 10 + h; x += w / 2; - if (!token.isStamp() && AppState.getShowMovementMeasurements()) { + if (token.getLayer().supportsWalker() && AppState.getShowMovementMeasurements()) { String distance = ""; if (walker != null) { // This wouldn't be true unless token.isSnapToGrid() && // grid.isPathingSupported() @@ -1473,14 +1484,14 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure timer.start("tokenlist-1"); try { - if (token.isStamp() && zoneCache.getZoneRenderer().isTokenMoving(token)) { + if (token.getLayer().isStampLayer() && zoneCache.getZoneRenderer().isTokenMoving(token)) { continue; } // Don't bother if it's not visible // NOTE: Not going to use zoneCache.getZone().isTokenVisible as it is very slow. In fact, // it's faster // to just draw the tokens and let them be clipped - if ((!token.isVisible() || token.isGMStamp()) && !isGMView) { + if ((!token.isVisible() || !token.getLayer().isVisibleToPlayers()) && !isGMView) { continue; } if (token.isVisibleOnlyToOwner() && !AppUtil.playerOwns(token)) { @@ -1510,7 +1521,9 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure try { // Vision visibility - if (!isGMView && token.isToken() && zoneCache.getZoneView().isUsingVision()) { + if (!isGMView + && token.getLayer().supportsVision() + && zoneCache.getZoneView().isUsingVision()) { if (!GraphicsUtil.intersects(visibleScreenArea, tokenBounds)) { continue; } @@ -1768,14 +1781,16 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure zoneCache.getZoneRenderer().getSelectedTokenSet().contains(token.getId()); if (isSelected) { ImageBorder selectedBorder = - token.isStamp() ? AppStyle.selectedStampBorder : AppStyle.selectedBorder; + token.getLayer().isStampLayer() + ? AppStyle.selectedStampBorder + : AppStyle.selectedBorder; if (zoneCache.getZoneRenderer().getHighlightCommonMacros().contains(token)) { selectedBorder = AppStyle.commonMacroBorder; } if (!AppUtil.playerOwns(token)) { selectedBorder = AppStyle.selectedUnownedBorder; } - if (useIF && !token.isStamp() && zoneCache.getZoneView().isUsingVision()) { + if (useIF && token.getLayer().supportsVision() && zoneCache.getZoneView().isUsingVision()) { Tool tool = MapTool.getFrame().getToolbox().getSelectedTool(); if (tool instanceof @@ -1798,7 +1813,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure gdxTokenRectangle.height / zoom); if (token.hasFacing() - && (token.getShape() == Token.TokenShape.TOP_DOWN || token.isStamp())) { + && (token.getShape() == Token.TokenShape.TOP_DOWN || token.getLayer().isStampLayer())) { var transX = gdxTokenRectangle.width / 2f - token.getAnchor().x / zoom; var transY = gdxTokenRectangle.height / 2f + token.getAnchor().y / zoom; @@ -1845,9 +1860,11 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure var tokenStackMap = zoneCache.getZoneRenderer().getTokenStackMap(); // Stacks - if (!tokenList.isEmpty() - && !tokenList.get(0).isStamp()) { // TODO: find a cleaner way to indicate token layer - if (tokenStackMap != null) { // FIXME Needed to prevent NPE but how can it be null? + // TODO: find a cleaner way to indicate token layer + if (!tokenList.isEmpty() && tokenList.get(0).getLayer().isTokenLayer()) { + boolean hideTSI = AppPreferences.getHideTokenStackIndicator(); + if (tokenStackMap != null + && !hideTSI) { // FIXME Needed to prevent NPE but how can it be null? for (Token token : tokenStackMap.keySet()) { var tokenRectangle = token.getBounds(zoneCache.getZone()); var stackImage = zoneCache.fetch("stack"); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/renderer/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/renderer/ZoneRenderer.java index 5435e034cc..31aedd61dc 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/renderer/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/renderer/ZoneRenderer.java @@ -1066,7 +1066,7 @@ public void disableLayer(Layer layer) { disabledLayers.add(layer); } - private boolean shouldRenderLayer(Layer layer, PlayerView view) { + public boolean shouldRenderLayer(Layer layer, PlayerView view) { return !disabledLayers.contains(layer) && (layer.isVisibleToPlayers() || view.isGMView()); } From bda77571667166153a19e30c860202d1654b730a Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Fri, 17 Nov 2023 22:37:10 +0100 Subject: [PATCH 124/139] fix build after merge --- build.gradle | 4 +-- .../client/ui/zone/gdx/Box2DLightsTest.java | 11 +++---- .../client/ui/zone/gdx/GdxRenderer.java | 29 ++++++++++++------- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/build.gradle b/build.gradle index eb2f9f672f..f3cf4a3bd3 100644 --- a/build.gradle +++ b/build.gradle @@ -527,9 +527,9 @@ dependencies { implementation "com.badlogicgames.gdx:gdx-freetype-platform:1.12.0:natives-desktop" implementation "com.badlogicgames.gdx-video:gdx-video:1.3.2-SNAPSHOT" implementation "com.badlogicgames.gdx-video:gdx-video-lwjgl3:1.3.2-SNAPSHOT" - //implementation 'com.badlogicgames.box2dlights:box2dlights:1.5' + implementation 'com.badlogicgames.box2dlights:box2dlights:1.5' //implementation 'com.github.thelsing:box2dlights:master-SNAPSHOT' - implementation 'com.github.fgnm:box2dlights:master-SNAPSHOT' + //implementation 'com.github.fgnm:box2dlights:master-SNAPSHOT' //implementation 'com.github.voodoosoft:box2dlights:master-SNAPSHOT' implementation 'com.badlogicgames.gdx:gdx-box2d:1.12.0' implementation "com.badlogicgames.gdx:gdx-box2d-platform:1.12.0:natives-desktop"} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/Box2DLightsTest.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/Box2DLightsTest.java index 2d05b967b0..bfd6dd92ea 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/Box2DLightsTest.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/Box2DLightsTest.java @@ -109,14 +109,15 @@ public void create() { normalProjection.setToOrtho2D(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); /** BOX2D LIGHT STUFF BEGIN */ - var options = new RayHandlerOptions(); + /*var options = new RayHandlerOptions(); options.setDiffuse(true); options.setGammaCorrection(true); rayHandler = new RayHandler(world, options); - // RayHandler.setGammaCorrection(true); - // RayHandler.useDiffuseLight(true); - // rayHandler = new RayHandler(world); - rayHandler.setAmbientLight(0f, 0f, 0f, 0.5f); + */ + RayHandler.setGammaCorrection(true); + RayHandler.useDiffuseLight(true); + rayHandler = new RayHandler(world); + // rayHandler.setAmbientLight(0f, 0f, 0f, 0.5f); rayHandler.setBlurNum(3); initPointLights(); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 1fadfb92f0..769587295c 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -177,13 +177,15 @@ public void create() { world = new World(new Vector2(0, 0), true); debugRenderer = new Box2DDebugRenderer(); + /* var options = new RayHandlerOptions(); options.setDiffuse(true); options.setGammaCorrection(true); rayHandler = new RayHandler(world, options); - // RayHandler.setGammaCorrection(true); - // RayHandler.useDiffuseLight(true); - // rayHandler = new RayHandler(world); + */ + RayHandler.setGammaCorrection(true); + RayHandler.useDiffuseLight(true); + rayHandler = new RayHandler(world); rayHandler.setAmbientLight(0f, 0f, 0f, 0.5f); rayHandler.setBlurNum(3); @@ -331,11 +333,7 @@ public void render() { updateVbl(); doRendering(); - rayHandler.setCombinedMatrix(cam); - // if (stepped) - rayHandler.update(); - rayHandler.render(); debugRenderer.render(world, cam.combined); } @@ -647,6 +645,16 @@ private void renderZone(PlayerView view) { renderLabels(view); } + if(zoneCache.getZone().getLightingStyle() == Zone.LightingStyle.ENVIRONMENTAL && AppState.isShowLights()) { + if(view.isGMView()) { + rayHandler.setAmbientLight(0.6f); + } else { + rayHandler.setAmbientLight(1.0f); + } + rayHandler.setCombinedMatrix(cam); + rayHandler.updateAndRender(); + } + // (This method has it's own 'timer' calls) if (zoneCache.getZone().hasFog()) { renderFog(view); @@ -947,7 +955,7 @@ private void renderFog(PlayerView view) { timer.start("renderFogArea"); areaRenderer.setColor(Color.CLEAR); areaRenderer.fillArea(batch, combined); - renderFogArea(combined, visibleArea); + //renderFogArea(combined, visibleArea); renderFogOutline(); timer.stop("renderFogArea"); @@ -1271,12 +1279,11 @@ private void renderLights(PlayerView view) { final var drawableLights = zoneCache.getZoneView().getDrawableLights(view); timer.stop("renderLights:getLights"); - if (AppState.isShowLights()) { + if (AppState.isShowLights() && zoneCache.getZone().getLightingStyle() != Zone.LightingStyle.ENVIRONMENTAL) { // Lighting enabled. timer.start("renderLights:renderLightOverlay"); // zoneCache.getZone().getLightingStyle() is not supported currently as you would probably - // need a custom - // shader + // need a custom shader, reusing it for box2dlights renderLightOverlay( drawableLights, From b2e4cbf87fc4c0dc782e044531e9ecdac761c225 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sun, 19 Nov 2023 15:10:04 +0100 Subject: [PATCH 125/139] wip --- .../client/ui/zone/IlluminationModel.java | 3 +- .../maptool/client/ui/zone/ZoneView.java | 2 +- .../client/ui/zone/gdx/GdxRenderer.java | 66 ++++++++----------- 3 files changed, 32 insertions(+), 39 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/IlluminationModel.java b/src/main/java/net/rptools/maptool/client/ui/zone/IlluminationModel.java index b84c58d76a..a482dbc901 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/IlluminationModel.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/IlluminationModel.java @@ -25,6 +25,7 @@ import net.rptools.maptool.model.GUID; import net.rptools.maptool.model.Light; import net.rptools.maptool.model.LightSource; +import net.rptools.maptool.model.Token; /** * Manages the light sources and illuminations of a zone, for a given set of illuminator parameters. @@ -53,7 +54,7 @@ public record ContributedLight(Illuminator.LitArea litArea, LightInfo lightInfo) * @param lightSource * @param light */ - public record LightInfo(LightSource lightSource, Light light) {} + public record LightInfo(LightSource lightSource, Light light, Token lightSourceToken) {} /** * The data structure for calculating lit areas according to lumens. Lit areas can be added and diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneView.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneView.java index 60dc243156..5225efd4b2 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneView.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneView.java @@ -367,7 +367,7 @@ private List calculateLitAreaForLightSource( litAreas.add( new ContributedLight( - new LitArea(light.getLumens(), lightArea), new LightInfo(lightSource, light))); + new LitArea(light.getLumens(), lightArea), new LightInfo(lightSource, light, lightSourceToken))); cummulativeNotTransformedArea.add(notScaledLightArea); } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 769587295c..e999c48605 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -14,31 +14,25 @@ */ package net.rptools.maptool.client.ui.zone.gdx; -import box2dLight.*; +import box2dLight.PointLight; +import box2dLight.RayHandler; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver; -import com.badlogic.gdx.graphics.*; import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.*; import com.badlogic.gdx.graphics.g2d.*; import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator; import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGeneratorLoader; import com.badlogic.gdx.graphics.g2d.freetype.FreetypeFontLoader; import com.badlogic.gdx.graphics.glutils.FrameBuffer; -import com.badlogic.gdx.math.*; import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.math.*; import com.badlogic.gdx.physics.box2d.*; import com.badlogic.gdx.scenes.scene2d.utils.TiledDrawable; import com.badlogic.gdx.utils.FloatArray; import com.badlogic.gdx.utils.ScreenUtils; import com.google.common.eventbus.Subscribe; -import java.awt.*; -import java.awt.geom.*; -import java.text.NumberFormat; -import java.util.*; -import java.util.List; -import java.util.zip.Deflater; -import javax.swing.*; import net.rptools.lib.CodeTimer; import net.rptools.maptool.client.*; import net.rptools.maptool.client.events.ZoneActivated; @@ -52,7 +46,8 @@ import net.rptools.maptool.client.ui.Scale; import net.rptools.maptool.client.ui.theme.Borders; import net.rptools.maptool.client.ui.theme.RessourceManager; -import net.rptools.maptool.client.ui.token.*; +import net.rptools.maptool.client.ui.token.AbstractTokenOverlay; +import net.rptools.maptool.client.ui.token.BarTokenOverlay; import net.rptools.maptool.client.ui.zone.DrawableLight; import net.rptools.maptool.client.ui.zone.PlayerView; import net.rptools.maptool.client.ui.zone.gdx.drawing.DrawnElementRenderer; @@ -64,16 +59,27 @@ import net.rptools.maptool.client.walker.ZoneWalker; import net.rptools.maptool.events.MapToolEventBus; import net.rptools.maptool.language.I18N; -import net.rptools.maptool.model.*; import net.rptools.maptool.model.Label; import net.rptools.maptool.model.Path; -import net.rptools.maptool.model.drawing.*; +import net.rptools.maptool.model.*; +import net.rptools.maptool.model.drawing.DrawableColorPaint; +import net.rptools.maptool.model.drawing.DrawnElement; import net.rptools.maptool.util.GraphicsUtil; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import space.earlygrey.shapedrawer.JoinType; import space.earlygrey.shapedrawer.ShapeDrawer; +import javax.swing.*; +import java.awt.*; +import java.awt.geom.AffineTransform; +import java.awt.geom.Area; +import java.awt.geom.GeneralPath; +import java.text.NumberFormat; +import java.util.List; +import java.util.*; +import java.util.zip.Deflater; + /** * The coordinates in the model are y-down, x-left. The world coordinates are y-up, x-left. I moved * the world to the 4th quadrant of the coordinate system. So if you would draw a token t awt at @@ -186,7 +192,7 @@ public void create() { RayHandler.setGammaCorrection(true); RayHandler.useDiffuseLight(true); rayHandler = new RayHandler(world); - rayHandler.setAmbientLight(0f, 0f, 0f, 0.5f); + //rayHandler.setAmbientLight(0f, 0f, 0f, 0.5f); rayHandler.setBlurNum(3); // light = @@ -194,27 +200,9 @@ public void create() { red.setSoft(false); var green = new PointLight(rayHandler, 128, Color.GREEN, 600, 50, -350); green.setSoft(false); - var blue = new PointLight(rayHandler, 128, Color.BLUE, 600, 350, -350); + var blue = new PointLight(rayHandler, 128, Color.CORAL, 600, 350, -350); blue.setSoft(false); - var chain = - new ChainLight( - rayHandler, - 128, - Color.WHITE, - 600, - 1, - new float[] {700, -600, 1000, -600, 1000, -800, 700, -800, 700, -600}); - /* - rayHandler, - 128, - Color.WHITE, - 600, - 1, - new float[] {700, -600, 1000, -600, 1000, -800, 700, -800, 700, -600}); - */ - chain.setSoft(false); - manager = new com.badlogic.gdx.assets.AssetManager(); loadAssets(); @@ -455,6 +443,10 @@ private void doRendering() { renderZone(playerView); + // this is here because otherwise drawing the fps counter create strange boxes becase of the rayhandler. + batch.end(); + batch.begin(); + setProjectionMatrix(hudCam.combined); if (zoneCache.getZoneRenderer().isLoading()) @@ -645,15 +637,15 @@ private void renderZone(PlayerView view) { renderLabels(view); } - if(zoneCache.getZone().getLightingStyle() == Zone.LightingStyle.ENVIRONMENTAL && AppState.isShowLights()) { + // if(zoneCache.getZone().getLightingStyle() == Zone.LightingStyle.ENVIRONMENTAL && AppState.isShowLights()) { if(view.isGMView()) { - rayHandler.setAmbientLight(0.6f); + // rayHandler.setAmbientLight(0.6f); } else { - rayHandler.setAmbientLight(1.0f); + // rayHandler.setAmbientLight(1.0f); } rayHandler.setCombinedMatrix(cam); rayHandler.updateAndRender(); - } + // } // (This method has it's own 'timer' calls) if (zoneCache.getZone().hasFog()) { From 8499c210608e11d01accac0a08f774243700afc8 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 15 Jan 2024 20:17:44 +0100 Subject: [PATCH 126/139] wip --- .../maptool/client/ui/zone/ZoneView.java | 3 +- .../client/ui/zone/gdx/Box2DLightsTest.java | 2 +- .../client/ui/zone/gdx/GdxRenderer.java | 52 ++++++++++--------- .../client/ui/zone/renderer/ZoneRenderer.java | 8 +-- 4 files changed, 35 insertions(+), 30 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneView.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneView.java index bfc4dca542..28e1a81b14 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneView.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneView.java @@ -392,7 +392,8 @@ private List calculateLitAreaForLightSource( litAreas.add( new ContributedLight( - new LitArea(light.getLumens(), lightArea), new LightInfo(lightSource, light, lightSourceToken))); + new LitArea(light.getLumens(), lightArea), + new LightInfo(lightSource, light, lightSourceToken))); cummulativeNotTransformedArea.add(notScaledLightArea); } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/Box2DLightsTest.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/Box2DLightsTest.java index bfd6dd92ea..62e64d84b1 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/Box2DLightsTest.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/Box2DLightsTest.java @@ -117,7 +117,7 @@ public void create() { RayHandler.setGammaCorrection(true); RayHandler.useDiffuseLight(true); rayHandler = new RayHandler(world); - // rayHandler.setAmbientLight(0f, 0f, 0f, 0.5f); + // rayHandler.setAmbientLight(0f, 0f, 0f, 0.5f); rayHandler.setBlurNum(3); initPointLights(); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index e999c48605..e5123143f3 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -19,20 +19,29 @@ import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver; -import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.*; +import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.*; import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator; import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGeneratorLoader; import com.badlogic.gdx.graphics.g2d.freetype.FreetypeFontLoader; import com.badlogic.gdx.graphics.glutils.FrameBuffer; -import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.*; +import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.physics.box2d.*; import com.badlogic.gdx.scenes.scene2d.utils.TiledDrawable; import com.badlogic.gdx.utils.FloatArray; import com.badlogic.gdx.utils.ScreenUtils; import com.google.common.eventbus.Subscribe; +import java.awt.*; +import java.awt.geom.AffineTransform; +import java.awt.geom.Area; +import java.awt.geom.GeneralPath; +import java.text.NumberFormat; +import java.util.*; +import java.util.List; +import java.util.zip.Deflater; +import javax.swing.*; import net.rptools.lib.CodeTimer; import net.rptools.maptool.client.*; import net.rptools.maptool.client.events.ZoneActivated; @@ -59,9 +68,9 @@ import net.rptools.maptool.client.walker.ZoneWalker; import net.rptools.maptool.events.MapToolEventBus; import net.rptools.maptool.language.I18N; +import net.rptools.maptool.model.*; import net.rptools.maptool.model.Label; import net.rptools.maptool.model.Path; -import net.rptools.maptool.model.*; import net.rptools.maptool.model.drawing.DrawableColorPaint; import net.rptools.maptool.model.drawing.DrawnElement; import net.rptools.maptool.util.GraphicsUtil; @@ -70,16 +79,6 @@ import space.earlygrey.shapedrawer.JoinType; import space.earlygrey.shapedrawer.ShapeDrawer; -import javax.swing.*; -import java.awt.*; -import java.awt.geom.AffineTransform; -import java.awt.geom.Area; -import java.awt.geom.GeneralPath; -import java.text.NumberFormat; -import java.util.List; -import java.util.*; -import java.util.zip.Deflater; - /** * The coordinates in the model are y-down, x-left. The world coordinates are y-up, x-left. I moved * the world to the 4th quadrant of the coordinate system. So if you would draw a token t awt at @@ -192,7 +191,7 @@ public void create() { RayHandler.setGammaCorrection(true); RayHandler.useDiffuseLight(true); rayHandler = new RayHandler(world); - //rayHandler.setAmbientLight(0f, 0f, 0f, 0.5f); + // rayHandler.setAmbientLight(0f, 0f, 0f, 0.5f); rayHandler.setBlurNum(3); // light = @@ -443,7 +442,8 @@ private void doRendering() { renderZone(playerView); - // this is here because otherwise drawing the fps counter create strange boxes becase of the rayhandler. + // this is here because otherwise drawing the fps counter create strange boxes becase of the + // rayhandler. batch.end(); batch.begin(); @@ -637,15 +637,16 @@ private void renderZone(PlayerView view) { renderLabels(view); } - // if(zoneCache.getZone().getLightingStyle() == Zone.LightingStyle.ENVIRONMENTAL && AppState.isShowLights()) { - if(view.isGMView()) { + // if(zoneCache.getZone().getLightingStyle() == Zone.LightingStyle.ENVIRONMENTAL && + // AppState.isShowLights()) { + if (view.isGMView()) { // rayHandler.setAmbientLight(0.6f); - } else { - // rayHandler.setAmbientLight(1.0f); - } - rayHandler.setCombinedMatrix(cam); - rayHandler.updateAndRender(); - // } + } else { + // rayHandler.setAmbientLight(1.0f); + } + rayHandler.setCombinedMatrix(cam); + rayHandler.updateAndRender(); + // } // (This method has it's own 'timer' calls) if (zoneCache.getZone().hasFog()) { @@ -947,7 +948,7 @@ private void renderFog(PlayerView view) { timer.start("renderFogArea"); areaRenderer.setColor(Color.CLEAR); areaRenderer.fillArea(batch, combined); - //renderFogArea(combined, visibleArea); + // renderFogArea(combined, visibleArea); renderFogOutline(); timer.stop("renderFogArea"); @@ -1271,7 +1272,8 @@ private void renderLights(PlayerView view) { final var drawableLights = zoneCache.getZoneView().getDrawableLights(view); timer.stop("renderLights:getLights"); - if (AppState.isShowLights() && zoneCache.getZone().getLightingStyle() != Zone.LightingStyle.ENVIRONMENTAL) { + if (AppState.isShowLights() + && zoneCache.getZone().getLightingStyle() != Zone.LightingStyle.ENVIRONMENTAL) { // Lighting enabled. timer.start("renderLights:renderLightOverlay"); // zoneCache.getZone().getLightingStyle() is not supported currently as you would probably diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/renderer/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/renderer/ZoneRenderer.java index 5817bfa0b2..1987de3b00 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/renderer/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/renderer/ZoneRenderer.java @@ -850,7 +850,7 @@ public void paintComponent(Graphics g) { // we still need to render the different overlays var g2dForRendering = bufferG2d; if (skipDrawing) { - g2dForRendering = g2d; + g2dForRendering = g2d; } renderZone(g2dForRendering, pl); @@ -859,12 +859,14 @@ public void paintComponent(Graphics g) { if (MapTool.getFrame().areFullScreenToolsShown()) { noteVPos += 40; } - if (!AppPreferences.getMapVisibilityWarning() && (!zone.isVisible() && pl.isGMView())&& !skipDrawing) { + if (!AppPreferences.getMapVisibilityWarning() + && (!zone.isVisible() && pl.isGMView()) + && !skipDrawing) { GraphicsUtil.drawBoxedString( bufferG2d, I18N.getText("zone.map_not_visible"), getSize().width / 2, noteVPos); noteVPos += 20; } - if (AppState.isShowAsPlayer()&& !skipDrawing) { + if (AppState.isShowAsPlayer() && !skipDrawing) { GraphicsUtil.drawBoxedString( bufferG2d, I18N.getText("zone.player_view"), getSize().width / 2, noteVPos); } From 66d12d0d89e3af5701cf85273638ca3170e07400 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 1 Jun 2024 00:27:13 +0200 Subject: [PATCH 127/139] fix build after merge --- .../maptool/client/ui/zone/ZoneView.java | 3 +- .../client/ui/zone/gdx/GdxRenderer.java | 12 ++++---- .../client/ui/zone/gdx/GridRenderer.java | 4 +-- .../gdx/drawing/AbstractDrawingDrawer.java | 13 +++++---- .../gdx/drawing/AbstractTemplateDrawer.java | 18 +++++++----- .../zone/gdx/drawing/BlastTemplateDrawer.java | 9 +++--- .../zone/gdx/drawing/BurstTemplateDrawer.java | 12 ++++---- .../gdx/drawing/DrawnElementRenderer.java | 28 +++++++++++-------- .../gdx/drawing/LineCellTemplateDrawer.java | 13 ++++++--- .../zone/gdx/drawing/LineTemplateDrawer.java | 13 ++++++--- .../gdx/drawing/RadiusCellTemplateDrawer.java | 11 ++++---- .../zone/gdx/drawing/ShapeDrawableDrawer.java | 9 +++--- .../client/ui/zone/renderer/ZoneRenderer.java | 2 +- .../maptool/model/drawing/BurstTemplate.java | 6 +--- .../model/drawing/LineCellTemplate.java | 4 +-- 15 files changed, 90 insertions(+), 67 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneView.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneView.java index afc56902f6..7bf46d7899 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneView.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneView.java @@ -369,7 +369,8 @@ private List calculateLitAreaForLightSource( litAreas.add( new ContributedLight( - new LitArea(light.getLumens(), area), new LightInfo(lightSource, light))); + new LitArea(light.getLumens(), area), + new LightInfo(lightSource, light, lightSourceToken))); } // Magnification can cause different ranges for a single light source to overlap. This is not diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index e5123143f3..62a0bd03ce 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -525,7 +525,7 @@ private void renderZone(PlayerView view) { List drawables = zoneCache.getZone().getDrawnElements(Zone.Layer.BACKGROUND); timer.start("drawableBackground"); - drawnElementRenderer.render(batch, drawables); + drawnElementRenderer.render(batch, zoneCache.getZone(), drawables); timer.stop("drawableBackground"); List background = zoneCache.getZone().getTokensOnLayer(Zone.Layer.BACKGROUND, false); @@ -540,7 +540,7 @@ private void renderZone(PlayerView view) { List drawables = zoneCache.getZone().getDrawnElements(Zone.Layer.OBJECT); // if (!drawables.isEmpty()) { timer.start("drawableObjects"); - drawnElementRenderer.render(batch, drawables); + drawnElementRenderer.render(batch, zoneCache.getZone(), drawables); timer.stop("drawableObjects"); // } } @@ -595,7 +595,7 @@ private void renderZone(PlayerView view) { List drawables = zoneCache.getZone().getDrawnElements(Zone.Layer.TOKEN); // if (!drawables.isEmpty()) { timer.start("drawableTokens"); - drawnElementRenderer.render(batch, drawables); + drawnElementRenderer.render(batch, zoneCache.getZone(), drawables); timer.stop("drawableTokens"); // } @@ -603,7 +603,7 @@ private void renderZone(PlayerView view) { drawables = zoneCache.getZone().getDrawnElements(Zone.Layer.GM); // if (!drawables.isEmpty()) { timer.start("drawableGM"); - drawnElementRenderer.render(batch, drawables); + drawnElementRenderer.render(batch, zoneCache.getZone(), drawables); timer.stop("drawableGM"); // } List stamps = zoneCache.getZone().getTokensOnLayer(Zone.Layer.GM, false); @@ -780,7 +780,7 @@ private void paintlightSourceIconOverlay() { if (token.hasLightSources()) { boolean foundNormalLight = false; for (AttachedLightSource attachedLightSource : token.getLightSources()) { - LightSource lightSource = attachedLightSource.resolve(token, MapTool.getCampaign()); + LightSource lightSource = attachedLightSource.resolve(MapTool.getCampaign()); if (lightSource != null && lightSource.getType() == LightSource.Type.NORMAL) { foundNormalLight = true; break; @@ -1258,7 +1258,7 @@ private void renderAuras(PlayerView view) { // Setup timer.start("renderAuras:getAuras"); - final var drawableAuras = zoneCache.getZoneView().getDrawableAuras(); + final var drawableAuras = zoneCache.getZoneView().getDrawableAuras(view); timer.stop("renderAuras:getAuras"); timer.start("renderAuras:renderAuraOverlay"); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GridRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GridRenderer.java index e320216df3..c810a4716d 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GridRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GridRenderer.java @@ -20,7 +20,7 @@ import com.badlogic.gdx.math.Matrix4; import com.badlogic.gdx.utils.Pools; import net.rptools.maptool.client.AppState; -import net.rptools.maptool.client.ui.zone.renderer.ZoneRenderer; +import net.rptools.maptool.client.ui.zone.renderer.ZoneRendererConstants; import net.rptools.maptool.model.*; import space.earlygrey.shapedrawer.JoinType; import space.earlygrey.shapedrawer.ShapeDrawer; @@ -48,7 +48,7 @@ public void render() { var scale = (float) zoneCache.getZoneRenderer().getScale(); int gridSize = (int) (grid.getSize() * scale); - if (!AppState.isShowGrid() || gridSize < ZoneRenderer.MIN_GRID_SIZE) { + if (!AppState.isShowGrid() || gridSize < ZoneRendererConstants.MIN_GRID_SIZE) { return; } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractDrawingDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractDrawingDrawer.java index 27372da5d6..1189e1065e 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractDrawingDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractDrawingDrawer.java @@ -19,6 +19,7 @@ import java.awt.geom.Area; import net.rptools.maptool.client.ui.zone.gdx.AreaRenderer; import net.rptools.maptool.client.ui.zone.gdx.ZoneCache; +import net.rptools.maptool.model.Zone; import net.rptools.maptool.model.drawing.*; public abstract class AbstractDrawingDrawer { @@ -36,12 +37,12 @@ public AbstractDrawingDrawer(AreaRenderer areaRenderer) { this.areaRenderer = areaRenderer; } - public void draw(PolygonSpriteBatch batch, Drawable element, Pen pen) { + public void draw(PolygonSpriteBatch batch, Zone zone, Drawable element, Pen pen) { applyColor(pen.getBackgroundPaint(), true); - drawBackground(batch, element, pen); + drawBackground(batch, zone, element, pen); applyColor(pen.getPaint(), false); - drawBorder(batch, element, pen); + drawBorder(batch, zone, element, pen); } protected void applyColor(DrawablePaint paint, boolean applyAlpha) { @@ -78,7 +79,9 @@ protected void drawArea(PolygonSpriteBatch batch, Area area, Pen pen) { areaRenderer.drawArea(batch, area, !pen.getSquareCap(), pen.getThickness()); } - protected abstract void drawBackground(PolygonSpriteBatch batch, Drawable element, Pen pen); + protected abstract void drawBackground( + PolygonSpriteBatch batch, Zone zone, Drawable element, Pen pen); - protected abstract void drawBorder(PolygonSpriteBatch batch, Drawable element, Pen pen); + protected abstract void drawBorder( + PolygonSpriteBatch batch, Zone zone, Drawable element, Pen pen); } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractTemplateDrawer.java index 95c09c4bc1..ea0c9ee36f 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractTemplateDrawer.java @@ -15,7 +15,6 @@ package net.rptools.maptool.client.ui.zone.gdx.drawing; import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; -import net.rptools.maptool.client.MapTool; import net.rptools.maptool.client.ui.zone.gdx.AreaRenderer; import net.rptools.maptool.model.Zone; import net.rptools.maptool.model.drawing.AbstractTemplate; @@ -29,22 +28,27 @@ public AbstractTemplateDrawer(AreaRenderer renderer) { } @Override - protected void drawBackground(PolygonSpriteBatch batch, Drawable element, Pen pen) { + protected void drawBackground(PolygonSpriteBatch batch, Zone zone, Drawable element, Pen pen) { alpha = AbstractTemplate.DEFAULT_BG_ALPHA; - paint(batch, pen, (AbstractTemplate) element, false, true); + paint(batch, pen, zone, (AbstractTemplate) element, false, true); } @Override - protected void drawBorder(PolygonSpriteBatch batch, Drawable element, Pen pen) { - paint(batch, pen, (AbstractTemplate) element, true, false); + protected void drawBorder(PolygonSpriteBatch batch, Zone zone, Drawable element, Pen pen) { + paint(batch, pen, zone, (AbstractTemplate) element, true, false); } protected void paint( - PolygonSpriteBatch batch, Pen pen, AbstractTemplate template, boolean border, boolean area) { + PolygonSpriteBatch batch, + Pen pen, + Zone zone, + AbstractTemplate template, + boolean border, + boolean area) { var radius = template.getRadius(); if (radius == 0) return; - Zone zone = MapTool.getCampaign().getZone(template.getZoneId()); + if (zone == null) return; // Find the proper distance diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/BlastTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/BlastTemplateDrawer.java index 711308c778..4437a4032a 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/BlastTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/BlastTemplateDrawer.java @@ -16,6 +16,7 @@ import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; import net.rptools.maptool.client.ui.zone.gdx.AreaRenderer; +import net.rptools.maptool.model.Zone; import net.rptools.maptool.model.drawing.AbstractTemplate; import net.rptools.maptool.model.drawing.BlastTemplate; import net.rptools.maptool.model.drawing.Drawable; @@ -28,15 +29,15 @@ public BlastTemplateDrawer(AreaRenderer renderer) { } @Override - protected void drawBackground(PolygonSpriteBatch batch, Drawable element, Pen pen) { + protected void drawBackground(PolygonSpriteBatch batch, Zone zone, Drawable element, Pen pen) { var template = (BlastTemplate) element; alpha = AbstractTemplate.DEFAULT_BG_ALPHA; - fillArea(batch, template.getArea(), pen); + fillArea(batch, template.getArea(zone), pen); } @Override - protected void drawBorder(PolygonSpriteBatch batch, Drawable element, Pen pen) { + protected void drawBorder(PolygonSpriteBatch batch, Zone zone, Drawable element, Pen pen) { var template = (BlastTemplate) element; - drawArea(batch, template.getArea(), pen); + drawArea(batch, template.getArea(zone), pen); } } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/BurstTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/BurstTemplateDrawer.java index 0542f400cc..01bfdf1907 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/BurstTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/BurstTemplateDrawer.java @@ -15,7 +15,9 @@ package net.rptools.maptool.client.ui.zone.gdx.drawing; import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; +import java.awt.geom.Area; import net.rptools.maptool.client.ui.zone.gdx.AreaRenderer; +import net.rptools.maptool.model.Zone; import net.rptools.maptool.model.drawing.AbstractTemplate; import net.rptools.maptool.model.drawing.BurstTemplate; import net.rptools.maptool.model.drawing.Drawable; @@ -28,16 +30,16 @@ public BurstTemplateDrawer(AreaRenderer renderer) { } @Override - protected void drawBackground(PolygonSpriteBatch batch, Drawable element, Pen pen) { + protected void drawBackground(PolygonSpriteBatch batch, Zone zone, Drawable element, Pen pen) { var template = (BurstTemplate) element; alpha = AbstractTemplate.DEFAULT_BG_ALPHA; - fillArea(batch, template.getArea(), pen); + fillArea(batch, template.getArea(zone), pen); } @Override - protected void drawBorder(PolygonSpriteBatch batch, Drawable element, Pen pen) { + protected void drawBorder(PolygonSpriteBatch batch, Zone zone, Drawable element, Pen pen) { var template = (BurstTemplate) element; - drawArea(batch, template.getArea(), pen); - drawArea(batch, template.getVertexRenderer().getArea(), pen); + drawArea(batch, template.getArea(zone), pen); + drawArea(batch, new Area(template.makeShape(zone)), pen); } } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/DrawnElementRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/DrawnElementRenderer.java index 7bfee9b8db..2e677dc437 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/DrawnElementRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/DrawnElementRenderer.java @@ -18,6 +18,7 @@ import java.util.List; import net.rptools.maptool.client.ui.zone.gdx.AreaRenderer; import net.rptools.maptool.client.ui.zone.gdx.ZoneCache; +import net.rptools.maptool.model.Zone; import net.rptools.maptool.model.drawing.*; public class DrawnElementRenderer { @@ -41,27 +42,30 @@ public DrawnElementRenderer(AreaRenderer areaRenderer) { shapeDrawableDrawer = new ShapeDrawableDrawer(areaRenderer); } - public void render(PolygonSpriteBatch batch, List drawables) { - for (var drawable : drawables) renderDrawable(batch, drawable); + public void render(PolygonSpriteBatch batch, Zone zone, List drawables) { + for (var drawable : drawables) renderDrawable(batch, zone, drawable); } - private void renderDrawable(PolygonSpriteBatch batch, DrawnElement element) { + private void renderDrawable(PolygonSpriteBatch batch, Zone zone, DrawnElement element) { var pen = element.getPen(); var drawable = element.getDrawable(); - if (drawable instanceof ShapeDrawable) shapeDrawableDrawer.draw(batch, drawable, pen); + if (drawable instanceof ShapeDrawable) shapeDrawableDrawer.draw(batch, zone, drawable, pen); else if (drawable instanceof DrawablesGroup) for (var groupElement : ((DrawablesGroup) drawable).getDrawableList()) - renderDrawable(batch, groupElement); + renderDrawable(batch, zone, groupElement); else if (drawable instanceof RadiusCellTemplate) - radiusCellTemplateDrawer.draw(batch, drawable, pen); + radiusCellTemplateDrawer.draw(batch, zone, drawable, pen); else if (drawable instanceof LineCellTemplate) - lineCellTemplateDrawer.draw(batch, drawable, pen); - else if (drawable instanceof BlastTemplate) blastTemplateDrawer.draw(batch, drawable, pen); - else if (drawable instanceof ConeTemplate) coneTemplateDrawer.draw(batch, drawable, pen); - else if (drawable instanceof BurstTemplate) burstTemplateDrawer.draw(batch, drawable, pen); - else if (drawable instanceof RadiusTemplate) radiusTemplateDrawer.draw(batch, drawable, pen); - else if (drawable instanceof LineTemplate) lineTemplateDrawer.draw(batch, drawable, pen); + lineCellTemplateDrawer.draw(batch, zone, drawable, pen); + else if (drawable instanceof BlastTemplate) + blastTemplateDrawer.draw(batch, zone, drawable, pen); + else if (drawable instanceof ConeTemplate) coneTemplateDrawer.draw(batch, zone, drawable, pen); + else if (drawable instanceof BurstTemplate) + burstTemplateDrawer.draw(batch, zone, drawable, pen); + else if (drawable instanceof RadiusTemplate) + radiusTemplateDrawer.draw(batch, zone, drawable, pen); + else if (drawable instanceof LineTemplate) lineTemplateDrawer.draw(batch, zone, drawable, pen); } public void setZoneCache(ZoneCache zoneCache) { diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/LineCellTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/LineCellTemplateDrawer.java index bc981706bb..610c44a19f 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/LineCellTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/LineCellTemplateDrawer.java @@ -16,9 +16,9 @@ import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; import java.util.ListIterator; -import net.rptools.maptool.client.MapTool; import net.rptools.maptool.client.ui.zone.gdx.AreaRenderer; import net.rptools.maptool.model.CellPoint; +import net.rptools.maptool.model.Zone; import net.rptools.maptool.model.drawing.AbstractTemplate; import net.rptools.maptool.model.drawing.LineCellTemplate; import net.rptools.maptool.model.drawing.Pen; @@ -84,8 +84,13 @@ protected void paintBorder( @Override protected void paint( - PolygonSpriteBatch batch, Pen pen, AbstractTemplate template, boolean border, boolean area) { - if (MapTool.getCampaign().getZone(template.getZoneId()) == null) { + PolygonSpriteBatch batch, + Pen pen, + Zone zone, + AbstractTemplate template, + boolean border, + boolean area) { + if (zone == null) { return; } var lineCellTemplate = (LineCellTemplate) template; @@ -98,7 +103,7 @@ protected void paint( var quadrant = lineCellTemplate.getQuadrant(); // Paint each element in the path - int gridSize = MapTool.getCampaign().getZone(lineCellTemplate.getZoneId()).getGrid().getSize(); + int gridSize = zone.getGrid().getSize(); ListIterator i = path.listIterator(); while (i.hasNext()) { CellPoint p = i.next(); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/LineTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/LineTemplateDrawer.java index 085398c7ad..2c7ccfd5fc 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/LineTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/LineTemplateDrawer.java @@ -16,9 +16,9 @@ import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; import java.util.ListIterator; -import net.rptools.maptool.client.MapTool; import net.rptools.maptool.client.ui.zone.gdx.AreaRenderer; import net.rptools.maptool.model.CellPoint; +import net.rptools.maptool.model.Zone; import net.rptools.maptool.model.drawing.AbstractTemplate; import net.rptools.maptool.model.drawing.LineTemplate; import net.rptools.maptool.model.drawing.Pen; @@ -30,8 +30,13 @@ public LineTemplateDrawer(AreaRenderer renderer) { @Override protected void paint( - PolygonSpriteBatch batch, Pen pen, AbstractTemplate template, boolean border, boolean area) { - if (MapTool.getCampaign().getZone(template.getZoneId()) == null) { + PolygonSpriteBatch batch, + Pen pen, + Zone zone, + AbstractTemplate template, + boolean border, + boolean area) { + if (zone == null) { return; } var lineTemplate = (LineTemplate) template; @@ -42,7 +47,7 @@ protected void paint( if (lineTemplate.getPath() == null && lineTemplate.calcPath() == null) return; // Paint each element in the path - int gridSize = MapTool.getCampaign().getZone(template.getZoneId()).getGrid().getSize(); + int gridSize = zone.getGrid().getSize(); ListIterator i = lineTemplate.getPath().listIterator(); while (i.hasNext()) { CellPoint p = i.next(); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/RadiusCellTemplateDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/RadiusCellTemplateDrawer.java index d87251dc60..a148c0cb52 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/RadiusCellTemplateDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/RadiusCellTemplateDrawer.java @@ -15,9 +15,7 @@ package net.rptools.maptool.client.ui.zone.gdx.drawing; import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; -import net.rptools.maptool.client.MapTool; import net.rptools.maptool.client.ui.zone.gdx.AreaRenderer; -import net.rptools.maptool.model.GUID; import net.rptools.maptool.model.Zone; import net.rptools.maptool.model.ZonePoint; import net.rptools.maptool.model.drawing.AbstractTemplate; @@ -202,12 +200,15 @@ protected void paintBorderAtRadius( @Override protected void paint( - PolygonSpriteBatch batch, Pen pen, AbstractTemplate template, boolean border, boolean area) { + PolygonSpriteBatch batch, + Pen pen, + Zone zone, + AbstractTemplate template, + boolean border, + boolean area) { int radius = template.getRadius(); - GUID zoneId = template.getZoneId(); if (radius == 0) return; - Zone zone = MapTool.getCampaign().getZone(zoneId); if (zone == null) return; // Find the proper distance diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/ShapeDrawableDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/ShapeDrawableDrawer.java index 2ddaa4f63d..db3423a3e9 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/ShapeDrawableDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/ShapeDrawableDrawer.java @@ -16,6 +16,7 @@ import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; import net.rptools.maptool.client.ui.zone.gdx.AreaRenderer; +import net.rptools.maptool.model.Zone; import net.rptools.maptool.model.drawing.Drawable; import net.rptools.maptool.model.drawing.Pen; import net.rptools.maptool.model.drawing.ShapeDrawable; @@ -27,14 +28,14 @@ public ShapeDrawableDrawer(AreaRenderer renderer) { } @Override - protected void drawBackground(PolygonSpriteBatch batch, Drawable element, Pen pen) { + protected void drawBackground(PolygonSpriteBatch batch, Zone zone, Drawable element, Pen pen) { var shape = (ShapeDrawable) element; - fillArea(batch, shape.getArea(), pen); + fillArea(batch, shape.getArea(zone), pen); } @Override - protected void drawBorder(PolygonSpriteBatch batch, Drawable element, Pen pen) { + protected void drawBorder(PolygonSpriteBatch batch, Zone zone, Drawable element, Pen pen) { var shape = (ShapeDrawable) element; - drawArea(batch, shape.getArea(), pen); + drawArea(batch, shape.getArea(zone), pen); } } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/renderer/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/renderer/ZoneRenderer.java index d65eff7eba..4f05843593 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/renderer/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/renderer/ZoneRenderer.java @@ -1391,7 +1391,7 @@ protected void renderBoard(Graphics2D g, PlayerView view) { g.drawImage(backbuffer, 0, 0, this); } - private Set getOwnedMovementSet(PlayerView view) { + public Set getOwnedMovementSet(PlayerView view) { Set movementSet = new HashSet(); for (SelectionSet selection : selectionSetMap.values()) { if (selection.getPlayerId().equals(MapTool.getPlayer().getName())) { diff --git a/src/main/java/net/rptools/maptool/model/drawing/BurstTemplate.java b/src/main/java/net/rptools/maptool/model/drawing/BurstTemplate.java index 0ddb730b41..27697388f5 100644 --- a/src/main/java/net/rptools/maptool/model/drawing/BurstTemplate.java +++ b/src/main/java/net/rptools/maptool/model/drawing/BurstTemplate.java @@ -60,7 +60,7 @@ private Rectangle makeVertexShape(Zone zone) { return new Rectangle(getVertex().x, getVertex().y, gridSize, gridSize); } - private Rectangle makeShape(Zone zone) { + public Rectangle makeShape(Zone zone) { int gridSize = zone.getGrid().getSize(); return new Rectangle( getVertex().x - getRadius() * gridSize, @@ -121,10 +121,6 @@ protected void paint(Zone zone, Graphics2D g, boolean border, boolean area) { return new Area(makeShape(zone)); } - public ShapeDrawable getVertexRenderer() { - return vertexRenderer; - } - @Override public DrawableDto toDto() { var dto = BurstTemplateDto.newBuilder(); diff --git a/src/main/java/net/rptools/maptool/model/drawing/LineCellTemplate.java b/src/main/java/net/rptools/maptool/model/drawing/LineCellTemplate.java index 7368e336db..a2bd4b8b2a 100644 --- a/src/main/java/net/rptools/maptool/model/drawing/LineCellTemplate.java +++ b/src/main/java/net/rptools/maptool/model/drawing/LineCellTemplate.java @@ -313,7 +313,7 @@ private void clearPath() { * * @return Returns the current value of quadrant. */ - private @Nonnull Quadrant getQuadrant() { + public @Nonnull Quadrant getQuadrant() { if (quadrant == null) { final var vertex = getVertex(); if (vertex == null || pathVertex == null || pathVertex.equals(vertex)) { @@ -335,7 +335,7 @@ private void clearPath() { /** * @return Getter for path */ - private @Nullable List getPath() { + public @Nullable List getPath() { if (path == null) { path = calcPath(); } From e1691b4007ff0c3fa298a4a88a202b37fef8f15e Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Wed, 2 Oct 2024 21:11:29 +0200 Subject: [PATCH 128/139] fix build after merge --- .../net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 62a0bd03ce..0f84ccc7c5 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -846,6 +846,9 @@ private void renderGMVisionOverlay(PlayerView view) { private void renderVisionOverlay(PlayerView view) { var tokenUnderMouse = zoneCache.getZoneRenderer().getTokenUnderMouse(); + if (tokenUnderMouse == null) + return; + Area currentTokenVisionArea = zoneCache.getZoneView().getVisibleArea(tokenUnderMouse, view); if (currentTokenVisionArea == null) { return; From b9c99a3ed9019891072a17cab465d70f3fd149aa Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Fri, 22 Nov 2024 17:12:07 +0100 Subject: [PATCH 129/139] fix build after merge --- build.gradle | 16 ++++---- .../client/ui/zone/gdx/GridRenderer.java | 39 +++++++++++++++++++ .../net/rptools/maptool/model/HexGrid.java | 15 +++++-- .../java/net/rptools/maptool/model/Token.java | 2 +- 4 files changed, 59 insertions(+), 13 deletions(-) diff --git a/build.gradle b/build.gradle index dfc94149d7..a73a88cf0e 100644 --- a/build.gradle +++ b/build.gradle @@ -495,20 +495,20 @@ dependencies { //maven local for development //implementation 'com.thelsing.gdx:gdx-backend-jogl:1.12.1' - implementation "com.badlogicgames.gdx:gdx:1.12.0" - implementation "com.badlogicgames.gdx:gdx-platform:1.12.0:natives-desktop" - //implementation "space.earlygrey:shapedrawer:2.4.0" - implementation 'com.github.earlygrey:shapedrawer:extract-vertices-SNAPSHOT' - implementation "com.badlogicgames.gdx:gdx-freetype:1.12.0" - implementation "com.badlogicgames.gdx:gdx-freetype-platform:1.12.0:natives-desktop" + implementation 'com.badlogicgames.gdx:gdx:1.12.1' + implementation 'com.badlogicgames.gdx:gdx-platform:1.12.1:natives-desktop' + implementation "space.earlygrey:shapedrawer:2.6.0" + implementation 'com.badlogicgames.gdx:gdx-freetype:1.12.1' + implementation 'com.badlogicgames.gdx:gdx-freetype-platform:1.12.1:natives-desktop' implementation "com.badlogicgames.gdx-video:gdx-video:1.3.2-SNAPSHOT" implementation "com.badlogicgames.gdx-video:gdx-video-lwjgl3:1.3.2-SNAPSHOT" implementation 'com.badlogicgames.box2dlights:box2dlights:1.5' //implementation 'com.github.thelsing:box2dlights:master-SNAPSHOT' //implementation 'com.github.fgnm:box2dlights:master-SNAPSHOT' //implementation 'com.github.voodoosoft:box2dlights:master-SNAPSHOT' - implementation 'com.badlogicgames.gdx:gdx-box2d:1.12.0' - implementation "com.badlogicgames.gdx:gdx-box2d-platform:1.12.0:natives-desktop"} + implementation 'com.badlogicgames.gdx:gdx-box2d:1.12.1' + implementation 'com.badlogicgames.gdx:gdx-box2d-platform:1.12.1:natives-desktop' +} processResources { with copySpec { diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GridRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GridRenderer.java index c810a4716d..5ba218c388 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GridRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GridRenderer.java @@ -20,11 +20,14 @@ import com.badlogic.gdx.math.Matrix4; import com.badlogic.gdx.utils.Pools; import net.rptools.maptool.client.AppState; +import net.rptools.maptool.client.swing.SwingUtil; import net.rptools.maptool.client.ui.zone.renderer.ZoneRendererConstants; import net.rptools.maptool.model.*; import space.earlygrey.shapedrawer.JoinType; import space.earlygrey.shapedrawer.ShapeDrawer; +import java.awt.*; + public class GridRenderer { private ZoneCache zoneCache; private final AreaRenderer areaRenderer; @@ -63,6 +66,41 @@ public void render() { } private void renderGrid(HexGrid grid) { + /* + var renderer = zoneCache.getZoneRenderer(); + var scale = renderer.getScale(); + var scaledMinorRadius = grid.getVRadius() * scale; + var scaledEdgeLength = grid.getEdgeLength() * scale; + var scaledEdgeProjection = grid.getEdgeProjection() * scale; + var scaledHex = grid.createHalfShape(scaledMinorRadius, scaledEdgeProjection, scaledEdgeLength); + + int offU = grid.getOffU(renderer); + int offV = grid.getOffV(renderer); + int count = 0; + + Object oldAntiAlias = SwingUtil.useAntiAliasing(g); + g.setColor(new java.awt.Color(getZone().getGridColor())); + g.setStroke(new BasicStroke(AppState.getGridSize())); + + for (double v = offV % (scaledMinorRadius * 2) - (scaledMinorRadius * 2); + v < getRendererSizeV(renderer); + v += scaledMinorRadius) { + double offsetU = (int) ((count & 1) == 0 ? 0 : -(scaledEdgeProjection + scaledEdgeLength)); + count++; + + double start = + offU % (2 * scaledEdgeLength + 2 * scaledEdgeProjection) + - (2 * scaledEdgeLength + 2 * scaledEdgeProjection); + double end = getRendererSizeU(renderer) + 2 * scaledEdgeLength + 2 * scaledEdgeProjection; + double incr = 2 * scaledEdgeLength + 2 * scaledEdgeProjection; + for (double u = start; u < end; u += incr) { + setGridDrawTranslation(g, u + offsetU, v); + g.draw(scaledHex); + setGridDrawTranslation(g, -(u + offsetU), -v); + } + } + g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, oldAntiAlias); + var tmpColor = Pools.obtain(Color.class); Color.argb8888ToColor(tmpColor, zoneCache.getZone().getGridColor()); @@ -119,6 +157,7 @@ private void renderGrid(HexGrid grid) { } } Pools.free(tmpColor); + */ } private void renderGrid(IsometricGrid grid) { diff --git a/src/main/java/net/rptools/maptool/model/HexGrid.java b/src/main/java/net/rptools/maptool/model/HexGrid.java index 47dad64c1f..7ab5222b9c 100644 --- a/src/main/java/net/rptools/maptool/model/HexGrid.java +++ b/src/main/java/net/rptools/maptool/model/HexGrid.java @@ -100,12 +100,19 @@ public Point2D.Double getCenterOffset() { */ protected transient double edgeProjection; + public double getEdgeProjection() { + return edgeProjection; + } /** * Length all edges. For a regular hexagon, this will also be the distance from the center point * to any vertex, but for a stretch hexagon this does not hold different. */ protected transient double edgeLength; + public double getEdgeLength() { + return edgeLength; + } + @Override public boolean isHex() { return true; @@ -222,8 +229,8 @@ private void setDimensions(int size, double diameter) { // edgeProjection = (diameter - edgeLength) / 2 } - private GeneralPath createHalfShape( - double minorRadius, double edgeProjection, double edgeLength) { + public GeneralPath createHalfShape( + double minorRadius, double edgeProjection, double edgeLength) { GeneralPath hex = new GeneralPath(); hex.moveTo(0, minorRadius); hex.lineTo(edgeProjection, 0); @@ -332,9 +339,9 @@ public int getTokenSpace() { protected abstract double getRendererSizeV(ZoneRenderer renderer); - protected abstract int getOffV(ZoneRenderer renderer); + public abstract int getOffV(ZoneRenderer renderer); - protected abstract int getOffU(ZoneRenderer renderer); + public abstract int getOffU(ZoneRenderer renderer); @Override public void draw(ZoneRenderer renderer, Graphics2D g, Rectangle bounds) { diff --git a/src/main/java/net/rptools/maptool/model/Token.java b/src/main/java/net/rptools/maptool/model/Token.java index 0a68598d66..29887be033 100644 --- a/src/main/java/net/rptools/maptool/model/Token.java +++ b/src/main/java/net/rptools/maptool/model/Token.java @@ -1174,7 +1174,7 @@ public MD5Key getTokenImageAssetId() { if (lookupTable == null) return getImageAssetId(); try { - LookupTable.LookupEntry result = lookupTable.getLookup(getFacing().toString()); + LookupTable.LookupEntry result = lookupTable.getLookup(String.valueOf(getFacing())); if (result != null) return result.getImageId(); } catch (ParserException p) { From fde1f1066b6bb8d9bf2db9ab32bcb573eaaf9b7e Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 24 Feb 2025 20:13:52 +0100 Subject: [PATCH 130/139] fix build after merge --- build.gradle | 8 ++-- .../client/ui/zone/gdx/AreaRenderer.java | 2 +- .../client/ui/zone/gdx/GdxRenderer.java | 43 ++++++++----------- .../client/ui/zone/gdx/GridRenderer.java | 6 +-- .../net/rptools/maptool/model/HexGrid.java | 4 +- 5 files changed, 24 insertions(+), 39 deletions(-) diff --git a/build.gradle b/build.gradle index 77e740e400..5b7747c9cf 100644 --- a/build.gradle +++ b/build.gradle @@ -40,7 +40,9 @@ def javaArgs = [ "-DMAPTOOL_DATADIR=.maptool-" + vendor.toLowerCase(), "-XX:+ShowCodeDetailsInExceptionMessages", "--add-opens=java.desktop/java.awt=ALL-UNNAMED", "--add-opens=java.desktop/java.awt.geom=ALL-UNNAMED", "--add-opens=java.desktop/sun.awt.geom=ALL-UNNAMED", "--add-opens=java.base/java.util=ALL-UNNAMED", - "--add-opens=javafx.web/javafx.scene.web=ALL-UNNAMED", "--add-opens=javafx.web/com.sun.webkit=ALL-UNNAMED", "--add-opens=javafx.web/com.sun.webkit.dom=ALL-UNNAMED", + "--add-opens=javafx.web/javafx.scene.web=ALL-UNNAMED", "--add-opens=javafx.web/com.sun.webkit=ALL-UNNAMED", + "--add-opens=javafx.web/com.sun.webkit.dom=ALL-UNNAMED","--add-opens=java.base/java.lang=ALL-UNNAMED", + "--add-opens=java.desktop/sun.awt=ALL-UNNAMED", "--add-opens=java.desktop/sun.java2d=ALL-UNNAMED", "--add-opens=java.desktop/javax.swing=ALL-UNNAMED","--add-opens=java.desktop/sun.awt.shell=ALL-UNNAMED", "--add-opens=java.desktop/com.sun.java.swing.plaf.windows=ALL-UNNAMED"] @@ -483,10 +485,6 @@ shadowJar { exclude 'module-info.class' //This is to make sure maptool doesn't become a module by including module-info of dependencies. Probably needs to be fixed before we go to jdk 11+ } -configurations.all { - resolutionStrategy.cacheDynamicVersionsFor 10, 'minutes' -} - jar { manifest { attributes 'Implementation-Title': project.name + developerRelease, diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java index 062684ec40..35110586e2 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java @@ -276,7 +276,7 @@ public FloatArray pathToFloatArray(PathIterator it) { segmentIndicies.add(index); index += 1; break; - // return tmpFloat; + // return tmpFloat; case PathIterator.SEG_LINETO: // System.out.println("Line to: ( " + floatsFromArea[0] + ", " + // floatsFromArea[1] + ")"); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 0f84ccc7c5..bad637177d 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -48,10 +48,7 @@ import net.rptools.maptool.client.swing.ImageBorder; import net.rptools.maptool.client.swing.SwingUtil; import net.rptools.maptool.client.tool.Tool; -import net.rptools.maptool.client.tool.drawing.FreehandExposeTool; -import net.rptools.maptool.client.tool.drawing.OvalExposeTool; -import net.rptools.maptool.client.tool.drawing.PolygonExposeTool; -import net.rptools.maptool.client.tool.drawing.RectangleExposeTool; +import net.rptools.maptool.client.tool.WallTopologyTool; import net.rptools.maptool.client.ui.Scale; import net.rptools.maptool.client.ui.theme.Borders; import net.rptools.maptool.client.ui.theme.RessourceManager; @@ -325,7 +322,7 @@ public void render() { } private void updateVbl() { - var currentVbl = zoneCache.getZone().getTopology(Zone.TopologyType.WALL_VBL); + var currentVbl = zoneCache.getZone().getMaskTopology(Zone.TopologyType.WALL_VBL); // if (currentVbl.equals(vbl)) return; vbl = currentVbl; @@ -780,7 +777,7 @@ private void paintlightSourceIconOverlay() { if (token.hasLightSources()) { boolean foundNormalLight = false; for (AttachedLightSource attachedLightSource : token.getLightSources()) { - LightSource lightSource = attachedLightSource.resolve(MapTool.getCampaign()); + LightSource lightSource = attachedLightSource.resolve(token, MapTool.getCampaign()); if (lightSource != null && lightSource.getType() == LightSource.Type.NORMAL) { foundNormalLight = true; break; @@ -846,8 +843,7 @@ private void renderGMVisionOverlay(PlayerView view) { private void renderVisionOverlay(PlayerView view) { var tokenUnderMouse = zoneCache.getZoneRenderer().getTokenUnderMouse(); - if (tokenUnderMouse == null) - return; + if (tokenUnderMouse == null) return; Area currentTokenVisionArea = zoneCache.getZoneView().getVisibleArea(tokenUnderMouse, view); if (currentTokenVisionArea == null) { @@ -887,7 +883,7 @@ private void renderHaloArea(Area visible) { if (tokenUnderMouse == null) return; boolean useHaloColor = - tokenUnderMouse.getHaloColor() != null && AppPreferences.getUseHaloColorOnVisionOverlay(); + tokenUnderMouse.getHaloColor() != null && AppPreferences.useHaloColorOnVisionOverlay.get(); if (tokenUnderMouse.getVisionOverlayColor() != null || useHaloColor) { java.awt.Color visionColor = useHaloColor ? tokenUnderMouse.getHaloColor() : tokenUnderMouse.getVisionOverlayColor(); @@ -896,7 +892,7 @@ private void renderHaloArea(Area visible) { visionColor.getRed() / 255f, visionColor.getGreen() / 255f, visionColor.getBlue() / 255f, - AppPreferences.getHaloOverlayOpacity() / 255f); + AppPreferences.haloOverlayOpacity.get() / 255f); areaRenderer.setColor(tmpColor); areaRenderer.fillArea(batch, visible); } @@ -977,7 +973,7 @@ private void setProjectionMatrix(Matrix4 matrix) { private void renderFogArea(Area softFog, Area visibleArea) { if (zoneCache.getZoneView().isUsingVision()) { if (visibleArea != null && !visibleArea.isEmpty()) { - tmpColor.set(0, 0, 0, AppPreferences.getFogOverlayOpacity() / 255.0f); + tmpColor.set(0, 0, 0, AppPreferences.fogOverlayOpacity.get() / 255.0f); areaRenderer.setColor(tmpColor); // Fill in the exposed area areaRenderer.fillArea(batch, softFog); @@ -988,7 +984,7 @@ private void renderFogArea(Area softFog, Area visibleArea) { areaRenderer.fillArea(batch, visibleArea); } else { - tmpColor.set(0, 0, 0, AppPreferences.getFogOverlayOpacity() / 255.0f); + tmpColor.set(0, 0, 0, AppPreferences.fogOverlayOpacity.get() / 255.0f); areaRenderer.setColor(tmpColor); areaRenderer.fillArea(batch, softFog); } @@ -1257,7 +1253,7 @@ private void showBlockedMoves(ZonePoint zp, double angle, Sprite image, float si } private void renderAuras(PlayerView view) { - var alpha = AppPreferences.getAuraOverlayOpacity() / 255.0f; + var alpha = AppPreferences.auraOverlayOpacity.get() / 255.0f; // Setup timer.start("renderAuras:getAuras"); @@ -1284,7 +1280,7 @@ private void renderLights(PlayerView view) { renderLightOverlay( drawableLights, - AppPreferences.getLightOverlayOpacity() / 255.f, + AppPreferences.lightOverlayOpacity.get() / 255.f, GL20.GL_SRC_COLOR, GL20.GL_ONE_MINUS_SRC_COLOR); timer.stop("renderLights:renderLightOverlay"); @@ -1293,7 +1289,7 @@ private void renderLights(PlayerView view) { if (AppState.isShowLumensOverlay()) { // Lumens overlay enabled. timer.start("renderLights:renderLumensOverlay"); - renderLumensOverlay(view, AppPreferences.getLumensOverlayOpacity() / 255.0f); + renderLumensOverlay(view, AppPreferences.lumensOverlayOpacity.get() / 255.0f); timer.stop("renderLights:renderLumensOverlay"); } } @@ -1370,7 +1366,7 @@ private void renderLumensOverlay(PlayerView view, float overlayAlpha) { batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); // Now draw borders around each region if configured. batch.setColor(Color.WHITE); - final var borderThickness = AppPreferences.getLumensOverlayBorderThickness(); + final var borderThickness = AppPreferences.lumensOverlayBorderThickness.get(); if (borderThickness > 0) { tmpColor.set(0.f, 0.f, 0.f, 1.f); for (final var lumensLevel : disjointLumensLevels) { @@ -1559,7 +1555,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure batch, zoneCache.getZone().getGrid().getTokenCellArea(tokenBounds), false, - AppPreferences.getHaloLineWidth()); + AppPreferences.haloLineWidth.get()); } // Calculate alpha Transparency from token and use opacity for indicating that token is moving @@ -1626,7 +1622,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure case FIGURE: if (token.getHasImageTable() && token.hasFacing() - && AppPreferences.getForceFacingArrow() == false) { + && AppPreferences.forceFacingArrow.get() == false) { break; } java.awt.Shape arrow = @@ -1659,7 +1655,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure break; case TOP_DOWN: - if (AppPreferences.getForceFacingArrow() == false) { + if (AppPreferences.forceFacingArrow.get() == false) { break; } case CIRCLE: @@ -1796,12 +1792,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure } if (useIF && token.getLayer().supportsVision() && zoneCache.getZoneView().isUsingVision()) { Tool tool = MapTool.getFrame().getToolbox().getSelectedTool(); - if (tool - instanceof - RectangleExposeTool // XXX Change to use marker interface such as ExposeTool? - || tool instanceof OvalExposeTool - || tool instanceof FreehandExposeTool - || tool instanceof PolygonExposeTool) { + if (tool instanceof WallTopologyTool) { selectedBorder = RessourceManager.getBorder(Borders.FOW_TOOLS); } } @@ -1866,7 +1857,7 @@ private void renderTokens(List tokenList, PlayerView view, boolean figure // Stacks // TODO: find a cleaner way to indicate token layer if (!tokenList.isEmpty() && tokenList.get(0).getLayer().isTokenLayer()) { - boolean hideTSI = AppPreferences.getHideTokenStackIndicator(); + boolean hideTSI = AppPreferences.hideTokenStackIndicator.get(); if (tokenStackMap != null && !hideTSI) { // FIXME Needed to prevent NPE but how can it be null? for (Token token : tokenStackMap.keySet()) { diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GridRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GridRenderer.java index 5ba218c388..99e4328c1b 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GridRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GridRenderer.java @@ -17,17 +17,13 @@ import com.badlogic.gdx.graphics.Camera; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.Batch; -import com.badlogic.gdx.math.Matrix4; import com.badlogic.gdx.utils.Pools; +import java.awt.*; import net.rptools.maptool.client.AppState; -import net.rptools.maptool.client.swing.SwingUtil; import net.rptools.maptool.client.ui.zone.renderer.ZoneRendererConstants; import net.rptools.maptool.model.*; -import space.earlygrey.shapedrawer.JoinType; import space.earlygrey.shapedrawer.ShapeDrawer; -import java.awt.*; - public class GridRenderer { private ZoneCache zoneCache; private final AreaRenderer areaRenderer; diff --git a/src/main/java/net/rptools/maptool/model/HexGrid.java b/src/main/java/net/rptools/maptool/model/HexGrid.java index 5f6d43616a..fe6adeb4f2 100644 --- a/src/main/java/net/rptools/maptool/model/HexGrid.java +++ b/src/main/java/net/rptools/maptool/model/HexGrid.java @@ -103,6 +103,7 @@ public Point2D.Double getCenterOffset() { public double getEdgeProjection() { return edgeProjection; } + /** * Length all edges. For a regular hexagon, this will also be the distance from the center point * to any vertex, but for a stretch hexagon this does not hold different. @@ -228,8 +229,7 @@ private void setDimensions(int size, double diameter) { // edgeProjection = (diameter - edgeLength) / 2 } - public GeneralPath createHalfShape( - double minorRadius, double edgeProjection, double edgeLength) { + public GeneralPath createHalfShape(double minorRadius, double edgeProjection, double edgeLength) { GeneralPath hex = new GeneralPath(); hex.moveTo(0, minorRadius); hex.lineTo(edgeProjection, 0); From 3a87ca4f2436094faecdbb077a70756d21e35d99 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Wed, 26 Feb 2025 00:10:43 +0100 Subject: [PATCH 131/139] fix trangulation and creation of areas --- build.gradle | 1 - .../maptool/client/ui/MapToolFrame.java | 2 +- .../client/ui/zone/gdx/AreaRenderer.java | 654 +++++++++--------- .../client/ui/zone/gdx/GdxRenderer.java | 18 +- .../maptool/client/ui/zone/gdx/ZoneCache.java | 2 +- .../gdx/drawing/AbstractDrawingDrawer.java | 13 +- 6 files changed, 342 insertions(+), 348 deletions(-) diff --git a/build.gradle b/build.gradle index 5b7747c9cf..0acd81d1d5 100644 --- a/build.gradle +++ b/build.gradle @@ -427,7 +427,6 @@ dependencies { implementation 'com.github.thelsing:libgdx-jogl-backend:1.12.1' //maven local for development //implementation 'com.thelsing.gdx:gdx-backend-jogl:1.12.1' - implementation 'com.badlogicgames.gdx:gdx:1.12.1' implementation 'com.badlogicgames.gdx:gdx-platform:1.12.1:natives-desktop' implementation "space.earlygrey:shapedrawer:2.6.0" diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index 541db7e6f8..30807023d7 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -1988,7 +1988,7 @@ public void showWindowed() { } hideFullScreenTools(); - rendererBorderPanel.add(currentRenderPanel); + rendererBorderPanel.add(zoneRendererPanel); setJMenuBar(menuBar); menuBar.setVisible(true); this.setVisible(true); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java index 35110586e2..4cd6149505 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java @@ -23,6 +23,8 @@ import java.awt.geom.PathIterator; import java.util.ArrayList; import java.util.List; + +import com.badlogic.gdx.utils.ShortArray; import net.rptools.lib.gdx.Earcut; import net.rptools.lib.gdx.Joiner; import space.earlygrey.shapedrawer.DefaultSideEstimator; @@ -33,12 +35,12 @@ public class AreaRenderer { public record TriangledPolygon(float[] vertices, short[] indices) {} - private ShapeDrawer drawer; - private TextureRegion whitePixel; + private final ShapeDrawer drawer; + private final TextureRegion whitePixel; - private FloatArray tmpFloat = new FloatArray(); + private final FloatArray tmpFloat = new FloatArray(); - private IntArray segmentIndicies = new IntArray(); + private final IntArray segmentIndicies = new IntArray(); private Color color; @@ -60,13 +62,13 @@ public void setColor(Color value) { textureRegion = whitePixel; } - private float[] floatsFromArea = new float[6]; - private Vector2 tmpVector = new Vector2(); - private Vector2 tmpVector0 = new Vector2(); - private Vector2 tmpVector1 = new Vector2(); - private Vector2 tmpVector2 = new Vector2(); - private Vector2 tmpVector3 = new Vector2(); - private Vector2 tmpVectorOut = new Vector2(); + private final float[] floatsFromArea = new float[6]; + private final Vector2 tmpVector = new Vector2(); + private final Vector2 tmpVector0 = new Vector2(); + private final Vector2 tmpVector1 = new Vector2(); + private final Vector2 tmpVector2 = new Vector2(); + private final Vector2 tmpVector3 = new Vector2(); + private final Vector2 tmpVectorOut = new Vector2(); private TextureRegion textureRegion = null; @@ -86,12 +88,7 @@ public List triangulate(Area area) { pathToFloatArray(area.getPathIterator(null)); if (segmentIndicies.size == 1) { - while (tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) - && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { - // make sure we don't have last and first point the same - tmpFloat.pop(); - tmpFloat.pop(); - } + removeStartFromEnd(); var vertices = tmpFloat.toArray(); var indices = Earcut.earcut(vertices).toArray(); result.add(new TriangledPolygon(vertices, indices)); @@ -104,12 +101,12 @@ public List triangulate(Area area) { // Polygons in a PathIterator are ordered. If polygon p contains q, q comes first. // So we draw polygons that contains others, those others are the holes. var floats = tmpFloat.toArray(); - for (int i = 0; i < segmentIndicies.size; i++) { - var idx = segmentIndicies.get(i); + for (int i = 1; i <= segmentIndicies.size; i++) { + var idx = i == segmentIndicies.size ? floats.length/2 : segmentIndicies.get(i); var vertexCount = idx - lastSegmentIndex; var currentPolyVertices = new float[2 * vertexCount]; System.arraycopy(floats, 2 * lastSegmentIndex, currentPolyVertices, 0, 2 * vertexCount); - lastSegmentIndex = idx + 1; + lastSegmentIndex = idx; var poly = new Polygon(currentPolyVertices); var holes = new ArrayList(); @@ -151,6 +148,7 @@ public List triangulate(Area area) { } public void fillArea(PolygonSpriteBatch batch, Area area) { + if (area == null || area.isEmpty()) return; for (var poly : triangulate(area)) { var polyRegion = new PolygonRegion(textureRegion, poly.vertices, poly.indices); var color = this.color; @@ -168,28 +166,26 @@ public void drawArea(PolygonSpriteBatch batch, Area area, boolean rounded, float pathToFloatArray(area.getPathIterator(null)); if (segmentIndicies.size == 1) { - while (tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) - && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { - // make sure we don't have last and first point the same - tmpFloat.pop(); - tmpFloat.pop(); - } - var floats = tmpFloat.toArray(); - var vertices = path(floats, thickness, rounded ? JoinType.Round : JoinType.Pointy, false); - paintVertices(batch, vertices, null); + removeStartFromEnd(); //start and end vertices are equal. we don't want this + var polygon = drawPathWithJoin(tmpFloat, thickness, rounded ? JoinType.Round : JoinType.Pointy, false); + paintPolygon(batch, polygon); } else { var floats = tmpFloat.toArray(); var lastSegmentIndex = 0; var color = this.color; - for (int i = 0; i < segmentIndicies.size; i++) { - var idx = segmentIndicies.get(i); - var vertexCount = idx - lastSegmentIndex; - float[] array = new float[2 * vertexCount]; - System.arraycopy(floats, 2 * lastSegmentIndex, array, 0, 2 * vertexCount); - var vertices = path(array, thickness, rounded ? JoinType.Round : JoinType.Pointy, false); + for (int i = 1; i <= segmentIndicies.size; i++) { + var idx = i == segmentIndicies.size ? floats.length/2 : segmentIndicies.get(i); + var vertexCount = (idx - lastSegmentIndex); + + tmpFloat.ensureCapacity(2*vertexCount); + System.arraycopy(floats, 2 * lastSegmentIndex, tmpFloat.items, 0, 2 * vertexCount); + tmpFloat.setSize(2*vertexCount); + removeStartFromEnd(); + var polygon = drawPathWithJoin(tmpFloat, thickness, rounded ? JoinType.Round : JoinType.Pointy, false); this.color = color; - paintVertices(batch, vertices, null); - lastSegmentIndex = idx + 1; + // if(i < end && i >= start) + paintPolygon(batch, polygon); + lastSegmentIndex = idx; } this.color = null; } @@ -199,19 +195,13 @@ public void drawArea(PolygonSpriteBatch batch, Area area, boolean rounded, float // debug = false; } - private void drawDebug(float[] vertices) { - var oldColor = drawer.getPackedColor(); - drawer.setColor(Color.ORANGE); - for (int j = 0; j < vertices.length; j += 2) { - float x1 = vertices[j]; - float y1 = vertices[j + 1]; - - if (j + 2 >= vertices.length) break; - float x2 = vertices[j + 2]; - float y2 = vertices[j + 3]; - drawer.line(x1, y1, x2, y2); + private void removeStartFromEnd() { + while (tmpFloat.get(0) == tmpFloat.get(tmpFloat.size - 2) + && tmpFloat.get(1) == tmpFloat.get(tmpFloat.size - 1)) { + // make sure we don't have last and first point the same + tmpFloat.pop(); + tmpFloat.pop(); } - drawer.setColor(oldColor); } private void drawDebug(float[] vertices, short[] indicies) { @@ -229,6 +219,14 @@ private void drawDebug(float[] vertices, short[] indicies) { drawer.setColor(oldColor); } + public void paintPolygon(PolygonSpriteBatch batch, TriangledPolygon polygon) { + var polyReg = new PolygonRegion(textureRegion, polygon.vertices, polygon.indices); + + if (debug) drawDebug(polygon.vertices, polygon.indices); + else paintRegion(batch, polyReg); + color = Color.WHITE; + } + public void paintVertices(PolygonSpriteBatch batch, float[] vertices, short[] holeIndices) { var indices = Earcut.earcut(vertices, holeIndices, (short) 2).toArray(); var polyReg = new PolygonRegion(textureRegion, vertices, indices); @@ -255,8 +253,6 @@ public FloatArray pathToFloatArray(PathIterator it) { tmpFloat.clear(); segmentIndicies.clear(); - float moveToX = 0; - float moveToY = 0; var index = 0; for (; !it.isDone(); it.next()) { int type = it.currentSegment(floatsFromArea); @@ -265,23 +261,23 @@ public FloatArray pathToFloatArray(PathIterator it) { case PathIterator.SEG_MOVETO: // System.out.println("Move to: ( " + floatsFromArea[0] + ", " + // floatsFromArea[1] + ")"); - moveToX = floatsFromArea[0]; - moveToY = -floatsFromArea[1]; tmpFloat.add(floatsFromArea[0], -floatsFromArea[1]); + segmentIndicies.add(index); index += 1; break; case PathIterator.SEG_CLOSE: // System.out.println("Close"); - tmpFloat.add(moveToX, moveToY); - segmentIndicies.add(index); - index += 1; + break; // return tmpFloat; case PathIterator.SEG_LINETO: // System.out.println("Line to: ( " + floatsFromArea[0] + ", " + // floatsFromArea[1] + ")"); - tmpFloat.add(floatsFromArea[0], -floatsFromArea[1]); - index += 1; + + if(tmpFloat.get(tmpFloat.size -2) != floatsFromArea[0] || tmpFloat.get(tmpFloat.size -1) != -floatsFromArea[1]) { + tmpFloat.add(floatsFromArea[0], -floatsFromArea[1]); + index += 1; + } break; case PathIterator.SEG_QUADTO: // System.out.println("quadratic bezier with: ( " + floatsFromArea[0] + @@ -335,16 +331,16 @@ public FloatArray pathToFloatArray(PathIterator it) { return tmpFloat; } - private Vector2 A = new Vector2(); - private Vector2 B = new Vector2(); - private Vector2 C = new Vector2(); - private Vector2 D = new Vector2(); - private Vector2 E = new Vector2(); - private Vector2 E0 = new Vector2(); - private Vector2 D0 = new Vector2(); - private Vector2 AB = new Vector2(); - private Vector2 BC = new Vector2(); - private Vector2 vec1 = new Vector2(); + private final Vector2 A = new Vector2(); + private final Vector2 B = new Vector2(); + private final Vector2 C = new Vector2(); + private final Vector2 D = new Vector2(); + private final Vector2 E = new Vector2(); + private final Vector2 E0 = new Vector2(); + private final Vector2 D0 = new Vector2(); + private final Vector2 AB = new Vector2(); + private final Vector2 BC = new Vector2(); + private final Vector2 vec1 = new Vector2(); public enum JoinType { Pointy, @@ -352,297 +348,287 @@ public enum JoinType { Round } - public float[] path(float[] path, float lineWidth, JoinType joinType, boolean open) { - var outer = new ArrayList(); - var inner = new ArrayList(); + private final Vector2 vert1 = new Vector2(); + private final Vector2 vert2 = new Vector2(); + private final Vector2 vert3 = new Vector2(); + private final Vector2 vert4 = new Vector2(); + + + private void pushQuad(FloatArray vertices, ShortArray indices) { + var index = vertices.size / 2; + vertices.add(vert1.x); + vertices.add(vert1.y); + vertices.add(vert2.x); + vertices.add(vert2.y); + vertices.add(vert3.x); + vertices.add(vert3.y); + vertices.add(vert4.x); + vertices.add(vert4.y); + indices.add(index); + indices.add(index + 1); + indices.add(index + 2); + indices.add(index); + indices.add(index + 2); + indices.add(index + 3); + } + private void pushTriangle(FloatArray vertices, ShortArray indices) { + var index = vertices.size / 2; + vertices.add(vert1.x); + vertices.add(vert1.y); + vertices.add(vert2.x); + vertices.add(vert2.y); + vertices.add(vert3.x); + vertices.add(vert3.y); + indices.add(index); + indices.add(index + 1); + indices.add(index + 2); + } + + + public TriangledPolygon drawPathWithJoin(FloatArray path, float lineWidth, JoinType joinType, boolean open) { float halfWidth = lineWidth / 2f; + boolean pointyJoin = joinType == JoinType.Pointy; + + var vertices = new FloatArray(); + var indices = new ShortArray(); - if (path.length == 2) { - var x = path[0]; - var y = path[1]; + if (path.size == 2) { + var x = path.get(0); + var y = path.get(1); if (joinType == JoinType.Round) { - addArc(outer, x, y, halfWidth, 0, MathUtils.PI2 - 0.1f, false); + vertices.add(x + halfWidth, y); + addArc(vertices, indices, x, y, halfWidth, 0, MathUtils.PI2 - 0.1f, false); + vertices.add(x + halfWidth, y); } else { - outer.add(x - halfWidth); - outer.add(y - halfWidth); - outer.add(x - halfWidth); - outer.add(y + halfWidth); - outer.add(x + halfWidth); - outer.add(y + halfWidth); - outer.add(x + halfWidth); - outer.add(y - halfWidth); + vert1.set(x - halfWidth, y - halfWidth); + vert2.set(x - halfWidth, y + halfWidth); + vert3.set(x + halfWidth, y + halfWidth); + vert4.set(x + halfWidth, y - halfWidth); + pushQuad(vertices, indices); } + return new TriangledPolygon(vertices.toArray(), indices.toArray()); + } + + if (path.size == 4) { + A.set(path.get(0), path.get(1)); + B.set(path.get(2), path.get(3)); + - } else if (path.length == 4) { - A.set(path[0], path[1]); - B.set(path[2], path[3]); if (joinType == JoinType.Round) { Joiner.prepareFlatEndpoint(B, A, D, E, halfWidth); - E0.set(D); - outer.add(D.x); - outer.add(D.y); + + vertices.add(D.x); + vertices.add(D.y); vec1.set(D).add(-A.x, -A.y); var angle = vec1.angleRad(); - addArc(outer, A.x, A.y, halfWidth, angle, angle + MathUtils.PI, false); - outer.add(E.x); - outer.add(E.y); + addArc(vertices, indices, A.x, A.y, halfWidth, angle, angle + MathUtils.PI, false); + vertices.add(E.x); + vertices.add(E.y); + + vert1.set(D); + vert2.set(E); Joiner.prepareFlatEndpoint(A, B, D, E, halfWidth); - outer.add(D.x); - outer.add(D.y); + vertices.add(D.x); + vertices.add(D.y); vec1.set(D).add(-B.x, -B.y); angle = vec1.angleRad(); - addArc(outer, B.x, B.y, halfWidth, angle, angle + MathUtils.PI, false); - outer.add(E.x); - outer.add(E.y); - outer.add(E0.x); - outer.add(E0.y); + addArc(vertices, indices, B.x, B.y, halfWidth, angle, angle + MathUtils.PI, false); + + vertices.add(E.x); + vertices.add(E.y); + + vert3.set(D); + vert4.set(E); + pushQuad(vertices, indices); + } else { Joiner.prepareSquareEndpoint(B, A, D, E, halfWidth); E0.set(D); - outer.add(D.x); - outer.add(D.y); - outer.add(E.x); - outer.add(E.y); + vert1.set(D); + vert2.set(E); + Joiner.prepareSquareEndpoint(A, B, D, E, halfWidth); - outer.add(D.x); - outer.add(D.y); - outer.add(E.x); - outer.add(E.y); - outer.add(E0.x); - outer.add(E0.y); + vert3.set(D); + vert4.set(E); + pushQuad(vertices, indices); } + return new TriangledPolygon(vertices.toArray(), indices.toArray()); + } - } else { - for (int i = 2; i < path.length - 2; i += 2) { - A.set(path[i - 2], path[i - 1]); - B.set(path[i], path[i + 1]); - C.set(path[i + 2], path[i + 3]); - if (i == 2) { - if (open) { - if (joinType == JoinType.Round) { - Joiner.prepareFlatEndpoint(B, A, D, E, halfWidth); - outer.add(D.x); - outer.add(D.y); - vec1.set(D).add(-A.x, -A.y); - var angle = vec1.angleRad(); - addArc(inner, A.x, A.y, halfWidth, angle, angle + MathUtils.PI, false); - inner.add(E.x); - inner.add(E.y); - } else { - Joiner.prepareSquareEndpoint(B, A, D, E, halfWidth); - outer.add(D.x); - outer.add(D.y); - - // add link at start - // inner.add(D.x); - // inner.add(D.y); - - inner.add(E.x); - inner.add(E.y); - } - } else { - vec1.set(path[path.length - 2], path[path.length - 1]); - if (joinType == JoinType.Pointy) { - Joiner.preparePointyJoin(vec1, A, B, D0, E0, halfWidth); - } else { - Joiner.prepareSmoothJoin(vec1, A, B, D0, E0, halfWidth, true); - } - outer.add(D0.x); - outer.add(D0.y); - inner.add(E0.x); - inner.add(E0.y); + for (int i = 2; i < path.size - 2; i += 2) { + A.set(path.get(i - 2), path.get(i - 1)); + B.set(path.get(i), path.get(i + 1)); + C.set(path.get(i + 2), path.get(i + 3)); + + if (pointyJoin) { + Joiner.preparePointyJoin(A, B, C, D, E, halfWidth); + } else { + Joiner.prepareSmoothJoin(A, B, C, D, E, halfWidth, false); + } + vert3.set(D); + vert4.set(E); + + if (i == 2) { + if (open) { + Joiner.prepareSquareEndpoint(B, A, D, E, halfWidth); + if (joinType == JoinType.Round) { + vec1.set(B).sub(A).setLength(halfWidth); + D.add(vec1); + E.add(vec1); + vertices.add(D.x); + vertices.add(D.y); + vec1.set(D).add(-A.x, -A.y); + var angle = vec1.angleRad(); + addArc(vertices, indices, A.x, A.y, halfWidth, angle, angle + MathUtils.PI, false); + vertices.add(E.x); + vertices.add(E.y); } - } - if (joinType == JoinType.Pointy) { - Joiner.preparePointyJoin(A, B, C, D, E, halfWidth); - outer.add(D.x); - outer.add(D.y); - inner.add(E.x); - inner.add(E.y); + + vert1.set(E); + vert2.set(D); + } else { - var bendsLeft = Joiner.prepareSmoothJoin(A, B, C, D, E, halfWidth, false); - if (bendsLeft) { - vec1.set(E); + vec1.set(path.get(path.size - 2), path.get(path.size - 1)); + if (pointyJoin) { + Joiner.preparePointyJoin(vec1, A, B, D0, E0, halfWidth); } else { - vec1.set(D); - } - outer.add(D.x); - outer.add(D.y); - inner.add(E.x); - inner.add(E.y); - // shapeRenderer.circle(B.x, B.y, halfWidth); - - Joiner.prepareSmoothJoin(A, B, C, D, E, halfWidth, true); - if (bendsLeft) { - if (joinType == JoinType.Round) { - AB.set(B).sub(A); - BC.set(C).sub(B); - vec1.add(-B.x, -B.y); - var angle = vec1.angleRad(); - var angleDiff = MathUtils.PI2 - ShapeUtils.angleRad(AB, BC); - addArc(inner, B.x, B.y, halfWidth, angle, angle + angleDiff, false); - } - inner.add(E.x); - inner.add(E.y); - } else { - if (joinType == JoinType.Round) { - AB.set(B).sub(A); - BC.set(C).sub(B); - vec1.add(-B.x, -B.y); - var angle = vec1.angleRad(); - var angleDiff = MathUtils.PI2 - ShapeUtils.angleRad(AB, BC); - addArc(outer, B.x, B.y, halfWidth, angle, angle + angleDiff, true); - } - outer.add(D.x); - outer.add(D.y); + Joiner.prepareSmoothJoin(vec1, A, B, D0, E0, halfWidth, true); } + vert1.set(E0); + vert2.set(D0); } } - if (open) { - if (joinType == JoinType.Round) { - Joiner.prepareFlatEndpoint(B, C, D, E, halfWidth); - outer.add(E.x); - outer.add(E.y); - inner.add(D.x); - inner.add(D.y); - vec1.set(D).add(-C.x, -C.y); - var angle = vec1.angleRad(); - addArc(inner, C.x, C.y, halfWidth, angle, angle + MathUtils.PI, false); - } else { - Joiner.prepareSquareEndpoint(B, C, D, E, halfWidth); - outer.add(E.x); - outer.add(E.y); - inner.add(D.x); - inner.add(D.y); - } + float x3, y3, x4, y4; + if (pointyJoin) { + x3 = vert3.x; + y3 = vert3.y; + x4 = vert4.x; + y4 = vert4.y; } else { - if (joinType == JoinType.Pointy) { - // draw last link on path - A.set(path[0], path[1]); - Joiner.preparePointyJoin(B, C, A, D, E, halfWidth); - outer.add(D.x); - outer.add(D.y); - inner.add(E.x); - inner.add(E.y); - - // draw connection back to first vertex - outer.add(D0.x); - outer.add(D0.y); - inner.add(E0.x); - inner.add(E0.y); + Joiner.prepareSmoothJoin(A, B, C, D, E, halfWidth, true); + x3 = D.x; + y3 = D.y; + x4 = E.x; + y4 = E.y; + } - } else { - // draw last link on path - A.set(B); - B.set(C); - C.set(path[0], path[1]); - var bendsLeft = Joiner.prepareSmoothJoin(A, B, C, D, E, halfWidth, false); - if (bendsLeft) { - vec1.set(E); - } else { - vec1.set(D); - } - outer.add(D.x); - outer.add(D.y); - inner.add(E.x); - inner.add(E.y); - - // draw connection back to first vertex - Joiner.prepareSmoothJoin(A, B, C, D, E, halfWidth, true); - if (bendsLeft) { - if (joinType == JoinType.Round) { - AB.set(B).sub(A); - BC.set(C).sub(B); - vec1.add(-B.x, -B.y); - var angle = vec1.angleRad(); - var angleDiff = MathUtils.PI2 - ShapeUtils.angleRad(AB, BC); - addArc(inner, B.x, B.y, halfWidth, angle, angle + angleDiff, false); - } - inner.add(E.x); - inner.add(E.y); - } else { - if (joinType == JoinType.Round) { - AB.set(B).sub(A); - BC.set(C).sub(B); - vec1.add(-B.x, -B.y); - var angle = vec1.angleRad(); - var angleDiff = MathUtils.PI2 - ShapeUtils.angleRad(AB, BC); - addArc(outer, B.x, B.y, halfWidth, angle, angle + angleDiff, true); - } - outer.add(D.x); - outer.add(D.y); - } + pushQuad(vertices, indices); + if (!pointyJoin) drawSmoothJoinFill(vertices, indices, A, B, C, D, E, halfWidth, joinType); + vert1.set(x4, y4); + vert2.set(x3, y3); + } - A.set(B); - B.set(C); - C.set(path[2], path[3]); - bendsLeft = Joiner.prepareSmoothJoin(A, B, C, D, E, halfWidth, false); - if (bendsLeft) { - vec1.set(E); - } else { - vec1.set(D); - } - outer.add(D.x); - outer.add(D.y); - inner.add(E.x); - inner.add(E.y); - if (joinType == JoinType.Round) { - AB.set(B).sub(A); - BC.set(C).sub(B); - vec1.add(-B.x, -B.y); - var angle = vec1.angleRad(); - var angleDiff = MathUtils.PI2 - ShapeUtils.angleRad(AB, BC); - if (bendsLeft) { - addArc(inner, B.x, B.y, halfWidth, angle, angle + angleDiff, false); - inner.add(E0.x); - inner.add(E0.y); - } else { - addArc(outer, B.x, B.y, halfWidth, angle, angle + angleDiff, true); - outer.add(D0.x); - outer.add(D0.y); - } - } else { - if (bendsLeft) { - inner.add(E0.x); - inner.add(E0.y); - } else { - outer.add(D0.x); - outer.add(D0.y); - } - } - } + if (open) { + //draw last link on path + Joiner.prepareFlatEndpoint(B, C, D, E, halfWidth); + if (joinType == JoinType.Round) { + + vertices.add(D.x); + vertices.add(D.y); + vec1.set(D).add(-C.x, -C.y); + var angle = vec1.angleRad(); + addArc(vertices, indices, C.x, C.y, halfWidth, angle, angle + MathUtils.PI, false); + vertices.add(E.x); + vertices.add(E.y); + } else { + vec1.set(C).sub(B).setLength(halfWidth); + D.add(vec1); + E.add(vec1); + } + + vert3.set(E); + vert4.set(D); + pushQuad(vertices, indices); + } else { + if (pointyJoin) { + //draw last link on path + A.set(path.get(0), path.get(1)); + Joiner.preparePointyJoin(B, C, A, D, E, halfWidth); + vert3.set(D); + vert4.set(E); + pushQuad(vertices, indices); + + //draw connection back to first vertex + vert1.set(D); + vert2.set(E); + vert3.set(E0); + vert4.set(D0); + pushQuad(vertices, indices); + } else { + //draw last link on path + A.set(B); + B.set(C); + C.set(path.get(0), path.get(1)); + Joiner.prepareSmoothJoin(A, B, C, D, E, halfWidth, false); + vert3.set(D); + vert4.set(E); + pushQuad(vertices, indices); + drawSmoothJoinFill(vertices, indices,A, B, C, D, E, halfWidth, joinType); + + //draw connection back to first vertex + Joiner.prepareSmoothJoin(A, B, C, D, E, halfWidth, true); + vert3.set(E); + vert4.set(D); + A.set(path.get(2), path.get(3)); + Joiner.prepareSmoothJoin(B, C, A, D, E, halfWidth, false); + vert1.set(D); + vert2.set(E); + pushQuad(vertices, indices); + drawSmoothJoinFill(vertices, indices,B, C, A, D, E, halfWidth, joinType); } } - float[] floatArray = new float[outer.size() + inner.size()]; - int i = 0; + return new TriangledPolygon(vertices.toArray(), indices.toArray()); + } - for (Float f : outer) { - floatArray[i++] = f; + private void drawSmoothJoinFill(FloatArray vertices, ShortArray indices, Vector2 A, Vector2 B, Vector2 C, Vector2 D, Vector2 E, float halfLineWidth, JoinType joinType) { + boolean bendsLeft = Joiner.prepareSmoothJoin(A, B, C, D, E, halfLineWidth, false); + vert1.set(bendsLeft ? E : D); + vert2.set(bendsLeft ? D : E); + if (bendsLeft) { + vec1.set(E); + } else { + vec1.set(D); } - for (int j = 1; j <= inner.size(); j += 2) { - floatArray[floatArray.length - j] = inner.get(j); - floatArray[floatArray.length - j - 1] = inner.get(j - 1); + bendsLeft = Joiner.prepareSmoothJoin(A, B, C, D, E, halfLineWidth, true); + vert3.set(bendsLeft ? E : D); + pushTriangle(vertices, indices); + + if (joinType == JoinType.Round) { + if(bendsLeft) { + AB.set(B).sub(A); + BC.set(C).sub(B); + vec1.add(-B.x, -B.y); + var angle = vec1.angleRad(); + var angleDiff = MathUtils.PI2 - ShapeUtils.angleRad(AB, BC); + vertices.add(vert1.x); + vertices.add(vert1.y); + addArc(vertices, indices, B.x, B.y, halfLineWidth, angle, angle + angleDiff, false); + vertices.add(vert3.x); + vertices.add(vert3.y); + } else { + AB.set(B).sub(A); + BC.set(C).sub(B); + vec1.add(-B.x, -B.y); + var angle = vec1.angleRad(); + var angleDiff = MathUtils.PI2 - ShapeUtils.angleRad(AB, BC); + vertices.add(vert1.x); + vertices.add(vert1.y); + addArc(vertices,indices, B.x, B.y, halfLineWidth, angle, angle + angleDiff, true); + vertices.add(vert3.x); + vertices.add(vert3.y); + } } - return floatArray; } - private Vector2 A1 = new Vector2(); - private Vector2 B1 = new Vector2(); - private Vector2 dir = new Vector2(); - - private void addArc( - List list, - float centreX, - float centreY, - float radius, - float startAngle, - float endAngle, - boolean clockwise) { + private void addArc(FloatArray vertices, ShortArray indices, float centreX, float centreY, float radius, float startAngle, float endAngle, boolean clockwise) { + var oldSize = vertices.size; + var oldVertexCount = oldSize / 2; + if (startAngle < 0) { startAngle += MathUtils.PI2; } @@ -665,29 +651,35 @@ private void addArc( if (clockwise) { dAnglePerSide *= -1; angle += 2 * dAnglePerSide; + } - var oldColor = drawer.getPackedColor(); - drawer.setColor(Color.WHITE_FLOAT_BITS); + + //drawer.setColor(Color.WHITE_FLOAT_BITS); for (var i = 1; i <= sides; i++) { - if (i > 1 && debug) { - drawer.setColor(Color.RED); - } + /* if(i>1) { + drawer.setColor(Color.RED); + } + */ var cos = MathUtils.cos(angle); var sin = MathUtils.sin(angle); angle += dAnglePerSide; var x = centreX + cos * radius; var y = centreY + sin * radius; - list.add(x); - list.add(y); - if (debug) { - drawer.circle(x, y, 2); - } + vertices.add(x); + vertices.add(y); + // drawer.circle(x,y,2); + } + var vertexCount = (vertices.size - oldSize) / 2; + + for (int j = 0; j < vertexCount; j++) { + indices.add(oldVertexCount - 1); + indices.add(oldVertexCount + j); + indices.add(oldVertexCount + j + 1); } - drawer.setColor(oldColor); } - private SideEstimator sideEstimator = new DefaultSideEstimator(); + private final SideEstimator sideEstimator = new DefaultSideEstimator(); protected int estimateSidesRequired(float radiusX, float radiusY) { return sideEstimator.estimateSidesRequired(1, radiusX, radiusY); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index bad637177d..8173aff33a 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -192,12 +192,12 @@ public void create() { rayHandler.setBlurNum(3); // light = - var red = new PointLight(rayHandler, 128, Color.RED, 600, 50, -50); - red.setSoft(false); - var green = new PointLight(rayHandler, 128, Color.GREEN, 600, 50, -350); - green.setSoft(false); - var blue = new PointLight(rayHandler, 128, Color.CORAL, 600, 350, -350); - blue.setSoft(false); + // var red = new PointLight(rayHandler, 128, Color.RED, 600, 50, -50); + //red.setSoft(false); + //var green = new PointLight(rayHandler, 128, Color.GREEN, 600, 50, -350); + //green.setSoft(false); + //var blue = new PointLight(rayHandler, 128, Color.CORAL, 600, 350, -350); + //blue.setSoft(false); manager = new com.badlogic.gdx.assets.AssetManager(); loadAssets(); @@ -318,7 +318,7 @@ public void render() { doRendering(); - debugRenderer.render(world, cam.combined); + //debugRenderer.render(world, cam.combined); } private void updateVbl() { @@ -641,8 +641,8 @@ private void renderZone(PlayerView view) { } else { // rayHandler.setAmbientLight(1.0f); } - rayHandler.setCombinedMatrix(cam); - rayHandler.updateAndRender(); + //rayHandler.setCombinedMatrix(cam); + //rayHandler.updateAndRender(); // } // (This method has it's own 'timer' calls) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java index 5243bd71dd..da905f9cbe 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java @@ -265,7 +265,7 @@ public GdxPaint getPaint(DrawablePaint paint) { if (paint instanceof DrawableColorPaint) { var color = new Color(); Color.argb8888ToColor(color, ((DrawableColorPaint) paint).getColor()); - return new GdxPaint(color, whitePixelRegion); + return new GdxPaint(color, null); } var texturePaint = (DrawableTexturePaint) paint; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractDrawingDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractDrawingDrawer.java index 1189e1065e..4c7e08bf2b 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractDrawingDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractDrawingDrawer.java @@ -51,22 +51,25 @@ protected void applyColor(DrawablePaint paint, boolean applyAlpha) { var color = gdxPaint.color(); gdxPaint.color().set(color.r, color.g, color.b, alpha); } - areaRenderer.setTextureRegion(gdxPaint.textureRegion()); + areaRenderer.setColor(gdxPaint.color()); + if(gdxPaint.textureRegion() != null) { + areaRenderer.setTextureRegion(gdxPaint.textureRegion()); + } } protected void line(PolygonSpriteBatch batch, Pen pen, float x1, float y1, float x2, float y2) { var floats = new FloatArray(); // negate y values because we are y-up floats.add(x1, -y1, x2, -y2); - var path = - areaRenderer.path( - floats.toArray(), + var polygon = + areaRenderer.drawPathWithJoin( + floats, pen.getThickness(), pen.getSquareCap() ? AreaRenderer.JoinType.Pointy : AreaRenderer.JoinType.Round, false); applyColor(pen.getPaint(), false); - areaRenderer.paintVertices(batch, path, null); + areaRenderer.paintPolygon(batch, polygon); } protected void fillArea(PolygonSpriteBatch batch, Area area, Pen pen) { From 4e8e245eadcc0a6a57a67dd6e31f97f3ec6d9626 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Wed, 26 Feb 2025 22:15:40 +0100 Subject: [PATCH 132/139] fix trangulation and creation of areas --- .../client/ui/zone/gdx/AreaRenderer.java | 69 +++---------------- .../gdx/drawing/AbstractDrawingDrawer.java | 14 ++-- 2 files changed, 20 insertions(+), 63 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java index 4cd6149505..e7a942fc8a 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java @@ -23,6 +23,7 @@ import java.awt.geom.PathIterator; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import com.badlogic.gdx.utils.ShortArray; import net.rptools.lib.gdx.Earcut; @@ -42,7 +43,7 @@ public record TriangledPolygon(float[] vertices, short[] indices) {} private final IntArray segmentIndicies = new IntArray(); - private Color color; + private final Color color = Color.WHITE.cpy(); public AreaRenderer(ShapeDrawer drawer) { this.drawer = drawer; @@ -54,11 +55,7 @@ public ShapeDrawer getShapeDrawer() { } public void setColor(Color value) { - if (value == null) { - color = Color.WHITE; - } else { - color = value; - } + color.set(Objects.requireNonNullElse(value, Color.WHITE)); textureRegion = whitePixel; } @@ -96,7 +93,6 @@ public List triangulate(Area area) { } var lastSegmentIndex = 0; - var color = this.color; var polygons = new ArrayList(); // Polygons in a PathIterator are ordered. If polygon p contains q, q comes first. // So we draw polygons that contains others, those others are the holes. @@ -151,15 +147,10 @@ public void fillArea(PolygonSpriteBatch batch, Area area) { if (area == null || area.isEmpty()) return; for (var poly : triangulate(area)) { var polyRegion = new PolygonRegion(textureRegion, poly.vertices, poly.indices); - var color = this.color; paintRegion(batch, polyRegion); - this.color = color; } - this.color = Color.WHITE; } - private boolean debug = false; - public void drawArea(PolygonSpriteBatch batch, Area area, boolean rounded, float thickness) { if (area == null || area.isEmpty()) return; @@ -172,7 +163,6 @@ public void drawArea(PolygonSpriteBatch batch, Area area, boolean rounded, float } else { var floats = tmpFloat.toArray(); var lastSegmentIndex = 0; - var color = this.color; for (int i = 1; i <= segmentIndicies.size; i++) { var idx = i == segmentIndicies.size ? floats.length/2 : segmentIndicies.get(i); var vertexCount = (idx - lastSegmentIndex); @@ -182,17 +172,10 @@ public void drawArea(PolygonSpriteBatch batch, Area area, boolean rounded, float tmpFloat.setSize(2*vertexCount); removeStartFromEnd(); var polygon = drawPathWithJoin(tmpFloat, thickness, rounded ? JoinType.Round : JoinType.Pointy, false); - this.color = color; - // if(i < end && i >= start) paintPolygon(batch, polygon); lastSegmentIndex = idx; } - this.color = null; } - // drawDebug(vertices); - // debug = true; - - // debug = false; } private void removeStartFromEnd() { @@ -204,49 +187,22 @@ private void removeStartFromEnd() { } } - private void drawDebug(float[] vertices, short[] indicies) { - var oldColor = drawer.getPackedColor(); - drawer.setColor(Color.CYAN); - for (int j = 0; j < indicies.length; j += 3) { - float x1 = vertices[2 * indicies[j]]; - float y1 = vertices[2 * indicies[j] + 1]; - float x2 = vertices[2 * indicies[j + 1]]; - float y2 = vertices[2 * indicies[j + 1] + 1]; - float x3 = vertices[2 * indicies[j + 2]]; - float y3 = vertices[2 * indicies[j + 2] + 1]; - drawer.triangle(x1, y1, x2, y2, x3, y3); - } - drawer.setColor(oldColor); - } - public void paintPolygon(PolygonSpriteBatch batch, TriangledPolygon polygon) { var polyReg = new PolygonRegion(textureRegion, polygon.vertices, polygon.indices); - - if (debug) drawDebug(polygon.vertices, polygon.indices); - else paintRegion(batch, polyReg); - color = Color.WHITE; + paintRegion(batch, polyReg); } public void paintVertices(PolygonSpriteBatch batch, float[] vertices, short[] holeIndices) { var indices = Earcut.earcut(vertices, holeIndices, (short) 2).toArray(); var polyReg = new PolygonRegion(textureRegion, vertices, indices); - - if (debug) drawDebug(vertices, indices); - else paintRegion(batch, polyReg); - color = Color.WHITE; + paintRegion(batch, polyReg); } - private PolygonSprite sprite = null; - protected void paintRegion(PolygonSpriteBatch batch, PolygonRegion polygonRegion) { - if (sprite == null) { - sprite = new PolygonSprite(polygonRegion); - } else { - sprite.setRegion(polygonRegion); - } - sprite.setColor(color); - sprite.draw(batch); - color = Color.WHITE; + var oldColor = batch.getColor(); + batch.setColor(color); + batch.draw(polygonRegion, 0, 0); + batch.setColor(oldColor); } public FloatArray pathToFloatArray(PathIterator it) { @@ -387,6 +343,7 @@ private void pushTriangle(FloatArray vertices, ShortArray indices) { public TriangledPolygon drawPathWithJoin(FloatArray path, float lineWidth, JoinType joinType, boolean open) { + // this code was adapted from shapedrawer float halfWidth = lineWidth / 2f; boolean pointyJoin = joinType == JoinType.Pointy; @@ -654,12 +611,7 @@ private void addArc(FloatArray vertices, ShortArray indices, float centreX, floa } - //drawer.setColor(Color.WHITE_FLOAT_BITS); for (var i = 1; i <= sides; i++) { - /* if(i>1) { - drawer.setColor(Color.RED); - } - */ var cos = MathUtils.cos(angle); var sin = MathUtils.sin(angle); angle += dAnglePerSide; @@ -668,7 +620,6 @@ private void addArc(FloatArray vertices, ShortArray indices, float centreX, floa vertices.add(x); vertices.add(y); - // drawer.circle(x,y,2); } var vertexCount = (vertices.size - oldSize) / 2; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractDrawingDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractDrawingDrawer.java index 4c7e08bf2b..0dbf55ec48 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractDrawingDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractDrawingDrawer.java @@ -14,6 +14,7 @@ */ package net.rptools.maptool.client.ui.zone.gdx.drawing; +import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; import com.badlogic.gdx.utils.FloatArray; import java.awt.geom.Area; @@ -47,12 +48,15 @@ public void draw(PolygonSpriteBatch batch, Zone zone, Drawable element, Pen pen) protected void applyColor(DrawablePaint paint, boolean applyAlpha) { var gdxPaint = zoneCache.getPaint(paint); + var color = gdxPaint.color(); + var c2 = new Color().set(color); if (alpha != null && applyAlpha) { - var color = gdxPaint.color(); - gdxPaint.color().set(color.r, color.g, color.b, alpha); + + c2.set(color.r, color.g, color.b, alpha); } - areaRenderer.setColor(gdxPaint.color()); + areaRenderer.setColor(c2); + //areaRenderer.setColor(gdxPaint.color()); if(gdxPaint.textureRegion() != null) { areaRenderer.setTextureRegion(gdxPaint.textureRegion()); } @@ -73,12 +77,14 @@ protected void line(PolygonSpriteBatch batch, Pen pen, float x1, float y1, float } protected void fillArea(PolygonSpriteBatch batch, Area area, Pen pen) { + alpha = pen.getOpacity(); applyColor(pen.getBackgroundPaint(), true); areaRenderer.fillArea(batch, area); } protected void drawArea(PolygonSpriteBatch batch, Area area, Pen pen) { - applyColor(pen.getPaint(), false); + alpha = pen.getOpacity(); + applyColor(pen.getPaint(), true); areaRenderer.drawArea(batch, area, !pen.getSquareCap(), pen.getThickness()); } From 1f9c7568a5b0c42ae6bcbaf054af8da935e036e3 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 27 Feb 2025 20:51:42 +0100 Subject: [PATCH 133/139] clean up --- build.gradle | 18 +- gradle.properties | 2 +- .../client/swing/PositionalLayout.java | 4 - .../maptool/client/ui/MapToolFrame.java | 1 + .../client/ui/zone/gdx/Box2DLightsTest.java | 500 ------------------ .../client/ui/zone/gdx/GdxRenderer.java | 106 ---- src/main/resources/data/bg.png | Bin 394660 -> 0 bytes src/main/resources/data/marble.png | Bin 9522 -> 0 bytes src/main/resources/mappe14.xlsx | Bin 18917 -> 0 bytes 9 files changed, 7 insertions(+), 624 deletions(-) delete mode 100644 src/main/java/net/rptools/maptool/client/ui/zone/gdx/Box2DLightsTest.java delete mode 100644 src/main/resources/data/bg.png delete mode 100644 src/main/resources/data/marble.png delete mode 100644 src/main/resources/mappe14.xlsx diff --git a/build.gradle b/build.gradle index 0acd81d1d5..767e151ef3 100644 --- a/build.gradle +++ b/build.gradle @@ -424,22 +424,14 @@ dependencies { implementation(libs.noiselib) // libgdx - implementation 'com.github.thelsing:libgdx-jogl-backend:1.12.1' - //maven local for development - //implementation 'com.thelsing.gdx:gdx-backend-jogl:1.12.1' - implementation 'com.badlogicgames.gdx:gdx:1.12.1' - implementation 'com.badlogicgames.gdx:gdx-platform:1.12.1:natives-desktop' + implementation 'com.github.thelsing:libgdx-jogl-backend:becdde406e' + implementation 'com.badlogicgames.gdx:gdx:1.13.1' + implementation 'com.badlogicgames.gdx:gdx-platform:1.13.1:natives-desktop' implementation "space.earlygrey:shapedrawer:2.6.0" - implementation 'com.badlogicgames.gdx:gdx-freetype:1.12.1' - implementation 'com.badlogicgames.gdx:gdx-freetype-platform:1.12.1:natives-desktop' + implementation 'com.badlogicgames.gdx:gdx-freetype:1.13.1' + implementation 'com.badlogicgames.gdx:gdx-freetype-platform:1.13.1:natives-desktop' implementation "com.badlogicgames.gdx-video:gdx-video:1.3.2-SNAPSHOT" implementation "com.badlogicgames.gdx-video:gdx-video-lwjgl3:1.3.2-SNAPSHOT" - implementation 'com.badlogicgames.box2dlights:box2dlights:1.5' - //implementation 'com.github.thelsing:box2dlights:master-SNAPSHOT' - //implementation 'com.github.fgnm:box2dlights:master-SNAPSHOT' - //implementation 'com.github.voodoosoft:box2dlights:master-SNAPSHOT' - implementation 'com.badlogicgames.gdx:gdx-box2d:1.12.1' - implementation 'com.badlogicgames.gdx:gdx-box2d-platform:1.12.1:natives-desktop' } processResources { diff --git a/gradle.properties b/gradle.properties index 11c7c6b102..6ad9cd470d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ # Change vendor RPTools for official builds, or used for things like BETA builds # Should change this just once for a given Repo/Fork -vendor=RPTools2 +vendor=RPTools description=Virtual Tabletop for playing roleplaying games with remote players or face to face. # Versioning is controlled via git tag for that commit. For developing you can pass a -version=2.1 -vendor=Nerps if needed diff --git a/src/main/java/net/rptools/maptool/client/swing/PositionalLayout.java b/src/main/java/net/rptools/maptool/client/swing/PositionalLayout.java index 9cec108828..70a3774efd 100644 --- a/src/main/java/net/rptools/maptool/client/swing/PositionalLayout.java +++ b/src/main/java/net/rptools/maptool/client/swing/PositionalLayout.java @@ -57,10 +57,6 @@ public void addLayoutComponent(Component comp, Object constraints) { compPositionMap.put(comp, (Position) constraints); } - public Object getComponentConstraints(Component comp) { - return compPositionMap.get(comp); - } - public void addLayoutComponent(String name, Component comp) { throw new IllegalArgumentException("Use add(comp, Position)"); } diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index 30807023d7..97b13bf7fe 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -483,6 +483,7 @@ private void initGdx() { config.title = "maptool"; config.width = 640; config.height = 480; + config.samples = 1; var joglSwingCanvas = new JoglSwingCanvas(GdxRenderer.getInstance(), config); gdxPanel = joglSwingCanvas.getGLCanvas(); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/Box2DLightsTest.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/Box2DLightsTest.java deleted file mode 100644 index 62e64d84b1..0000000000 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/Box2DLightsTest.java +++ /dev/null @@ -1,500 +0,0 @@ -/* - * This software Copyright by the RPTools.net development team, and - * licensed under the Affero GPL Version 3 or, at your option, any later - * version. - * - * MapTool Source Code is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU Affero General Public - * License * along with this source Code. If not, please visit - * and specifically the Affero license - * text at . - */ -package net.rptools.maptool.client.ui.zone.gdx; - -import box2dLight.*; -import com.badlogic.gdx.ApplicationListener; -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.Input; -import com.badlogic.gdx.InputAdapter; -import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.GL20; -import com.badlogic.gdx.graphics.OrthographicCamera; -import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.g2d.BitmapFont; -import com.badlogic.gdx.graphics.g2d.SpriteBatch; -import com.badlogic.gdx.graphics.g2d.TextureRegion; -import com.badlogic.gdx.math.MathUtils; -import com.badlogic.gdx.math.Matrix4; -import com.badlogic.gdx.math.Vector2; -import com.badlogic.gdx.math.Vector3; -import com.badlogic.gdx.physics.box2d.Body; -import com.badlogic.gdx.physics.box2d.BodyDef; -import com.badlogic.gdx.physics.box2d.BodyDef.BodyType; -import com.badlogic.gdx.physics.box2d.ChainShape; -import com.badlogic.gdx.physics.box2d.CircleShape; -import com.badlogic.gdx.physics.box2d.Fixture; -import com.badlogic.gdx.physics.box2d.FixtureDef; -import com.badlogic.gdx.physics.box2d.QueryCallback; -import com.badlogic.gdx.physics.box2d.World; -import com.badlogic.gdx.physics.box2d.joints.MouseJoint; -import com.badlogic.gdx.physics.box2d.joints.MouseJointDef; -import java.util.ArrayList; - -public class Box2DLightsTest extends InputAdapter implements ApplicationListener { - - static final int RAYS_PER_BALL = 128; - static final int BALLSNUM = 5; - static final float LIGHT_DISTANCE = 16f; - static final float RADIUS = 1f; - - static final float viewportWidth = 48; - static final float viewportHeight = 32; - - OrthographicCamera camera; - - SpriteBatch batch; - BitmapFont font; - TextureRegion textureRegion; - Texture bg; - - /** our box2D world * */ - World world; - - /** our boxes * */ - ArrayList balls = new ArrayList(BALLSNUM); - - /** our ground box * */ - Body groundBody; - - /** our mouse joint * */ - MouseJoint mouseJoint = null; - - /** a hit body * */ - Body hitBody = null; - - /** pixel perfect projection for font rendering */ - Matrix4 normalProjection = new Matrix4(); - - boolean showText = true; - - /** BOX2D LIGHT STUFF */ - RayHandler rayHandler; - - ArrayList lights = new ArrayList(BALLSNUM); - - float sunDirection = -90f; - - @Override - public void create() { - - MathUtils.random.setSeed(Long.MIN_VALUE); - - camera = new OrthographicCamera(viewportWidth, viewportHeight); - camera.position.set(0, viewportHeight / 2f, 0); - camera.update(); - - batch = new SpriteBatch(); - font = new BitmapFont(); - font.setColor(Color.RED); - - textureRegion = new TextureRegion(new Texture(Gdx.files.internal("data/marble.png"))); - bg = new Texture(Gdx.files.internal("data/bg.png")); - - createPhysicsWorld(); - Gdx.input.setInputProcessor(this); - - normalProjection.setToOrtho2D(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); - - /** BOX2D LIGHT STUFF BEGIN */ - /*var options = new RayHandlerOptions(); - options.setDiffuse(true); - options.setGammaCorrection(true); - rayHandler = new RayHandler(world, options); - */ - RayHandler.setGammaCorrection(true); - RayHandler.useDiffuseLight(true); - rayHandler = new RayHandler(world); - // rayHandler.setAmbientLight(0f, 0f, 0f, 0.5f); - rayHandler.setBlurNum(3); - - initPointLights(); - /** BOX2D LIGHT STUFF END */ - } - - @Override - public void render() { - - /** Rotate directional light like sun :) */ - if (lightsType == 3) { - sunDirection += Gdx.graphics.getDeltaTime() * 4f; - lights.get(0).setDirection(sunDirection); - } - - camera.update(); - - boolean stepped = fixedStep(Gdx.graphics.getDeltaTime()); - Gdx.gl.glClearColor(0.3f, 0.3f, 0.3f, 1); - Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); - - batch.setProjectionMatrix(camera.combined); - batch.disableBlending(); - batch.begin(); - { - batch.draw(bg, -viewportWidth / 2f, 0, viewportWidth, viewportHeight); - batch.enableBlending(); - for (int i = 0; i < BALLSNUM; i++) { - Body ball = balls.get(i); - Vector2 position = ball.getPosition(); - float angle = MathUtils.radiansToDegrees * ball.getAngle(); - batch.draw( - textureRegion, - position.x - RADIUS, - position.y - RADIUS, - RADIUS, - RADIUS, - RADIUS * 2, - RADIUS * 2, - 1f, - 1f, - angle); - } - } - batch.end(); - - /** BOX2D LIGHT STUFF BEGIN */ - rayHandler.setCombinedMatrix(camera); - - if (stepped) rayHandler.update(); - rayHandler.render(); - /** BOX2D LIGHT STUFF END */ - long time = System.nanoTime(); - - boolean atShadow = rayHandler.pointAtShadow(testPoint.x, testPoint.y); - aika += System.nanoTime() - time; - - /** FONT */ - if (showText) { - batch.setProjectionMatrix(normalProjection); - batch.begin(); - - font.draw(batch, "F1 - PointLight", 0, Gdx.graphics.getHeight()); - font.draw(batch, "F2 - ConeLight", 0, Gdx.graphics.getHeight() - 15); - font.draw(batch, "F3 - ChainLight", 0, Gdx.graphics.getHeight() - 30); - font.draw(batch, "F4 - DirectionalLight", 0, Gdx.graphics.getHeight() - 45); - font.draw(batch, "F5 - random lights colors", 0, Gdx.graphics.getHeight() - 75); - font.draw(batch, "F6 - random lights distance", 0, Gdx.graphics.getHeight() - 90); - font.draw(batch, "F9 - default blending (1.3)", 0, Gdx.graphics.getHeight() - 120); - font.draw( - batch, "F10 - over-burn blending (default in 1.2)", 0, Gdx.graphics.getHeight() - 135); - font.draw(batch, "F11 - some other blending", 0, Gdx.graphics.getHeight() - 150); - - font.draw(batch, "F12 - toggle help text", 0, Gdx.graphics.getHeight() - 180); - - font.draw( - batch, - Integer.toString(Gdx.graphics.getFramesPerSecond()) - + "mouse at shadows: " - + atShadow - + " time used for shadow calculation:" - + aika / ++times - + "ns", - 0, - 20); - - batch.end(); - } - } - - void clearLights() { - if (lights.size() > 0) { - for (Light light : lights) { - light.remove(); - } - lights.clear(); - } - groundBody.setActive(true); - } - - void initPointLights() { - clearLights(); - for (int i = 0; i < BALLSNUM; i++) { - PointLight light = new PointLight(rayHandler, RAYS_PER_BALL, null, LIGHT_DISTANCE, 0f, 0f); - light.attachToBody(balls.get(i), RADIUS / 2f, RADIUS / 2f); - light.setColor(MathUtils.random(), MathUtils.random(), MathUtils.random(), 1f); - lights.add(light); - } - } - - void initConeLights() { - clearLights(); - for (int i = 0; i < BALLSNUM; i++) { - ConeLight light = - new ConeLight( - rayHandler, - RAYS_PER_BALL, - null, - LIGHT_DISTANCE, - 0, - 0, - 0f, - MathUtils.random(15f, 40f)); - light.attachToBody(balls.get(i), RADIUS / 2f, RADIUS / 2f, MathUtils.random(0f, 360f)); - light.setColor(MathUtils.random(), MathUtils.random(), MathUtils.random(), 1f); - lights.add(light); - } - } - - void initChainLights() { - clearLights(); - for (int i = 0; i < BALLSNUM; i++) { - ChainLight light = - new ChainLight( - rayHandler, RAYS_PER_BALL, null, LIGHT_DISTANCE, 1, new float[] {-5, 0, 0, 3, 5, 0}); - light.attachToBody(balls.get(i), MathUtils.random(0f, 360f)); - light.setColor(MathUtils.random(), MathUtils.random(), MathUtils.random(), 1f); - lights.add(light); - } - } - - void initDirectionalLight() { - clearLights(); - - groundBody.setActive(false); - sunDirection = MathUtils.random(0f, 360f); - - DirectionalLight light = - new DirectionalLight(rayHandler, 4 * RAYS_PER_BALL, null, sunDirection); - lights.add(light); - } - - private static final int MAX_FPS = 30; - private static final int MIN_FPS = 15; - public static final float TIME_STEP = 1f / MAX_FPS; - private static final float MAX_STEPS = 1f + MAX_FPS / MIN_FPS; - private static final float MAX_TIME_PER_FRAME = TIME_STEP * MAX_STEPS; - private static final int VELOCITY_ITERS = 6; - private static final int POSITION_ITERS = 2; - - float physicsTimeLeft; - long aika; - int times; - - private boolean fixedStep(float delta) { - physicsTimeLeft += delta; - if (physicsTimeLeft > MAX_TIME_PER_FRAME) physicsTimeLeft = MAX_TIME_PER_FRAME; - - boolean stepped = false; - while (physicsTimeLeft >= TIME_STEP) { - world.step(TIME_STEP, VELOCITY_ITERS, POSITION_ITERS); - physicsTimeLeft -= TIME_STEP; - stepped = true; - } - return stepped; - } - - private void createPhysicsWorld() { - - world = new World(new Vector2(0, 0), true); - - float halfWidth = viewportWidth / 2f; - ChainShape chainShape = new ChainShape(); - chainShape.createLoop( - new Vector2[] { - new Vector2(-halfWidth, 0f), - new Vector2(halfWidth, 0f), - new Vector2(halfWidth, viewportHeight), - new Vector2(-halfWidth, viewportHeight) - }); - BodyDef chainBodyDef = new BodyDef(); - chainBodyDef.type = BodyType.StaticBody; - groundBody = world.createBody(chainBodyDef); - groundBody.createFixture(chainShape, 0); - chainShape.dispose(); - createBoxes(); - } - - private void createBoxes() { - CircleShape ballShape = new CircleShape(); - ballShape.setRadius(RADIUS); - - FixtureDef def = new FixtureDef(); - def.restitution = 0.9f; - def.friction = 0.01f; - def.shape = ballShape; - def.density = 1f; - BodyDef boxBodyDef = new BodyDef(); - boxBodyDef.type = BodyType.DynamicBody; - - for (int i = 0; i < BALLSNUM; i++) { - // Create the BodyDef, set a random position above the - // ground and create a new body - boxBodyDef.position.x = -20 + (float) (Math.random() * 40); - boxBodyDef.position.y = 10 + (float) (Math.random() * 15); - Body boxBody = world.createBody(boxBodyDef); - boxBody.createFixture(def); - balls.add(boxBody); - } - ballShape.dispose(); - } - - /** we instantiate this vector and the callback here so we don't irritate the GC */ - Vector3 testPoint = new Vector3(); - - QueryCallback callback = - new QueryCallback() { - @Override - public boolean reportFixture(Fixture fixture) { - if (fixture.getBody() == groundBody) return true; - - if (fixture.testPoint(testPoint.x, testPoint.y)) { - hitBody = fixture.getBody(); - return false; - } else return true; - } - }; - - @Override - public boolean touchDown(int x, int y, int pointer, int newParam) { - // translate the mouse coordinates to world coordinates - testPoint.set(x, y, 0); - camera.unproject(testPoint); - - // ask the world which bodies are within the given - // bounding box around the mouse pointer - hitBody = null; - world.QueryAABB( - callback, testPoint.x - 0.1f, testPoint.y - 0.1f, testPoint.x + 0.1f, testPoint.y + 0.1f); - - // if we hit something we create a new mouse joint - // and attach it to the hit body. - if (hitBody != null) { - MouseJointDef def = new MouseJointDef(); - def.bodyA = groundBody; - def.bodyB = hitBody; - def.collideConnected = true; - def.target.set(testPoint.x, testPoint.y); - def.maxForce = 1000.0f * hitBody.getMass(); - - mouseJoint = (MouseJoint) world.createJoint(def); - hitBody.setAwake(true); - } - - return false; - } - - /** another temporary vector * */ - Vector2 target = new Vector2(); - - @Override - public boolean touchDragged(int x, int y, int pointer) { - camera.unproject(testPoint.set(x, y, 0)); - target.set(testPoint.x, testPoint.y); - // if a mouse joint exists we simply update - // the target of the joint based on the new - // mouse coordinates - if (mouseJoint != null) { - mouseJoint.setTarget(target); - } - return false; - } - - @Override - public boolean touchUp(int x, int y, int pointer, int button) { - // if a mouse joint exists we simply destroy it - if (mouseJoint != null) { - world.destroyJoint(mouseJoint); - mouseJoint = null; - } - return false; - } - - @Override - public void dispose() { - rayHandler.dispose(); - world.dispose(); - } - - /** Type of lights to use: 0 - PointLight 1 - ConeLight 2 - ChainLight 3 - DirectionalLight */ - int lightsType = 0; - - @Override - public boolean keyDown(int keycode) { - switch (keycode) { - case Input.Keys.F1: - if (lightsType != 0) { - initPointLights(); - lightsType = 0; - } - return true; - - case Input.Keys.F2: - if (lightsType != 1) { - initConeLights(); - lightsType = 1; - } - return true; - - case Input.Keys.F3: - if (lightsType != 2) { - initChainLights(); - lightsType = 2; - } - return true; - - case Input.Keys.F4: - if (lightsType != 3) { - initDirectionalLight(); - lightsType = 3; - } - return true; - - case Input.Keys.F5: - for (Light light : lights) - light.setColor(MathUtils.random(), MathUtils.random(), MathUtils.random(), 1f); - return true; - - case Input.Keys.F6: - for (Light light : lights) - light.setDistance(MathUtils.random(LIGHT_DISTANCE * 0.5f, LIGHT_DISTANCE * 2f)); - return true; - - case Input.Keys.F9: - rayHandler.diffuseBlendFunc.reset(); - return true; - - case Input.Keys.F10: - rayHandler.diffuseBlendFunc.set(GL20.GL_DST_COLOR, GL20.GL_SRC_COLOR); - return true; - - case Input.Keys.F11: - rayHandler.diffuseBlendFunc.set(GL20.GL_SRC_COLOR, GL20.GL_DST_COLOR); - return true; - - case Input.Keys.F12: - showText = !showText; - return true; - - default: - return false; - } - } - - @Override - public boolean mouseMoved(int x, int y) { - testPoint.set(x, y, 0); - camera.unproject(testPoint); - return false; - } - - @Override - public void pause() {} - - @Override - public void resize(int arg0, int arg1) {} - - @Override - public void resume() {} -} diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 8173aff33a..1d8d754d5d 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -14,8 +14,6 @@ */ package net.rptools.maptool.client.ui.zone.gdx; -import box2dLight.PointLight; -import box2dLight.RayHandler; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver; @@ -28,7 +26,6 @@ import com.badlogic.gdx.graphics.glutils.FrameBuffer; import com.badlogic.gdx.math.*; import com.badlogic.gdx.math.Rectangle; -import com.badlogic.gdx.physics.box2d.*; import com.badlogic.gdx.scenes.scene2d.utils.TiledDrawable; import com.badlogic.gdx.utils.FloatArray; import com.badlogic.gdx.utils.ScreenUtils; @@ -94,7 +91,6 @@ public class GdxRenderer extends ApplicationAdapter { private final String ATLAS = "net/rptools/maptool/client/maptool.atlas"; private final String FONT_NORMAL = "normalFont.ttf"; private final String FONT_BOLD = "boldFont.ttf"; - private final String FONT_DISTANCE = "distanceFont.ttf"; // from renderToken: private Area visibleScreenArea; @@ -148,14 +144,8 @@ public class GdxRenderer extends ApplicationAdapter { private final Matrix4 tmpMatrix = new Matrix4(); private final Area tmpArea = new Area(); private final TiledDrawable tmpTile = new TiledDrawable(); - private World world; - private ArrayList bodies = new ArrayList(); - private Area vbl; - private Box2DDebugRenderer debugRenderer; - private RayHandler rayHandler; public GdxRenderer() { - Box2D.init(); new MapToolEventBus().getMainEventBus().register(this); } @@ -177,28 +167,6 @@ public void create() { boldFont = null; } - world = new World(new Vector2(0, 0), true); - debugRenderer = new Box2DDebugRenderer(); - /* - var options = new RayHandlerOptions(); - options.setDiffuse(true); - options.setGammaCorrection(true); - rayHandler = new RayHandler(world, options); - */ - RayHandler.setGammaCorrection(true); - RayHandler.useDiffuseLight(true); - rayHandler = new RayHandler(world); - // rayHandler.setAmbientLight(0f, 0f, 0f, 0.5f); - rayHandler.setBlurNum(3); - - // light = - // var red = new PointLight(rayHandler, 128, Color.RED, 600, 50, -50); - //red.setSoft(false); - //var green = new PointLight(rayHandler, 128, Color.GREEN, 600, 50, -350); - //green.setSoft(false); - //var blue = new PointLight(rayHandler, 128, Color.CORAL, 600, 350, -350); - //blue.setSoft(false); - manager = new com.badlogic.gdx.assets.AssetManager(); loadAssets(); @@ -251,8 +219,6 @@ public void dispose() { zoneCache.dispose(); } onePixel.dispose(); - rayHandler.dispose(); - world.dispose(); } @Override @@ -312,79 +278,8 @@ public void render() { ensureTtfFont(); ScreenUtils.clear(Color.BLACK); - // boolean stepped = fixedStep(delta); - - updateVbl(); doRendering(); - - //debugRenderer.render(world, cam.combined); - } - - private void updateVbl() { - var currentVbl = zoneCache.getZone().getMaskTopology(Zone.TopologyType.WALL_VBL); - // if (currentVbl.equals(vbl)) return; - - vbl = currentVbl; - - for (Body body : bodies) { - world.destroyBody(body); - } - bodies.clear(); - - var polys = areaRenderer.triangulate(currentVbl); - for (var poly : polys) { - var vblDef = new BodyDef(); - vblDef.type = BodyDef.BodyType.StaticBody; - var vblBody = world.createBody(vblDef); - - var triangles = poly.indices(); - var polygon = poly.vertices(); - - for (int i = 0; i < triangles.length; i += 3) { - PolygonShape vblShape = new PolygonShape(); - FloatArray triangleOutlines = new FloatArray(); - - float ax = polygon[triangles[i] * 2]; - float ay = polygon[triangles[i] * 2 + 1]; - float bx = polygon[triangles[i + 1] * 2]; - float by = polygon[triangles[i + 1] * 2 + 1]; - float cx = polygon[triangles[i + 2] * 2]; - float cy = polygon[triangles[i + 2] * 2 + 1]; - - triangleOutlines.add(ax); - triangleOutlines.add(ay); - triangleOutlines.add(bx); - triangleOutlines.add(by); - triangleOutlines.add(cx); - triangleOutlines.add(cy); - - vblShape.set(triangleOutlines.toArray()); - vblBody.createFixture(vblShape, 0f); - - vblShape.dispose(); - } - bodies.add(vblBody); - } - } - - private float TIME_STEP = 1 / 60f; - private int VELOCITY_ITERATIONS = 6; - private int POSITION_ITERATIONS = 2; - private float accumulator = 0f; - - private boolean fixedStep(float deltaTime) { - // fixed time step - // max frame time to avoid spiral of death (on slow devices) - float frameTime = Math.min(deltaTime, 0.25f); - accumulator += frameTime; - boolean stepped = false; - while (accumulator >= TIME_STEP) { - world.step(TIME_STEP, VELOCITY_ITERATIONS, POSITION_ITERATIONS); - accumulator -= TIME_STEP; - stepped = true; - } - return stepped; } private void ensureTtfFont() { @@ -396,7 +291,6 @@ private void ensureTtfFont() { if (fontScale == this.boldFontScale && boldFont != null) return; - if (boldFont != null) manager.unload(FONT_DISTANCE); var fontParams = new FreetypeFontLoader.FreeTypeFontLoaderParameter(); fontParams.fontFileName = "net/rptools/maptool/client/fonts/OpenSans-Bold.ttf"; diff --git a/src/main/resources/data/bg.png b/src/main/resources/data/bg.png deleted file mode 100644 index d0630ebc2d80dbf9f1d936c89ef75f019cddd1c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 394660 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
    !_*{qA?DgEr1m_-RlO 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 i9LiJ{XzjM$s-iE>Q|WRPf=n|BIb*2g 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Ƹ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℞fWnWspdSj zUkeAdB0xWGP`U03P8+O~%CN$cL8L^Zn;n4Tc|Euq(4c@8E$-X}#hQiBYSsu+fiy;k zbyirJO3ToZRlU>FQH1Djz$u_JDM$&W6+W%?!ZwC6PNM1}$cb5+Df6acOkoZ(!^<6& zAko~RhqAs12COAoqRX~m#mT2k+Az=PG%`!~X>YgpV*vI3xIA57h8$+g3?bO-`)#D|$Nb^#_US%f6Nk6Af$x6!G;TXm%`ST? zQRa8zjV3dNp;4Ci3np_{rRZ}Q>&fiHl;7u3K9e=TQAg>XDv&>z#EV6TmJK|VPfVcidB_PDFWHbyG35dM~GfOw zM}w0-QQAq`>Brn!JQ^!3cIGBL)X8fLXvnb16v=;5u+nUK6-HS@SRXV@gtAZ1q0 zF~;JIXHoDmYV31CWQE!%001BWNklgzONp(>L1{k;K18W2mWb5e;Rp>3Bj%6-#Wg8+>qfdDPWA)~W4REvl)j>R!N zrAjh{EyB0Jhz50NF%uU8uf&q!`s^T5N$$FoZHTtoGLx22LEW@XIP_`gzuexxH8St3 zE3N{|H>{sQx&^II*|g@JU>Sl4a|F#yW0*JhIA((RU{WtitF#cpV_vV9izYtu+W$*3C5-QED9%8LTlMfD17y$lsZZpvLUiQ z2Z*ic=l2>dQKM>G&6+CBwWD^)GAVFzk)R2qcxsqaRFxo>ACuST>-Fh_=56LIm(F$r z3PiL7Zgb}Q+;?$WgH^7j`Y}D9E{%y(2n~3WW@VOghHFnrTkG%RJ~dbe2$-=0145de z@}@jr$U=8BvqUn7a?%u=`IDh4X|>4Jh-QZ>b4+u27)b9>EtG4xNi-k}WvT+^bYCR* z9GXKlCiZdooGnFf2AkrM)qNR;)~$V(YF1X2Q1|yAy6whv+Dy?30g_IrB zYgEkm`gJ}#H<)UC;>c%jn{Caah>E!KYT_89(it=wX%m_&z~BUtIbgMTk);ZRi+>-k6#n;GRe0sZqt=bcT z$~|o9W+bv;v&t=L0cz$zW@&~MP>z*?HJHpJdXSznRn5H73KPeey|-EDZHvZv^wytp zz7u%5UQ%P+-dW{Fgs(MDcr0siiN)2eU;bH=_Q>tP4VlW6)?|;RJbObx?fr689y*Gs zF@u+_eR<@jDB*CuXd(CsfSf;RgF*68W^zxD>PdP zK|}oF=fD5))n0M%4ONkGRWk^ZJq81 z*dmYH>)%e?dKA%N=_n&8rpijS)b&W3Ck*D`Bt@RvFWaItEx#Y$hmGX6;n2nTl!fSP}j;N;{!%YlSQMNwhyz;g6z&ig)si2uYU1=>6K` z7^CLI`77ijIl3}nQ#7F41}454rWrOV%h2QCUSG&JVE! zjk&|=IEkan&_ddoBQ8`aQ-Qf3S+(Ciat_r5vO;>s9War z#WjwLlr*DtN~p2o*EOqM%y>YWm5CT>v+mH}UZO7UhO?Ji;+Q!M2($>eVYIA4RWzek z^|)qo#gm+xDp%$la~=>YRri}M-htDD?owq0!k37N`(9&=%$!;Qgi#RXNfmN9`nlA+HUpL_SHXrsoVGe`85yg+UDRcU=(J~QfzG=dDI}_CyR9m06`RXBpS)zW@t|17wpgvXwzlh$1RAtI%58+O=8q-onCcc29=| zszr-ty@vrBHD^_GfcJSbGje^o+Z6Y?Th9nDWLD}xFnPkgTyk@z1V70)<{&b02&^>2 zGiqyn+uC)%z1{a)bV;}7@UUP%j(K1%ZpRug#7aqmlAKm2B7i^T=5rN-YmS+!T0xyh z${AI9e~$Z{V;7Uxc;WHI_VP!!TWC(`!`Q$5`paJ&_fJP1>p@pQxZw<@S8Kl44M<>$ zwcu~d(nDZXr7|adC22h??eQpgcef2(?w?%bhSEv$)Y*((!+DuKj85k{IEjL}g^yWs zD{EjkCDN)IRyMT>f?*WzZawD^(qK}V0Xp$DpYy`G(lT!6nnWd?c*jShjkQXiss}x& zK1XaJebyJ?;Wj>PlV*u*y&Ypn6>fR1OHo29<78f7(S^>i&-x{FN+KcR>|tA-pF=%_ zJylr>bn4=C=_3}LXjQCn>SiQ?&U1lUfP)FN6BBg0th9I`z?s9nY5v*L z$}F4Hm_)$`Ffl9V1F%wIb|ezA<=eh?x=+=8+=|Nd5?y^@m*%>{EDDco?JQlBGUlvf z)V`N(Tj?@p7Un=r)ewhpPrYTOZ%-dCuea~vjY6d{8ErGa=B@VI?BR3G!OYBKs^l)m zoobM#)K|uY7`Gh4;@b462wzgYQ{9)Mj4x)YN4A?PlHK$XV1Bk1_7F z>Fx`DZ^p~UxrfZ%b5^0MG}8t&4OQ9aG;-$1aW8rvRpUSlk7zA=Z$_h~a+o(~FKB3t zI#RXjpU$i*C6$f#fi;BNm^b(bS4+K3PI&I+=8I83=7hBfuPQlmj>^hZr5J5Bxy!Zn&dZjIOP;xp zu{bDz?#J5{W$JC~e&zc7bqnZ1_mIh)f!Ox@jXAH}_d51EU~p7e$OyI+Ych4WriKYx zY1pcg8UhPde`3m}<{Xm_4+G$qx)a!*u3vq4{(8UfDBF5J>bv*bH(~YRxgX=6g-cv# z8=2F+Wy0tT*VyOG%36kFGo2vI!Wy??vAEVHTJY1H`iOiR(+vY&i1d!9H~lQHe}v!r zNBA^w|CX1(=}$k*{gZ1?3czH8RCQG0A*1rNAV$AzOHADQg>_%cCukV0W-VhDF}FZT zqioO0F`ZGRQPim@DFMqR?I+Em7Uy#sZV>r{>w~Eo4}$d9WLVf;^bes8pEDMH2(lFbhg}J8_m~vq%P7q>y>o z8nFQ8(5|X?2g<&LzvO`I-P)UlIJU)S7{HO5#K2<+v~j9t3#X;q3G_Jis)f;ZKDrKbOoFB$;;b5 z|LU)P&F{Y(IbFIR$Ce6GwZ=O>aylEhaPgd#Gc{CaNq|Pxl$?vbms(P2|Tbtl0?Umtna;ma2M==a7Yzu45%z0FAMOpb~hQK04X;ONoWNGdo4JtNO6yXREJ;wqmBhezphf z^f;c$$yIhbC+(*q7eSgLT0!ejR;q+-bq6w+(5S5|+zK$wi8)ul&Vbdg6PL9h7exz% zYgv3&?tuccaJ0THtqm4e&8dNsVX@S)nw?yB}UhM2H4A9K7z2$%B&;aCG) zQ^#b{A_FkTY_N{Y1;^dCpe~YCHK2ind1h4#b3TSs(r%;5A$GU^v+Gm;`2L$Q@5M%R z!4kHUla}yNz&>Dg=}sweq9$^=om!s>5$U2Eoo?vv&ua9Z;7#Q$0yFP3&q;2#353o@ zMx}#vb4Iwv1dQw!flQ6PZ+#0>&BI4dOKnZ=va2!u(_jCme-&@v1AEr}et&DxR$CV= zbCBWIR-{r?uGbb}9x^LKNhxGWnN`_W`=($tizaYnifiERi-2V;s+O*AA!6Os8a?{v zo72oVDy40*tE@=lL}A>Eb`WnlZZFS$DymS%d0yBdC<`;97_$OwVa*NUs~S9%TKhu4 zqQyc`PI%4X#)u8Nc=+G^&9C?4H#;eqXnXllH4x&*ed6T>U;OG1|Hc3Kr+@I_fB(O~fBns0 zz&88bN}{x^TTB`kEpAOFTqj3fpOM3#gD{l4p<2~#CH+@$erPWA@|^e9+Vy%-oiK)n zit;BOL0VOv=JWrLs&{F!BuTFHjy}xYZ$xHRb)kUGPB@g$sf$WLT+Y9ig1Ka z;ee1C45nZ8$jpd)-Aq*v7wR{=DblOz?yShT5$PA_~ zi<;A_?-XdE$W-&^8USh<8SOG&8C0}~r2*aE=;dNmMHRs^)2NUV8`kA+cR6QR$NWW1 zKFpc00`HyY5ld4<-n*oOW|8&Pp{Zc;M7dsHZhud;ifYa()$Bo*ny!{F!OVKmEx-TW z@9vNL)9);*>~xztRHR5#NWEB+P6iGO82o z$O45~tjM*bO7*riL$Ip6KkdHet=P6(FEJkX`?2F(LGhUuX*92(T4jWpr#a^g5f>5D z5@fCc1w&0%Jyt#*>)j-`VduQRueA#2jJYl!k`}A`D$L?iq)4{wtpuak4G?Kj9aB-`1ZQzJTsG-CQ_i9s>mwl!e)Ds3^zUg;qU*|zy06; z({6{iN@0uwW@L&jfaVmL^Mv@(qk*dH$5yx^Y#eY>avZy=W!7!q_uEG7*!&ClIN#cn zo-sv-3fPZG#Tk)G8~r+J)_@devm1~}>m=VILZ65$lEGm3cRbQ7|ws+#?AszEbWjct27CvLZ! zDkj$B{(NK9wKTjkDXsIMwtk@zC!Lckp>%dbNscix3&Jm7e;GQ)@Xq_MSZ3Q?;i{3R z539;cZ&}&vL)Gp_T<1|$J{809$clJ*x!u11)sMgYTzsJ3Ob>`>Rix;) zXY4~ajGxS`ayuW9WL7``H8q2@S;1py_t}ORLhIlr3s}B(*pX>YnZ{4?8cz?WSPT(9G z+n_0mPlQG1x7v{V6ujxvbX#C{`hd#JEL`G zQ4A|HJ8rgZU*F%OQUwxm?X+0OI7E#kBQxG#ZYs7X{fsElC_T@bE7hcO)j3f;d1_-R z2&mPDbs$Vi#)fT6tzsjaM&uS$;;y14vI=K$iY$U^ zHugY>kdch3z;JH^sK98p9HI1m9AmtUaXXHE+cvx1{C4b{s6eTD5tmIHBdMh}S!b2F zx+!}6%!(pZ3q++NrA`NIt9QbHO`tJ4P z%d6Y25UYn;()Uxo`?@}TzQ2rJ%_3)3Ku3-}hYit}RmiFpELL?CLPb<0W!NzFv27oY z*Y#L?*OCi?)M4sgrZda7+bTVm_}B(iY!J+v;t}zcd^2B}%+l(aG&Pc{UWzO(6QbNz z308t7ENvpsTBvLAu;x-Rl4}N9)!K)_l|nQgDYi2w08hc;kpbp6h+wQ9ZRn3gy9#I)J#zveX z)iv+uO#6z@P})VQW)=}2K72fmMDP7LF*OJWk` zQf?)Md?rTwhhg}i(ACv*p@xBX5kL9`0G4HItXb`Y=sKGkG%I7heSQ1-cItqrsT$Q% zNMl{vEv~ih_s7_6s46t8SRrOH@31s=C658xIwM#^_0w8!XP!|ji<=)E=K6Ns%dR@kIM`-7s|wpTuQT@MS&l1fH_ruIS>HpK>D%^%M{{&?GHOLZ6xgiPTS%p{>M zqHaSsVTzRRhgDeXJP}!>p{)6_x*z*4evC~F&YQ_g$?dr9XWrk>x3{0_}6;;T}Y&|Dg?1Zd9wT9?Bv$DV({&I{l zgmcZxTKUFNflt5O$A{niw}0_p{g+>U`)}^=_k$_zB62x7H1^~pvLcfv5vvNSDpWT$ zRSOtrwMBE+$zmiW z#Wo{dkXC{)sgx2VD?3nw>>IyU6^s2j^<%8tfY!LfVpiR)QbCtdHAZafC;#pL89)Bv zr}3R4z~2ph2U!;@5{4zu-Rvb9EGIU=SOfAVQcrzspIr_=psa7U^X#4D~7yXbihM7m66}|V@Z?h~w z5>(Y>RqN$DX|DIr{_FmkV5T6#(r0e0F+3#yq&N`hK0Mb7J`&iEp$6@zCZMjDDeO`Z z{Qqbc4a6@Zv$BvWLYZa#FBlE8mJ1riDpkyN{`B*YopUl6#Xx~ZU1Pn975SLSyuqa% z_F0KC8c@ioLagQ6l>y(kkNfMVAOFMu69oueGb6YHq?kVQW@LwQ!%HhgQe_2nvJezg zs98qjI%lo|Y&0h$ChdoHXuSuj9l`B`6N<84v*Nh*tYj(C3~0yN9hE7ZYE@i>Kr*;k z38ugxMPW)UCR9XIo#bE{YTEXo%@4PaLvO5Ha+c_1-C5B&FOwi$MM?ls*MTwAFJEsl z9pcxvM@)qc3Z{vfD13bS_+9F&eAao+OsS|em(obkM8-hR0?>Wd);25wQ&$8AQe+5s z$vd$M^W-nCxov~_!!8>0C*@SAQ?wkkN@O`Hg!KcYDq$RBz>TY)LUBDuP?_w zM#gf=%0gCe^HC*A@B1eMCEbE&W!L82tjRJ+NL61OQgp`a-~QEq_x->A@Bf#d|1sYF z>9E6cDL8XQ?FiLkWOeL=7ssch2n1@m@0IiI@i^QTHUm`hxf0AQ*KrGO;>XAD{_5+` ze~@@ouBelkYM75I4yjKN7T41_DCQ&XUskRXw2MlVq9s!8fygS#b%rall4j#PS7!R~ zN=f8%I)BARdOK{7Br=i{x$k`c`XBQAQTCrGW84nNAB1m36gC2iFy>{0Vv_?b(p0xG zUe}qX_qwEqd`5wu^9E2&L@&d;iu*R!jH-Y%Yz0D96Jg*hbz(toB%=3Q!@-M%y(*2xHeWfs|7gL^zs%_YQyFo1a!Fnno?%gLa3g)RJSZT zO?B}?v-4v7GsUNRFXmN>z2~%%n$8t(|1`!K1Wivq2|a zIkTJEsBf<$bLmKrsh4EC0kW7EeLHJKN_8(n)rMYkZKW8hT|COlNbQ)dN|xO31aA>< z@Dy3O1QAd(Q$}shO5)dm?xo1Sq^JIxM!B4m<)IS^_KmGFcbFMqx zu2ckzs-hojK0dtuz`Do!N-I;zTw15gD)Ee<6y#JJQETR1E0M`cxyVXYNSMJz?bNs- z0g0?%_FFMxhbYv}C~@E2DMbd92AREVlAxwo&NGIX>0o-UVG^=MZL3sJpE5sE zKOTNMRv~01N*M+!D|`0%xSyt#Imd0ddz#jnaZV@|9B#v9^YJn^HLUvry|S=^DvcXc zQFkA1{auWRwazw#XkW~kTF{~>-S}85)olOa$6vv(x#n3QH7F2uH4GC3&0(q(N}*E3#v%n-%`GCIUe<3W!EV)EOI4mUwftIn7uTYYR9+FEiylk>PKfIE{inbD{U3jnYZdqn0{y3VKvhMYW>OWZ zR#nQ93;5qfQrBy(-Ib{JmtG~<=FoHpLQrgPE~;2#m~a}Zq)hflf^Zp1o(0$z;7q+o zd1CwiSHBUdA3y&QilNYCWU};eo;C(dTm~v7fr6Rxi&GRlrZale$7|{ z*)3O|W7wKe#V%%wplYE?6M}?fNuerIWb74>3-T;baZswR3p})>ud~^of|O+I()xYH ztSXp`v`-SQYLHTeHgLMhORYGUsc0m-RG}#SZ>4ktD+??`3aJo>cvCI}OjartNnWLNRWJziga`2O{;{?kAI zG(&xVC2~FP!pK@fxtY&co4rgV0D}%Ql@h=btD{kZU%muL$FoDT==J2-QG8iP)QI*CA zB6l<0bLnYY4I)(ss9UTPwcBqMl3s_lp0qe4o zB_gUF(^S}{MeZrSlGRmpHM0VSABClu_WGCm*k#Ul5#7dzIDss)>Sz@TQVJR?O(B?~ zClChlmf5UOP#A(!aL))cF-dE*KN&^aU*=jaE$tdC12rfEJO(C{|B!KurY;LUF)Ahi~u!QL7Nvf}C4_ z#L5zsYG({0R#lh+Orw~n%kbLNex@$wN3jp3U$EWHKV{yU(sjmL;_-;D1X0apE>_1e zOiJo%jwhbwO&2I?1~GAzRI(^pn8mZ|J>p(fkMsQUBk~T4bE_o^@xw&Z z*4^-azW=D8+WzU|ukSP9Pcm$!YAGnRby8~_+fjLv=uBtPAo~x$`VE(1iLl&TdvG66 zlSBRGOU%_ngsOBaS9Lv(n~ON1(mq;q-}ZgCv5QJpC2Ne$)Q0))ejHl|5JX6ptYMsYG{l8js{qZ~^gwh2&UILyoZUiBW)t2@>lP8%G;_XC!nW=s# z=a5;pt4d}NP}9sHbC|l-F+3NLgCWQEI`;8ckH9*kN>t6DCMs2-7OZzO#u<yzh9XYA|l%1 z!Khm4Fe&C)m31c9H4=he71z#kCR%o7JJmpJZa@X4yr4=N#mH>XOyC^l!3-hTn!ahK|cmnXd?ZT zQ#-N>1v8hDOFGB`m9Tz=h?v?i8*ZDa=e0!-6$oT(TLQ12zAwry4;P}vOajTsYEh*M zh-XFX+q8teURSlOil}ahRFzzxJ7IgWgg|9GJY5F!Dgl~#rDT-3HB~~jV&bA2^7_%? zH+`^6D}<;|D?}T>MG5q+rr+Q|DOyBXPf#MV5Ygg8Bw?hf@VW%`HRyRwYVM^HiY$uC z6+NsJK_*HmD^10>z6KO}?bF{lWWOw_#VRHf85NQE){$XdZ^UoQU%iUaLh#sz$Sjsr z#aiGn1C7j5lQFhYoWUx|%t(P)x26*Wqfb?3_I`gqZnEm39d6x(m@~dYPt$@D^c>RsnhmL)|y}f_F?*uZWIQC(> zN7&o@eJwf9Wy4m2$&m13RVq|vr)(?b{hV{Ain4MH^WobjqVTbA+@@%)tXjz|6ky}= zyCDf?vEIv;z1%UPj9S7nwP4M;hFKLvmBQ%dBBvu?K!_xope z%L?+V`yo@38=03(hGxMR6;2kkyRYW?ZfN-CC|(_Hg8`o0HdU^r~;;HBR_jC zu6pe=AT{T`zf?8<_O`pKT4Mbi6cttpz3~tVfgnRb3JOg3VJa{CEg#=`WFn)ok`b|9 zUp_|OAM@uio_{!s=sH~XF#iHRXMXe3KW&ka?Pbn~IwJ0Nj2wr1-sc#vdYB_?GQl4AnYsS?(C%McujaTnA5%mI8RP_t2zU>Rk#As3oRTC|F zt`UnJOOd!t7g9iGR8mE=KuA>Y4z#O!)yQA;RH%TS5+^F8cr87iP70Lt*t?U>g=A6t zwOIfpawW4Q)sd@;WuBQNjk>fFG=m$e5bLl1_U}HweK{i%0mZRzRGqa< z<(@wSA>@Tap%A+2;#^f#)--+-V^fAQ^Ov80kHT$pMoDWH)ZP4CTB+(Ee0$9EjErn! zre(?*Vx~U!S0BR!N=QMphA7P_qEfEP!kHl)0)<#ILsHcNg+W!mynP8S2u%%J-w6|{ z{rpft6<3CmP-Or`b=|gMCFeS?C?}heYzgUJlIrm6hk_QQuGpUxK(%2v)uZ%v>Fw*= z+=K7$3k#4CmHl`f;{ZJt-ybWh#N@;lFsM^IKmdgaZoqcNx=+q1RabCxc{#?*ZXzi* z3|aNd0xigi`~7tHp*GxM2jxatR0@NlEOApe zkD6v?s!`Ry6DkTI;zUg*jY2Mw+BVMnDYzSU&D2^ZrQq$h4Y!;pO?4$|qC$ptajpo; z$V)`m>mKjr^D~2VNyNJvT8K&(8`5?y@UKxe>M4|kAjx&D@A}BefP~4b*!KOWU(a*7 zH<2U@pWn|r>`$9py-c(nvFMmceS1tjt4N)Zd6vH9+qP3EDs5q*b_%1OG$5i>Iff6{ z5*xd%YKk<~G;oPY{_ORKyrwalAd&8>8mtF+ibh9NpC#u0^4MHbc0#^b7wZ#9LNyZ< zx)@L*^(_X|Tb2UtDRn7U=ibxUcLXpmN<0|n2`B|_s!5oMimgQ-TS=_}A=OW0q zraYnZ`TQ0?W1~QUYjGPN&iU1Bk2OW8166f9c9IckuG_ZFIpt#EF<4cm&~2Cq<~*CH zt-!TG2D{{d3we(VFrFov-IM4V0Z`Y2m(^OnXIZf=bJE(jXK+r*VqU#tyGq_HQ-Z+^ zLbAiN9TAp9XC$mESiDy14f7C`35yqAhz-<12Wtsr0~;DPn8->|y~1iZ&-Z-`43Lt^ z60WEzX~>aTuq1=+VAG-@QAo&TF+j+E+vWW;z%^&>+wcLgh!`4kepRPNxgRFCRHtMj z`{2Mvr)XP!&{FC0RE$$W|)}bCFH`e9SmY zwf|ySl@ZZBb^;ku$15QEXD`!?h(xat%OGA)>-8u80t`F<=^- z4_X|az%)`dv3Dvm0n;&TxU6MJQ>bea7)jwnB1K-Z0S32-{SnO8U^Kp5J zW3SHe)m6|IT0ME2&a#4{gruR9S)0L$nw~zD*ZI3x(ovQCISP zp2oTl?+ZdVnDCs2Cy}ZtY>hL8S{2W(Z~5@7>TgR!Y@Wy4r&zH~6Xwv1ofnLbgNn8W z03hQ$A!@^1SjZHxq}=W8>w9AQa5An8=%tS1H`zc(8t|t}T)%aZf!FVU_4j}G_y6{P z{x>hTje@LYB`SIxFZcJUg2=qz?@gdn6;q!R)!G0T*Op3mr|(auGAJ(u9ZIAd=AFdC zHM(OXGxP~bx(eA>;Ix#48mf{7cNd^gxK>0kH!+1tX;C!L(?SJRr2Vlix$iDtx=OOZ z?Fr&YlrjelU?P>2y6!Z38IJ4fy|p|6kzkanxi+$TxVm}OETBp%uq2gJ3*3bwwr!8| zQROH>RILYUU4hwS|M&m&Pf#hGx@%;;Jpky~UP^MVc?dGoFho?dplO&|CGAU1wEy6pIiH15ggCyO~{~ zJ$H3b!9p-3PBAgDLkDwvV2PTFQOiVKP%DzrXI;m(Y%+%#0iBPxTJ+ZgB5|)ZV_6_m zo-mXlRgz&^Dl$eUA_8W1I589XU_Ms-<}d&HcmMqFszUQFk|KK~K##KbnTZ{8u6We; zT|t1P1q{?mIO~Yq78mpoqbl|xw|#tg**2H?sG!WqbDk1e@7XU{GML+kPO$yn!QZ!%)UT(zuAu~*LfJq6GW)5X!L@p+VT3%gE zs#>9>D8hctT#rnt%IbH6nS$AAK2=mLVEy>x?;%yiZ4(tf-Z3;m6HPuzFi(m@7p5+* z%#%TI9gyX6Kz3H)a*mbig)f5vlCc6rDHInU?xtqGt)Tf1|G~xwR7G2u1zVOx&aqoo;91|bh6Y_SOXZV7ecj;X zdI40S^kYUm?(Zt>piR%9s-iMPy6#(UL0(NI=au5*aHBD|1DxOc8V67-R+lXvIqw>H<(z(9F!_@N!8&LM&wyb?udg z3e^_nEWAC|@$$iKUvK^NUtof&GPp{H!6*Z)jj{RmtJl|087FiNp|YKTO`p!SqTi`h zQag<*(gSk4U`47pHr(Oir#+DOAJ>X{3*txv9E}nry?NN8i&VQxLnG0gMF7 z3})A)Rr{zU;yzThzAb|~dRqa3ne{!n&;Blg$XXLg6>JW}R#YYST`Si4{!pmx`EqZ9;&aJdTG(DcefQ<@ zKKUriiPxrsjtwGHRMbA0fBK7G|Lr3lZ|`4CxNo`-`S7}ZICj-ac+ei11*lb#30?Y{ z+owCfEB|;>C-qzkC`{GtVkY-9>Y51w!-ig`bdtzS=^OL5H^L(mAHVxSVBK9|rJIOo zR+1@3QR?VwZc*5m=*y!g@SeVzRY_)u>9(0Uguz;ZQkJQh3W#kCQIUEACZ8Fm{+%@Q z-g>H9vP7v0P+Scy?&t}0(|?MWja`M!2yk>4*G;Xj+Rf<`-s`jTifcDL4O!gwSIT=O z>^W95lgv^Th^yLV`(*w3(;tAUobO+L_x8&^OtPMD3$pTYuA#g*6LS5JdHoUon5P?W z$B4KO=_*4bt=rG6WQb^cf8>I=bfR*hyAumIpD;5XI+SrYKm1=A8JbW{iPz- z`9OWEAPCwgzeQGp5YW5;#+_DH5Y2Yk9GIc zyX5vh(poCTzs_9j<0@cLKz=R5g zfikJ8gn|a9%_xz^;T5#W@?<0;p={x&iVtW)5+tgUkpY#lZTkjUE3;`Ijj@HP0g{MD z^HzkJ-QT}N19U>3uiwX z=DDP3oWHPSaBL{=??VbIsKyc!iK|BIJ3V=0f;c%qlvBnk#16(rx1P z@$p}OKHolVU-SI^@V9#W>>F=74RK=Bm15wPS#({wuO0k{mw%M%Io7!j0YnQ+RNOt+f?(CcOi?W&K|p+X0dymvR3XH;xj7jKLXHnFb@Kgj z?;MDzBddq6O(0NxIzr?Mbo|+={7+A6HGrLTx-R_$k^%X}?A9BNIZJ5ZUbL+Hh1!Q* zzxmgHF2#JqKD*u4dUJgaX_5fNeMC}pBNY;AX67G1eE0J&pJPqiH0B8rW}p&Ql`vE3 z_5-t^X3o;8bWvWAA0foy0BJO%BB53BXC$$Lnwt2Ph$?BEb$tV8_pfFTyu{AOySYh+ z^V?dIxCTGp$or%WV^wC=HDQz9Uy`WmzO-h>1HbsS4krli`@Y_m+4%Zc+ZZy}bJPQ~ zAx*wa&8&XM;CgN7le`R-FjcKkRF9bR!UEwsx-@xF6}YxR_jCT;Km4m)??3+WU(B>} zDnL+6WL!i~u$i*Y54A_{+C!Q@frB8L9YnjzWoW%6r2g#1qnElBjsLK#NG#t%0m3#s zUDP?7q-^8(_%Y_YYO07Bj_t$S*Acbp*rBL$a9?@P4A4c@LO!czM zX=Vr6Gk8YU<9?18m*c~#$94>%-ArH1K|Rm6IM4UTPrrP*r%qE;E-F(U6^JSw?QSt?Y42_UA;Ar|q=>>etmA_N_xFj0*jfQ-EegEXD%f`(tu zBdRLcA~RbvL>h0*N)`gmWMWIK@=^s5eSeB>M2IUOrYx;%x~^?ZwEEG!|=_hM{?WJi}&tunzBm1o-Nngf07@#5Nl;5rMJ6{Igg0!S;6 zI&pAaR@k?Ji>ae@Ks$x-tRgpUUC4?_b+Jv4<9L02i!~!|Cdc;jo?JO@{sH`a=KIi( z+xV2{Te7T;NPvorZ95;)(bUJ|l#*d%M&KE})yvqFAd8|!feVa1hJqx7$TKrC`a56^ zeXSs~HOk6jCXqnG!aVa_zy8$^vmSr^DTn}*D2SF6sxLTJ706PhQ986sQhV^&E+vxG zd+IkpdO}^TWVYk2OwmkdmENWYsZ`Gi(xgJo&7otFsk

    MRlVrYdd6>R2t1$15Q=e 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%0D;h+N?vF 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 diff --git a/src/main/resources/mappe14.xlsx b/src/main/resources/mappe14.xlsx deleted file mode 100644 index a9796064abb5a8383829006786321f1957c0a658..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18917 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 E0>Dg1H~;_u From e60d926c4ef07747e06c7dd84f06eca12be22720 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 1 Mar 2025 15:06:24 +0100 Subject: [PATCH 134/139] Change image loading --- build.gradle | 1 + .../maptool/client/ui/MapToolFrame.java | 25 ++- .../maptool/client/ui/ToolbarPanel.java | 2 +- .../client/ui/zone/gdx/AreaRenderer.java | 74 +++++--- .../client/ui/zone/gdx/GdxRenderer.java | 82 +++++---- .../maptool/client/ui/zone/gdx/ZoneCache.java | 173 ++++++++++++------ .../gdx/drawing/AbstractDrawingDrawer.java | 4 +- 7 files changed, 224 insertions(+), 137 deletions(-) diff --git a/build.gradle b/build.gradle index 767e151ef3..f9416ed785 100644 --- a/build.gradle +++ b/build.gradle @@ -425,6 +425,7 @@ dependencies { // libgdx implementation 'com.github.thelsing:libgdx-jogl-backend:becdde406e' + implementation 'com.badlogicgames.gdx:gdx-backend-lwjgl:1.13.1' implementation 'com.badlogicgames.gdx:gdx:1.13.1' implementation 'com.badlogicgames.gdx:gdx-platform:1.13.1:natives-desktop' implementation "space.earlygrey:shapedrawer:2.6.0" diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index 97b13bf7fe..c6bd050228 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -478,21 +478,28 @@ public MapToolFrame(JMenuBar menuBar) { private void initGdx() { var config = new JoglAwtApplicationConfiguration(); - config.foregroundFPS = 30; - config.backgroundFPS = 10; - config.title = "maptool"; - config.width = 640; - config.height = 480; - config.samples = 1; + // config.foregroundFPS = 300; + // config.backgroundFPS = 10; + // config.title = "maptool"; + // config.width = 640; + // config.height = 480; + // config.samples = 1; + // var config = new LwjglApplicationConfiguration(); + config.foregroundFPS = 10000; + config.vSyncEnabled = false; + var joglSwingCanvas = new JoglSwingCanvas(GdxRenderer.getInstance(), config); + // var joglSwingCanvas = new LwjglAWTCanvas(GdxRenderer.getInstance(), config); gdxPanel = joglSwingCanvas.getGLCanvas(); gdxPanel.setVisible(false); - gdxPanel.setLayout(new PositionalLayout(5)); + // gdxPanel.setLayout(new PositionalLayout(5)); } - public void addGdx() { - gdxPanel.setVisible(!gdxPanel.isVisible()); + public void switchRenderers() { + var isVisible = gdxPanel.isVisible(); + gdxPanel.setVisible(!isVisible); + // currentRenderer.setVisible(isVisible); } public GLJPanel getGdxPanel() { diff --git a/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java b/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java index 7b62c38234..3f0da7da00 100644 --- a/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java +++ b/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java @@ -544,7 +544,7 @@ private JToggleButton createGdxButton(final Icons icon) { final JToggleButton button = new JToggleButton(); button.addActionListener( e -> { - MapTool.getFrame().addGdx(); + MapTool.getFrame().switchRenderers(); }); button.setIcon(RessourceManager.getBigIcon(icon)); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java index e7a942fc8a..4932958b82 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/AreaRenderer.java @@ -19,13 +19,12 @@ import com.badlogic.gdx.math.*; import com.badlogic.gdx.utils.FloatArray; import com.badlogic.gdx.utils.IntArray; +import com.badlogic.gdx.utils.ShortArray; import java.awt.geom.Area; import java.awt.geom.PathIterator; import java.util.ArrayList; import java.util.List; import java.util.Objects; - -import com.badlogic.gdx.utils.ShortArray; import net.rptools.lib.gdx.Earcut; import net.rptools.lib.gdx.Joiner; import space.earlygrey.shapedrawer.DefaultSideEstimator; @@ -98,7 +97,7 @@ public List triangulate(Area area) { // So we draw polygons that contains others, those others are the holes. var floats = tmpFloat.toArray(); for (int i = 1; i <= segmentIndicies.size; i++) { - var idx = i == segmentIndicies.size ? floats.length/2 : segmentIndicies.get(i); + var idx = i == segmentIndicies.size ? floats.length / 2 : segmentIndicies.get(i); var vertexCount = idx - lastSegmentIndex; var currentPolyVertices = new float[2 * vertexCount]; System.arraycopy(floats, 2 * lastSegmentIndex, currentPolyVertices, 0, 2 * vertexCount); @@ -157,22 +156,25 @@ public void drawArea(PolygonSpriteBatch batch, Area area, boolean rounded, float pathToFloatArray(area.getPathIterator(null)); if (segmentIndicies.size == 1) { - removeStartFromEnd(); //start and end vertices are equal. we don't want this - var polygon = drawPathWithJoin(tmpFloat, thickness, rounded ? JoinType.Round : JoinType.Pointy, false); + removeStartFromEnd(); // start and end vertices are equal. we don't want this + var polygon = + drawPathWithJoin(tmpFloat, thickness, rounded ? JoinType.Round : JoinType.Pointy, false); paintPolygon(batch, polygon); } else { var floats = tmpFloat.toArray(); var lastSegmentIndex = 0; for (int i = 1; i <= segmentIndicies.size; i++) { - var idx = i == segmentIndicies.size ? floats.length/2 : segmentIndicies.get(i); + var idx = i == segmentIndicies.size ? floats.length / 2 : segmentIndicies.get(i); var vertexCount = (idx - lastSegmentIndex); - tmpFloat.ensureCapacity(2*vertexCount); + tmpFloat.ensureCapacity(2 * vertexCount); System.arraycopy(floats, 2 * lastSegmentIndex, tmpFloat.items, 0, 2 * vertexCount); - tmpFloat.setSize(2*vertexCount); + tmpFloat.setSize(2 * vertexCount); removeStartFromEnd(); - var polygon = drawPathWithJoin(tmpFloat, thickness, rounded ? JoinType.Round : JoinType.Pointy, false); - paintPolygon(batch, polygon); + var polygon = + drawPathWithJoin( + tmpFloat, thickness, rounded ? JoinType.Round : JoinType.Pointy, false); + paintPolygon(batch, polygon); lastSegmentIndex = idx; } } @@ -201,7 +203,7 @@ public void paintVertices(PolygonSpriteBatch batch, float[] vertices, short[] ho protected void paintRegion(PolygonSpriteBatch batch, PolygonRegion polygonRegion) { var oldColor = batch.getColor(); batch.setColor(color); - batch.draw(polygonRegion, 0, 0); + batch.draw(polygonRegion, 0, 0); batch.setColor(oldColor); } @@ -230,7 +232,8 @@ public FloatArray pathToFloatArray(PathIterator it) { // System.out.println("Line to: ( " + floatsFromArea[0] + ", " + // floatsFromArea[1] + ")"); - if(tmpFloat.get(tmpFloat.size -2) != floatsFromArea[0] || tmpFloat.get(tmpFloat.size -1) != -floatsFromArea[1]) { + if (tmpFloat.get(tmpFloat.size - 2) != floatsFromArea[0] + || tmpFloat.get(tmpFloat.size - 1) != -floatsFromArea[1]) { tmpFloat.add(floatsFromArea[0], -floatsFromArea[1]); index += 1; } @@ -309,7 +312,6 @@ public enum JoinType { private final Vector2 vert3 = new Vector2(); private final Vector2 vert4 = new Vector2(); - private void pushQuad(FloatArray vertices, ShortArray indices) { var index = vertices.size / 2; vertices.add(vert1.x); @@ -341,8 +343,8 @@ private void pushTriangle(FloatArray vertices, ShortArray indices) { indices.add(index + 2); } - - public TriangledPolygon drawPathWithJoin(FloatArray path, float lineWidth, JoinType joinType, boolean open) { + public TriangledPolygon drawPathWithJoin( + FloatArray path, float lineWidth, JoinType joinType, boolean open) { // this code was adapted from shapedrawer float halfWidth = lineWidth / 2f; boolean pointyJoin = joinType == JoinType.Pointy; @@ -371,7 +373,6 @@ public TriangledPolygon drawPathWithJoin(FloatArray path, float lineWidth, JoinT A.set(path.get(0), path.get(1)); B.set(path.get(2), path.get(3)); - if (joinType == JoinType.Round) { Joiner.prepareFlatEndpoint(B, A, D, E, halfWidth); @@ -478,9 +479,8 @@ public TriangledPolygon drawPathWithJoin(FloatArray path, float lineWidth, JoinT vert2.set(x3, y3); } - if (open) { - //draw last link on path + // draw last link on path Joiner.prepareFlatEndpoint(B, C, D, E, halfWidth); if (joinType == JoinType.Round) { @@ -502,21 +502,21 @@ public TriangledPolygon drawPathWithJoin(FloatArray path, float lineWidth, JoinT pushQuad(vertices, indices); } else { if (pointyJoin) { - //draw last link on path + // draw last link on path A.set(path.get(0), path.get(1)); Joiner.preparePointyJoin(B, C, A, D, E, halfWidth); vert3.set(D); vert4.set(E); pushQuad(vertices, indices); - //draw connection back to first vertex + // draw connection back to first vertex vert1.set(D); vert2.set(E); vert3.set(E0); vert4.set(D0); pushQuad(vertices, indices); } else { - //draw last link on path + // draw last link on path A.set(B); B.set(C); C.set(path.get(0), path.get(1)); @@ -524,9 +524,9 @@ public TriangledPolygon drawPathWithJoin(FloatArray path, float lineWidth, JoinT vert3.set(D); vert4.set(E); pushQuad(vertices, indices); - drawSmoothJoinFill(vertices, indices,A, B, C, D, E, halfWidth, joinType); + drawSmoothJoinFill(vertices, indices, A, B, C, D, E, halfWidth, joinType); - //draw connection back to first vertex + // draw connection back to first vertex Joiner.prepareSmoothJoin(A, B, C, D, E, halfWidth, true); vert3.set(E); vert4.set(D); @@ -535,13 +535,22 @@ public TriangledPolygon drawPathWithJoin(FloatArray path, float lineWidth, JoinT vert1.set(D); vert2.set(E); pushQuad(vertices, indices); - drawSmoothJoinFill(vertices, indices,B, C, A, D, E, halfWidth, joinType); + drawSmoothJoinFill(vertices, indices, B, C, A, D, E, halfWidth, joinType); } } return new TriangledPolygon(vertices.toArray(), indices.toArray()); } - private void drawSmoothJoinFill(FloatArray vertices, ShortArray indices, Vector2 A, Vector2 B, Vector2 C, Vector2 D, Vector2 E, float halfLineWidth, JoinType joinType) { + private void drawSmoothJoinFill( + FloatArray vertices, + ShortArray indices, + Vector2 A, + Vector2 B, + Vector2 C, + Vector2 D, + Vector2 E, + float halfLineWidth, + JoinType joinType) { boolean bendsLeft = Joiner.prepareSmoothJoin(A, B, C, D, E, halfLineWidth, false); vert1.set(bendsLeft ? E : D); vert2.set(bendsLeft ? D : E); @@ -556,7 +565,7 @@ private void drawSmoothJoinFill(FloatArray vertices, ShortArray indices, Vector2 pushTriangle(vertices, indices); if (joinType == JoinType.Round) { - if(bendsLeft) { + if (bendsLeft) { AB.set(B).sub(A); BC.set(C).sub(B); vec1.add(-B.x, -B.y); @@ -575,14 +584,22 @@ private void drawSmoothJoinFill(FloatArray vertices, ShortArray indices, Vector2 var angleDiff = MathUtils.PI2 - ShapeUtils.angleRad(AB, BC); vertices.add(vert1.x); vertices.add(vert1.y); - addArc(vertices,indices, B.x, B.y, halfLineWidth, angle, angle + angleDiff, true); + addArc(vertices, indices, B.x, B.y, halfLineWidth, angle, angle + angleDiff, true); vertices.add(vert3.x); vertices.add(vert3.y); } } } - private void addArc(FloatArray vertices, ShortArray indices, float centreX, float centreY, float radius, float startAngle, float endAngle, boolean clockwise) { + private void addArc( + FloatArray vertices, + ShortArray indices, + float centreX, + float centreY, + float radius, + float startAngle, + float endAngle, + boolean clockwise) { var oldSize = vertices.size; var oldVertexCount = oldSize / 2; @@ -608,7 +625,6 @@ private void addArc(FloatArray vertices, ShortArray indices, float centreX, floa if (clockwise) { dAnglePerSide *= -1; angle += 2 * dAnglePerSide; - } for (var i = 1; i <= sides; i++) { diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 1d8d754d5d..cd8010e4d5 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -261,6 +261,7 @@ private void updateCam() { @Override public void render() { + // System.out.println("FPS: " + Gdx.graphics.getFramesPerSecond()); var delta = Gdx.graphics.getDeltaTime(); stateTime += delta; manager.finishLoading(); @@ -278,8 +279,11 @@ public void render() { ensureTtfFont(); ScreenUtils.clear(Color.BLACK); - - doRendering(); + try { + doRendering(); + } catch(Exception ex) { + log.warn(ex); + } } private void ensureTtfFont() { @@ -291,7 +295,6 @@ private void ensureTtfFont() { if (fontScale == this.boldFontScale && boldFont != null) return; - var fontParams = new FreetypeFontLoader.FreeTypeFontLoaderParameter(); fontParams.fontFileName = "net/rptools/maptool/client/fonts/OpenSans-Bold.ttf"; fontParams.fontParameters.size = (int) (12 * fontScale); @@ -333,11 +336,6 @@ private void doRendering() { renderZone(playerView); - // this is here because otherwise drawing the fps counter create strange boxes becase of the - // rayhandler. - batch.end(); - batch.begin(); - setProjectionMatrix(hudCam.combined); if (zoneCache.getZoneRenderer().isLoading()) @@ -354,11 +352,12 @@ else if (MapTool.getCampaign().isBeingSerialized()) } if (AppState.isShowAsPlayer()) { hudTextRenderer.drawBoxedString( - I18N.getText("zone.player_view"), width / 2, height - noteVPos); + I18N.getText("zone.player_view"), width / 2f, height - noteVPos); } - hudTextRenderer.drawString(String.valueOf(Gdx.graphics.getFramesPerSecond()), 10, 10); - hudTextRenderer.drawString(String.valueOf(batch.renderCalls), width - 10, 10); + hudTextRenderer.drawString( + "FPS: " + Gdx.graphics.getFramesPerSecond(), width - 30, height - 32); + hudTextRenderer.drawString("Draws: " + batch.renderCalls, width- 30, height - 16); batch.end(); collectTimerResults(); @@ -461,27 +460,30 @@ private void renderZone(PlayerView view) { timer.stop("auras"); } renderPlayerDarkness(view); - /* - * The following sections used to handle rendering of the Hidden (i.e. "GM") layer followed by - * the Token layer. The problem was that we want all drawables to appear below all tokens, and - * the old configuration performed the rendering in the following order: - * - *

      - *
    1. Render Hidden-layer tokens - *
    2. Render Hidden-layer drawables - *
    3. Render Token-layer drawables - *
    4. Render Token-layer tokens - *
    - * - * That's fine for players, but clearly wrong if the view is for the GM. We now use: - * - *
      - *
    1. Render Token-layer drawables // Player-drawn images shouldn't obscure GM's images? - *
    2. Render Hidden-layer drawables // GM could always use "View As Player" if needed? - *
    3. Render Hidden-layer tokens - *
    4. Render Token-layer tokens - *
    - */ + // * + // * The following sections used to handle rendering of the Hidden (i.e. "GM") layer + // followed by + // * the Token layer. The problem was that we want all drawables to appear below all tokens, + // and + // * the old configuration performed the rendering in the following order: + // * + // *
      + // *
    1. Render Hidden-layer tokens + // *
    2. Render Hidden-layer drawables + // *
    3. Render Token-layer drawables + // *
    4. Render Token-layer tokens + // *
    + // * + // * That's fine for players, but clearly wrong if the view is for the GM. We now use: + // * + // *
      + // *
    1. Render Token-layer drawables // Player-drawn images shouldn't obscure GM's + // images? + // *
    2. Render Hidden-layer drawables // GM could always use "View As Player" if needed? + // *
    3. Render Hidden-layer tokens + // *
    4. Render Token-layer tokens + // *
    + // * if (zoneCache.getZoneRenderer().shouldRenderLayer(Zone.Layer.TOKEN, view)) { List drawables = zoneCache.getZone().getDrawnElements(Zone.Layer.TOKEN); // if (!drawables.isEmpty()) { @@ -515,11 +517,13 @@ private void renderZone(PlayerView view) { timer.stop("unowned movement"); } - /* - * FJE It's probably not appropriate for labels to be above everything, including tokens. Above - * drawables, yes. Above tokens, no. (Although in that case labels could be completely obscured. - * Hm.) - */ + // * + // * FJE It's probably not appropriate for labels to be above everything, including tokens. + // Above + // * drawables, yes. Above tokens, no. (Although in that case labels could be completely + // obscured. + // * Hm.) + // * // Drawing labels is slooooow. :( // Perhaps we should draw the fog first and use hard fog to determine whether labels need to be // drawn? @@ -535,8 +539,8 @@ private void renderZone(PlayerView view) { } else { // rayHandler.setAmbientLight(1.0f); } - //rayHandler.setCombinedMatrix(cam); - //rayHandler.updateAndRender(); + // rayHandler.setCombinedMatrix(cam); + // rayHandler.updateAndRender(); // } // (This method has it's own 'timer' calls) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java index da905f9cbe..914be5f176 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java @@ -22,21 +22,18 @@ import com.badlogic.gdx.utils.Disposable; import com.badlogic.gdx.utils.GdxRuntimeException; import com.badlogic.gdx.video.VideoPlayer; -import com.badlogic.gdx.video.VideoPlayerCreator; +import java.awt.*; import java.awt.image.BufferedImage; -import java.io.ByteArrayInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.annotation.Nonnull; import net.rptools.lib.MD5Key; -import net.rptools.lib.gdx.GifDecoder; import net.rptools.lib.image.ImageUtil; import net.rptools.maptool.client.MapTool; import net.rptools.maptool.client.ui.zone.ZoneView; import net.rptools.maptool.client.ui.zone.renderer.ZoneRenderer; -import net.rptools.maptool.model.AssetAvailableListener; import net.rptools.maptool.model.AssetManager; import net.rptools.maptool.model.IsometricGrid; import net.rptools.maptool.model.Zone; @@ -47,7 +44,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -public class ZoneCache implements Disposable, AssetAvailableListener { +public class ZoneCache implements Disposable { public record GdxPaint(Color color, TextureRegion textureRegion) {} @@ -82,19 +79,22 @@ public ZoneView getZoneView() { return zoneRenderer.getZoneView(); } + private Sprite TRANSFERING_SPRITE; + private Sprite BROKEN_SPRITE; + public void setSharedAtlas(TextureAtlas atlas) { sharedAtlas = atlas; + if(atlas == null) + return; + TRANSFERING_SPRITE = new Sprite(sharedAtlas.findRegion("unknown")); + BROKEN_SPRITE = new Sprite(sharedAtlas.findRegion("broken")); } public ZoneCache(@Nonnull Zone zone, @Nonnull TextureAtlas sharedAtlas) { this.zone = zone; - this.sharedAtlas = sharedAtlas; + setSharedAtlas(sharedAtlas); zoneRenderer = MapTool.getFrame().getZoneRenderer(zone); - for (var assetId : zone.getAllAssetIds()) { - AssetManager.getAssetAsynchronously(assetId, this); - } - Pixmap pixmap = new Pixmap(1, 1, Pixmap.Format.RGBA8888); pixmap.setColor(Color.WHITE); pixmap.drawPixel(0, 0); @@ -103,71 +103,111 @@ public ZoneCache(@Nonnull Zone zone, @Nonnull TextureAtlas sharedAtlas) { whitePixelRegion = new TextureRegion(whitePixel, 0, 0, 1, 1); } - @Override - public void assetAvailable(MD5Key key) { - var asset = AssetManager.getAsset(key); - if (asset.getExtension().equals("gif")) { + /* + @Override + public void assetAvailable(MD5Key key) { + var asset = AssetManager.getAsset(key); + if (asset.getExtension().equals("gif")) { + + Gdx.app.postRunnable( + () -> { + // var ass = AssetManager.getAsset(key); + var is = new ByteArrayInputStream(asset.getData()); + var animation = GifDecoder.loadGIFAnimation(Animation.PlayMode.LOOP, is); + animationMap.put(key, animation); + }); + return; + } + if (asset.getExtension().equals("data")) { + var videoPlayer = VideoPlayerCreator.createVideoPlayer(); + videoPlayerMap.put(key, videoPlayer); + return; + } + BufferedImage img; + byte[] bytes; + try { + img = + ImageUtil.createCompatibleImage( + ImageUtil.bytesToImage(asset.getData(), asset.getName()), null); + bytes = ImageUtil.imageToBytes(img, "png"); + } catch (IOException e) { + throw new RuntimeException(e); + } + // without ImageUtil there seem to be some issues with transparency for some images. + // (black background instead of transparent) + var pix = new Pixmap(bytes, 0, bytes.length); + try { + var name = key.toString(); + synchronized (packer) { + if (packer.getRect(name) == null) packer.pack(name, pix); + + pix.dispose(); + } + } catch (GdxRuntimeException x) { + // this means that the pixmap is too big for the atlas. + Gdx.app.postRunnable( + () -> { + synchronized (bigSprites) { + if (!bigSprites.containsKey(key)) bigSprites.put(key, new Sprite(new Texture(pix))); + } + pix.dispose(); + }); + } Gdx.app.postRunnable( () -> { - // var ass = AssetManager.getAsset(key); - var is = new ByteArrayInputStream(asset.getData()); - var animation = GifDecoder.loadGIFAnimation(Animation.PlayMode.LOOP, is); - animationMap.put(key, animation); + packer.updateTextureAtlas( + tokenAtlas, Texture.TextureFilter.Linear, Texture.TextureFilter.Linear, false); }); - return; } - if (asset.getExtension().equals("data")) { - var videoPlayer = VideoPlayerCreator.createVideoPlayer(); - videoPlayerMap.put(key, videoPlayer); - return; - } - BufferedImage img; + */ + + private void imageToSprite(MD5Key key, BufferedImage image) { byte[] bytes; + try { - img = - ImageUtil.createCompatibleImage( - ImageUtil.bytesToImage(asset.getData(), asset.getName()), null); - bytes = ImageUtil.imageToBytes(img, "png"); + bytes = ImageUtil.imageToBytes(image, "png"); } catch (IOException e) { throw new RuntimeException(e); } - // without ImageUtil there seem to be some issues with transparency for some images. - // (black background instead of transparent) - var pix = new Pixmap(bytes, 0, bytes.length); + var name = key.toString(); + var pixmap = new Pixmap(bytes, 0, bytes.length); try { - var name = key.toString(); synchronized (packer) { - if (packer.getRect(name) == null) packer.pack(name, pix); - - pix.dispose(); + if (packer.getRect(name) == null) { + packer.pack(name, pixmap); + } + pixmap.dispose(); } - } catch (GdxRuntimeException x) { + } catch (Exception x) { // this means that the pixmap is too big for the atlas. - Gdx.app.postRunnable( - () -> { - synchronized (bigSprites) { - if (!bigSprites.containsKey(key)) bigSprites.put(key, new Sprite(new Texture(pix))); - } - pix.dispose(); - }); + + synchronized (bigSprites) { + if (!bigSprites.containsKey(key)) { + bigSprites.put(key, new Sprite(new Texture(pixmap))); + } + } + pixmap.dispose(); } - Gdx.app.postRunnable( - () -> { - packer.updateTextureAtlas( - tokenAtlas, Texture.TextureFilter.Linear, Texture.TextureFilter.Linear, false); - }); + packer.updateTextureAtlas( + tokenAtlas, Texture.TextureFilter.Linear, Texture.TextureFilter.Linear, false); } public TextureRegion fetch(String regionName) { var region = fetchedRegions.get(regionName); - if (region != null) return region; + if (region != null) { + return region; + } region = tokenAtlas.findRegion(regionName); - if (region == null) region = sharedAtlas.findRegion(regionName); + if (region == null) { + region = sharedAtlas.findRegion(regionName); + } - fetchedRegions.put(regionName, region); + if (region != null) { + fetchedRegions.put(regionName, region); + } return region; } @@ -181,13 +221,32 @@ public Sprite getSprite(String name) { var region = fetch(name); - if (!"unknown".equals(name) && region == null) { - AssetManager.getAssetAsynchronously(new MD5Key(name), this); - return getSprite("unknown"); + if (region == null) { + var key = new MD5Key(name); + var image = ImageManager.getImage(key); + if (image == ImageManager.TRANSFERING_IMAGE) { + return TRANSFERING_SPRITE; + } + + if (image == ImageManager.BROKEN_IMAGE) { + return BROKEN_SPRITE; + } + + imageToSprite(key, image); + + region = fetch(name); } - sprite = new Sprite(region); - sprite.setSize(region.getRegionWidth(), region.getRegionHeight()); + if(region == null) { + sprite = bigSprites.get(name); + } else { + sprite = new Sprite(region); + sprite.setSize(region.getRegionWidth(), region.getRegionHeight()); + } + + if(sprite == null) { + return BROKEN_SPRITE; + } fetchedSprites.put(name, sprite); return sprite; diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractDrawingDrawer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractDrawingDrawer.java index 0dbf55ec48..9d3aa29689 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractDrawingDrawer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/drawing/AbstractDrawingDrawer.java @@ -56,8 +56,8 @@ protected void applyColor(DrawablePaint paint, boolean applyAlpha) { } areaRenderer.setColor(c2); - //areaRenderer.setColor(gdxPaint.color()); - if(gdxPaint.textureRegion() != null) { + // areaRenderer.setColor(gdxPaint.color()); + if (gdxPaint.textureRegion() != null) { areaRenderer.setTextureRegion(gdxPaint.textureRegion()); } } From 219889763463303e4dd301ef42bc3eada9be85fd Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 1 Mar 2025 15:07:12 +0100 Subject: [PATCH 135/139] spotless --- .../rptools/maptool/client/ui/zone/gdx/GdxRenderer.java | 6 +++--- .../net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java | 8 +++----- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index cd8010e4d5..2b212e8ae8 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -281,9 +281,9 @@ public void render() { ScreenUtils.clear(Color.BLACK); try { doRendering(); - } catch(Exception ex) { + } catch (Exception ex) { log.warn(ex); - } + } } private void ensureTtfFont() { @@ -357,7 +357,7 @@ else if (MapTool.getCampaign().isBeingSerialized()) hudTextRenderer.drawString( "FPS: " + Gdx.graphics.getFramesPerSecond(), width - 30, height - 32); - hudTextRenderer.drawString("Draws: " + batch.renderCalls, width- 30, height - 16); + hudTextRenderer.drawString("Draws: " + batch.renderCalls, width - 30, height - 16); batch.end(); collectTimerResults(); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java index 914be5f176..a3d541a09c 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/ZoneCache.java @@ -20,7 +20,6 @@ import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.*; import com.badlogic.gdx.utils.Disposable; -import com.badlogic.gdx.utils.GdxRuntimeException; import com.badlogic.gdx.video.VideoPlayer; import java.awt.*; import java.awt.image.BufferedImage; @@ -84,8 +83,7 @@ public ZoneView getZoneView() { public void setSharedAtlas(TextureAtlas atlas) { sharedAtlas = atlas; - if(atlas == null) - return; + if (atlas == null) return; TRANSFERING_SPRITE = new Sprite(sharedAtlas.findRegion("unknown")); BROKEN_SPRITE = new Sprite(sharedAtlas.findRegion("broken")); } @@ -237,14 +235,14 @@ public Sprite getSprite(String name) { region = fetch(name); } - if(region == null) { + if (region == null) { sprite = bigSprites.get(name); } else { sprite = new Sprite(region); sprite.setSize(region.getRegionWidth(), region.getRegionHeight()); } - if(sprite == null) { + if (sprite == null) { return BROKEN_SPRITE; } From d5c7fa12bb05b47e0299e07d3f3845d3b744c92f Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sun, 2 Mar 2025 15:09:27 +0100 Subject: [PATCH 136/139] fix hexgrid --- .../client/ui/zone/gdx/GdxRenderer.java | 5 +- .../client/ui/zone/gdx/GridRenderer.java | 63 ++++--------------- .../client/ui/zone/renderer/ZoneRenderer.java | 8 +-- .../net/rptools/maptool/model/HexGrid.java | 8 ++- 4 files changed, 23 insertions(+), 61 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 2b212e8ae8..8b2ed84467 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -355,9 +355,8 @@ else if (MapTool.getCampaign().isBeingSerialized()) I18N.getText("zone.player_view"), width / 2f, height - noteVPos); } - hudTextRenderer.drawString( - "FPS: " + Gdx.graphics.getFramesPerSecond(), width - 30, height - 32); - hudTextRenderer.drawString("Draws: " + batch.renderCalls, width - 30, height - 16); + hudTextRenderer.drawString("FPS: " + Gdx.graphics.getFramesPerSecond(), width - 30, 30); + hudTextRenderer.drawString("Draws: " + batch.renderCalls, width - 30, 16); batch.end(); collectTimerResults(); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GridRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GridRenderer.java index 99e4328c1b..cb43525a32 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GridRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GridRenderer.java @@ -17,11 +17,13 @@ import com.badlogic.gdx.graphics.Camera; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.Batch; +import com.badlogic.gdx.math.Matrix4; import com.badlogic.gdx.utils.Pools; import java.awt.*; import net.rptools.maptool.client.AppState; import net.rptools.maptool.client.ui.zone.renderer.ZoneRendererConstants; import net.rptools.maptool.model.*; +import space.earlygrey.shapedrawer.JoinType; import space.earlygrey.shapedrawer.ShapeDrawer; public class GridRenderer { @@ -62,10 +64,9 @@ public void render() { } private void renderGrid(HexGrid grid) { - /* var renderer = zoneCache.getZoneRenderer(); var scale = renderer.getScale(); - var scaledMinorRadius = grid.getVRadius() * scale; + var scaledMinorRadius = grid.getMinorRadius() * scale; var scaledEdgeLength = grid.getEdgeLength() * scale; var scaledEdgeProjection = grid.getEdgeProjection() * scale; var scaledHex = grid.createHalfShape(scaledMinorRadius, scaledEdgeProjection, scaledEdgeLength); @@ -74,62 +75,25 @@ private void renderGrid(HexGrid grid) { int offV = grid.getOffV(renderer); int count = 0; - Object oldAntiAlias = SwingUtil.useAntiAliasing(g); - g.setColor(new java.awt.Color(getZone().getGridColor())); - g.setStroke(new BasicStroke(AppState.getGridSize())); - - for (double v = offV % (scaledMinorRadius * 2) - (scaledMinorRadius * 2); - v < getRendererSizeV(renderer); - v += scaledMinorRadius) { - double offsetU = (int) ((count & 1) == 0 ? 0 : -(scaledEdgeProjection + scaledEdgeLength)); - count++; - - double start = - offU % (2 * scaledEdgeLength + 2 * scaledEdgeProjection) - - (2 * scaledEdgeLength + 2 * scaledEdgeProjection); - double end = getRendererSizeU(renderer) + 2 * scaledEdgeLength + 2 * scaledEdgeProjection; - double incr = 2 * scaledEdgeLength + 2 * scaledEdgeProjection; - for (double u = start; u < end; u += incr) { - setGridDrawTranslation(g, u + offsetU, v); - g.draw(scaledHex); - setGridDrawTranslation(g, -(u + offsetU), -v); - } - } - g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, oldAntiAlias); - var tmpColor = Pools.obtain(Color.class); Color.argb8888ToColor(tmpColor, zoneCache.getZone().getGridColor()); - drawer.setColor(tmpColor); - var path = grid.createShape(zoneCache.getZoneRenderer().getScale()); - var floats = areaRenderer.pathToFloatArray(path.getPathIterator(null)); - - int offU = grid.getOffU(zoneCache.getZoneRenderer()); - int offV = grid.getOffV(zoneCache.getZoneRenderer()); - - int count = 0; - + var floats = areaRenderer.pathToFloatArray(scaledHex.getPathIterator(null)); var lineWidth = AppState.getGridSize(); - for (double v = offV % (grid.getScaledMinorRadius() * 2) - (grid.getScaledMinorRadius() * 2); - v < grid.getRendererSizeV(zoneCache.getZoneRenderer()); - v += grid.getScaledMinorRadius()) { - double offsetU = - (int) - ((count & 1) == 0 - ? 0 - : -(grid.getScaledEdgeProjection() + grid.getScaledEdgeLength())); + for (double v = offV % (scaledMinorRadius * 2) - (scaledMinorRadius * 2); + v < grid.getRendererSizeV(renderer); + v += scaledMinorRadius) { + double offsetU = (int) ((count & 1) == 0 ? 0 : -(scaledEdgeProjection + scaledEdgeLength)); count++; double start = - offU % (2 * grid.getScaledEdgeLength() + 2 * grid.getScaledEdgeProjection()) - - (2 * grid.getScaledEdgeLength() + 2 * grid.getScaledEdgeProjection()); + offU % (2 * scaledEdgeLength + 2 * scaledEdgeProjection) + - (2 * scaledEdgeLength + 2 * scaledEdgeProjection); double end = - grid.getRendererSizeU(zoneCache.getZoneRenderer()) - + 2 * grid.getScaledEdgeLength() - + 2 * grid.getScaledEdgeProjection(); - double increment = 2 * grid.getScaledEdgeLength() + 2 * grid.getScaledEdgeProjection(); - for (double u = start; u < end; u += increment) { + grid.getRendererSizeU(renderer) + 2 * scaledEdgeLength + 2 * scaledEdgeProjection; + double incr = 2 * scaledEdgeLength + 2 * scaledEdgeProjection; + for (double u = start; u < end; u += incr) { float transX; float transY; if (grid instanceof HexGridVertical) { @@ -153,7 +117,6 @@ private void renderGrid(HexGrid grid) { } } Pools.free(tmpColor); - */ } private void renderGrid(IsometricGrid grid) { diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/renderer/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/renderer/ZoneRenderer.java index cdf7dcf0b1..d3d991aeae 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/renderer/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/renderer/ZoneRenderer.java @@ -784,13 +784,9 @@ public void paintComponent(Graphics g) { PlayerView pl = getPlayerView(); timer.stop("paintComponent:createView"); - // we still need to render the different overlays - var g2dForRendering = bufferG2d; - if (skipDrawing) { - g2dForRendering = g2d; + if (!skipDrawing) { + renderZone(bufferG2d, pl); } - renderZone(g2dForRendering, pl); - int noteVPos = 20; bufferG2d.setFont(AppStyle.labelFont); if (MapTool.getFrame().areFullScreenToolsShown()) { diff --git a/src/main/java/net/rptools/maptool/model/HexGrid.java b/src/main/java/net/rptools/maptool/model/HexGrid.java index fe6adeb4f2..43ce6ea56b 100644 --- a/src/main/java/net/rptools/maptool/model/HexGrid.java +++ b/src/main/java/net/rptools/maptool/model/HexGrid.java @@ -92,6 +92,10 @@ public Point2D.Double getCenterOffset() { /** Distance from centerpoint to middle of a face. Set to gridSize/2. */ private transient double minorRadius; + public double getMinorRadius() { + return minorRadius; + } + /** * The projection of a sloped edge onto the diameter. * @@ -334,9 +338,9 @@ public int getTokenSpace() { protected abstract void setGridDrawTranslation(Graphics2D g, double u, double v); - protected abstract double getRendererSizeU(ZoneRenderer renderer); + public abstract double getRendererSizeU(ZoneRenderer renderer); - protected abstract double getRendererSizeV(ZoneRenderer renderer); + public abstract double getRendererSizeV(ZoneRenderer renderer); public abstract int getOffV(ZoneRenderer renderer); From 29200efe87a168727d9c259cd909891d3d2c4b30 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sun, 2 Mar 2025 15:22:07 +0100 Subject: [PATCH 137/139] add maven repos for jogl and sonatype --- buildSrc/shared.gradle | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/buildSrc/shared.gradle b/buildSrc/shared.gradle index 5b08ffd80f..b3dad22bdb 100644 --- a/buildSrc/shared.gradle +++ b/buildSrc/shared.gradle @@ -4,8 +4,10 @@ repositories { mavenCentral() maven { url = 'https://maptool.craigs-stuff.net/repo/' } maven { url = 'https://jitpack.io' } - maven { url "https://www.jetbrains.com/intellij-repository/releases" } - maven { url "https://cache-redirector.jetbrains.com/intellij-dependencies" } + maven { url = "https://www.jetbrains.com/intellij-repository/releases" } + maven { url = "https://cache-redirector.jetbrains.com/intellij-dependencies" } + maven { url = "https://oss.sonatype.org/content/repositories/snapshots" } + maven { url = "https://jogamp.org/deployment/maven" } } apply from: rootProject.file('buildSrc/java-version.gradle') From 9b20f3c81b049ef40575a040003c54777e649dbd Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 7 Apr 2025 18:58:34 +0200 Subject: [PATCH 138/139] change font to NotoSansSymbols --- .../client/ui/zone/gdx/GdxRenderer.java | 15 +- .../NotoSansSymbols/NotoSansSymbols-Black.ttf | Bin 0 -> 184684 bytes .../NotoSansSymbols/NotoSansSymbols-Bold.ttf | Bin 0 -> 184868 bytes .../NotoSansSymbols-ExtraBold.ttf | Bin 0 -> 184828 bytes .../NotoSansSymbols-ExtraLight.ttf | Bin 0 -> 185508 bytes .../NotoSansSymbols/NotoSansSymbols-Light.ttf | Bin 0 -> 185468 bytes .../NotoSansSymbols-Medium.ttf | Bin 0 -> 185096 bytes .../NotoSansSymbols-Regular.ttf | Bin 0 -> 185152 bytes .../NotoSansSymbols-SemiBold.ttf | Bin 0 -> 185012 bytes .../NotoSansSymbols/NotoSansSymbols-Thin.ttf | Bin 0 -> 185508 bytes .../maptool/client/fonts/OpenSans-Bold.ttf | Bin 224592 -> 0 bytes .../client/fonts/OpenSans-BoldItalic.ttf | Bin 213292 -> 0 bytes .../client/fonts/OpenSans-ExtraBold.ttf | Bin 222584 -> 0 bytes .../client/fonts/OpenSans-ExtraBoldItalic.ttf | Bin 213420 -> 0 bytes .../maptool/client/fonts/OpenSans-Italic.ttf | Bin 212896 -> 0 bytes .../maptool/client/fonts/OpenSans-Light.ttf | Bin 222412 -> 0 bytes .../client/fonts/OpenSans-LightItalic.ttf | Bin 213128 -> 0 bytes .../maptool/client/fonts/OpenSans-Regular.ttf | Bin 217360 -> 0 bytes .../client/fonts/OpenSans-Semibold.ttf | Bin 221328 -> 0 bytes .../client/fonts/OpenSans-SemiboldItalic.ttf | Bin 212820 -> 0 bytes .../client/fonts/OpenSans_Apache License.txt | 201 ------------------ 21 files changed, 9 insertions(+), 207 deletions(-) create mode 100644 src/main/resources/net/rptools/maptool/client/fonts/NotoSansSymbols/NotoSansSymbols-Black.ttf create mode 100644 src/main/resources/net/rptools/maptool/client/fonts/NotoSansSymbols/NotoSansSymbols-Bold.ttf create mode 100644 src/main/resources/net/rptools/maptool/client/fonts/NotoSansSymbols/NotoSansSymbols-ExtraBold.ttf create mode 100644 src/main/resources/net/rptools/maptool/client/fonts/NotoSansSymbols/NotoSansSymbols-ExtraLight.ttf create mode 100644 src/main/resources/net/rptools/maptool/client/fonts/NotoSansSymbols/NotoSansSymbols-Light.ttf create mode 100644 src/main/resources/net/rptools/maptool/client/fonts/NotoSansSymbols/NotoSansSymbols-Medium.ttf create mode 100644 src/main/resources/net/rptools/maptool/client/fonts/NotoSansSymbols/NotoSansSymbols-Regular.ttf create mode 100644 src/main/resources/net/rptools/maptool/client/fonts/NotoSansSymbols/NotoSansSymbols-SemiBold.ttf create mode 100644 src/main/resources/net/rptools/maptool/client/fonts/NotoSansSymbols/NotoSansSymbols-Thin.ttf delete mode 100644 src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Bold.ttf delete mode 100644 src/main/resources/net/rptools/maptool/client/fonts/OpenSans-BoldItalic.ttf delete mode 100644 src/main/resources/net/rptools/maptool/client/fonts/OpenSans-ExtraBold.ttf delete mode 100644 src/main/resources/net/rptools/maptool/client/fonts/OpenSans-ExtraBoldItalic.ttf delete mode 100644 src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Italic.ttf delete mode 100644 src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Light.ttf delete mode 100644 src/main/resources/net/rptools/maptool/client/fonts/OpenSans-LightItalic.ttf delete mode 100644 src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Regular.ttf delete mode 100644 src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Semibold.ttf delete mode 100644 src/main/resources/net/rptools/maptool/client/fonts/OpenSans-SemiboldItalic.ttf delete mode 100644 src/main/resources/net/rptools/maptool/client/fonts/OpenSans_Apache License.txt diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 8b2ed84467..05305b0e77 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -44,6 +44,7 @@ import net.rptools.maptool.client.events.ZoneActivated; import net.rptools.maptool.client.swing.ImageBorder; import net.rptools.maptool.client.swing.SwingUtil; +import net.rptools.maptool.client.swing.label.FlatImageLabelFactory; import net.rptools.maptool.client.tool.Tool; import net.rptools.maptool.client.tool.WallTopologyTool; import net.rptools.maptool.client.ui.Scale; @@ -92,6 +93,8 @@ public class GdxRenderer extends ApplicationAdapter { private final String FONT_NORMAL = "normalFont.ttf"; private final String FONT_BOLD = "boldFont.ttf"; + private final String font = "NotoSansSymbols"; + // from renderToken: private Area visibleScreenArea; private Area exposedFogArea; @@ -296,7 +299,8 @@ private void ensureTtfFont() { if (fontScale == this.boldFontScale && boldFont != null) return; var fontParams = new FreetypeFontLoader.FreeTypeFontLoaderParameter(); - fontParams.fontFileName = "net/rptools/maptool/client/fonts/OpenSans-Bold.ttf"; +// fontParams.fontFileName = "net/rptools/maptool/client/fonts/OpenSans-Bold.ttf"; + fontParams.fontFileName = String.format("net/rptools/maptool/client/fonts/%s/%s-Bold.ttf", font, font); fontParams.fontParameters.size = (int) (12 * fontScale); manager.load(FONT_BOLD, BitmapFont.class, fontParams); manager.finishLoading(); @@ -306,11 +310,10 @@ private void ensureTtfFont() { private void loadAssets() { manager.load(ATLAS, TextureAtlas.class); - - var mySmallFont = new FreetypeFontLoader.FreeTypeFontLoaderParameter(); - mySmallFont.fontFileName = "net/rptools/maptool/client/fonts/OpenSans-Regular.ttf"; - mySmallFont.fontParameters.size = 12; - manager.load(FONT_NORMAL, BitmapFont.class, mySmallFont); + var fontParams = new FreetypeFontLoader.FreeTypeFontLoaderParameter(); + fontParams.fontFileName = String.format("net/rptools/maptool/client/fonts/%s/%s-Regular.ttf", font, font); + fontParams.fontParameters.size = 12; + manager.load(FONT_NORMAL, BitmapFont.class, fontParams); } private void doRendering() { diff --git a/src/main/resources/net/rptools/maptool/client/fonts/NotoSansSymbols/NotoSansSymbols-Black.ttf b/src/main/resources/net/rptools/maptool/client/fonts/NotoSansSymbols/NotoSansSymbols-Black.ttf new file mode 100644 index 0000000000000000000000000000000000000000..84e305641c731caf62f8645dafc1ab7991b39d20 GIT binary patch literal 184684 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�WqmP9( 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/net/rptools/maptool/client/fonts/NotoSansSymbols/NotoSansSymbols-Bold.ttf b/src/main/resources/net/rptools/maptool/client/fonts/NotoSansSymbols/NotoSansSymbols-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0133ddc3cf00fb1ff040ce6b81ea720ead2b113c GIT binary patch literal 184868 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/net/rptools/maptool/client/fonts/NotoSansSymbols/NotoSansSymbols-ExtraBold.ttf b/src/main/resources/net/rptools/maptool/client/fonts/NotoSansSymbols/NotoSansSymbols-ExtraBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..24f83dc18400701aee45d64a22ffb1d449624c68 GIT binary patch literal 184828 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/net/rptools/maptool/client/fonts/NotoSansSymbols/NotoSansSymbols-ExtraLight.ttf b/src/main/resources/net/rptools/maptool/client/fonts/NotoSansSymbols/NotoSansSymbols-ExtraLight.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4ef7591f05748cd13849b178c105dadb8ac62048 GIT binary patch literal 185508 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 QvNbpd2=)YXnb-S&0URj8z5oCK literal 0 HcmV?d00001 diff --git a/src/main/resources/net/rptools/maptool/client/fonts/NotoSansSymbols/NotoSansSymbols-Light.ttf b/src/main/resources/net/rptools/maptool/client/fonts/NotoSansSymbols/NotoSansSymbols-Light.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a5ae40b36071b8a810cc38fe76cf7d9f24631d30 GIT binary patch literal 185468 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/net/rptools/maptool/client/fonts/NotoSansSymbols/NotoSansSymbols-Medium.ttf b/src/main/resources/net/rptools/maptool/client/fonts/NotoSansSymbols/NotoSansSymbols-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b463272e46c101cb91c0b1f3fd42da4a40af62dc GIT binary patch literal 185096 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/net/rptools/maptool/client/fonts/NotoSansSymbols/NotoSansSymbols-SemiBold.ttf b/src/main/resources/net/rptools/maptool/client/fonts/NotoSansSymbols/NotoSansSymbols-SemiBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c2a7838f42f826bd4c9acb10462b3d2ff7ba31db GIT binary patch literal 185012 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

      Vk9IQ8>|+6X}@ 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

      hXbnlUA>D}Vg9mX>Yf^Skm=jCeZ!=Ej4>z>> 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

      JU{jq<7f203t|Ihq? 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

      93Tg2c}Lc^2oc3nPS$ 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

      r{ZX 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 diff --git a/src/main/resources/net/rptools/maptool/client/fonts/OpenSans-ExtraBold.ttf b/src/main/resources/net/rptools/maptool/client/fonts/OpenSans-ExtraBold.ttf deleted file mode 100644 index 21f6f84a0799946fc4ae02c52b27e61c3762c745..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222584 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�LN9 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%0DpzNyo5m`c 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 gdXGe&xpSVmb3UZsF@w&B^gHI!dG<);L$9dk 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 DzdWN1 diff --git a/src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Italic.ttf b/src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Italic.ttf deleted file mode 100644 index c90da48ff3b8ad6167236d70c48df4d7b5de3bbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212896 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 I-Ko?4FC8~NI{*Lx diff --git a/src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Light.ttf b/src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Light.ttf deleted file mode 100644 index 0d381897da20345fa63112f19042561f44ee3aa0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222412 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%0AG%b#%#Weyp=oz<}IGPqm z)8c4aT%)1Wt!Z(MiMFk2@iJ>#98HU(X>l|yj;6)Yv^bg;N7LeHS{zM_Yxd#ySkvN~ zeHg82+}v^bg;*NE&CYg!yli=%0AG%cHosL)|1w>IGPqm)8c4a98HU( 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%0AcdZx)e(&Qd#a*s5*M_SL=`WWXP>A<;1 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

        tNNc zgH^i@R_!`iwd+Xy19j~N_2jAkYA>i?0ad&od=k_zcBgx)+N^iG?Ogr6GgNaz_=p`K9{`l+#wgq~3q>WOBd-V-7GHRzo=9f|)1dVfww z!cPQruu9pHm>@m_o(13ZH7BnH{k&C2vKaJEs*a?e4DDb&vm@yzLpxa2>`0apdv8xi z@;YMgl

        o8+@-@Iav9JaRqTDcmpL>#2+NC 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 !}#gv~NV!5|5YF|kE)J0y^zWbk4>=%|6F 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 diff --git a/src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Semibold.ttf b/src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Semibold.ttf deleted file mode 100644 index 1a7679e3949fb045f152f456bc4adad31e8b9f55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 221328 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%0DJH?LFC28_mTUAZOar9j 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

        MAzfu-#(7W5VH7%hxxNU1% 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 b^2ROSp1r5Xdx>eYXCxdsa=Oc~d6M+Mf|cc} diff --git a/src/main/resources/net/rptools/maptool/client/fonts/OpenSans_Apache License.txt b/src/main/resources/net/rptools/maptool/client/fonts/OpenSans_Apache License.txt deleted file mode 100644 index 989e2c59e9..0000000000 --- a/src/main/resources/net/rptools/maptool/client/fonts/OpenSans_Apache License.txt +++ /dev/null @@ -1,201 +0,0 @@ -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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. \ No newline at end of file From 284c4da33ad21c0826c4ee7fd154e67def3e9fc9 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 7 Apr 2025 19:02:26 +0200 Subject: [PATCH 139/139] spotless --- .../rptools/maptool/client/ui/zone/gdx/GdxRenderer.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java index 05305b0e77..0c1f004794 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/gdx/GdxRenderer.java @@ -44,7 +44,6 @@ import net.rptools.maptool.client.events.ZoneActivated; import net.rptools.maptool.client.swing.ImageBorder; import net.rptools.maptool.client.swing.SwingUtil; -import net.rptools.maptool.client.swing.label.FlatImageLabelFactory; import net.rptools.maptool.client.tool.Tool; import net.rptools.maptool.client.tool.WallTopologyTool; import net.rptools.maptool.client.ui.Scale; @@ -299,8 +298,9 @@ private void ensureTtfFont() { if (fontScale == this.boldFontScale && boldFont != null) return; var fontParams = new FreetypeFontLoader.FreeTypeFontLoaderParameter(); -// fontParams.fontFileName = "net/rptools/maptool/client/fonts/OpenSans-Bold.ttf"; - fontParams.fontFileName = String.format("net/rptools/maptool/client/fonts/%s/%s-Bold.ttf", font, font); + // fontParams.fontFileName = "net/rptools/maptool/client/fonts/OpenSans-Bold.ttf"; + fontParams.fontFileName = + String.format("net/rptools/maptool/client/fonts/%s/%s-Bold.ttf", font, font); fontParams.fontParameters.size = (int) (12 * fontScale); manager.load(FONT_BOLD, BitmapFont.class, fontParams); manager.finishLoading(); @@ -311,7 +311,8 @@ private void ensureTtfFont() { private void loadAssets() { manager.load(ATLAS, TextureAtlas.class); var fontParams = new FreetypeFontLoader.FreeTypeFontLoaderParameter(); - fontParams.fontFileName = String.format("net/rptools/maptool/client/fonts/%s/%s-Regular.ttf", font, font); + fontParams.fontFileName = + String.format("net/rptools/maptool/client/fonts/%s/%s-Regular.ttf", font, font); fontParams.fontParameters.size = 12; manager.load(FONT_NORMAL, BitmapFont.class, fontParams); }

      Fxk|(6(6_=H2BlQNOLua%m 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 DSB?^W literal 0 HcmV?d00001 diff --git a/src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Bold.ttf b/src/main/resources/net/rptools/maptool/client/fonts/OpenSans-Bold.ttf deleted file mode 100644 index fd79d43bea0293ac1b20e8aca1142627983d2c07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224592 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 diff --git a/src/main/resources/net/rptools/maptool/client/fonts/OpenSans-BoldItalic.ttf b/src/main/resources/net/rptools/maptool/client/fonts/OpenSans-BoldItalic.ttf deleted file mode 100644 index 9bc800958a421d937fc392e00beaef4eea76dc71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 213292 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

    sv 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

sv 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