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."); }; });