Create an EffectCard for the shop to show them
This commit is contained in:
parent
5a9a5c5a3b
commit
779f37045b
4 changed files with 181 additions and 2 deletions
|
@ -34,6 +34,8 @@ public class Effect {
|
|||
|
||||
private final int effectId;
|
||||
private final Sound effectSound;
|
||||
public final String name;
|
||||
public final int price;
|
||||
|
||||
//endregion
|
||||
|
||||
|
@ -41,8 +43,10 @@ public class Effect {
|
|||
|
||||
// This method will load the sound "sound/effect_{effectName}.mp3"
|
||||
public Effect(final String effectName) {
|
||||
effectId = effectNameToInt(effectName);
|
||||
effectSound = Gdx.audio.newSound(Gdx.files.internal("sound/effect_" + effectName + ".mp3"));
|
||||
name = effectName;
|
||||
effectId = effectNameToInt(name);
|
||||
effectSound = Gdx.audio.newSound(Gdx.files.internal("sound/effect_" + name + ".mp3"));
|
||||
price = effectId == 0 ? 0 : 200; // TODO For now they're all 200 coins except the first
|
||||
}
|
||||
|
||||
//endregion
|
||||
|
@ -53,6 +57,11 @@ public class Effect {
|
|||
effectSound.play(MathUtils.random(0.7f, 1f), MathUtils.random(0.8f, 1.2f), 0);
|
||||
}
|
||||
|
||||
public String getDisplay() {
|
||||
// TODO For now, uppercase the first letter
|
||||
return name.substring(0, 1).toUpperCase() + name.substring(1);
|
||||
}
|
||||
|
||||
//endregion
|
||||
|
||||
//region Static methods
|
||||
|
|
|
@ -182,6 +182,43 @@ public class Klooni extends Game {
|
|||
theme.update(newTheme.getName());
|
||||
}
|
||||
|
||||
// Effects related
|
||||
public static boolean isEffectBought(Effect effect) {
|
||||
if (effect.price == 0)
|
||||
return true;
|
||||
|
||||
String[] effects = prefs.getString("boughtEffects", "").split(":");
|
||||
for (String e : effects)
|
||||
if (e.equals(effect.name))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean buyEffect(Effect effect) {
|
||||
final float money = getRealMoney();
|
||||
if (effect.price > money)
|
||||
return false;
|
||||
|
||||
setMoney(money - effect.price);
|
||||
|
||||
String bought = prefs.getString("boughtEffects", "");
|
||||
if (bought.equals(""))
|
||||
bought = effect.name;
|
||||
else
|
||||
bought += ":" + effect.name;
|
||||
|
||||
prefs.putString("boughtEffects", bought);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void updateEffect(Effect newEffect) {
|
||||
prefs.putString("effectName", newEffect.name).flush();
|
||||
// Create a new effect, since the one passed through the parameter may dispose later
|
||||
effect = new Effect(newEffect.name);
|
||||
}
|
||||
|
||||
// Money related
|
||||
public static void addMoneyFromScore(int score) {
|
||||
setMoney(getRealMoney() + score * SCORE_TO_MONEY);
|
||||
|
|
|
@ -23,6 +23,7 @@ import com.badlogic.gdx.graphics.Color;
|
|||
import com.badlogic.gdx.graphics.Pixmap;
|
||||
import com.badlogic.gdx.graphics.Texture;
|
||||
import com.badlogic.gdx.graphics.g2d.NinePatch;
|
||||
import com.badlogic.gdx.math.MathUtils;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.ImageButton;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
|
||||
import com.badlogic.gdx.utils.Array;
|
||||
|
@ -198,6 +199,13 @@ public class Theme {
|
|||
return colorIndex < 0 ? emptyCell : cells[colorIndex];
|
||||
}
|
||||
|
||||
public Color getRandomCellColor() {
|
||||
if (cells.length == 0)
|
||||
return emptyCell;
|
||||
else
|
||||
return cells[MathUtils.random(cells.length - 1)];
|
||||
}
|
||||
|
||||
public void glClearBackground() {
|
||||
Gdx.gl.glClearColor(background.r, background.g, background.b, background.a);
|
||||
}
|
||||
|
|
125
core/src/io/github/lonamiwebs/klooni/actors/EffectCard.java
Normal file
125
core/src/io/github/lonamiwebs/klooni/actors/EffectCard.java
Normal file
|
@ -0,0 +1,125 @@
|
|||
/*
|
||||
1010! Klooni, a free customizable puzzle game for Android and Desktop
|
||||
Copyright (C) 2017 Lonami Exo | LonamiWebs
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package io.github.lonamiwebs.klooni.actors;
|
||||
|
||||
import com.badlogic.gdx.graphics.Color;
|
||||
import com.badlogic.gdx.graphics.Texture;
|
||||
import com.badlogic.gdx.graphics.g2d.Batch;
|
||||
import com.badlogic.gdx.math.Rectangle;
|
||||
import com.badlogic.gdx.scenes.scene2d.Actor;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Label;
|
||||
|
||||
import io.github.lonamiwebs.klooni.Effect;
|
||||
import io.github.lonamiwebs.klooni.Klooni;
|
||||
import io.github.lonamiwebs.klooni.Theme;
|
||||
import io.github.lonamiwebs.klooni.game.Cell;
|
||||
import io.github.lonamiwebs.klooni.game.GameLayout;
|
||||
|
||||
// Card-like actor used to display information about a given theme
|
||||
public class EffectCard extends Actor {
|
||||
|
||||
//region Members
|
||||
|
||||
private final Klooni game;
|
||||
public final Effect effect;
|
||||
private final Texture background;
|
||||
private Color color;
|
||||
|
||||
private final Label nameLabel;
|
||||
private final Label priceLabel;
|
||||
|
||||
public final Rectangle nameBounds;
|
||||
public final Rectangle priceBounds;
|
||||
|
||||
public float cellSize;
|
||||
|
||||
//endregion
|
||||
|
||||
//region Constructor
|
||||
|
||||
public EffectCard(final Klooni game, final GameLayout layout, final Effect effect) {
|
||||
this.game = game;
|
||||
this.effect = effect;
|
||||
background = Theme.getBlankTexture();
|
||||
|
||||
Label.LabelStyle labelStyle = new Label.LabelStyle();
|
||||
labelStyle.font = game.skin.getFont("font_small");
|
||||
|
||||
priceLabel = new Label("", labelStyle);
|
||||
nameLabel = new Label(effect.getDisplay(), labelStyle);
|
||||
|
||||
Color labelColor = Theme.shouldUseWhite(Klooni.theme.background) ? Color.WHITE : Color.BLACK;
|
||||
priceLabel.setColor(labelColor);
|
||||
nameLabel.setColor(labelColor);
|
||||
|
||||
priceBounds = new Rectangle();
|
||||
nameBounds = new Rectangle();
|
||||
|
||||
layout.update(this);
|
||||
usedEffectUpdated();
|
||||
|
||||
color = Klooni.theme.getRandomCellColor();
|
||||
}
|
||||
|
||||
//endregion
|
||||
|
||||
//region Public methods
|
||||
|
||||
@Override
|
||||
public void draw(Batch batch, float parentAlpha) {
|
||||
final float x = getX(), y = getY();
|
||||
|
||||
batch.setColor(Klooni.theme.background);
|
||||
batch.draw(background, x, y, getWidth(), getHeight());
|
||||
|
||||
// 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);
|
||||
|
||||
nameLabel.setBounds(x + nameBounds.x, y + nameBounds.y, nameBounds.width, nameBounds.height);
|
||||
nameLabel.draw(batch, parentAlpha);
|
||||
|
||||
priceLabel.setBounds(x + priceBounds.x, y + priceBounds.y, priceBounds.width, priceBounds.height);
|
||||
priceLabel.draw(batch, parentAlpha);
|
||||
}
|
||||
|
||||
public void usedEffectUpdated() {
|
||||
if (game.effect.name.equals(effect.name))
|
||||
priceLabel.setText("currently used");
|
||||
else if (Klooni.isEffectBought(effect))
|
||||
priceLabel.setText("bought");
|
||||
else
|
||||
priceLabel.setText("buy for "+effect.price);
|
||||
}
|
||||
|
||||
public void use() {
|
||||
game.updateEffect(effect);
|
||||
usedEffectUpdated();
|
||||
}
|
||||
|
||||
public boolean isUsed() {
|
||||
return game.effect.equals(effect.name);
|
||||
}
|
||||
|
||||
void performBuy() {
|
||||
Klooni.buyEffect(effect);
|
||||
use();
|
||||
}
|
||||
|
||||
//endregion
|
||||
}
|
Loading…
Reference in a new issue