diff --git a/android/assets/sound/effect_waterdrop.mp3 b/android/assets/sound/effect_waterdrop.mp3 new file mode 100644 index 0000000..2b7c8a8 Binary files /dev/null and b/android/assets/sound/effect_waterdrop.mp3 differ diff --git a/android/assets/ui/x0.75/cells/drop.png b/android/assets/ui/x0.75/cells/drop.png new file mode 100644 index 0000000..707905f Binary files /dev/null and b/android/assets/ui/x0.75/cells/drop.png differ diff --git a/android/assets/ui/x1.0/cells/drop.png b/android/assets/ui/x1.0/cells/drop.png new file mode 100644 index 0000000..951898b Binary files /dev/null and b/android/assets/ui/x1.0/cells/drop.png differ diff --git a/android/assets/ui/x1.25/cells/drop.png b/android/assets/ui/x1.25/cells/drop.png new file mode 100644 index 0000000..e97b8a8 Binary files /dev/null and b/android/assets/ui/x1.25/cells/drop.png differ diff --git a/android/assets/ui/x1.5/cells/drop.png b/android/assets/ui/x1.5/cells/drop.png new file mode 100644 index 0000000..dc4951d Binary files /dev/null and b/android/assets/ui/x1.5/cells/drop.png differ diff --git a/android/assets/ui/x2.0/cells/drop.png b/android/assets/ui/x2.0/cells/drop.png new file mode 100644 index 0000000..dbac0ea Binary files /dev/null and b/android/assets/ui/x2.0/cells/drop.png differ diff --git a/android/assets/ui/x4.0/cells/drop.png b/android/assets/ui/x4.0/cells/drop.png new file mode 100644 index 0000000..334eae6 Binary files /dev/null and b/android/assets/ui/x4.0/cells/drop.png differ diff --git a/core/src/io/github/lonamiwebs/klooni/Klooni.java b/core/src/io/github/lonamiwebs/klooni/Klooni.java index 766d004..e022678 100644 --- a/core/src/io/github/lonamiwebs/klooni/Klooni.java +++ b/core/src/io/github/lonamiwebs/klooni/Klooni.java @@ -30,6 +30,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.Skin; import io.github.lonamiwebs.klooni.effects.EvaporateEffect; import io.github.lonamiwebs.klooni.effects.IEffect; import io.github.lonamiwebs.klooni.effects.VanishEffect; +import io.github.lonamiwebs.klooni.effects.WaterdropEffect; import io.github.lonamiwebs.klooni.game.Cell; import io.github.lonamiwebs.klooni.screens.MainMenuScreen; import io.github.lonamiwebs.klooni.screens.TransitionScreen; @@ -119,6 +120,8 @@ public class Klooni extends Game { // Effects used when clearing a row public static IEffect createEffect(final Cell deadCell, final Vector2 culprit) { + // TODO Every effect should probably return a string corresponding to their sound + // so there's only one switch around final IEffect effect; switch (usedEffect) { default: @@ -126,6 +129,9 @@ public class Klooni extends Game { effect = new VanishEffect(); break; case 1: + effect = new WaterdropEffect(); + break; + case 2: effect = new EvaporateEffect(); break; } @@ -235,6 +241,9 @@ public class Klooni extends Game { effectSound = Gdx.audio.newSound(Gdx.files.internal("sound/effect_vanish.mp3")); break; case 1: + effectSound = Gdx.audio.newSound(Gdx.files.internal("sound/effect_waterdrop.mp3")); + break; + case 2: effectSound = Gdx.audio.newSound(Gdx.files.internal("sound/effect_evaporate.mp3")); break; } @@ -245,7 +254,8 @@ public class Klooni extends Game { // and when creating instances of a lot of effects it's better if we can // save some processor cycles. if (name.equals("vanish")) return 0; - if (name.equals("evaporate")) return 1; + if (name.equals("waterdrop")) return 1; + if (name.equals("evaporate")) return 2; return -1; } diff --git a/core/src/io/github/lonamiwebs/klooni/effects/WaterdropEffect.java b/core/src/io/github/lonamiwebs/klooni/effects/WaterdropEffect.java new file mode 100644 index 0000000..33e04dc --- /dev/null +++ b/core/src/io/github/lonamiwebs/klooni/effects/WaterdropEffect.java @@ -0,0 +1,69 @@ +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.math.MathUtils; +import com.badlogic.gdx.math.Vector2; + +import io.github.lonamiwebs.klooni.SkinLoader; +import io.github.lonamiwebs.klooni.game.Cell; + +public class WaterdropEffect implements IEffect { + private Vector2 pos; + + private Color cellColor; + private Color dropColor; + private float cellSize; + + private final float fallAcceleration; + private float fallSpeed; + + private static final float FALL_ACCELERATION = 500.0f; + private static final float FALL_VARIATION = 50.0f; + private static final float COLOR_SPEED = 7.5f; + + private static Texture dropTexture; + + static { + dropTexture = SkinLoader.loadPng("cells/drop.png"); + } + + public WaterdropEffect() { + fallAcceleration = FALL_ACCELERATION + MathUtils.random(-FALL_VARIATION, FALL_VARIATION); + } + + @Override + public void setInfo(Cell deadCell, Vector2 culprit) { + pos = deadCell.pos.cpy(); + cellSize = deadCell.size; + cellColor = deadCell.getColorCopy(); + dropColor = new Color(cellColor.r, cellColor.g, cellColor.b, 0.0f); + } + + @Override + public void draw(SpriteBatch batch) { + final float dt = Gdx.graphics.getDeltaTime(); + fallSpeed += fallAcceleration * dt; + pos.y -= fallSpeed * dt; + + cellColor.set( + cellColor.r, cellColor.g, cellColor.b, + Math.max(cellColor.a - COLOR_SPEED * dt, 0.0f) + ); + dropColor.set( + cellColor.r, cellColor.g, cellColor.b, + Math.min(dropColor.a + COLOR_SPEED * dt, 1.0f) + ); + + Cell.draw(cellColor, batch, pos.x, pos.y, cellSize); + Cell.draw(dropTexture, dropColor, batch, pos.x, pos.y, cellSize); + } + + @Override + public boolean isDone() { + return pos.y + dropTexture.getHeight() < 0; + } +} diff --git a/original-resources/buttons.svg b/original-resources/buttons.svg index 6be7e77..b1d3c29 100644 --- a/original-resources/buttons.svg +++ b/original-resources/buttons.svg @@ -19,6 +19,22 @@ sodipodi:docname="buttons.svg"> + + + + + @@ -117,6 +133,17 @@ r="6.9998441" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.43721182,3.7482347e-7,-3.6476786e-7,0.42548248,33.63808,466.20236)" /> + + + + + + + diff --git a/original-resources/gen-ui-png.py b/original-resources/gen-ui-png.py index cb3fa7d..106feb9 100755 --- a/original-resources/gen-ui-png.py +++ b/original-resources/gen-ui-png.py @@ -41,7 +41,8 @@ ids = [ cells = [ 'basic', 'bubble', - 'ghost' + 'ghost', + 'drop' ] inkscape_default_dpi = 90