package com.lyeeedar.Roguelike3D.Graphics.Screens; import java.util.ArrayList; import java.util.List; import java.util.NavigableSet; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input.Keys; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.InputListener; import com.badlogic.gdx.scenes.scene2d.ui.Button; import com.badlogic.gdx.scenes.scene2d.ui.ButtonGroup; import com.badlogic.gdx.scenes.scene2d.ui.CheckBox; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.lyeeedar.Roguelike3D.Roguelike3DGame; import com.lyeeedar.Roguelike3D.Game.GameStats; import com.lyeeedar.Roguelike3D.Game.GameStats.Equipment_Slot; import com.lyeeedar.Roguelike3D.Game.Item.Equipment_BODY; import com.lyeeedar.Roguelike3D.Game.Item.Equipment_BOOTS; import com.lyeeedar.Roguelike3D.Game.Item.Equipment_HAND; import com.lyeeedar.Roguelike3D.Game.Item.Equipment_HEAD; import com.lyeeedar.Roguelike3D.Game.Item.Equipment_LEGS; import com.lyeeedar.Roguelike3D.Game.Item.Equippable; import com.lyeeedar.Roguelike3D.Game.Item.Item.Item_Type; import com.lyeeedar.Roguelike3D.Roguelike3DGame.GameScreen; public class InventoryScreen extends UIScreen { public InventoryScreen(Roguelike3DGame game) { super(game); // TODO Auto-generated constructor stub } Table left; Table mid; Table right; public void createLeft() { left.clear(); EquipButton head = new EquipButton(skin, Item_Type.ARMOUR_HEAD, Equipment_Slot.HEAD); EquipButton body = new EquipButton(skin, Item_Type.ARMOUR_BODY, Equipment_Slot.BODY); EquipButton legs = new EquipButton(skin, Item_Type.ARMOUR_LEGS, Equipment_Slot.LEGS); EquipButton boots = new EquipButton(skin, Item_Type.ARMOUR_BOOTS, Equipment_Slot.BOOTS); EquipButton l_hand = new EquipButton(skin, Item_Type.WEAPON, Equipment_Slot.L_HAND); EquipButton r_hand = new EquipButton(skin, Item_Type.WEAPON, Equipment_Slot.R_HAND); left.add(head); left.row(); left.add(l_hand); left.add(body); left.add(r_hand); left.row(); left.add(legs); left.row(); left.add(boots); left.row(); } Equippable selected = null; EquipButton equipped = null; public void createMid() { mid.clear(); Table label = null; TextButton button = null; if (equipped == null) return; else if (selected == null) { if (equipped.item == null) return; label = equipped.item.getDescriptionWidget(skin); } else { if (equipped.item == null) { label = selected.getDescriptionWidget(skin); button = new TextButton("Equip", skin); button.addListener(new InputListener() { public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { equipped.equip(selected); createMid(); createRight(null); return false; } }); } else { label = equipped.item.getComparisonWidget(selected, skin); button = new TextButton("Equip", skin); button.addListener(new InputListener() { public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { equipped.equip(selected); createMid(); createRight(null); return false; } }); } } mid.add(label); mid.row(); if (button != null) { mid.add(button); } } public void createRight(Item_Type type) { right.clear(); if (type == null) return; Table itemList = new Table(); List<Equippable> items = GameStats.getCarryEquipment(type); ButtonGroup bg = new ButtonGroup(); for (Equippable e : items) { if (equipped != null && equipped.item != null && e.UID.equals(equipped.item.UID)) continue; itemList.add(new EquippableButton(skin, e, bg)); itemList.row(); } ScrollPane scroll = new ScrollPane(itemList, skin); scroll.setColor(0, 0, 0, 1.0f); scroll.setScrollingDisabled(true, false); right.add(scroll); } @Override public void show() { Gdx.input.setInputProcessor(stage); createLeft(); } @Override public void hide() { Gdx.input.setInputProcessor(null); } @Override public void pause() { // TODO Auto-generated method stub } @Override public void resume() { // TODO Auto-generated method stub } @Override protected void createSuper() { Table table = new Table(); left = new Table(); mid = new Table(); right = new Table(); table.add(left); table.add(mid); table.add(right); stage.addActor(table); table.setFillParent(true); } @Override protected void superSuperDispose() { // TODO Auto-generated method stub } @Override public void update(float delta) { if (Gdx.input.isKeyPressed(Keys.ESCAPE)) game.switchScreen(GameScreen.MAINMENU); } class EquipButton extends Button { final Item_Type type; final Equipment_Slot slot; Equippable item; public EquipButton(Skin skin, final Item_Type type, Equipment_Slot slot) { super(skin); this.type = type; this.slot = slot; if (slot == Equipment_Slot.HEAD) item = GameStats.head; else if (slot == Equipment_Slot.BODY) item = GameStats.body; else if (slot == Equipment_Slot.LEGS) item = GameStats.legs; else if (slot == Equipment_Slot.BOOTS) item = GameStats.boots; else if (slot == Equipment_Slot.L_HAND) item = GameStats.l_hand; else if (slot == Equipment_Slot.R_HAND) item = GameStats.r_hand; final EquipButton parent = this; addListener(new InputListener() { public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { equipped = parent; selected = null; createMid(); createRight(type); return true; } }); this.add(new Label(""+slot, skin)); } public void equip(Equippable e) { item = e; if (slot == Equipment_Slot.HEAD) GameStats.head = (Equipment_HEAD) e; else if (slot == Equipment_Slot.BODY) GameStats.body = (Equipment_BODY) e; else if (slot == Equipment_Slot.LEGS) GameStats.legs = (Equipment_LEGS) e; else if (slot == Equipment_Slot.BOOTS) GameStats.boots = (Equipment_BOOTS) e; else if (slot == Equipment_Slot.L_HAND) GameStats.l_hand = (Equipment_HAND) e; else if (slot == Equipment_Slot.R_HAND) GameStats.r_hand = (Equipment_HAND) e; } } class EquippableButton extends Button { final Equippable equipment; CheckBox cbox; boolean clicked = false; public EquippableButton(Skin skin, Equippable e, ButtonGroup bg) { super(skin); this.equipment = e; cbox = new CheckBox(e.name, skin); bg.add(cbox); addListener(new InputListener() { public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { clicked = true; return true; } public void touchUp (InputEvent event, float x, float y, int pointer, int button) { if (clicked) { clicked = false; cbox.toggle(); selected = equipment; createMid(); } } public void touchDragged (InputEvent event, float x, float y, int pointer) { clicked = false; } }); this.add(new Label(e.name, skin)); } } }