From 830fe03898721d726870f1cc39dab5890040ce31 Mon Sep 17 00:00:00 2001 From: Joshua Fan Date: Fri, 5 Mar 2021 11:09:46 -0800 Subject: [PATCH] Add buildSpeedMultiplier status effect (#4816) * Make disarmed status effect prevent building * Revert disarmed changes, add buildSpeedMultiplier status * Add buildSpeedMultiplier to StatusComp --- core/src/mindustry/entities/comp/BuilderComp.java | 10 +++++----- core/src/mindustry/entities/comp/StatusComp.java | 5 +++-- core/src/mindustry/type/StatusEffect.java | 4 +++- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/core/src/mindustry/entities/comp/BuilderComp.java b/core/src/mindustry/entities/comp/BuilderComp.java index 12f5428324..c9984f8ea4 100644 --- a/core/src/mindustry/entities/comp/BuilderComp.java +++ b/core/src/mindustry/entities/comp/BuilderComp.java @@ -26,10 +26,10 @@ import java.util.*; import static mindustry.Vars.*; @Component -abstract class BuilderComp implements Posc, Teamc, Rotc{ +abstract class BuilderComp implements Posc, Statusc, Teamc, Rotc{ static final Vec2[] vecs = new Vec2[]{new Vec2(), new Vec2(), new Vec2(), new Vec2()}; - @Import float x, y, rotation; + @Import float x, y, rotation, buildSpeedMultiplier; @Import UnitType type; @Import Team team; @@ -41,7 +41,7 @@ abstract class BuilderComp implements Posc, Teamc, Rotc{ private transient float buildAlpha = 0f; public boolean canBuild(){ - return type.buildSpeed > 0; + return type.buildSpeed > 0 && buildSpeedMultiplier > 0; } @Override @@ -126,9 +126,9 @@ abstract class BuilderComp implements Posc, Teamc, Rotc{ //otherwise, update it. if(current.breaking){ - entity.deconstruct(self(), core, 1f / entity.buildCost * Time.delta * type.buildSpeed * state.rules.buildSpeedMultiplier); + entity.deconstruct(self(), core, 1f / entity.buildCost * Time.delta * type.buildSpeed * buildSpeedMultiplier * state.rules.buildSpeedMultiplier); }else{ - entity.construct(self(), core, 1f / entity.buildCost * Time.delta * type.buildSpeed * state.rules.buildSpeedMultiplier, current.config); + entity.construct(self(), core, 1f / entity.buildCost * Time.delta * type.buildSpeed * buildSpeedMultiplier * state.rules.buildSpeedMultiplier, current.config); } current.stuck = Mathf.equal(current.progress, entity.progress); diff --git a/core/src/mindustry/entities/comp/StatusComp.java b/core/src/mindustry/entities/comp/StatusComp.java index 58177c5fdb..bce8444361 100644 --- a/core/src/mindustry/entities/comp/StatusComp.java +++ b/core/src/mindustry/entities/comp/StatusComp.java @@ -19,7 +19,7 @@ abstract class StatusComp implements Posc, Flyingc{ private Seq statuses = new Seq<>(); private transient Bits applied = new Bits(content.getBy(ContentType.status).size); - @ReadOnly transient float speedMultiplier = 1, damageMultiplier = 1, healthMultiplier = 1, reloadMultiplier = 1; + @ReadOnly transient float speedMultiplier = 1, damageMultiplier = 1, healthMultiplier = 1, reloadMultiplier = 1, buildSpeedMultiplier = 1; @ReadOnly transient boolean disarmed = false; @Import UnitType type; @@ -111,7 +111,7 @@ abstract class StatusComp implements Posc, Flyingc{ } applied.clear(); - speedMultiplier = damageMultiplier = healthMultiplier = reloadMultiplier = 1f; + speedMultiplier = damageMultiplier = healthMultiplier = reloadMultiplier = buildSpeedMultiplier = 1f; disarmed = false; if(statuses.isEmpty()) return; @@ -134,6 +134,7 @@ abstract class StatusComp implements Posc, Flyingc{ healthMultiplier *= entry.effect.healthMultiplier; damageMultiplier *= entry.effect.damageMultiplier; reloadMultiplier *= entry.effect.reloadMultiplier; + buildSpeedMultiplier *= entry.effect.buildSpeedMultiplier; disarmed |= entry.effect.disarm; diff --git a/core/src/mindustry/type/StatusEffect.java b/core/src/mindustry/type/StatusEffect.java index 2355cbbcaa..3e260bb975 100644 --- a/core/src/mindustry/type/StatusEffect.java +++ b/core/src/mindustry/type/StatusEffect.java @@ -15,10 +15,12 @@ public class StatusEffect extends MappableContent{ public float damageMultiplier = 1f; /** Unit health multiplier. */ public float healthMultiplier = 1f; - /** Unit speed multiplier */ + /** Unit speed multiplier. */ public float speedMultiplier = 1f; /** Unit reload multiplier. */ public float reloadMultiplier = 1f; + /** Unit build speed multiplier. */ + public float buildSpeedMultiplier = 1f; /** Unit weapon(s) disabled. */ public boolean disarm = false; /** Damage per frame. */