diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index be2226f77d..3b3fb5b50b 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -170,6 +170,7 @@ public class UnitTypes implements ContentList{ mechStepParticles = true; mechStepShake = 0.15f; singleTarget = true; + drownTimeMultiplier = 4f; weapons.add( new Weapon("scepter-weapon"){{ @@ -227,7 +228,7 @@ public class UnitTypes implements ContentList{ armor = 14f; mechStepParticles = true; mechStepShake = 0.75f; - canDrown = false; + drownTimeMultiplier = 6f; mechFrontSway = 1.9f; mechSideSway = 0.6f; ammoType = new ItemAmmoType(Items.thorium); diff --git a/core/src/mindustry/entities/comp/FlyingComp.java b/core/src/mindustry/entities/comp/FlyingComp.java index 48436457d1..a1e11c5a49 100644 --- a/core/src/mindustry/entities/comp/FlyingComp.java +++ b/core/src/mindustry/entities/comp/FlyingComp.java @@ -44,9 +44,7 @@ abstract class FlyingComp implements Posc, Velc, Healthc, Hitboxc{ return isGrounded() && !hovering; } - //TODO - @Nullable - Floor drownFloor(){ + @Nullable Floor drownFloor(){ return canDrown() ? floorOn() : null; } diff --git a/core/src/mindustry/entities/comp/MechComp.java b/core/src/mindustry/entities/comp/MechComp.java index bd822d523b..18ffc784a7 100644 --- a/core/src/mindustry/entities/comp/MechComp.java +++ b/core/src/mindustry/entities/comp/MechComp.java @@ -10,6 +10,7 @@ import mindustry.entities.*; import mindustry.gen.*; import mindustry.type.*; import mindustry.world.*; +import mindustry.world.blocks.environment.*; import static mindustry.Vars.*; @@ -62,6 +63,21 @@ abstract class MechComp implements Posc, Flyingc, Hitboxc, Unitc, Mechc, Elevati walkExtension = extendScl; } + @Replace + @Override + public @Nullable Floor drownFloor(){ + //large mechs can only drown when all the nearby floors are deep + if(hitSize >= 12 && canDrown()){ + for(Point2 p : Geometry.d8){ + Floor f = world.floorWorld(x + p.x * tilesize, y + p.y * tilesize); + if(!f.isDeep()){ + return null; + } + } + } + return canDrown() ? floorOn() : null; + } + public float walkExtend(boolean scaled){ //now ranges from -maxExtension to maxExtension*3