package me.pascoej.ajario.gui; import me.pascoej.ajario.AgarClient; import me.pascoej.ajario.gui.views.GameView; import me.pascoej.ajario.gui.views.OptionsView; import me.pascoej.ajario.gui.views.ServerChooserView; import me.pascoej.ajario.gui.views.View; import org.lwjgl.input.Keyboard; import org.newdawn.slick.*; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; /** * Created by john on 6/14/15. */ public class ClientGUI extends BasicGame { private final AgarClient agarClient; private boolean showFPS = false; private boolean fullscreen = false; private final List<View> views = new CopyOnWriteArrayList<>(); private GameContainer gameContainer; public ClientGUI(AgarClient agarClient) { super("Ajar Client"); this.agarClient = agarClient; } @Override public void keyPressed(int key, char c) { if (key == Keyboard.KEY_BACKSLASH) { showFPS = !showFPS; } else if (key == Keyboard.KEY_9) { fullscreen = !fullscreen; } else if (key == Keyboard.KEY_ESCAPE) { System.exit(0); } else if ((key == Keyboard.KEY_GRAVE || key == 13) && !hasViewClass(ServerChooserView.class) && !hasViewClass(OptionsView.class)) { addView(new ServerChooserView(this)); } if (key == Keyboard.KEY_M) { agarClient.serverResetPacket(); } } @Override public void init(GameContainer gameContainer) throws SlickException { this.gameContainer = gameContainer; gameContainer.setVSync(true); addView(new GameView(agarClient)); } private boolean hasViewClass(Class clazz) { for (View view : views) { if (view.getClass() == clazz) { return true; } } return false; } public void addView(View view) { views.add(view); gameContainer.getInput().addListener(view); } public GameView getGameView() { return (GameView) views.get(0); } public AgarClient getAgarClient() { return agarClient; } public void removeView(View view) { views.remove(view); gameContainer.getInput().removeListener(view); } int refresh = 0; @Override public void update(GameContainer gameContainer, int i) throws SlickException { if (gameContainer.isShowingFPS() != showFPS) { gameContainer.setShowFPS(showFPS); } if (gameContainer.isFullscreen() != fullscreen) { if (fullscreen) { if (gameContainer instanceof AppGameContainer) { AppGameContainer appGameContainer = (AppGameContainer) gameContainer; appGameContainer.setDisplayMode(1440, 900, true); init(gameContainer); } } } agarClient.update(); } @Override public void render(GameContainer gameContainer, Graphics g) throws SlickException { if (showFPS) { g.setColor(Color.white); String text = "u/s: " + agarClient.getUpdatePerSecond(); int textHeight = g.getFont().getHeight(text); int textWidth = g.getFont().getWidth(text); int textX = gameContainer.getWidth()-5-textWidth; int textY = gameContainer.getHeight()-5-textHeight; g.drawString(text,textX,textY); } views.stream().filter(View::shouldDraw).forEach(view -> view.render(gameContainer, g)); } }