diff --git a/core/src/mindustry/graphics/g3d/PlanetRenderer.java b/core/src/mindustry/graphics/g3d/PlanetRenderer.java index 6b5c0b6676..3593f53957 100644 --- a/core/src/mindustry/graphics/g3d/PlanetRenderer.java +++ b/core/src/mindustry/graphics/g3d/PlanetRenderer.java @@ -203,17 +203,7 @@ public class PlanetRenderer implements Disposable{ } public void setPlane(Sector sector){ - float rotation = -sector.planet.getRotation(); - float length = 0.01f; - - projector.setPlane( - //origin on sector 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, 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() - ); + sector.planet.setPlane(sector, projector); } public void fill(Sector sector, Color color, float offset){ diff --git a/core/src/mindustry/type/Liquid.java b/core/src/mindustry/type/Liquid.java index a524970fcd..9032b4bf9b 100644 --- a/core/src/mindustry/type/Liquid.java +++ b/core/src/mindustry/type/Liquid.java @@ -84,8 +84,6 @@ public class Liquid extends UnlockableContent implements Senseable{ super.init(); if(gas){ - //gases can't be coolants - coolant = false; //always "boils", it's a gas boilPoint = -1; //ensure no accidental global mutation diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index 1aa63264e2..c25852881f 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -536,4 +536,26 @@ public class Planet extends UnlockableContent{ } batch.flush(Gl.lineStrip); } + + public Vec3 lookAt(Sector sector, Vec3 out){ + return out.set(sector.tile.v).rotate(Vec3.Y, -getRotation()); + } + + public Vec3 project(Sector sector, Camera3D cam, Vec3 out){ + return cam.project(out.set(sector.tile.v).setLength(outlineRad * radius).rotate(Vec3.Y, -getRotation()).add(position)); + } + + public void setPlane(Sector sector, PlaneBatch3D projector){ + float rotation = -getRotation(); + float length = 0.01f; + + projector.setPlane( + //origin on sector position + Tmp.v33.set(sector.tile.v).setLength((outlineRad + length) * radius).rotate(Vec3.Y, rotation).add(position), + //face up + sector.plane.project(Tmp.v32.set(sector.tile.v).add(Vec3.Y)).sub(sector.tile.v, 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() + ); + } } diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index 16d5d9e304..9a230d0fc6 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -167,7 +167,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ //show selection of Erekir/Serpulo campaign if the user has no bases, and hasn't selected yet (essentially a "have they played campaign before" check) shown(() -> { - if(!settings.getBool("campaignselect") && !content.planets().contains(p -> p.sectors.contains(s -> s.hasBase()))){ + if(!settings.getBool("campaignselect") && !content.planets().contains(p -> p.sectors.contains(Sector::hasBase))){ var diag = new BaseDialog("@campaign.select"); Planet[] selected = {null}; @@ -214,7 +214,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ } //unlock defaults for older campaign saves (TODO move? where to?) - if(content.planets().contains(p -> p.sectors.contains(s -> s.hasBase())) || Blocks.scatter.unlocked() || Blocks.router.unlocked()){ + if(content.planets().contains(p -> p.sectors.contains(Sector::hasBase)) || Blocks.scatter.unlocked() || Blocks.router.unlocked()){ Seq.with(Blocks.junction, Blocks.mechanicalDrill, Blocks.conveyor, Blocks.duo, Items.copper, Items.lead).each(UnlockableContent::quietUnlock); } } @@ -372,11 +372,17 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ super.show(); } - void lookAt(Sector sector){ + public void lookAt(Sector sector){ if(sector.tile == Ptile.empty) return; + //TODO should this even set `state.planet`? the other lookAt() doesn't, so... state.planet = sector.planet; - state.camPos.set(Tmp.v33.set(sector.tile.v).rotate(Vec3.Y, -sector.planet.getRotation())); + sector.planet.lookAt(sector, state.camPos); + } + + public void lookAt(Sector sector, float alpha){ + float len = state.camPos.len(); + state.camPos.slerp(sector.planet.lookAt(sector, Tmp.v33).setLength(len), alpha); } boolean canSelect(Sector sector){ @@ -648,10 +654,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ } }).visible(() -> mode != select), - new Table(c -> { - expandTable = c; - })).grow(); - + new Table(c -> expandTable = c)).grow(); rebuildExpand(); } @@ -770,11 +773,6 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ } } - public void lookAt(Sector sector, float alpha){ - float len = state.camPos.len(); - state.camPos.slerp(Tmp.v31.set(sector.tile.v).rotate(Vec3.Y, -sector.planet.getRotation()).setLength(len), alpha); - } - @Override public void act(float delta){ super.act(delta); @@ -801,7 +799,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 * state.planet.radius).rotate(Vec3.Y, -state.planet.getRotation()).add(state.planet.position)); + Vec3 pos = hovered.planet.project(hovered, planets.cam, Tmp.v31); hoverLabel.setPosition(pos.x - Core.scene.marginLeft, pos.y - Core.scene.marginBottom, Align.center); hoverLabel.getText().setLength(0); diff --git a/servers_v7.json b/servers_v7.json index 7d89a80c1d..559c1d9e60 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -230,7 +230,7 @@ }, { "name": "ABCXYZ Community", - "address": ["23.88.73.88:23591", "23.88.73.88:23539", "144.76.57.59:14996", "144.76.57.59:16881", "144.76.57.59:13885", "23.88.73.88:32113", "144.76.57.59:9269", "144.76.57.59:24235", "144.76.57.59:24133", "5.9.8.124:28848"] + "address": ["23.88.73.88:23591", "23.88.73.88:23539", "144.76.57.59:14996", "144.76.57.59:16881", "144.76.57.59:13885", "23.88.73.88:32113", "144.76.57.59:9269", "144.76.57.59:24235", "144.76.57.59:24133", "5.9.8.124:28848", "srv1.godlike.club:28466"] }, { "name": "CroCraft Network",