package com.me.missingwords.actors; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.graphics.g2d.NinePatch; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.scenes.scene2d.Actor; import com.me.missingwords.MissingWords; /** * * Representa la barra del tiempo que tienes disponible para formar una palabra. Est� formada * por dos ninepatch. Un ninepatch es una imagen que tiene areas modificables definidas. * Es decir, el constructor del ninepatch recibe 4 par�metros adem�s de la textura que se va a * utilizar como imagen. Estos son: left, right, top, bottom. Estos son los valores que indican * los p�xeles que no modificar� en esas direcciones. * */ public class TimeBar extends Actor { private final int BACKGROUND_X = 255; private final int BACKGROUND_Y = 402; private final int BACKGROUND_WIDTH = 290; private final int BACKGROUND_HEIGHT = 20; private final int LOADING_X = 257; private final float LOADING_Y = 403.5f; private final int LOADING_WIDTH = 286; private final int LOADING_HEIGHT = 17; private final double FRAME_TIME_ROUNDED = 0.017; // frame time = 1 / 60 = 0.016666667 ~ 0.017 private NinePatch backgroundBar; // Ninepatch fondo private NinePatch loadingBar; // Ninepatch barra private TextureRegion textureBackground; // Textura del ninepatch fondo private TextureRegion textureLoading; // Textura del ninepatch barra private float progress = 1; // Variable que controla el progreso de la barra private float seconds = 60; // Segundos disponibles para jugar private float timeCounter = 1; // Contador de FPS private float secondsCounter = 1; // Contador de segundos private boolean activated; // Indica si est� activo el tiempo private MissingWords missingWords; public TimeBar(MissingWords missingWords) { this.missingWords = missingWords; textureBackground = new TextureRegion( MissingWords.myManager.get("barBackground.png", Texture.class)); backgroundBar = new NinePatch(textureBackground, 6, 6, 5, 5); textureLoading = new TextureRegion( MissingWords.myManager.get("barLoading.png", Texture.class)); loadingBar = new NinePatch(textureLoading, 5, 5, 4, 4); activated = false; // desactivamos el tiempo } @Override public void draw(Batch batch, float parentAlpha) { backgroundBar.draw(batch, BACKGROUND_X, BACKGROUND_Y, BACKGROUND_WIDTH, BACKGROUND_HEIGHT); if (progress > FRAME_TIME_ROUNDED) // Si el progreso es mayor que la ultima llamada a render() loadingBar.draw(batch, LOADING_X, LOADING_Y, LOADING_WIDTH * progress, LOADING_HEIGHT); } /* El m�todo act() define el comportamiento del actor dentro del escenario */ @Override public void act(float delta) { super.act(delta); if (activated) { timeCounter += delta; // Acumulamos el tiempo sumando los fps if(timeCounter >= 1 && seconds >= 0){ // Si suman 1 segundo y son mayores que 0 setProgress(secondsCounter); // modificamos el progreso de la barra secondsCounter -= (float) 1 / 60; // restamos el valor del frame (pasos en la barra) timeCounter = 0; // establecemos el contador a 0 --seconds; // quitamos 1 segundo } if (seconds == 0) { // Si se acaba el tiempo System.out.println("Time out!"); /* Reproducimos el efecto de sonido si est� activo */ missingWords.getSoundFX().getTimeout().play(missingWords.getSoundFX().getVolume()); /* Incrementamos el n�mero de palabras. Palabra fallida */ missingWords.getStatsData().increaseMaxWords(); missingWords.getGameScreen().getHuman().setMyTurn(false); if (!missingWords.isSinglePlayer()) { // Activamos el turno del NPC missingWords.getGameScreen().getNpc().setTurnFinished(true); missingWords.getGameScreen().getNpc().setMyTurn(true); } } } } /* reset(): restablece el contador del tiempo. Pero no empieza a correr */ public void reset() { secondsCounter = 1; timeCounter = 1; setProgress(1); seconds = 60; stop(); } /* start(): activa el tiempo despu�s de un estado de stop */ public void start() { activated = true; } /* stop(): para el tiempo */ public void stop() { activated = false; } /* -------------- Getters and Setters -------------- */ public void setProgress(float progress) { this.progress = progress; } }