From 98ec2dcf440348226f62cc8c19412d53387aab33 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 7 Apr 2018 23:24:33 -0400 Subject: [PATCH] Implemented passable liquids --- core/assets/maps/trinity.mmap | Bin 198401 -> 198417 bytes core/assets/version.properties | 2 +- core/src/io/anuke/mindustry/Vars.java | 2 +- .../mindustry/content/StatusEffects.java | 6 +- .../mindustry/content/blocks/Blocks.java | 27 ++++++-- .../anuke/mindustry/content/fx/BlockFx.java | 18 +++++ .../anuke/mindustry/content/fx/ShootFx.java | 8 +-- core/src/io/anuke/mindustry/core/Control.java | 2 +- .../src/io/anuke/mindustry/core/Renderer.java | 25 ++++--- .../io/anuke/mindustry/entities/Player.java | 46 ++++++++----- .../src/io/anuke/mindustry/entities/Unit.java | 57 ++++++++++++++++ .../entities/effect/GroundEffectEntity.java | 64 ++++++++++++++++++ .../entities/effect/StaticEffectEntity.java | 45 ------------ .../entities/units/GroundUnitType.java | 15 ++++ .../mindustry/entities/units/UnitType.java | 11 +-- .../ui/dialogs/SettingsMenuDialog.java | 4 ++ .../mindustry/world/blocks/types/Floor.java | 25 +++++++ .../blocks/types/distribution/Teleporter.java | 2 + 18 files changed, 265 insertions(+), 94 deletions(-) create mode 100644 core/src/io/anuke/mindustry/entities/effect/GroundEffectEntity.java delete mode 100644 core/src/io/anuke/mindustry/entities/effect/StaticEffectEntity.java diff --git a/core/assets/maps/trinity.mmap b/core/assets/maps/trinity.mmap index de1d8eeb07a9e070681a90dd84d52b8f67f65102..42ee699faab5a71d0a169d0a0538a888e7844fd6 100644 GIT binary patch literal 198417 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 D{?-73 literal 198401 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 bulletGroup = Entities.addGroup(Bullet.class); public static final EntityGroup shieldGroup = Entities.addGroup(Shield.class, false); public static final EntityGroup effectGroup = Entities.addGroup(EffectEntity.class, false); - public static final EntityGroup staticEffectGroup = Entities.addGroup(EffectEntity.class, false); + public static final EntityGroup groundEffectGroup = Entities.addGroup(EffectEntity.class, false); public static final EntityGroup[] unitGroups = new EntityGroup[Team.values().length]; static{ diff --git a/core/src/io/anuke/mindustry/content/StatusEffects.java b/core/src/io/anuke/mindustry/content/StatusEffects.java index 40864ec971..11c969d972 100644 --- a/core/src/io/anuke/mindustry/content/StatusEffects.java +++ b/core/src/io/anuke/mindustry/content/StatusEffects.java @@ -21,7 +21,7 @@ public class StatusEffects { @Override public TransitionResult getTransition(Unit unit, StatusEffect to, float time, float newTime, TransitionResult result){ if(to == oiled){ - unit.damage(1f, false); + unit.damage(1f); Effects.effect(EnvironmentFx.burning, unit.x + Mathf.range(unit.getSize()/2f), unit.y + Mathf.range(unit.getSize()/2f)); return result.set(this, Math.min(time + newTime, baseDuration + oiled.baseDuration)); } @@ -31,7 +31,7 @@ public class StatusEffects { @Override public void update(Unit unit, float time){ - unit.damage(0.04f * Timers.delta(), false); + unit.damagePeriodic(0.04f); if(Mathf.chance(Timers.delta() * 0.2f)){ Effects.effect(EnvironmentFx.burning, unit.x + Mathf.range(unit.getSize()/2f), unit.y + Mathf.range(unit.getSize()/2f)); @@ -87,7 +87,7 @@ public class StatusEffects { @Override public void update(Unit unit, float time){ unit.velocity.scl(0.8f); - unit.damage(0.1f * Timers.delta(), false); + unit.damagePeriodic(0.1f); if(Mathf.chance(Timers.delta() * 0.2f)){ Effects.effect(EnvironmentFx.melting, unit.x + Mathf.range(unit.getSize()/2f), unit.y + Mathf.range(unit.getSize()/2f)); diff --git a/core/src/io/anuke/mindustry/content/blocks/Blocks.java b/core/src/io/anuke/mindustry/content/blocks/Blocks.java index 395f971a4d..7217d98d08 100644 --- a/core/src/io/anuke/mindustry/content/blocks/Blocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/Blocks.java @@ -1,7 +1,9 @@ package io.anuke.mindustry.content.blocks; +import com.badlogic.gdx.graphics.Color; import io.anuke.mindustry.content.Items; import io.anuke.mindustry.content.Liquids; +import io.anuke.mindustry.content.StatusEffects; import io.anuke.mindustry.graphics.DrawLayer; import io.anuke.mindustry.resource.ItemStack; import io.anuke.mindustry.world.Block; @@ -21,6 +23,9 @@ public class Blocks { blockpart = new BlockPart(), + defaultFloor = new Floor("defaultfloor") {{ + }}, + space = new Floor("space") {{ variants = 0; drawLayer = DrawLayer.space; @@ -32,32 +37,46 @@ public class Blocks { }}, deepwater = new Floor("deepwater") {{ + liquidColor = Color.valueOf("546bb3"); + speedMultiplier = 0.3f; variants = 0; - solid = true; liquidDrop = Liquids.water; liquid = true; + status = StatusEffects.wet; + statusIntensity = 1f; + drownTime = 140f; drawLayer = DrawLayer.water; }}, water = new Floor("water") {{ + liquidColor = Color.valueOf("546bb3"); + speedMultiplier = 0.5f; variants = 0; - solid = true; + status = StatusEffects.wet; + statusIntensity = 0.9f; liquidDrop = Liquids.water; liquid = true; drawLayer = DrawLayer.water; }}, lava = new Floor("lava") {{ + liquidColor = Color.valueOf("ed5334"); + speedMultiplier = 0.2f; + damageTaken = 0.1f; + status = StatusEffects.melting; + statusIntensity = 0.8f; variants = 0; - solid = true; liquidDrop = Liquids.lava; liquid = true; drawLayer = DrawLayer.lava; }}, oil = new Floor("oil") {{ + liquidColor = Color.valueOf("292929"); + status = StatusEffects.oiled; + statusIntensity = 1f; + speedMultiplier = 0.2f; variants = 0; - solid = true; liquidDrop = Liquids.oil; liquid = true; drawLayer = DrawLayer.oil; diff --git a/core/src/io/anuke/mindustry/content/fx/BlockFx.java b/core/src/io/anuke/mindustry/content/fx/BlockFx.java index 42a6e22d51..b516138ee0 100644 --- a/core/src/io/anuke/mindustry/content/fx/BlockFx.java +++ b/core/src/io/anuke/mindustry/content/fx/BlockFx.java @@ -2,13 +2,16 @@ package io.anuke.mindustry.content.fx; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Colors; +import io.anuke.mindustry.entities.effect.GroundEffectEntity.GroundEffect; import io.anuke.mindustry.graphics.Palette; import io.anuke.ucore.core.Effects.Effect; import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.graphics.Fill; +import io.anuke.ucore.graphics.Hue; import io.anuke.ucore.graphics.Lines; import io.anuke.ucore.util.Angles; import io.anuke.ucore.util.Mathf; +import io.anuke.ucore.util.Tmp; import static io.anuke.mindustry.Vars.tilesize; @@ -251,6 +254,21 @@ public class BlockFx { Lines.lineAngle(e.x + x, e.y + y, Mathf.atan2(x, y), e.fslope()*4f + 1f); }); + Draw.reset(); + }), + ripple = new GroundEffect(false, 30, e -> { + Draw.color(Hue.shift(Tmp.c1.set(e.color), 2, 0.1f)); + Lines.stroke(e.fout() + 0.4f); + Lines.circle(e.x, e.y, 2f + e.fin()*4f); + Draw.reset(); + }), + + bubble = new Effect(20, e -> { + Draw.color(Hue.shift(Tmp.c1.set(e.color), 2, 0.1f)); + Lines.stroke(e.fout() + 0.2f); + Angles.randLenVectors(e.id, 3, 11f, (x, y) -> { + Lines.circle(e.x + x, e.y + y, 1f + e.fin() * 3f); + }); Draw.reset(); }); } diff --git a/core/src/io/anuke/mindustry/content/fx/ShootFx.java b/core/src/io/anuke/mindustry/content/fx/ShootFx.java index 8d8f7b3ada..cf30c3155f 100644 --- a/core/src/io/anuke/mindustry/content/fx/ShootFx.java +++ b/core/src/io/anuke/mindustry/content/fx/ShootFx.java @@ -1,7 +1,7 @@ package io.anuke.mindustry.content.fx; import com.badlogic.gdx.graphics.Color; -import io.anuke.mindustry.entities.effect.StaticEffectEntity.StaticEffect; +import io.anuke.mindustry.entities.effect.GroundEffectEntity.GroundEffect; import io.anuke.mindustry.graphics.Palette; import io.anuke.ucore.core.Effects.Effect; import io.anuke.ucore.graphics.Draw; @@ -88,7 +88,7 @@ public class ShootFx { Draw.reset(); }), - shellEjectSmall = new StaticEffect(30f, 400f, e -> { + shellEjectSmall = new GroundEffect(30f, 400f, e -> { Draw.color(Palette.lightOrange, Color.LIGHT_GRAY, Palette.lightishGray, e.fin()); float rot = e.rotation + 90f; for(int i : Mathf.signs){ @@ -103,7 +103,7 @@ public class ShootFx { Draw.color(); }), - shellEjectMedium = new StaticEffect(34f, 400f, e -> { + shellEjectMedium = new GroundEffect(34f, 400f, e -> { Draw.color(Palette.lightOrange, Color.LIGHT_GRAY, Palette.lightishGray, e.fin()); float rot = e.rotation + 90f; for(int i : Mathf.signs){ @@ -126,7 +126,7 @@ public class ShootFx { Draw.color(); }), - shellEjectBig = new StaticEffect(22f, 400f, e -> { + shellEjectBig = new GroundEffect(22f, 400f, e -> { Draw.color(Palette.lightOrange, Color.LIGHT_GRAY, Palette.lightishGray, e.fin()); float rot = e.rotation + 90f; for(int i : Mathf.signs){ diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java index dfc02d5fbf..ec1fcb6ecc 100644 --- a/core/src/io/anuke/mindustry/core/Control.java +++ b/core/src/io/anuke/mindustry/core/Control.java @@ -352,7 +352,7 @@ public class Control extends Module{ if(!state.is(State.paused) || Net.active()){ Entities.update(effectGroup); - Entities.update(staticEffectGroup); + Entities.update(groundEffectGroup); if(respawntime > 0){ diff --git a/core/src/io/anuke/mindustry/core/Renderer.java b/core/src/io/anuke/mindustry/core/Renderer.java index 220bff8dab..c931547458 100644 --- a/core/src/io/anuke/mindustry/core/Renderer.java +++ b/core/src/io/anuke/mindustry/core/Renderer.java @@ -13,11 +13,12 @@ import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.FloatArray; import com.badlogic.gdx.utils.Pools; import io.anuke.mindustry.content.blocks.Blocks; +import io.anuke.mindustry.content.fx.Fx; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.entities.SyncEntity; -import io.anuke.mindustry.entities.effect.StaticEffectEntity; -import io.anuke.mindustry.entities.effect.StaticEffectEntity.StaticEffect; +import io.anuke.mindustry.entities.effect.GroundEffectEntity; +import io.anuke.mindustry.entities.effect.GroundEffectEntity.GroundEffect; import io.anuke.mindustry.entities.units.BaseUnit; import io.anuke.mindustry.game.Team; import io.anuke.mindustry.graphics.BlockRenderer; @@ -60,17 +61,25 @@ public class Renderer extends RendererModule{ Lines.setCircleVertices(14); Core.cameraScale = baseCameraScale; - Effects.setEffectProvider((name, color, x, y, rotation) -> { + Effects.setEffectProvider((effect, color, x, y, rotation) -> { + if(effect == Fx.none) return; if(Settings.getBool("effects")){ Rectangle view = rect.setSize(camera.viewportWidth, camera.viewportHeight) .setCenter(camera.position.x, camera.position.y); - Rectangle pos = rect2.setSize(name.size).setCenter(x, y); + Rectangle pos = rect2.setSize(effect.size).setCenter(x, y); if(view.overlaps(pos)){ - int id = new EffectEntity(name, color, rotation).set(x, y).add(effectGroup).id; + int id = 0; - if(name instanceof StaticEffect){ - new StaticEffectEntity((StaticEffect) name, color, rotation).set(x, y).add(staticEffectGroup).id = id; + if(!(effect instanceof GroundEffect) || ((GroundEffect)effect).isStatic) { + id = new EffectEntity(effect, color, rotation).set(x, y).add(effectGroup).id; + } + + if(effect instanceof GroundEffect){ + GroundEffectEntity r = new GroundEffectEntity((GroundEffect) effect, color, rotation).set(x, y).add(groundEffectGroup); + if(((GroundEffect)effect).isStatic){ + r.id = id; + } } } } @@ -191,7 +200,7 @@ public class Renderer extends RendererModule{ blocks.drawFloor(); - Entities.draw(staticEffectGroup); + Entities.draw(groundEffectGroup); blocks.processBlocks(); blocks.drawBlocks(Layer.overlay); diff --git a/core/src/io/anuke/mindustry/entities/Player.java b/core/src/io/anuke/mindustry/entities/Player.java index 9beb6219b4..fe77f5d745 100644 --- a/core/src/io/anuke/mindustry/entities/Player.java +++ b/core/src/io/anuke/mindustry/entities/Player.java @@ -4,16 +4,16 @@ import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.Vector2; import io.anuke.mindustry.content.Mechs; import io.anuke.mindustry.content.Weapons; -import io.anuke.mindustry.content.blocks.Blocks; -import io.anuke.mindustry.game.Team; import io.anuke.mindustry.content.fx.ExplosionFx; import io.anuke.mindustry.content.fx.Fx; +import io.anuke.mindustry.game.Team; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.NetEvents; import io.anuke.mindustry.resource.Mech; import io.anuke.mindustry.resource.Upgrade; import io.anuke.mindustry.resource.Weapon; import io.anuke.mindustry.world.Tile; +import io.anuke.mindustry.world.blocks.types.Floor; import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Inputs; import io.anuke.ucore.core.Settings; @@ -77,7 +77,7 @@ public class Player extends Unit{ @Override public boolean isFlying(){ - return mech.flying; + return mech.flying || noclip; } @Override @@ -87,13 +87,14 @@ public class Player extends Unit{ @Override public void damage(float amount){ - if(debug || mech.flying) return; + //if(debug || mech.flying) return; hitTime = hitDuration; - - health -= amount; - if(health <= 0 && !dead && isLocal){ //remote players don't die normally - onDeath(); - dead = true; + if(!debug) { + health -= amount; + if(health <= 0 && !dead && isLocal){ //remote players don't die normally + onDeath(); + dead = true; + } } } @@ -105,6 +106,7 @@ public class Player extends Unit{ @Override public void onDeath(){ dead = true; + drownTime = 0f; if(Net.active()){ NetEvents.handleUnitDeath(this); } @@ -148,9 +150,16 @@ public class Player extends Unit{ float ft = Mathf.sin(walktime, 6f, 2f); + Floor floor = getFloorOn(); + + Draw.color(); Draw.alpha(hitTime / hitDuration); if(!mech.flying) { + if(floor.liquid){ + Draw.tint(Color.WHITE, floor.liquidColor, 0.5f); + } + for (int i : Mathf.signs) { tr.trns(baseRotation, ft * i); Draw.rect(mname + "-leg", x + tr.x, y + tr.y, 12f * i, 12f - Mathf.clamp(ft * i, 0, 2), baseRotation - 90); @@ -159,6 +168,12 @@ public class Player extends Unit{ Draw.rect(mname + "-base", x, y,baseRotation- 90); } + if(floor.liquid) { + Draw.tint(Color.WHITE, floor.liquidColor, drownTime * 0.4f); + }else { + Draw.tint(Color.WHITE); + } + Draw.rect(mname, x, y, rotation -90); for (int i : Mathf.signs) { @@ -202,7 +217,7 @@ public class Player extends Unit{ Tile tile = world.tileWorld(x, y); //if player is in solid block - if(tile != null && ((tile.floor().liquid && tile.block() == Blocks.air) || tile.solid())){ + if(tile != null && tile.solid()){ stucktime += Timers.delta(); }else{ stucktime = 0f; @@ -248,15 +263,12 @@ public class Player extends Unit{ movement.limit(speed); - if(!noclip){ - move(movement.x*Timers.delta(), movement.y*Timers.delta()); - }else{ - x += movement.x*Timers.delta(); - y += movement.y*Timers.delta(); - } + velocity.add(movement); + + updateVelocity(0.4f, speed); if(!movement.isZero()){ - walktime += Timers.delta(); + walktime += Timers.delta() * velocity.len()*(1f/0.5f)/speed * getFloorOn().speedMultiplier; baseRotation = Mathf.slerpDelta(baseRotation, movement.angle(), 0.13f); } diff --git a/core/src/io/anuke/mindustry/entities/Unit.java b/core/src/io/anuke/mindustry/entities/Unit.java index d4805fb02b..fef9506e29 100644 --- a/core/src/io/anuke/mindustry/entities/Unit.java +++ b/core/src/io/anuke/mindustry/entities/Unit.java @@ -1,10 +1,17 @@ package io.anuke.mindustry.entities; import com.badlogic.gdx.math.Vector2; +import io.anuke.mindustry.content.blocks.Blocks; import io.anuke.mindustry.game.Team; +import io.anuke.mindustry.world.Tile; +import io.anuke.mindustry.world.blocks.types.Floor; +import io.anuke.ucore.core.Effects; +import io.anuke.ucore.core.Timers; import io.anuke.ucore.entities.SolidEntity; +import io.anuke.ucore.util.Mathf; import static io.anuke.mindustry.Vars.state; +import static io.anuke.mindustry.Vars.world; public abstract class Unit extends SyncEntity { //total duration of hit effect @@ -14,6 +21,7 @@ public abstract class Unit extends SyncEntity { public Team team = Team.blue; public Vector2 velocity = new Vector2(); public float hitTime; + public float drownTime; @Override public void damage(float amount){ @@ -26,6 +34,55 @@ public abstract class Unit extends SyncEntity { return other instanceof Bullet && state.teams.areEnemies((((Bullet) other).team), team); } + public Floor getFloorOn(){ + Tile tile = world.tileWorld(x, y); + return (Floor)(tile == null || (!(tile.floor() instanceof Floor)) ? Blocks.defaultFloor : tile.floor()); + } + + public void updateVelocity(float drag, float maxVelocity){ + Floor floor = getFloorOn(); + + velocity.limit(maxVelocity); + + if(isFlying()) { + x += velocity.x / getMass(); + y += velocity.y / getMass(); + }else{ + if(floor.liquid && velocity.len() > 0.4f && Timers.get(this, "flooreffect", 14 - (velocity.len() * floor.speedMultiplier)*2f)){ + Effects.effect(floor.walkEffect, floor.liquidColor, x, y); + } + + status.handleApply(this, floor.status, floor.statusIntensity); + + if(floor.damageTaken > 0f){ + damagePeriodic(floor.damageTaken); + } + + if(floor.drownTime > 0){ + drownTime += Timers.delta() * 1f/floor.drownTime; + if(Timers.get(this, "drowneffect", 15)){ + Effects.effect(floor.drownUpdateEffect, floor.liquidColor, x, y); + } + }else{ + drownTime = Mathf.lerpDelta(drownTime, 0f, 0.03f); + } + + drownTime = Mathf.clamp(drownTime); + + if(drownTime >= 1f){ + damage(health + 1, false); + } + + move(velocity.x / getMass() * floor.speedMultiplier, velocity.y / getMass() * floor.speedMultiplier); + } + + velocity.scl(Mathf.clamp(1f-drag* floor.dragMultiplier* Timers.delta())); + } + + public void damagePeriodic(float amount){ + damage(amount * Timers.delta(), Timers.get(this, "damageeffect", 20)); + } + public void damage(float amount, boolean withEffect){ if(withEffect){ damage(amount); diff --git a/core/src/io/anuke/mindustry/entities/effect/GroundEffectEntity.java b/core/src/io/anuke/mindustry/entities/effect/GroundEffectEntity.java new file mode 100644 index 0000000000..109bb2a2eb --- /dev/null +++ b/core/src/io/anuke/mindustry/entities/effect/GroundEffectEntity.java @@ -0,0 +1,64 @@ +package io.anuke.mindustry.entities.effect; + +import com.badlogic.gdx.graphics.Color; +import io.anuke.ucore.core.Effects; +import io.anuke.ucore.core.Effects.Effect; +import io.anuke.ucore.core.Timers; +import io.anuke.ucore.entities.EffectEntity; +import io.anuke.ucore.function.EffectRenderer; +import io.anuke.ucore.util.Mathf; + +public class GroundEffectEntity extends EffectEntity { + private boolean once; + + public GroundEffectEntity(GroundEffect effect, Color color, float rotation) { + super(effect, color, rotation); + } + + @Override + public void update(){ + GroundEffect effect = (GroundEffect)renderer; + + if(effect.isStatic) { + time += Timers.delta(); + + time = Mathf.clamp(time, 0, effect.staticLife); + + if (!once && time >= lifetime) { + once = true; + time = 0f; + } else if (once && time >= effect.staticLife) { + remove(); + } + }else{ + super.update(); + } + } + + @Override + public void drawOver(){ + GroundEffect effect = (GroundEffect)renderer; + + if(once && effect.isStatic) + Effects.renderEffect(id, renderer, color, lifetime, rotation, x, y); + else if(!effect.isStatic) + Effects.renderEffect(id, renderer, color, time, rotation, x, y); + } + + public static class GroundEffect extends Effect{ + public final float staticLife; + public final boolean isStatic; + + public GroundEffect(float life, float staticLife, EffectRenderer draw) { + super(life, draw); + this.staticLife = staticLife; + this.isStatic = false; + } + + public GroundEffect(boolean isStatic, float life, EffectRenderer draw) { + super(life, draw); + this.staticLife = 0f; + this.isStatic = isStatic; + } + } +} diff --git a/core/src/io/anuke/mindustry/entities/effect/StaticEffectEntity.java b/core/src/io/anuke/mindustry/entities/effect/StaticEffectEntity.java deleted file mode 100644 index 6539f9a59c..0000000000 --- a/core/src/io/anuke/mindustry/entities/effect/StaticEffectEntity.java +++ /dev/null @@ -1,45 +0,0 @@ -package io.anuke.mindustry.entities.effect; - -import com.badlogic.gdx.graphics.Color; -import io.anuke.ucore.core.Effects; -import io.anuke.ucore.core.Effects.Effect; -import io.anuke.ucore.core.Timers; -import io.anuke.ucore.entities.EffectEntity; -import io.anuke.ucore.function.EffectRenderer; -import io.anuke.ucore.util.Mathf; - -public class StaticEffectEntity extends EffectEntity { - private boolean once; - - public StaticEffectEntity(StaticEffect effect, Color color, float rotation) { - super(effect, color, rotation); - } - - @Override - public void update(){ - time += Timers.delta(); - - time = Mathf.clamp(time, 0, ((StaticEffect)renderer).staticLife); - - if(!once && time >= lifetime){ - once = true; - time = 0f; - }else if(once && time >= ((StaticEffect)renderer).staticLife){ - remove(); - } - } - - @Override - public void drawOver(){ - if(once) Effects.renderEffect(id, renderer, color, lifetime, rotation, x, y); - } - - public static class StaticEffect extends Effect{ - public final float staticLife; - - public StaticEffect(float life, float staticLife, EffectRenderer draw) { - super(life, draw); - this.staticLife = staticLife; - } - } -} diff --git a/core/src/io/anuke/mindustry/entities/units/GroundUnitType.java b/core/src/io/anuke/mindustry/entities/units/GroundUnitType.java index d25d03c0cc..d04160851f 100644 --- a/core/src/io/anuke/mindustry/entities/units/GroundUnitType.java +++ b/core/src/io/anuke/mindustry/entities/units/GroundUnitType.java @@ -1,13 +1,16 @@ package io.anuke.mindustry.entities.units; +import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.ObjectSet; import io.anuke.mindustry.entities.Unit; import io.anuke.mindustry.entities.Units; import io.anuke.mindustry.game.TeamInfo.TeamData; import io.anuke.mindustry.world.Tile; +import io.anuke.mindustry.world.blocks.types.Floor; import io.anuke.ucore.core.Timers; import io.anuke.ucore.graphics.Draw; +import io.anuke.ucore.graphics.Hue; import io.anuke.ucore.util.Mathf; import io.anuke.ucore.util.Translator; @@ -42,11 +45,23 @@ public abstract class GroundUnitType extends UnitType{ float ft = Mathf.sin(walktime, 6f, 2f); + Floor floor = unit.getFloorOn(); + + if(floor.liquid){ + Draw.tint(Hue.mix(Color.WHITE, floor.liquidColor, 0.5f)); + } + for (int i : Mathf.signs) { tr1.trns(unit.baseRotation, ft * i); Draw.rect(name + "-leg", unit.x + tr1.x, unit.y + tr1.y, 12f * i, 12f - Mathf.clamp(ft * i, 0, 2), unit.baseRotation - 90); } + if(floor.liquid) { + Draw.tint(Color.WHITE, floor.liquidColor, unit.drownTime * 0.4f); + }else { + Draw.tint(Color.WHITE); + } + Draw.rect(name + "-base", unit.x, unit.y, unit.baseRotation- 90); Draw.rect(name, unit.x, unit.y, unit.rotation -90); diff --git a/core/src/io/anuke/mindustry/entities/units/UnitType.java b/core/src/io/anuke/mindustry/entities/units/UnitType.java index a4c355ff62..beab516389 100644 --- a/core/src/io/anuke/mindustry/entities/units/UnitType.java +++ b/core/src/io/anuke/mindustry/entities/units/UnitType.java @@ -76,16 +76,7 @@ public abstract class UnitType { unit.status.update(unit); - unit.velocity.limit(maxVelocity); - - if(isFlying) { - unit.x += unit.velocity.x / mass; - unit.y += unit.velocity.y / mass; - }else{ - unit.move(unit.velocity.x / mass, unit.velocity.y / mass); - } - - unit.velocity.scl(Mathf.clamp(1f-drag* Timers.delta())); + unit.updateVelocity(drag, maxVelocity); if(unit.target != null) behavior(unit); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java index 9e96043e84..286e24f72e 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java @@ -145,9 +145,13 @@ public class SettingsMenuDialog extends SettingsDialog{ renderer.pixelSurface.setScale(Core.cameraScale); renderer.shadowSurface.setScale(Core.cameraScale); renderer.shieldSurface.setScale(Core.cameraScale); + //Graphics.getEffects1().setScale(Core.cameraScale); + //Graphics.getEffects2().setScale(Core.cameraScale); }else{ renderer.shadowSurface.setScale(1); renderer.shieldSurface.setScale(1); + //Graphics.getEffects1().setScale(1); + //Graphics.getEffects2().setScale(1); } renderer.setPixelate(b); }); diff --git a/core/src/io/anuke/mindustry/world/blocks/types/Floor.java b/core/src/io/anuke/mindustry/world/blocks/types/Floor.java index 5a75611207..4d0326f2dc 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/Floor.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/Floor.java @@ -1,9 +1,14 @@ package io.anuke.mindustry.world.blocks.types; +import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.math.MathUtils; +import io.anuke.mindustry.content.StatusEffects; +import io.anuke.mindustry.content.fx.BlockFx; +import io.anuke.mindustry.entities.StatusEffect; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; +import io.anuke.ucore.core.Effects.Effect; import io.anuke.ucore.function.Predicate; import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.util.Mathf; @@ -14,12 +19,32 @@ public class Floor extends Block{ protected TextureRegion tempRegion = new TextureRegion(); protected Predicate blends = block -> block != this; protected boolean blend = true; + + public float speedMultiplier = 1f; + public float dragMultiplier = 1f; + public float damageTaken = 0f; + public float drownTime = 0f; + public Effect walkEffect = BlockFx.ripple; + public Effect drownUpdateEffect = BlockFx.bubble; + public StatusEffect status = StatusEffects.none; + public float statusIntensity = 0.6f; + public Color liquidColor; public Floor(String name) { super(name); variants = 3; } + @Override + public void init(){ + super.init(); + + if(liquid && liquidColor == null){ + throw new RuntimeException("All liquids must define a liquidColor! Problematic block: " + name); + } + } + + @Override public void drawNonLayer(Tile tile){ MathUtils.random.setSeed(tile.id()); diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java index faac36d7ee..9194539cc3 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java @@ -166,6 +166,8 @@ public class Teleporter extends PowerBlock{ catastrophicFailure(tile); } + //TODO draw warning info! + if (entity.teleporting) { entity.speedScl = Mathf.lerpDelta(entity.speedScl, 2f, 0.01f); float liquidUsed = Math.min(liquidCapacity, liquidUse * Timers.delta());