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<ElementBuilder> list = new Vector<ElementBuilder>();
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<ElementBuilder> 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) {
}
}