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; 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.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 ThemeCard extends Actor { //region Members public final Theme theme; private final Texture background; private final Label nameLabel; private final Label priceLabel; public final Rectangle nameBounds; public final Rectangle priceBounds; public float cellSize; private final static int colorsUsed[][] = { {0, 7, 7}, {8, 7, 3}, {8, 8, 3} }; //endregion //region Constructor public ThemeCard(final Klooni game, final GameLayout layout, final Theme theme) { this.theme = theme; background = Theme.getBlankTexture(); Label.LabelStyle labelStyle = new Label.LabelStyle(); labelStyle.font = game.skin.getFont("font_small"); priceLabel = new Label("", labelStyle); nameLabel = new Label(theme.getDisplay(), labelStyle); Color labelColor = Theme.shouldUseWhite(theme.background) ? Color.WHITE : Color.BLACK; priceLabel.setColor(labelColor); nameLabel.setColor(labelColor); priceBounds = new Rectangle(); nameBounds = new Rectangle(); layout.update(this); usedThemeUpdated(); } //endregion //region Public methods @Override public void draw(Batch batch, float parentAlpha) { final float x = getX(), y = getY(); batch.setColor(theme.background); batch.draw(background, x, y, getWidth(), getHeight()); // Avoid drawing on the borders by adding +1 cell padding for (int i = 0; i < colorsUsed.length; ++i) { for (int j = 0; j < colorsUsed[i].length; ++j) { Cell.draw(theme.cellTexture, theme.getCellColor(colorsUsed[i][j]), batch, x + cellSize * (j + 1), y + cellSize * (i + 1), 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 usedThemeUpdated() { if (Klooni.theme.getName().equals(theme.getName())) priceLabel.setText("currently used"); else if (Klooni.isThemeBought(theme)) priceLabel.setText("bought"); else priceLabel.setText("buy for "+theme.getPrice()); } public void use() { Klooni.updateTheme(theme); usedThemeUpdated(); } public boolean isUsed() { return Klooni.theme.getName().equals(theme.getName()); } void performBuy() { Klooni.buyTheme(theme); use(); } //endregion }