package game.states; import game.core.InGameState; import game.gui.niftyinput.CustomSlickInputSystem; import game.gui.screens.ShowQuestObjectiveStateStartScreen; import java.util.Vector; import org.newdawn.slick.GameContainer; import org.newdawn.slick.Graphics; import org.newdawn.slick.Input; import org.newdawn.slick.SlickException; import org.newdawn.slick.state.StateBasedGame; import org.newdawn.slick.state.transition.FadeInTransition; import org.newdawn.slick.state.transition.FadeOutTransition; import de.lessvoid.nifty.Nifty; import de.lessvoid.nifty.builder.ElementBuilder; import de.lessvoid.nifty.builder.PanelBuilder; import de.lessvoid.nifty.builder.TextBuilder; import de.lessvoid.nifty.controls.ScrollPanel; import de.lessvoid.nifty.controls.ScrollPanel.AutoScroll; import de.lessvoid.nifty.controls.scrollpanel.builder.ScrollPanelBuilder; import de.lessvoid.nifty.elements.Element; import de.lessvoid.nifty.screen.Screen; import de.lessvoid.nifty.slick2d.NiftyOverlayBasicGameState; import de.lessvoid.nifty.slick2d.loaders.SlickAddLoaderLocation; import de.lessvoid.nifty.slick2d.loaders.SlickRenderFontLoaders; import de.lessvoid.nifty.slick2d.render.font.loader.DefaultSlickRenderFontLoader; /** * @author Michel Montenegro */ public class ShowQuestObjectiveState extends NiftyOverlayBasicGameState{ public static final int ID = 3; public ShowQuestObjectiveState() { } @Override public int getID() { return ID; } @Override protected void enterState(GameContainer container, StateBasedGame sbGame) throws SlickException { } @Override protected void initGameAndGUI(GameContainer container, StateBasedGame sbGame) throws SlickException { initNifty(container, sbGame, new CustomSlickInputSystem()); } @Override protected void leaveState(GameContainer arg0, StateBasedGame arg1) throws SlickException { } private static Element createMapItemPopup(Nifty nifty, Screen screen, Element parent) { Element scrollPanel = createScrollPanel( nifty, screen, parent ); Element scrollContainer = scrollPanel.findElementByName( "#nifty-scrollpanel-child-root" ); Vector list = new Vector(); list.add( createHeader("------" ) ); list.add( createHeader( "Actions" ) ); list.add( createHeader( "--------" ) ); createVerticalPanel( nifty, screen, scrollContainer, list ); scrollContainer.layoutElements(); parent.getNiftyControl(ScrollPanel.class).setUp( 0, 20, 0, 20*10, AutoScroll.OFF ); // basically 20px for clicking on the scrollbar buttons and 200px when you press below or above the scrollhandle (and when the scrollbar someday supports the page up/down keys...) return parent; } private static Element createScrollPanel( Nifty nifty, Screen screen, Element parent ) { ScrollPanelBuilder scrollBuilder = new ScrollPanelBuilder( "scrollpanel" ); scrollBuilder.width( "100%" ); scrollBuilder.height( "100%" ); scrollBuilder.set( "vertical", "true" ); scrollBuilder.set( "horizontal", "false" ); return scrollBuilder.build( nifty, screen, parent ); } private static TextBuilder createHeader( String text ) { TextBuilder textBuilder = new TextBuilder(); textBuilder.width( 500 + "px" ); textBuilder.height( 20 + "px" ); textBuilder.font( "resources/fonts/console.fnt" ); textBuilder.textHAlignLeft(); textBuilder.text(text); return textBuilder; } private static Element createVerticalPanel( Nifty nifty, Screen screen, Element parent, Vector list ) { PanelBuilder panelBuilder = new PanelBuilder(); panelBuilder.x( "0px" ); panelBuilder.y( "0px" ); panelBuilder.width( 20 + "px" ); panelBuilder.height( 20 * list.size() + "px" ); panelBuilder.alignLeft(); panelBuilder.valignTop(); panelBuilder.set( "childLayout", "vertical" ); panelBuilder.style("nifty-panel"); Element panel = panelBuilder.build( nifty, screen, parent ); for( int i = 0; i < list.size(); i++ ){ list.get( i ).build( nifty, screen, panel); } return panel; } @Override protected void prepareNifty(Nifty nifty, StateBasedGame sbGame) { ShowQuestObjectiveStateStartScreen.getInstance().createScreen(nifty); SlickRenderFontLoaders.getInstance().addLoader(new DefaultSlickRenderFontLoader(), SlickAddLoaderLocation.first); Element sp = getNifty().getCurrentScreen().findElementByName("scrollPanel"); createMapItemPopup(getNifty(),getNifty().getCurrentScreen(), sp); } @Override protected void renderGame(GameContainer container, StateBasedGame sbg, Graphics graphics) throws SlickException { } @Override protected void updateGame(GameContainer container, StateBasedGame sbGame, int delta) throws SlickException { if (container.getInput().isKeyPressed(Input.KEY_ESCAPE)) { sbGame.enterState(InGameState.ID, new FadeOutTransition(), new FadeInTransition()); } } @Override public void mousePressed(int button, int x, int y) { super.mousePressed(button, x, y); } @Override public void mouseReleased(int button, int x, int y) { super.mouseReleased(button, x, y); } @Override public void mouseMoved(int oldx, int oldy, int newx, int newy) { super.mouseMoved(oldx, oldy, newx, newy); } @Override public void keyPressed(final int key, final char c) { } @Override public void keyReleased(final int key, final char c) { } }