From 408850d3f2f1e1116b0c111d2aeeb7c239567504 Mon Sep 17 00:00:00 2001 From: GlennFolker Date: Sun, 18 Feb 2024 02:41:15 +0700 Subject: [PATCH 1/2] Delegate more methods into Planet --- .../graphics/g3d/PlanetRenderer.java | 12 +-------- core/src/mindustry/type/Planet.java | 22 ++++++++++++++++ .../mindustry/ui/dialogs/PlanetDialog.java | 26 +++++++++---------- 3 files changed, 35 insertions(+), 25 deletions(-) diff --git a/core/src/mindustry/graphics/g3d/PlanetRenderer.java b/core/src/mindustry/graphics/g3d/PlanetRenderer.java index 6b5c0b6676b6..3593f5395788 100644 --- a/core/src/mindustry/graphics/g3d/PlanetRenderer.java +++ b/core/src/mindustry/graphics/g3d/PlanetRenderer.java @@ -203,17 +203,7 @@ public void drawPlane(Sector sector, Runnable run){ } 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/Planet.java b/core/src/mindustry/type/Planet.java index 1aa63264e217..c25852881f9b 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -536,4 +536,26 @@ public void drawArc(VertexBatch3D batch, Vec3 a, Vec3 b, Color from, Color to, f } 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 16d5d9e304da..9a230d0fc6cd 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -167,7 +167,7 @@ public void touchUp(InputEvent event, float x, float y, int pointer, KeyCode but //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 void touchUp(InputEvent event, float x, float y, int pointer, KeyCode but } //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 void showSelect(Sector sector, Cons listener){ 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 void draw(){ } }).visible(() -> mode != select), - new Table(c -> { - expandTable = c; - })).grow(); - + new Table(c -> expandTable = c)).grow(); rebuildExpand(); } @@ -770,11 +773,6 @@ public void draw(){ } } - 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 void act(float delta){ 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); From baf63a94b3b8a6fef3749dd102236dd276c0cbbd Mon Sep 17 00:00:00 2001 From: GlennFolker Date: Sun, 3 Mar 2024 20:01:14 +0700 Subject: [PATCH 2/2] Allow categorized sprite prefixes --- core/src/mindustry/mod/Mods.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/mod/Mods.java b/core/src/mindustry/mod/Mods.java index 1eed765d1925..391636571ece 100644 --- a/core/src/mindustry/mod/Mods.java +++ b/core/src/mindustry/mod/Mods.java @@ -218,7 +218,10 @@ private void packSprites(Seq sprites, LoadedMod mod, boolean prefix, Seq { - String fullName = (prefix ? mod.name + "-" : "") + baseName; + //don't prefix with mod name if it's already prefixed by a category, e.g. `block-modname-content-full`. + int hyphen = baseName.indexOf('-'); + String fullName = ((prefix && !(hyphen != -1 && baseName.substring(hyphen + 1).startsWith(mod.name + "-"))) ? mod.name + "-" : "") + baseName; + packer.add(getPage(file), fullName, new PixmapRegion(pix)); if(textureScale != 1.0f){ textureResize.put(fullName, textureScale);