package teamcomm.gui.drawings.common; import com.jogamp.opengl.GL2; import data.GameControlData; import data.TeamInfo; import teamcomm.data.GameState; import teamcomm.gui.Camera; import teamcomm.gui.drawings.Static; import teamcomm.gui.drawings.Text; /** * Drawing for the current GameController info. * * @author Felix Thielke */ public class GameControllerInfo extends Static { @Override protected void init(GL2 gl) { setActive(false); } @Override public void draw(final GL2 gl, final Camera camera) { final GameControlData data = GameState.getInstance().getLastGameControlData(); if (data != null) { gl.glPushMatrix(); gl.glTranslatef(0, 4, .5f); camera.turnTowardsCamera(gl); // Display half final String half; if (data.team[0].teamNumber == 98 || data.team[0].teamNumber == 99 || data.team[1].teamNumber == 98 || data.team[1].teamNumber == 99) { half = "Drop-in Game"; } else { if (data.firstHalf == GameControlData.C_TRUE) { if (data.secGameState == GameControlData.STATE2_TIMEOUT) { half = "Timeout"; } else { half = "1st half"; } } else { switch (data.secGameState) { case GameControlData.STATE2_NORMAL: case GameControlData.STATE2_OVERTIME: half = "2nd half"; break; case GameControlData.STATE2_TIMEOUT: half = "Timeout"; break; case GameControlData.STATE2_PENALTYSHOOT: half = "Penalty Shootout"; break; default: half = ""; } } } Text.drawText(gl, half, 0, 0.9f, 0.3f); int minutes = (data.secsRemaining < 0 ? (-data.secsRemaining) : data.secsRemaining) / 60; int seconds = (data.secsRemaining < 0 ? (-data.secsRemaining) : data.secsRemaining) % 60; Text.drawText(gl, (data.secsRemaining < 0 ? "-" : "") + (minutes < 10 ? "0" : "") + minutes + ":" + (seconds < 10 ? "0" : "") + seconds, 0, 0.6f, 0.3f); // Display game state final String state; switch (data.gameState) { case GameControlData.STATE_INITIAL: state = "Initial"; break; case GameControlData.STATE_READY: state = "Ready"; break; case GameControlData.STATE_SET: state = "Set"; break; case GameControlData.STATE_PLAYING: state = "Playing"; break; case GameControlData.STATE_FINISHED: state = "Finished"; break; default: state = ""; break; } Text.drawText(gl, state, 0, 0.3f, 0.3f); // Display scores final TeamInfo teamLeft = data.team[GameState.getInstance().isMirrored() ? 1 : 0]; final TeamInfo teamRight = data.team[GameState.getInstance().isMirrored() ? 0 : 1]; Text.drawText(gl, "" + teamLeft.score, -0.3f, 0, 0.3f, getColor(teamLeft.teamColor)); Text.drawText(gl, ":", 0, 0, 0.3f); Text.drawText(gl, "" + teamRight.score, 0.3f, 0, 0.3f, getColor(teamRight.teamColor)); gl.glPopMatrix(); } } private static float[] getColor(final byte color) { switch (color) { case GameControlData.TEAM_BLACK: return new float[]{0, 0, 0, 1}; case GameControlData.TEAM_BLUE: return new float[]{0, 0, 1, 1}; case GameControlData.TEAM_RED: return new float[]{1, 0, 0, 1}; case GameControlData.TEAM_YELLOW: return new float[]{1, 1, 0, 1}; } return new float[]{1, 1, 1, 1}; } @Override public boolean hasAlpha() { return false; } @Override public int getPriority() { return 0; } }