package net.fe; import java.util.List; import net.fe.builderStage.TeamBuilderStage; import org.newdawn.slick.Color; import chu.engine.Entity; import chu.engine.Game; import chu.engine.MouseEvent; import chu.engine.Stage; import chu.engine.anim.AudioPlayer; import chu.engine.anim.BitmapFont; import chu.engine.anim.Renderer; import chu.engine.anim.ShaderArgs; import chu.engine.menu.MenuButton; import chu.engine.menu.TextInputBox; /** * Player selects name and server ip * @author Shawn * */ public class ConnectStage extends Stage { public static final Color BORDER_DARK = new Color(0x483828); public static final Color BORDER_LIGHT = new Color(0xf8f0c8); public static final Color NEUTRAL = new Color(0xb0a878); public static final Color NEUTRAL_DARK = new Color(0x58543c); private static final Color UNFOCUSED = new Color(0x58543c); private static final Color FOCUSED = new Color(0x817b58); private static final Color CURSOR = new Color(0xeeeeee); private ConnectInputBox name; private ConnectInputBox ip; public ConnectStage() { super("main_theme"); name = new ConnectInputBox(180,136,153,20); ip = new ConnectInputBox(180,166,100,20); addEntity(name); addEntity(ip); addEntity(new RunesBg(Color.gray)); addEntity(new ConnectButton(286,166,47,20)); addEntity(new MenuButton(180,196,128,32) { { sprite.addAnimation("default", FEResources.getTexture("team_builder_button")); } @Override public void onClick() { FEMultiplayer.setCurrentStage(new TeamBuilderStage(true, null, null)); } @Override public void render() { if(hover) { sprite.render(x, y, renderDepth, null, new ShaderArgs("lighten", 0.5f)); } else { sprite.render(x, y, renderDepth); } } }); processAddStack(); } @Override public void beginStep() { for(Entity e : entities) { e.beginStep(); } } @Override public void onStep() { for(Entity e : entities) { e.onStep(); } } @Override public void endStep() { for(Entity e : entities) { e.endStep(); } } public void render() { // Draw and label boxes // Renderer.drawRectangle(60, 110, 430, 240, 0.5f, NEUTRAL); // Renderer.drawRectangle(61, 111, 429, 239, 0.5f, BORDER_DARK); // Renderer.drawRectangle(62, 112, 428, 238, 0.5f, BORDER_LIGHT); // Renderer.drawRectangle(63, 113, 427, 237, 0.5f, NEUTRAL); Renderer.drawString("default_med", "Name:", 150, 140, 0.0f); Renderer.drawString("default_med", "Server IP:", 133, 170, 0.0f); super.render(); } private class ConnectInputBox extends TextInputBox { public ConnectInputBox(int x, int y, int w, int h) { super(x, y, w, h, "default_med"); renderDepth = 0.0f; } public void beginStep() { List<MouseEvent> mouseEvents = Game.getMouseEvents(); for(MouseEvent event : mouseEvents) { if(event.button == 0) { if(inBounds(event.x, Game.getWindowHeight()-event.y)) { hasFocus = true; } else { hasFocus = false; } } } super.beginStep(); } public void render() { BitmapFont font = FEResources.getBitmapFont("default_med"); Renderer.drawRectangle(x-1, y-1, x+width+1, y+height+1, renderDepth, Color.black); if(hasFocus) { Renderer.drawRectangle(x, y, x+width, y+height, renderDepth, FOCUSED); float linepos = x + font.getStringWidth(input.substring(0, cursorPos)) + 2; Renderer.drawRectangle(linepos, y+1, linepos+1, y+height-1, renderDepth-0.02f, CURSOR); } else { Renderer.drawRectangle(x, y, x+width, y+height, renderDepth, UNFOCUSED); } Renderer.drawString("default_med", input.toString(), x+2, y+5, renderDepth-0.01f); } } private class ConnectButton extends MenuButton { public ConnectButton(float x, float y, float w, float h) { super(x, y, w, h); sprite.addAnimation("default", FEResources.getTexture("connect_button")); } @Override public void onClick() { AudioPlayer.playAudio("select", 1, 1); FEMultiplayer.connect(name.getInput(), ip.getInput()); } @Override public void render() { if(hover) { sprite.render(x, y, renderDepth, null, new ShaderArgs("lighten", 0.5f)); } else { sprite.render(x, y, renderDepth); } } } }