diff --git a/core/src/io/github/lonamiwebs/klooni/actors/EffectCard.java b/core/src/io/github/lonamiwebs/klooni/actors/EffectCard.java index f50e35d..1dca3aa 100644 --- a/core/src/io/github/lonamiwebs/klooni/actors/EffectCard.java +++ b/core/src/io/github/lonamiwebs/klooni/actors/EffectCard.java @@ -17,6 +17,7 @@ */ package io.github.lonamiwebs.klooni.actors; +import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.Batch; @@ -24,8 +25,10 @@ import com.badlogic.gdx.graphics.g2d.Batch; import io.github.lonamiwebs.klooni.Effect; import io.github.lonamiwebs.klooni.Klooni; import io.github.lonamiwebs.klooni.Theme; +import io.github.lonamiwebs.klooni.effects.IEffect; import io.github.lonamiwebs.klooni.game.Cell; import io.github.lonamiwebs.klooni.game.GameLayout; +import io.github.lonamiwebs.klooni.game.Piece; // Card-like actor used to display information about a given theme public class EffectCard extends ShopCard { @@ -33,6 +36,9 @@ public class EffectCard extends ShopCard { //region Members public final Effect effect; + private final Cell cell; + private IEffect currentEffect; + private final Texture background; private Color color; @@ -46,6 +52,7 @@ public class EffectCard extends ShopCard { color = Klooni.theme.getRandomCellColor(); this.effect = effect; + cell = Piece.randomCell(0, 0, cellSize); usedItemUpdated(); } @@ -62,7 +69,14 @@ public class EffectCard extends ShopCard { // Avoid drawing on the borders by adding +1 cell padding +1 to center it // so it's becomes cellSize * 2 - Cell.draw(color, batch, x + cellSize * 2, y + cellSize * 2, cellSize); + cell.pos.set(x + cellSize * 2, y + cellSize * 2); + + if (currentEffect != null && !currentEffect.isDone()) { + currentEffect.draw(batch); + } else { + cell.draw(batch); + currentEffect = effect.create(cell, cell.pos); + } super.draw(batch, parentAlpha); } diff --git a/core/src/io/github/lonamiwebs/klooni/effects/EvaporateEffect.java b/core/src/io/github/lonamiwebs/klooni/effects/EvaporateEffect.java index 6f423d1..1fb5d90 100644 --- a/core/src/io/github/lonamiwebs/klooni/effects/EvaporateEffect.java +++ b/core/src/io/github/lonamiwebs/klooni/effects/EvaporateEffect.java @@ -3,7 +3,7 @@ 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.graphics.g2d.Batch; import com.badlogic.gdx.math.Interpolation; import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.Vector2; @@ -44,7 +44,7 @@ public class EvaporateEffect implements IEffect { } @Override - public void draw(SpriteBatch batch) { + public void draw(Batch batch) { vanishElapsed += Gdx.graphics.getDeltaTime(); // Update the size as we fade away diff --git a/core/src/io/github/lonamiwebs/klooni/effects/IEffect.java b/core/src/io/github/lonamiwebs/klooni/effects/IEffect.java index 1d70e57..4a15a7c 100644 --- a/core/src/io/github/lonamiwebs/klooni/effects/IEffect.java +++ b/core/src/io/github/lonamiwebs/klooni/effects/IEffect.java @@ -1,12 +1,12 @@ package io.github.lonamiwebs.klooni.effects; -import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.math.Vector2; import io.github.lonamiwebs.klooni.game.Cell; public interface IEffect { void setInfo(Cell deadCell, Vector2 culprit); - void draw(SpriteBatch batch); + void draw(Batch batch); boolean isDone(); } diff --git a/core/src/io/github/lonamiwebs/klooni/effects/VanishEffect.java b/core/src/io/github/lonamiwebs/klooni/effects/VanishEffect.java index 5904e3a..466f3c5 100644 --- a/core/src/io/github/lonamiwebs/klooni/effects/VanishEffect.java +++ b/core/src/io/github/lonamiwebs/klooni/effects/VanishEffect.java @@ -3,7 +3,7 @@ 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.graphics.g2d.Batch; import com.badlogic.gdx.math.Interpolation; import com.badlogic.gdx.math.Vector2; @@ -42,7 +42,7 @@ public class VanishEffect implements IEffect { } @Override - public void draw(SpriteBatch batch) { + public void draw(Batch batch) { vanishElapsed += Gdx.graphics.getDeltaTime(); // vanishElapsed might be < 0 (delay), so clamp to 0 diff --git a/core/src/io/github/lonamiwebs/klooni/effects/WaterdropEffect.java b/core/src/io/github/lonamiwebs/klooni/effects/WaterdropEffect.java index 33e04dc..62548aa 100644 --- a/core/src/io/github/lonamiwebs/klooni/effects/WaterdropEffect.java +++ b/core/src/io/github/lonamiwebs/klooni/effects/WaterdropEffect.java @@ -4,7 +4,7 @@ package io.github.lonamiwebs.klooni.effects; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.Vector2; @@ -44,7 +44,7 @@ public class WaterdropEffect implements IEffect { } @Override - public void draw(SpriteBatch batch) { + public void draw(Batch batch) { final float dt = Gdx.graphics.getDeltaTime(); fallSpeed += fallAcceleration * dt; pos.y -= fallSpeed * dt; diff --git a/core/src/io/github/lonamiwebs/klooni/game/Board.java b/core/src/io/github/lonamiwebs/klooni/game/Board.java index bedd3ad..e5c009a 100644 --- a/core/src/io/github/lonamiwebs/klooni/game/Board.java +++ b/core/src/io/github/lonamiwebs/klooni/game/Board.java @@ -27,7 +27,6 @@ import java.io.DataOutputStream; import java.io.IOException; import io.github.lonamiwebs.klooni.Effect; -import io.github.lonamiwebs.klooni.Klooni; import io.github.lonamiwebs.klooni.effects.IEffect; import io.github.lonamiwebs.klooni.serializer.BinSerializable; diff --git a/core/src/io/github/lonamiwebs/klooni/game/Cell.java b/core/src/io/github/lonamiwebs/klooni/game/Cell.java index f174f4d..894dbb3 100644 --- a/core/src/io/github/lonamiwebs/klooni/game/Cell.java +++ b/core/src/io/github/lonamiwebs/klooni/game/Cell.java @@ -20,7 +20,6 @@ package io.github.lonamiwebs.klooni.game; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.Batch; -import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.math.Vector2; import java.io.DataInputStream; @@ -62,7 +61,7 @@ public class Cell implements BinSerializable { colorIndex = ci; } - void draw(SpriteBatch batch) { + public void draw(Batch batch) { // Always query the color to the theme, because it might have changed draw(Klooni.theme.getCellColor(colorIndex), batch, pos.x, pos.y, size); } diff --git a/core/src/io/github/lonamiwebs/klooni/game/Piece.java b/core/src/io/github/lonamiwebs/klooni/game/Piece.java index be239b2..e1bda17 100644 --- a/core/src/io/github/lonamiwebs/klooni/game/Piece.java +++ b/core/src/io/github/lonamiwebs/klooni/game/Piece.java @@ -112,6 +112,14 @@ public class Piece { //region Static methods + // Only the pieces know how many colors there are, so the method for + // creating cells belongs here as a public static one. + public static Cell randomCell(final float x, final float y, final float size) { + final Cell cell = new Cell(x, y, size); + cell.set(MathUtils.random(8)); + return cell; + } + // Generates a random piece with always the same color for the generated shape static Piece random() { // 9 pieces [0…8]; 4 possible rotations [0…3]