package com.moribitotech.mtx; import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.scenes.scene2d.utils.Drawable; public class ButtonLevel extends AbstractButton { // Level stars (Not mandatory) private TextureRegion textureStarHolder; private TextureRegion textureStar; private int numberOfTotalStars = 1; private int numberOfEarnedStars = 1; private float starSizeWidth; private float starSizeHeight; private float starPosXStart = 0; private float starPosYStart = 0; private float starSizeRatio = 5; // Level Number (Not mandatory) private int levelNumber = -999; // Font (For writings and level number) private BitmapFont bitMapFont; public ButtonLevel(BitmapFont bitMapFont, Drawable up, Drawable down) { super(bitMapFont , up, down); } @Override public void draw(SpriteBatch batch, float parentAlpha) { // If level locked // ################################################################## if (isLockActive && textureLocked != null) { drawLocked(batch); } // If level number set // ################################################################## else if (levelNumber != -999 && bitMapFont != null) { super.draw(batch, parentAlpha); drawLevelNumber(batch); drawText(batch); drawStars(batch); drawExternalTexture(batch); } // Draw default // ################################################################## else { super.draw(batch, parentAlpha); drawText(batch); drawStars(batch); drawExternalTexture(batch); } } private void drawStars(SpriteBatch batch) { if(textureStarHolder != null && textureStar != null){ // Updated start positions float activePosXStart = (getX() + getWidth() / 2) - ((starSizeWidth * numberOfTotalStars) / 2); float activePoxYStart = (getY() + starSizeHeight / 1.3f); // Stars align together next by next (increase for each star) // S as Star // SSS (together aligned due to their widths) float currentPosX = getX(); for(int i = 0; i < numberOfTotalStars; i++){ // Update new star holder positions (for multiple stars) currentPosX = activePosXStart + (starSizeWidth * i); batch.draw(textureStarHolder, currentPosX + starPosXStart, activePoxYStart + starPosYStart,starSizeWidth, starSizeHeight); } for(int j = 0; j < numberOfEarnedStars; j++){ // Update new star position (for multiple stars) currentPosX = activePosXStart + (starSizeWidth * j); batch.draw(textureStar, currentPosX + starPosXStart, activePoxYStart + starPosYStart,starSizeWidth, starSizeHeight); } } } private void drawText(SpriteBatch batch) { if(isTextActive && bitMapFont != null){ bitMapFont.draw(batch, text, getX() + textPosX, getY() + textPosY); } } private void drawLocked(SpriteBatch batch) { batch.draw(textureLocked, getX(), getY(), getWidth(), getHeight()); } private void drawExternalTexture(SpriteBatch batch) { if(isExternalTextureActive && textureExternal != null){ batch.draw(textureExternal, getX() + externalTexturePosX, getY() + externalTexturePosY, externalTextureSizeW, externalTextureSizeH); } } private void drawLevelNumber(SpriteBatch batch) { // TODO Set precise position of level number for each game // there i single numbers ( < 10) // there is double numbers (9 >) float singePositionArranger = 2.5f; float doublePositionArranger = 2.8f; if (levelNumber < 10) { bitMapFont.draw(batch, "" + levelNumber, getX() + getWidth() / singePositionArranger, getY() + getHeight() / 1.4f); } else { bitMapFont.draw(batch, "" + levelNumber, getX() + getWidth() / doublePositionArranger, getY() + getHeight() / 1.4f); } } /** * Set level stars (It can be any other object) for level achievements * <p> * EXAMPLE<br> * There are 5 stars maximum can be achieved, and user earned 3 stars. It auto calculates the position and sizes of stars due to * button sizes. However further adjustment can be done (optinal) with "setLevelStarSizeRatio", "setLevelStarPosXStart" and "setLevelStarPosYStart". * !!starHolderTexture and starTexture should be in same sizes!! * * @param starHolderTexture the holder texture for star or other achievement object. * @param starTexture the texture for star or other achievement object. * @param numberOfTotalStars number of total stars * @param numberOfEarnedStars number of earned/achieved stars * */ public void setLevelStars(TextureRegion starHolderTexture, TextureRegion starTexture, int numberOfTotalStars, int numberOfEarnedStars){ textureStarHolder = starHolderTexture; textureStar = starTexture; this.numberOfTotalStars = numberOfTotalStars; this.numberOfEarnedStars = numberOfEarnedStars; // float btnSizeW = getWidth() - (getWidth() / starSizeRatio); float btnSizeH = getHeight() - (getHeight() / starSizeRatio); starSizeWidth = btnSizeW / numberOfTotalStars; starSizeHeight = btnSizeH / numberOfTotalStars; } /** * Get level starts X position * */ public float getLevelStarPosXStart() { return starPosXStart; } /** * Set level stars X position. This is being calculated automaticly and centered. Do not suggest to play * width. * */ public void setLevelStarPosXStart(float starPosXStart) { this.starPosXStart = starPosXStart; } /** * Get level starts Y position * */ public float getLevelStarPosYStart() { return starPosYStart; } /** * Set level stars Y position. This can be used to lift all stars (holders and stars) up or down for * adjusments * */ public void setLevelStarPosYStart(float starPosYStart) { this.starPosYStart = starPosYStart; } /** * Get level stars ratio * */ public float getLevelStarSizeRatio() { return starSizeRatio; } /** * Set level stars size ratio. This makes stars smaller or bigger (Default is 5). Bigger number makes stars/holders * bigger and vice-versa. * */ public void setLevelStarSizeRatio(float starSizeRatio) { this.starSizeRatio = starSizeRatio; float btnSizeW = getWidth() - (getWidth() / starSizeRatio); float btnSizeH = getHeight() - (getHeight() / starSizeRatio); starSizeWidth = btnSizeW / numberOfTotalStars; starSizeHeight = btnSizeH / numberOfTotalStars; } /** * Get level number * */ public int getLevelNumber() { return levelNumber; } /** * Set level number and the font to draw that number * */ public void setLevelNumber(int levelNumber, BitmapFont font) { this.levelNumber = levelNumber; bitMapFont = font; } /** * Set level number changes * */ public void setLevelNumberChange(int levelNumber){ this.levelNumber = levelNumber; } /** * Get achievement object holder texture * */ public TextureRegion getTextureStarHolder() { return textureStarHolder; } /** * Set achievement object holder texture * */ public void setTextureStarHolder(TextureRegion textureStarHolder) { this.textureStarHolder = textureStarHolder; } /** * Get achievement object * */ public TextureRegion getTextureStar() { return textureStar; } /** * Set achievement object texture * */ public void setTextureStar(TextureRegion textureStar) { this.textureStar = textureStar; } /** * Get number of total achievement objects * */ public int getNumberOfTotalStars() { return numberOfTotalStars; } /** * Set number of total achievement object * */ public void setNumberOfTotalStars(int numberOfTotalStars) { this.numberOfTotalStars = numberOfTotalStars; } /** * Get number of achievement object * */ public int getNumberOfEarnedStars() { return numberOfEarnedStars; } /** * Set number of earned achievement object. This number cannot be higher/lower than numberOfTotalStars, it auto * overrides if is less or more than numberOfTotalStars * */ public void setNumberOfEarnedStars(int numberOfEarnedStars) { if(numberOfEarnedStars > numberOfTotalStars){ numberOfEarnedStars = numberOfTotalStars; } else{ this.numberOfEarnedStars = numberOfEarnedStars; } } }