package Roguelike.Dialogue;
import MobiDevelop.UI.HorizontalFlowGroup;
import Roguelike.Global;
import Roguelike.Items.Item;
import Roguelike.Screens.GameScreen;
import Roguelike.Tiles.Point;
import Roguelike.UI.*;
import Roguelike.UI.Tooltip;
import com.badlogic.gdx.Game;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.InputListener;
import com.badlogic.gdx.scenes.scene2d.ui.*;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.badlogic.gdx.utils.XmlReader;
/**
* Created by Philip on 07-Feb-16.
*/
public class DialogueActionOpenShop extends AbstractDialogueAction
{
boolean complete = false;
@Override
public DialogueManager.ReturnType process()
{
if (complete)
{
complete = false;
return DialogueManager.ReturnType.ADVANCE;
}
Table table = new Table();
ButtonKeyboardHelper keyboardHelper = new ButtonKeyboardHelper( );
fillTable( table, keyboardHelper );
GameScreen.Instance.displayContextMenu( table, true, keyboardHelper );
return DialogueManager.ReturnType.RUNNING;
}
private void fillTable( final Table table, final ButtonKeyboardHelper keyboardHelper )
{
int x = keyboardHelper.currentx;
int y = keyboardHelper.currenty;
int z = keyboardHelper.currentz;
keyboardHelper.grid.clear();
table.clear();
final Skin skin = Global.loadSkin();
Label shop = new Label( "Shop", skin, "title" );
table.add( shop ).expandX().left().pad( 5 );
table.row();
table.add( new Seperator( skin ) ).expandX().fillX();
table.row();
Table fundsLine = new Table();
Item money = Global.CurrentLevel.player.inventory.getItem("money");
SpriteWidget fundsSprite = new SpriteWidget( money.getIcon(), 32, 32 );
fundsLine.add( fundsSprite );
Label funds = new Label("Funds: " + money.count, skin);
fundsLine.add( funds ).expandX().left();
table.add( fundsLine ).expandX().fillX();
table.row();
table.add( new Seperator( skin ) ).expandX().fillX();
table.row();
Table group = new Table();
group.defaults().pad( 10 ).height( 40 );
for (final Item item : Global.CurrentDialogue.inventory.m_items)
{
if (item.value > 0)
{
if (item.ability != null)
{
item.ability.current.current.setCaster( Global.CurrentLevel.player );
}
final boolean hasTheCash = Global.CurrentLevel.player.inventory.getItemCount( "money" ) >= item.value;
Table tooltipTable = new Table( );
{
Table itable = item.createTable( skin, Global.CurrentLevel.player );
tooltipTable.add( itable ).expand().fill();
tooltipTable.row();
Label label = new Label( "Costs " + item.value, skin );
if ( !hasTheCash )
{
label.setColor( Color.RED );
}
tooltipTable.add( label );
}
Tooltip tooltip = new Tooltip( tooltipTable, skin, GameScreen.Instance.stage );
TooltipListener tooltipListener = new TooltipListener( tooltip );
Table itemTable = new Table( );
SpriteWidget spriteWidget = new SpriteWidget( item.getIcon(), 32, 32 );
spriteWidget.addListener( tooltipListener );
itemTable.add( spriteWidget );
group.add( itemTable ).expandX().left();
Label name = new Label(item.getName(), skin);
name.addListener( tooltipListener );
group.add( name ).expandX().left();
Label cost = new Label("Purchase for " + item.value, skin);
cost.setColor( Color.RED );
TextButton purchase = new TextButton( "Purchase for " + item.value, skin );
purchase.addListener( new ClickListener( )
{
public void clicked (InputEvent event, float x, float y)
{
if (item.ability != null)
{
GameScreen.Instance.pickupQueue.add( item );
}
else
{
Global.CurrentLevel.player.inventory.equip( item );
Global.CurrentLevel.player.inventory.removeItem( "money", item.value );
}
fillTable( table, keyboardHelper );
}
});
if (hasTheCash)
{
group.add( purchase ).expandX().left();
keyboardHelper.add( purchase );
}
else
{
group.add( cost ).expandX().left();
}
group.row();
}
}
ScrollPane scrollPane = new ScrollPane( group, skin );
table.add( scrollPane ).expand().fill();
table.row();
table.add( new Seperator( skin ) ).expandX().fillX();
table.row();
TextButton done = new TextButton( "Done", skin );
done.addListener( new ClickListener( )
{
public void clicked (InputEvent event, float x, float y)
{
GameScreen.Instance.clearContextMenu( true );
complete = true;
Global.CurrentDialogue.dialogue.advance( Global.CurrentDialogue );
}
});
table.add( done ).pad( 5 );
table.row();
keyboardHelper.add( done );
keyboardHelper.scrollPane = scrollPane;
keyboardHelper.trySetCurrent( x, y, z );
}
@Override
public void parse( XmlReader.Element xml )
{
}
}