From d96667679efdcd829f7995c0dee7f9f174d4346a Mon Sep 17 00:00:00 2001 From: Mythril382 <77225817+Mythril382@users.noreply.github.com> Date: Sat, 5 Oct 2024 10:49:12 +0800 Subject: [PATCH] Allow JSON Mods To Disable Progress Clamping (#10114) * par * 1. im dumb 2. im stupid --- core/src/mindustry/entities/part/DrawPart.java | 8 ++++++-- core/src/mindustry/entities/part/FlarePart.java | 3 ++- core/src/mindustry/entities/part/HaloPart.java | 3 ++- core/src/mindustry/entities/part/RegionPart.java | 8 +++++--- core/src/mindustry/entities/part/ShapePart.java | 3 ++- 5 files changed, 17 insertions(+), 8 deletions(-) diff --git a/core/src/mindustry/entities/part/DrawPart.java b/core/src/mindustry/entities/part/DrawPart.java index a8642fe6d4..6e14ccb247 100644 --- a/core/src/mindustry/entities/part/DrawPart.java +++ b/core/src/mindustry/entities/part/DrawPart.java @@ -96,9 +96,13 @@ public abstract class DrawPart{ } default float getClamp(PartParams p){ - return Mathf.clamp(get(p)); + return getClamp(p, true); } - + + default float getClamp(PartParams p, boolean clamp){ + return clamp ? Mathf.clamp(get(p)) : get(p); + } + default PartProgress inv(){ return p -> 1f - get(p); } diff --git a/core/src/mindustry/entities/part/FlarePart.java b/core/src/mindustry/entities/part/FlarePart.java index d07987d37e..ccf274a5b9 100644 --- a/core/src/mindustry/entities/part/FlarePart.java +++ b/core/src/mindustry/entities/part/FlarePart.java @@ -12,6 +12,7 @@ public class FlarePart extends DrawPart{ public float x, y, rotation, rotMove, spinSpeed; public boolean followRotation; public Color color1 = Pal.techBlue, color2 = Color.white; + public boolean clampProgress = true; public PartProgress progress = PartProgress.warmup; public float layer = Layer.effect; @@ -20,7 +21,7 @@ public class FlarePart extends DrawPart{ float z = Draw.z(); if(layer > 0) Draw.z(layer); - float prog = progress.getClamp(params); + float prog = progress.getClamp(params, clampProgress); int i = params.sideOverride == -1 ? 0 : params.sideOverride; float sign = (i == 0 ? 1 : -1) * params.sideMultiplier; diff --git a/core/src/mindustry/entities/part/HaloPart.java b/core/src/mindustry/entities/part/HaloPart.java index 0f5f4cafd0..7dc1dfcace 100644 --- a/core/src/mindustry/entities/part/HaloPart.java +++ b/core/src/mindustry/entities/part/HaloPart.java @@ -20,6 +20,7 @@ public class HaloPart extends DrawPart{ public Color color = Color.white; public @Nullable Color colorTo; public boolean mirror = false; + public boolean clampProgress = true; public PartProgress progress = PartProgress.warmup; public float layer = -1f, layerOffset = 0f; @@ -32,7 +33,7 @@ public class HaloPart extends DrawPart{ Draw.z(Draw.z() + layerOffset); float - prog = progress.getClamp(params), + prog = progress.getClamp(params, clampProgress), baseRot = Time.time * rotateSpeed, rad = radiusTo < 0 ? radius : Mathf.lerp(radius, radiusTo, prog), triLen = triLengthTo < 0 ? triLength : Mathf.lerp(triLength, triLengthTo, prog), diff --git a/core/src/mindustry/entities/part/RegionPart.java b/core/src/mindustry/entities/part/RegionPart.java index 4323f5f9aa..527ccae184 100644 --- a/core/src/mindustry/entities/part/RegionPart.java +++ b/core/src/mindustry/entities/part/RegionPart.java @@ -27,6 +27,8 @@ public class RegionPart extends DrawPart{ public boolean drawRegion = true; /** If true, the heat region produces light. */ public boolean heatLight = false; + /** Whether to clamp progress to (0-1). If false, allows usage of interps that go past the range, but may have unwanted visual bugs depending on values. */ + public boolean clampProgress = true; /** Progress function for determining position/rotation. */ public PartProgress progress = PartProgress.warmup; /** Progress function for scaling. */ @@ -67,14 +69,14 @@ public class RegionPart extends DrawPart{ Draw.z(Draw.z() + layerOffset); float prevZ = Draw.z(); - float prog = progress.getClamp(params), sclProg = growProgress.getClamp(params); + float prog = progress.getClamp(params, clampProgress), sclProg = growProgress.getClamp(params, clampProgress); float mx = moveX * prog, my = moveY * prog, mr = moveRot * prog + rotation, gx = growX * sclProg, gy = growY * sclProg; if(moves.size > 0){ for(int i = 0; i < moves.size; i++){ var move = moves.get(i); - float p = move.progress.getClamp(params); + float p = move.progress.getClamp(params, clampProgress); mx += move.x * p; my += move.y * p; mr += move.rot * p; @@ -130,7 +132,7 @@ public class RegionPart extends DrawPart{ } if(heat.found()){ - float hprog = heatProgress.getClamp(params); + float hprog = heatProgress.getClamp(params, clampProgress); heatColor.write(Tmp.c1).a(hprog * heatColor.a); Drawf.additive(heat, Tmp.c1, rx, ry, rot, turretShading ? turretHeatLayer : Draw.z() + heatLayerOffset); if(heatLight) Drawf.light(rx, ry, light.found() ? light : heat, rot, Tmp.c1, heatLightOpacity * hprog); diff --git a/core/src/mindustry/entities/part/ShapePart.java b/core/src/mindustry/entities/part/ShapePart.java index 7093c46b6b..dc8211fb26 100644 --- a/core/src/mindustry/entities/part/ShapePart.java +++ b/core/src/mindustry/entities/part/ShapePart.java @@ -15,6 +15,7 @@ public class ShapePart extends DrawPart{ public Color color = Color.white; public @Nullable Color colorTo; public boolean mirror = false; + public boolean clampProgress = true; public PartProgress progress = PartProgress.warmup; public float layer = -1f, layerOffset = 0f; @@ -26,7 +27,7 @@ public class ShapePart extends DrawPart{ Draw.z(Draw.z() + layerOffset); - float prog = progress.getClamp(params), + float prog = progress.getClamp(params, clampProgress), baseRot = Time.time * rotateSpeed, rad = radiusTo < 0 ? radius : Mathf.lerp(radius, radiusTo, prog), str = strokeTo < 0 ? stroke : Mathf.lerp(stroke, strokeTo, prog);