package net.fourbytes.shadow.blocks; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.utils.Array; import net.fourbytes.shadow.Block; import net.fourbytes.shadow.Coord; import net.fourbytes.shadow.Images; import net.fourbytes.shadow.Sounds; import net.fourbytes.shadow.map.IsSaveable; public class BlockDissolve extends BlockType implements BlockLogic { @IsSaveable public boolean triggered = false; @IsSaveable public boolean inverted = false; public BlockDissolve() { } public BlockDissolve(int inverted) { this.inverted = inverted == 1; } @Override public void init() { tickAlways = true; blending = false; } @Override public void tick(float delta) { if (!inverted) { solid = !triggered; } else { solid = triggered; } passSunlight = !solid; alpha = solid?1f:0f; } @Override public TextureRegion getTexture(int id) { return Images.split("block_dissolve", 16, 16)[0][0]; } @Override public boolean triggered() { return triggered; } @Override public void handle(boolean triggered) { if (triggered != this.triggered) { Sounds.getSound("disappear").play(Sounds.calcVolume(pos), Sounds.calcPitch(1f, 0.15f), 0f); this.triggered = triggered; if ((!inverted && !triggered) || (inverted && triggered)) { Array<Block> v = layer.get(Coord.get(pos.x, pos.y)); for (Block b : v) { if (b != this) { b.layer.remove(b); } } } } } @Override public LogicType getType() { return LogicType.INPUT; } @Override public void preRender() { if (solid) { super.preRender(); } } @Override public void render() { if (solid) { super.render(); } } }