Add a new Evaporate effect when clearing cells
This commit is contained in:
parent
0713d4a5de
commit
ccec6f7b81
2 changed files with 75 additions and 2 deletions
|
@ -0,0 +1,72 @@
|
||||||
|
package io.github.lonamiwebs.klooni.effects;
|
||||||
|
|
||||||
|
|
||||||
|
import com.badlogic.gdx.Gdx;
|
||||||
|
import com.badlogic.gdx.graphics.Color;
|
||||||
|
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
|
||||||
|
import com.badlogic.gdx.math.Interpolation;
|
||||||
|
import com.badlogic.gdx.math.MathUtils;
|
||||||
|
import com.badlogic.gdx.math.Vector2;
|
||||||
|
|
||||||
|
import io.github.lonamiwebs.klooni.game.Cell;
|
||||||
|
|
||||||
|
public class EvaporateEffect implements IEffect {
|
||||||
|
private Vector2 pos;
|
||||||
|
private float originalX;
|
||||||
|
|
||||||
|
private float size;
|
||||||
|
|
||||||
|
private Color vanishColor;
|
||||||
|
private float vanishSize;
|
||||||
|
private float vanishElapsed;
|
||||||
|
private float driftMagnitude;
|
||||||
|
private float randomOffset;
|
||||||
|
|
||||||
|
private static final float UP_SPEED = 100.0f;
|
||||||
|
private static final float LIFETIME = 3.0f;
|
||||||
|
private static final float INV_LIFETIME = 1.0f / 3.0f;
|
||||||
|
|
||||||
|
public EvaporateEffect() {
|
||||||
|
vanishElapsed = Float.POSITIVE_INFINITY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setInfo(Cell deadCell, Vector2 culprit) {
|
||||||
|
pos = deadCell.pos.cpy();
|
||||||
|
originalX = pos.x;
|
||||||
|
size = deadCell.size;
|
||||||
|
|
||||||
|
vanishSize = deadCell.size;
|
||||||
|
vanishColor = deadCell.getColorCopy();
|
||||||
|
driftMagnitude = Gdx.graphics.getWidth() * 0.05f;
|
||||||
|
vanishElapsed = 0;
|
||||||
|
randomOffset = MathUtils.random(MathUtils.PI2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void draw(SpriteBatch batch) {
|
||||||
|
vanishElapsed += Gdx.graphics.getDeltaTime();
|
||||||
|
|
||||||
|
// Update the size as we fade away
|
||||||
|
final float progress = vanishElapsed * INV_LIFETIME;
|
||||||
|
vanishSize = Interpolation.fade.apply(size, 0, progress);
|
||||||
|
|
||||||
|
// Fade away depending on the time
|
||||||
|
vanishColor.set(vanishColor.r, vanishColor.g, vanishColor.b, 1.0f - progress);
|
||||||
|
|
||||||
|
// Ghostly fade upwards, by doing a lerp from our current position to the wavy one
|
||||||
|
pos.x = MathUtils.lerp(
|
||||||
|
pos.x,
|
||||||
|
originalX + MathUtils.sin(randomOffset + vanishElapsed * 3f) * driftMagnitude,
|
||||||
|
0.3f
|
||||||
|
);
|
||||||
|
pos.y += UP_SPEED * Gdx.graphics.getDeltaTime();
|
||||||
|
|
||||||
|
Cell.draw(vanishColor, batch, pos.x, pos.y, vanishSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isDone() {
|
||||||
|
return vanishElapsed > LIFETIME;
|
||||||
|
}
|
||||||
|
}
|
|
@ -29,6 +29,7 @@ import java.io.DataOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import io.github.lonamiwebs.klooni.Klooni;
|
import io.github.lonamiwebs.klooni.Klooni;
|
||||||
|
import io.github.lonamiwebs.klooni.effects.EvaporateEffect;
|
||||||
import io.github.lonamiwebs.klooni.effects.IEffect;
|
import io.github.lonamiwebs.klooni.effects.IEffect;
|
||||||
import io.github.lonamiwebs.klooni.effects.VanishEffect;
|
import io.github.lonamiwebs.klooni.effects.VanishEffect;
|
||||||
import io.github.lonamiwebs.klooni.serializer.BinSerializable;
|
import io.github.lonamiwebs.klooni.serializer.BinSerializable;
|
||||||
|
@ -212,7 +213,7 @@ public class Board implements BinSerializable {
|
||||||
for (int i = 0; i < cellCount; ++i) {
|
for (int i = 0; i < cellCount; ++i) {
|
||||||
if (clearedRows[i]) {
|
if (clearedRows[i]) {
|
||||||
for (int j = 0; j < cellCount; ++j) {
|
for (int j = 0; j < cellCount; ++j) {
|
||||||
VanishEffect effect = new VanishEffect();
|
IEffect effect = new EvaporateEffect();
|
||||||
effect.setInfo(cells[i][j], lastPutPiecePos);
|
effect.setInfo(cells[i][j], lastPutPiecePos);
|
||||||
effects.add(effect);
|
effects.add(effect);
|
||||||
cells[i][j].set(-1);
|
cells[i][j].set(-1);
|
||||||
|
@ -224,7 +225,7 @@ public class Board implements BinSerializable {
|
||||||
if (clearedCols[j]) {
|
if (clearedCols[j]) {
|
||||||
pan += 2f * (j - cellCount / 2) / (float)cellCount;
|
pan += 2f * (j - cellCount / 2) / (float)cellCount;
|
||||||
for (int i = 0; i < cellCount; ++i) {
|
for (int i = 0; i < cellCount; ++i) {
|
||||||
VanishEffect effect = new VanishEffect();
|
IEffect effect = new EvaporateEffect();
|
||||||
effect.setInfo(cells[i][j], lastPutPiecePos);
|
effect.setInfo(cells[i][j], lastPutPiecePos);
|
||||||
effects.add(effect);
|
effects.add(effect);
|
||||||
cells[i][j].set(-1);
|
cells[i][j].set(-1);
|
||||||
|
|
Loading…
Reference in a new issue