From 25388ffe5fc3fdb2eef94b809f255b8763419c42 Mon Sep 17 00:00:00 2001 From: MEEPofFaith <54301439+MEEPofFaith@users.noreply.github.com> Date: Sat, 13 Aug 2022 03:52:46 -0700 Subject: [PATCH] Better Duplicate Op Support (json/hjson) + 1 more op (#7355) * Better support for duplicate ops * 'Mathf.curve' op --- core/src/mindustry/entities/part/DrawPart.java | 4 ++++ core/src/mindustry/mod/ContentParser.java | 7 ++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/entities/part/DrawPart.java b/core/src/mindustry/entities/part/DrawPart.java index f974be0bf4..7d85db582d 100644 --- a/core/src/mindustry/entities/part/DrawPart.java +++ b/core/src/mindustry/entities/part/DrawPart.java @@ -124,6 +124,10 @@ public abstract class DrawPart{ return p -> get(p) / (1f - amount); } + default PartProgress compress(float start, float end){ + return p -> Mathf.curve(get(p), start, end); + } + default PartProgress blend(PartProgress other, float amount){ return p -> Mathf.lerp(get(p), other.get(p), amount); } diff --git a/core/src/mindustry/mod/ContentParser.java b/core/src/mindustry/mod/ContentParser.java index 7b287e56dc..25189e1943 100644 --- a/core/src/mindustry/mod/ContentParser.java +++ b/core/src/mindustry/mod/ContentParser.java @@ -201,13 +201,14 @@ public class ContentParser{ case "delay" -> base.delay(data.getFloat("amount")); case "sustain" -> base.sustain(data.getFloat("offset", 0f), data.getFloat("grow", 0f), data.getFloat("sustain")); case "shorten" -> base.shorten(data.getFloat("amount")); + case "compress" -> base.compress(data.getFloat("start"), data.getFloat("end")); case "add" -> data.has("amount") ? base.add(data.getFloat("amount")) : base.add(parser.readValue(PartProgress.class, data.get("other"))); case "blend" -> base.blend(parser.readValue(PartProgress.class, data.get("other")), data.getFloat("amount")); - case "mul" -> base.mul(parser.readValue(PartProgress.class, data.get("other"))); + case "mul" -> data.has("amount") ? base.mul(data.getFloat("amount")) : base.mul(parser.readValue(PartProgress.class, data.get("other"))); case "min" -> base.min(parser.readValue(PartProgress.class, data.get("other"))); - case "sin" -> base.sin(data.getFloat("scl"), data.getFloat("mag")); + case "sin" -> base.sin(data.has("offset") ? data.getFloat("offset") : 0f, data.getFloat("scl"), data.getFloat("mag")); case "absin" -> base.absin(data.getFloat("scl"), data.getFloat("mag")); - case "curve" -> base.curve(parser.readValue(Interp.class, data.get("interp"))); + case "curve" -> data.has("interp") ? base.curve(parser.readValue(Interp.class, data.get("interp"))) : base.curve(data.getFloat("offset"), data.getFloat("duration")); default -> throw new RuntimeException("Unknown operation '" + op + "', check PartProgress class for a list of methods."); }; });