package org.test.towerdefense; import loon.LTexture; import loon.LTextures; import loon.action.sprite.SpriteBatch; import loon.action.sprite.painting.DrawableGameComponent; import loon.action.sprite.painting.IGameComponent; import loon.canvas.LColor; import loon.geom.Vector2f; import loon.utils.timer.GameTime; public class ProgressBar extends DrawableGameComponent implements IGameComponent { private LColor backColor; private LColor frontColor; private LColor frontColorLow; private MainGame game; private float lowColorLimit; private LTexture texture; private int width; public ProgressBar(MainGame game, int width, boolean isHealthBarMode) { super(game); this.game = game; this.setCurrentPercent(100); this.width = width; this.setHeight(4); this.setDrawBorder(false); super.setDrawOrder(30); if (isHealthBarMode) { this.frontColor = new LColor(0f, 1f, 0f, 1f); this.frontColorLow = LColor.red; this.backColor = LColor.gray; this.lowColorLimit = 0.4f; } else { this.frontColor = LColor.white; this.frontColorLow = LColor.white; this.backColor = LColor.black; this.lowColorLimit = 0f; } } @Override public void draw(SpriteBatch batch, GameTime gameTime) { super.draw(batch, gameTime); if (this.getCurrentPercent() < 100) { batch.draw(this.texture, this.getPosition().x, (int) this.getPosition().y, this.width, this.getHeight(), 0, 5, this.texture.getWidth(), 4, this.backColor); } float num = ((float) this.getCurrentPercent()) / 100f; LColor color = (num < this.lowColorLimit) ? this.frontColorLow : this.frontColor; if (this.game .getGameplayScreen() .getGameOpacity() .equals(this.game.getGameplayScreen() .getGameOpacityWhenPaused())) { LColor col = new LColor(color); col.mul(0.3f); color = col; } batch.draw(this.texture, this.getPosition().x, this.getPosition().y, (this.width * num), this.getHeight(), 0, 5, this.texture.getWidth(), 4, color); if (this.getDrawBorder()) { batch.draw(this.texture, this.getPosition().x, this.getPosition().y, this.texture.getWidth(), 4, 0, 0, this.texture.getWidth(), 4, LColor.white); } } @Override protected void loadContent() { super.loadContent(); this.texture = LTextures.loadTexture("assets/healthBar.png"); } private int privateCurrentPercent; public final int getCurrentPercent() { return privateCurrentPercent; } public final void setCurrentPercent(int value) { privateCurrentPercent = value; } private boolean privateDrawBorder; public final boolean getDrawBorder() { return privateDrawBorder; } public final void setDrawBorder(boolean value) { privateDrawBorder = value; } private int privateHeight; public final int getHeight() { return privateHeight; } public final void setHeight(int value) { privateHeight = value; } private boolean privateIsHealthBarMode; public final boolean getIsHealthBarMode() { return privateIsHealthBarMode; } public final void setIsHealthBarMode(boolean value) { privateIsHealthBarMode = value; } private Vector2f privatePosition; public final Vector2f getPosition() { return privatePosition; } public final void setPosition(Vector2f value) { privatePosition = value; } }