From 58eef492842daca2149ff214051b3d3df621966d Mon Sep 17 00:00:00 2001 From: Pasu4 <117922538+Pasu4@users.noreply.github.com> Date: Sat, 25 Mar 2023 18:50:06 +0100 Subject: [PATCH] Scale planet grid to planet radius (#8381) * Scale planet grid to planet radius * Fix skewed sector icons on small planets --- .../graphics/g3d/PlanetRenderer.java | 24 ++++++++++--------- .../mindustry/ui/dialogs/PlanetDialog.java | 4 ++-- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/core/src/mindustry/graphics/g3d/PlanetRenderer.java b/core/src/mindustry/graphics/g3d/PlanetRenderer.java index 255e1ed1cf..1af20f68ed 100644 --- a/core/src/mindustry/graphics/g3d/PlanetRenderer.java +++ b/core/src/mindustry/graphics/g3d/PlanetRenderer.java @@ -188,9 +188,10 @@ public class PlanetRenderer implements Disposable{ } //render sector grid - Mesh mesh = outline(planet.grid.size); + float scaledOutlineRad = outlineRad * planet.radius; + Mesh mesh = outline(planet.grid.size, planet.radius); Shader shader = Shaders.planetGrid; - Vec3 tile = planet.intersect(cam.getMouseRay(), outlineRad); + Vec3 tile = planet.intersect(cam.getMouseRay(), scaledOutlineRad); Shaders.planetGrid.mouse.lerp(tile == null ? Vec3.Zero : tile.sub(planet.position).rotate(Vec3.Y, planet.getRotation()), 0.2f); shader.bind(); @@ -210,13 +211,14 @@ public class PlanetRenderer implements Disposable{ public void drawArc(Planet planet, Vec3 a, Vec3 b, Color from, Color to, float length, float timeScale, int pointCount){ //increase curve height when on opposite side of planet, so it doesn't tunnel through + float scaledOutlineRad = outlineRad * planet.radius; float dot = 1f - (Tmp.v32.set(a).nor().dot(Tmp.v33.set(b).nor()) + 1f)/2f; Vec3 avg = Tmp.v31.set(b).add(a).scl(0.5f); avg.setLength(planet.radius*(1f+length) + dot * 1.35f); points.clear(); - points.addAll(Tmp.v33.set(b).setLength(outlineRad), Tmp.v31, Tmp.v34.set(a).setLength(outlineRad)); + points.addAll(Tmp.v33.set(b).setLength(scaledOutlineRad), Tmp.v31, Tmp.v34.set(a).setLength(scaledOutlineRad)); Tmp.bz3.set(points); for(int i = 0; i < pointCount + 1; i++){ @@ -231,8 +233,8 @@ public class PlanetRenderer implements Disposable{ public void drawBorders(Sector sector, Color base, float alpha){ Color color = Tmp.c1.set(base).a((base.a + 0.3f + Mathf.absin(Time.globalTime, 5f, 0.3f)) * alpha); - float r1 = 1f; - float r2 = outlineRad + 0.001f; + float r1 = 1f * sector.planet.radius; + float r2 = outlineRad * sector.planet.radius + 0.001f; for(int i = 0; i < sector.tile.corners.length; i++){ Corner c = sector.tile.corners[i], next = sector.tile.corners[(i+1) % sector.tile.corners.length]; @@ -268,16 +270,16 @@ public class PlanetRenderer implements Disposable{ projector.setPlane( //origin on sector position - Tmp.v33.set(sector.tile.v).setLength(outlineRad + length).rotate(Vec3.Y, rotation).add(sector.planet.position), + Tmp.v33.set(sector.tile.v).setLength((outlineRad + length) * sector.planet.radius).rotate(Vec3.Y, rotation).add(sector.planet.position), //face up - sector.plane.project(Tmp.v32.set(sector.tile.v).add(Vec3.Y)).sub(sector.tile.v).rotate(Vec3.Y, rotation).nor(), + sector.plane.project(Tmp.v32.set(sector.tile.v).add(Vec3.Y)).sub(sector.tile.v, sector.planet.radius).rotate(Vec3.Y, rotation).nor(), //right vector Tmp.v31.set(Tmp.v32).rotate(Vec3.Y, -rotation).add(sector.tile.v).rotate(sector.tile.v, 90).sub(sector.tile.v).rotate(Vec3.Y, rotation).nor() ); } public void fill(Sector sector, Color color, float offset){ - float rr = outlineRad + offset; + float rr = outlineRad * sector.planet.radius + offset; for(int i = 0; i < sector.tile.corners.length; i++){ Corner c = sector.tile.corners[i], next = sector.tile.corners[(i+1) % sector.tile.corners.length]; batch.tri(Tmp.v31.set(c.v).setLength(rr), Tmp.v32.set(next.v).setLength(rr), Tmp.v33.set(sector.tile.v).setLength(rr), color); @@ -289,7 +291,7 @@ public class PlanetRenderer implements Disposable{ } public void drawSelection(Sector sector, Color color, float stroke, float length){ - float arad = outlineRad + length; + float arad = (outlineRad + length) * sector.planet.radius; for(int i = 0; i < sector.tile.corners.length; i++){ Corner next = sector.tile.corners[(i + 1) % sector.tile.corners.length]; @@ -311,7 +313,7 @@ public class PlanetRenderer implements Disposable{ } } - public Mesh outline(int size){ + public Mesh outline(int size, float radiusScale){ if(outlines[size] == null){ outlines[size] = MeshBuilder.buildHex(new HexMesher(){ @Override @@ -323,7 +325,7 @@ public class PlanetRenderer implements Disposable{ public Color getColor(Vec3 position){ return outlineColor; } - }, size, true, outlineRad, 0.2f); + }, size, true, outlineRad * radiusScale, 0.2f); } return outlines[size]; } diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index ec504321fb..6667e9fab1 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -785,7 +785,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ hoverLabel.touchable = Touchable.disabled; hoverLabel.color.a = state.uiAlpha; - Vec3 pos = planets.cam.project(Tmp.v31.set(hovered.tile.v).setLength(PlanetRenderer.outlineRad).rotate(Vec3.Y, -state.planet.getRotation()).add(state.planet.position)); + Vec3 pos = planets.cam.project(Tmp.v31.set(hovered.tile.v).setLength(PlanetRenderer.outlineRad * state.planet.radius).rotate(Vec3.Y, -state.planet.getRotation()).add(state.planet.position)); hoverLabel.setPosition(pos.x - Core.scene.marginLeft, pos.y - Core.scene.marginBottom, Align.center); hoverLabel.getText().setLength(0); @@ -831,7 +831,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ } if(state.planet.hasGrid()){ - hovered = Core.scene.getDialog() == this ? state.planet.getSector(planets.cam.getMouseRay(), PlanetRenderer.outlineRad) : null; + hovered = Core.scene.getDialog() == this ? state.planet.getSector(planets.cam.getMouseRay(), PlanetRenderer.outlineRad * state.planet.radius) : null; }else if(state.planet.isLandable()){ boolean wasNull = selected == null; //always have the first sector selected.