package me.pascoej.ajario.gui.views;
import me.pascoej.ajario.gui.ClientGUI;
import me.pascoej.ajario.util.ServerChooserUtil;
import org.lwjgl.input.Keyboard;
import org.newdawn.slick.Color;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import java.net.URI;
/**
* Created by john on 6/15/15.
*/
public class ServerChooserView extends View {
private final ClientGUI clientGUI;
private final String[] regions = ServerChooserUtil.getRegions();
private boolean searchForBest = false;
public ServerChooserView(ClientGUI clientGUI) {
this.clientGUI = clientGUI;
}
@Override
public void render(GameContainer gc, Graphics g) {
int width = gc.getWidth();
int height = gc.getHeight();
int border = 30;
int padding = 10;
g.setColor(new Color(110, 110, 110, 100));
g.fillRoundRect(30, 30, width - 2 * border, height - 2 * border, 10);
g.setColor(Color.white);
int textX = border + padding;
int textHeight = g.getFont().getHeight("|");
for (int i = 0; i < regions.length; i++) {
int numbered = i + 1;
String text = numbered + ". " + regions[i];
int y = border + padding + textHeight * i;
g.drawString(text, textX, y);
}
int optionsY = border + padding + textHeight * regions.length;
g.drawString("0. Options", textX, optionsY);
int exitY = height - border - padding - textHeight;
g.setColor(Color.red);
g.drawString("Press `/~ (grave)to exit. Escape exits the game from anywhere.", textX, exitY);
int bestY = exitY-textHeight-padding;
g.setColor(Color.cyan);
String searchToggleText = "Press B to enable search for best server mode. (takes time to search)";
if (searchForBest) {
searchToggleText = "Press B to disable search for best server mode. (takes time to search)";
}
g.drawString(searchToggleText,textX,bestY);
}
private void pressNumber(int num) {
if (num > 0 && num <= regions.length) {
int i = num - 1;
String region = regions[i];
final View view = this;
new Thread(new Runnable() {
@Override
public void run() {
URI uri;
if (searchForBest) {
clientGUI.addView(new MessageView(clientGUI,"Searching for best server...",25000));
uri = ServerChooserUtil.bestServer(region,20);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}else {
uri = ServerChooserUtil.getServer(region);
}
if (uri != null) {
clientGUI.getAgarClient().connect(uri);
clientGUI.removeView(view);
clientGUI.addView(new MessageView(clientGUI, "Connected to: " + region, 5000));
}
}
}).start();
}
if (num == 0) {
clientGUI.removeView(this);
clientGUI.addView(new OptionsView(clientGUI));
}
}
@Override
public boolean shouldDraw() {
return true;
}
@Override
public boolean isAcceptingInput() {
return true;
}
@Override
public void keyPressed(int key, char c) {
switch (key) {
case Keyboard.KEY_GRAVE:
clientGUI.removeView(this);
break;
case 13:
clientGUI.removeView(this);
break;
case Keyboard.KEY_1:
pressNumber(1);
break;
case Keyboard.KEY_2:
pressNumber(2);
break;
case Keyboard.KEY_3:
pressNumber(3);
break;
case Keyboard.KEY_4:
pressNumber(4);
break;
case Keyboard.KEY_5:
pressNumber(5);
break;
case Keyboard.KEY_6:
pressNumber(6);
break;
case Keyboard.KEY_7:
pressNumber(7);
break;
case Keyboard.KEY_8:
pressNumber(8);
break;
case Keyboard.KEY_9:
pressNumber(9);
break;
case Keyboard.KEY_0:
pressNumber(0);
break;
case Keyboard.KEY_B:
searchForBest = !searchForBest;
break;
}
}
}