/* * Copyright (c) 2012. HappyDroids LLC, All rights reserved. */ package com.happydroids.droidtowers.gui; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.Touchable; import com.badlogic.gdx.scenes.scene2d.ui.Image; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Slider; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.utils.Align; import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; import com.google.common.eventbus.Subscribe; import com.happydroids.droidtowers.Colors; import com.happydroids.droidtowers.TowerAssetManager; import com.happydroids.droidtowers.TowerConsts; import com.happydroids.droidtowers.achievements.Achievement; import com.happydroids.droidtowers.achievements.AchievementEngine; import com.happydroids.droidtowers.entities.Player; import com.happydroids.droidtowers.events.GameSpeedChangeEvent; import com.happydroids.droidtowers.scenes.components.SceneManager; import static com.happydroids.droidtowers.platform.Display.devicePixel; import static com.happydroids.droidtowers.utils.StringUtils.formatNumber; public class StatusBarPanel extends Table { public static final float INACTIVE_BUTTON_ALPHA = 0.5f; public static final float ACTIVE_BUTTON_ALPHA = 0.85f; public static final float BUTTON_FADE_DURATION = 0.25f; public static final int LINE_WIDTH = 2; private final Label moneyLabel; private final Label experienceLabel; private final Label gameSpeedLabel; private final Label populationLabel; private final Label employmentLabel; private final Label moneyIncomeLabel; private final Label moneyExpensesLabel; private final RatingBar starRatingBar; private float lastUpdated = TowerConsts.HUD_UPDATE_FREQUENCY; private float starRating; private final PopOver starRatingPopOver; private final Texture whiteSwatch; private final PopOver gameSpeedOverlay; private final Texture backgroundTexture; private final Slider gameSpeedSlider; private final Achievement dubai7StarWonder; public StatusBarPanel() { setTouchable(Touchable.childrenOnly); moneyLabel = makeValueLabel("0"); moneyIncomeLabel = makeValueLabel("0"); moneyExpensesLabel = makeValueLabel("0"); experienceLabel = makeValueLabel("0"); populationLabel = makeValueLabel("0"); employmentLabel = makeValueLabel("0"); gameSpeedLabel = makeValueLabel(SceneManager.activeScene().getTimeMultiplier() + "x"); starRatingBar = new RatingBar(0, 5); whiteSwatch = TowerAssetManager.texture(TowerAssetManager.WHITE_SWATCH); backgroundTexture = TowerAssetManager.texture("hud/window-bg.png"); backgroundTexture.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear); defaults(); center(); row().pad(devicePixel(2)).padBottom(0); add(makeHeader("COINS", Color.LIGHT_GRAY)).center(); add(makeHeader("INCOME", Color.LIGHT_GRAY)).center(); add(makeHeader("EXPENSES", Color.LIGHT_GRAY)).center(); add(makeHeader("POPULATION", Color.LIGHT_GRAY)).center(); add(makeHeader("EMPLOYMENT", Color.LIGHT_GRAY)).center(); Label gameSpeedHeader = makeHeader("GAME SPEED", Color.LIGHT_GRAY); add(gameSpeedHeader).center(); Label starRatingHeader = makeHeader("STAR RATING", Color.LIGHT_GRAY); add(starRatingHeader).center(); row().pad(devicePixel(2)).padTop(0); add(moneyLabel); add(moneyIncomeLabel); add(moneyExpensesLabel); add(populationLabel); add(employmentLabel); add(gameSpeedLabel); add(starRatingBar); if (TowerConsts.ENABLE_NEWS_TICKER) { row().pad(devicePixel(2)).padLeft(devicePixel(-4)).padRight(devicePixel(-4)); add(new HorizontalRule(Colors.ICS_BLUE_SEMI_TRANSPARENT, 1)).fillX().colspan(7); row().pad(0); add(new NewsTickerPanel()).colspan(7).left(); } dubai7StarWonder = AchievementEngine.instance().findById("dubai-7-star-wonder"); gameSpeedOverlay = new PopOver(); gameSpeedOverlay.alignArrow(Align.left); gameSpeedOverlay.add(new Image(TowerAssetManager.textureFromAtlas("snail", "hud/buttons.txt"))).center(); gameSpeedSlider = new Slider(TowerConsts.GAME_SPEED_MIN, TowerConsts.GAME_SPEED_MAX, 0.5f, false, TowerAssetManager.getCustomSkin()); gameSpeedOverlay.add(gameSpeedSlider).width(devicePixel(150)); gameSpeedOverlay.add(new Image(TowerAssetManager.textureFromAtlas("rabbit", "hud/buttons.txt"))).center(); gameSpeedOverlay.pack(); gameSpeedOverlay.setVisible(false); gameSpeedSlider.addListener(new ChangeListener() { @Override public void changed(ChangeEvent event, Actor actor) { float remainder = gameSpeedSlider.getValue() * 2f / 2f; SceneManager.activeScene().setTimeMultiplier(remainder); } }); SceneManager.activeScene().events().register(this); starRatingPopOver = new TowerRatingPopOver(); starRatingPopOver.setVisible(false); pack(); VibrateClickListener gameSpeedToggleListener = new VibrateClickListener() { @Override public void onClick(InputEvent event, float x, float y) { gameSpeedOverlay.toggle(StatusBarPanel.this, gameSpeedLabel); } }; gameSpeedHeader.addListener(gameSpeedToggleListener); gameSpeedLabel.addListener(gameSpeedToggleListener); VibrateClickListener starRatingListener = new VibrateClickListener() { @Override public void onClick(InputEvent event, float x, float y) { starRatingPopOver.toggle(StatusBarPanel.this, starRatingBar); } }; starRatingHeader.addListener(starRatingListener); starRatingBar.addListener(starRatingListener); setTouchable(Touchable.enabled); addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { } }); } private Label makeValueLabel(String labelText) { Label label = FontManager.RobotoBold18.makeLabel(labelText); label.setAlignment(Align.center); return label; } private Label makeHeader(String headerText, Color tint) { Label label = FontManager.Roboto12.makeLabel(headerText); label.setAlignment(Align.center); label.setColor(tint); return label; } @Override public void act(float delta) { super.act(delta); lastUpdated += delta; if (lastUpdated >= TowerConsts.HUD_UPDATE_FREQUENCY) { lastUpdated = 0f; Player player = Player.instance(); starRatingBar.setValue(player.getStarRating()); if (dubai7StarWonder.isCompleted() && starRatingBar.getMaxValue() == 5) { starRatingBar.setMaxValue(7); } experienceLabel.setText(formatNumber(player.getExperience())); moneyLabel.setText(TowerConsts.CURRENCY_SYMBOL + formatNumber(player.getCoins())); moneyIncomeLabel.setText(TowerConsts.CURRENCY_SYMBOL + formatNumber(player.getCurrentIncome())); moneyExpensesLabel.setText(TowerConsts.CURRENCY_SYMBOL + formatNumber(player.getCurrentExpenses())); populationLabel.setText(formatNumber(player.getPopulationResidency()) + "/" + formatNumber(player.getMaxPopulation())); employmentLabel.setText(formatNumber(player.getJobsFilled()) + "/" + formatNumber(player.getJobsMax())); pack(); } } @Override public void draw(SpriteBatch batch, float parentAlpha) { super.draw(batch, parentAlpha); batch.setColor(Colors.ICS_BLUE_SEMI_TRANSPARENT); batch.draw(whiteSwatch, getX(), getY() - LINE_WIDTH, getWidth(), LINE_WIDTH); batch.draw(whiteSwatch, getX() + getWidth(), getY() - LINE_WIDTH, LINE_WIDTH, getHeight() + LINE_WIDTH * 2); } @Override protected void drawBackground(SpriteBatch batch, float parentAlpha) { batch.setColor(getColor()); batch.draw(backgroundTexture, getX(), getY(), getWidth(), getHeight()); } @Subscribe public void TowerScene_onGameSpeedChange(GameSpeedChangeEvent event) { gameSpeedSlider.setValue(event.scene.getTimeMultiplier()); gameSpeedLabel.setText(event.scene.getTimeMultiplier() + "x"); } }