From c60f6d155fe63e1a6340069c8a72bd72e0ca3d96 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 9 Aug 2021 11:41:39 -0400 Subject: [PATCH] Fixed #5725 --- core/src/mindustry/entities/Puddles.java | 2 +- core/src/mindustry/entities/comp/PuddleComp.java | 16 +++++++++++++--- .../mindustry/graphics/g3d/PlanetRenderer.java | 3 ++- core/src/mindustry/io/SaveVersion.java | 3 ++- .../mindustry/world/blocks/production/Pump.java | 2 +- .../mindustry/world/modules/LiquidModule.java | 5 +++-- gradle.properties | 2 +- 7 files changed, 23 insertions(+), 10 deletions(-) diff --git a/core/src/mindustry/entities/Puddles.java b/core/src/mindustry/entities/Puddles.java index cf398dc1f6..8422329c6c 100644 --- a/core/src/mindustry/entities/Puddles.java +++ b/core/src/mindustry/entities/Puddles.java @@ -54,8 +54,8 @@ public class Puddles{ puddle.liquid = liquid; puddle.amount = amount; puddle.set((tile.worldx() + source.worldx()) / 2f, (tile.worldy() + source.worldy()) / 2f); - puddle.add(); map.put(tile.pos(), puddle); + puddle.add(); }else if(p.liquid == liquid){ p.accepting = Math.max(amount, p.accepting); diff --git a/core/src/mindustry/entities/comp/PuddleComp.java b/core/src/mindustry/entities/comp/PuddleComp.java index 63b3f25f6a..38df428c41 100644 --- a/core/src/mindustry/entities/comp/PuddleComp.java +++ b/core/src/mindustry/entities/comp/PuddleComp.java @@ -41,6 +41,7 @@ abstract class PuddleComp implements Posc, Puddlec, Drawc{ @Import int id; @Import float x, y; + transient private boolean mismatch = false; transient float accepting, updateTime, lastRipple = Time.time + Mathf.random(40f); float amount; Tile tile; @@ -73,8 +74,15 @@ abstract class PuddleComp implements Posc, Puddlec, Drawc{ amount = Mathf.clamp(amount, 0, maxLiquid); - if(amount <= 0f || Puddles.get(tile) != self()){ + if(amount <= 0f){ remove(); + return; + } + + if(Puddles.get(tile) != self()){ + mismatch = true; + remove(); + return; } //effects-only code @@ -83,7 +91,7 @@ abstract class PuddleComp implements Posc, Puddlec, Drawc{ Units.nearby(rect.setSize(Mathf.clamp(amount / (maxLiquid / 1.5f)) * 10f).setCenter(x, y), unitCons); - if(liquid.temperature > 0.7f && (tile.build != null) && Mathf.chance(0.5)){ + if(liquid.temperature > 0.7f && tile.build != null && Mathf.chance(0.5)){ Fires.create(tile); } @@ -126,7 +134,9 @@ abstract class PuddleComp implements Posc, Puddlec, Drawc{ @Override public void remove(){ - Puddles.remove(tile); + if(!mismatch){ + Puddles.remove(tile); + } } @Override diff --git a/core/src/mindustry/graphics/g3d/PlanetRenderer.java b/core/src/mindustry/graphics/g3d/PlanetRenderer.java index 14a2560fdd..64b3dd7c39 100644 --- a/core/src/mindustry/graphics/g3d/PlanetRenderer.java +++ b/core/src/mindustry/graphics/g3d/PlanetRenderer.java @@ -215,10 +215,11 @@ 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 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.3f); + 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)); diff --git a/core/src/mindustry/io/SaveVersion.java b/core/src/mindustry/io/SaveVersion.java index 904591f268..527742d836 100644 --- a/core/src/mindustry/io/SaveVersion.java +++ b/core/src/mindustry/io/SaveVersion.java @@ -408,7 +408,8 @@ public abstract class SaveVersion extends SaveFileReader{ for(int j = 0; j < total; j++){ String name = stream.readUTF(); - map[type.ordinal()][j] = content.getByName(type, fallback.get(name, name)); + //fallback only for blocks + map[type.ordinal()][j] = content.getByName(type, type == ContentType.block ? fallback.get(name, name) : name); } } diff --git a/core/src/mindustry/world/blocks/production/Pump.java b/core/src/mindustry/world/blocks/production/Pump.java index fd150ba38a..de524f72f6 100644 --- a/core/src/mindustry/world/blocks/production/Pump.java +++ b/core/src/mindustry/world/blocks/production/Pump.java @@ -87,7 +87,7 @@ public class Pump extends LiquidBlock{ public void draw(){ Draw.rect(name, x, y); - Drawf.liquid(liquidRegion, x, y, liquids.total() / liquidCapacity, liquids.current().color); + Drawf.liquid(liquidRegion, x, y, liquids.currentAmount() / liquidCapacity, liquids.current().color); } @Override diff --git a/core/src/mindustry/world/modules/LiquidModule.java b/core/src/mindustry/world/modules/LiquidModule.java index 5713129506..3f17a09940 100644 --- a/core/src/mindustry/world/modules/LiquidModule.java +++ b/core/src/mindustry/world/modules/LiquidModule.java @@ -143,11 +143,12 @@ public class LiquidModule extends BlockModule{ int count = legacy ? read.ub() : read.s(); for(int j = 0; j < count; j++){ - int liquidid = legacy ? read.ub() : read.s(); + Liquid liq = content.liquid(legacy ? read.ub() : read.s()); + int liquidid = liq.id; float amount = read.f(); liquids[liquidid] = amount; if(amount > 0){ - current = content.liquid(liquidid); + current = liq; } this.total += amount; } diff --git a/gradle.properties b/gradle.properties index dc2ce3354d..3c125e34d9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,4 +8,4 @@ kapt.include.compile.classpath=false kotlin.stdlib.default.dependency=false #needed for android compilation android.useAndroidX=true -archash=28f7dea17ba559a28e79111adc93cf0496ced031 +archash=40c21b302ccc1e74f4c2a37f937c88acaec99254