package guis;
import org.apache.commons.io.FileUtils;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import core.DungeonConstants;
import core.GameState;
import core.Main;
import core.RNG;
import core.character;
import entity.ClassEntity;
import entity.DNDEntity;
import entity.RaceEntity;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
public class HomeWindow {
private static String version = "Ver0.9.Delta";
private static DocumentBuilderFactory dbFactory;
private static DocumentBuilder dBuilder;
private static Document doc;
private static Element element;
private static Display display;
private Shell shell;
public static boolean cancel = false;
public static int monies;
private HomeWindow hw;
private static HashMap<String, String> filepaths;
private StackLayout m_mainWindowLayout;
private StackLayout charLayout;
private Composite m_mainWindow;
private static List charList;
// the stack layout allows us to navigate from one view to another.
private Composite mainWindow;
private StackLayout mainWindowLayout = new StackLayout();
private final Composite homeScreen;
private final Composite dungeonMasterScreen;
private final Composite dungeonGenConfig;
private Composite characterPanel;
private Composite characterComp;
private Composite playerScreen;
private referencePanel playerScreenReferencePanel;
private referencePanel dungeonMasterScreenReferencePanel;
private final Composite dungeonMasterScreenComp;
private final List dungeonList;
private boolean dungeonMasterScreenPopulated = false;
public static int[] baseAbilityScores = new int[6];
public HomeWindow(Display d) {
hw = this;
display = d;
shell = new Shell(d);
Image logo = new Image(d, "images/bnb_logo.gif");
shell.setImage(logo);
shell.setText("Meta D&D " + version);
shell.setSize(GameState.DEFAULT_WIDTH, GameState.DEFAULT_HEIGHT);
shell.setLayout(new GridLayout(3, false));
DungeonConstants.SAVEDDUNGEONSDIR.mkdir();
// the stack layout allows us to navigate from one view to another.
mainWindow = new Composite(shell, SWT.NONE);
mainWindow.setLayoutData(new GridData(GridData.FILL_BOTH));
mainWindowLayout = new StackLayout();
mainWindow.setLayout(mainWindowLayout);
homeScreen = new Composite(mainWindow, SWT.NONE);
dungeonMasterScreen = new Composite(mainWindow, SWT.NONE);
dungeonGenConfig = new Composite(mainWindow, SWT.NONE);
playerScreen = new Composite(mainWindow, SWT.NONE);
// this is to make the load list of dungeons dynamic.
///////////////DUNGEON SCREEN STUFF//////////////////
dungeonMasterScreenComp = new Composite(dungeonMasterScreen, SWT.NONE);
Label dungeonLabel = new Label(dungeonMasterScreenComp, SWT.NONE);
dungeonLabel.setText("Dungeons:");
Font dungeonFont = Main.boldFont;
dungeonLabel.setFont(dungeonFont);
// generate new dungeon
Button generateButton = new Button(dungeonMasterScreenComp, SWT.PUSH);
generateButton.setText("Generate New Dungeon");
generateButton.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
new MenuBar(shell, hw, GameState.PAGE.DungeonGenerationConfigScreen);
mainWindowLayout.topControl = dungeonGenConfig;
mainWindow.layout();
}
});
dungeonList = new List(dungeonMasterScreenComp, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
///////////////DUNGEON SCREEN STUFF//////////////////
createPageContent();
new MenuBar(shell, this, GameState.PAGE.HomeScreen); //Add menu bar to windows like this
run();
}
public void run() {
center(shell);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
private static void center(Shell shell) {
Rectangle bds = shell.getDisplay().getBounds();
Point p = shell.getSize();
int nLeft = (bds.width - p.x) / 2;
int nTop = (bds.height - p.y) / 2;
shell.setBounds(nLeft, nTop, p.x, p.y);
}
private void createPageContent() {
this.m_mainWindow = mainWindow;
this.m_mainWindowLayout = mainWindowLayout;
// this grid layout size allows us to have permanent centering of these buttons,
// regardless of user resize.
GridLayout homeScreenLayout = new GridLayout(6, true);
homeScreen.setLayout(homeScreenLayout);
GridLayout dungeonMasterScreenLayout = new GridLayout(5, true);
dungeonMasterScreenLayout.marginLeft = 10;
dungeonMasterScreen.setLayout(dungeonMasterScreenLayout);
GridLayout playerScreenLayout = new GridLayout(4, true);
playerScreen.setLayout(playerScreenLayout);
GridLayout dungeonGenConfigLayout = new GridLayout(3, true);
dungeonGenConfig.setLayout(dungeonGenConfigLayout);
///////////////////HOME SCREEN//////////////////////////
// homeScreen.setBackgroundImage(resize(new Image(Display.getCurrent(), "images/dragon.png"), 10, 10));
///////////// first row: image and app name ///////////
// placeholder labels take up columns 1 and 2 in the grid.
//new Label(homeScreen, SWT.NONE);
//new Label(homeScreen, SWT.NONE);
Image dragonImage = new Image(Display.getCurrent(), "images/dragon_250.png");
Label dragon = new Label(homeScreen,SWT.NONE);
dragon.setImage(dragonImage);
// Canvas canvas = new Canvas(homeScreen,SWT.NO_REDRAW_RESIZE);
// canvas.addPaintListener(new PaintListener() {
// public void paintControl(PaintEvent e) {
// e.gc.drawImage(dragonImage,0,0);
// }
// });
GridData gd = new GridData(SWT.RIGHT, SWT.CENTER, true, false);
gd.horizontalSpan = 2;
dragon.setLayoutData(gd);
//canvas.setLayoutData(gd);
Label metaDND = new Label(homeScreen, SWT.NONE);
metaDND.setText("MetaDND");
Font font = new Font(Display.getCurrent(), new FontData(display.getSystemFont().getFontData()[0].getName(), 85,
SWT.BOLD));
metaDND.setFont(font);
gd = new GridData(SWT.LEFT, SWT.END, true, false);
gd.horizontalSpan = 4;
metaDND.setLayoutData(gd);
// col 4: text
// placeholder labels take up columns 5 and 6 in the grid.
//new Label(homeScreen, SWT.NONE);
//new Label(homeScreen, SWT.NONE);
// gd = new GridData();
// gd.horizontalSpan = 6;
// new Label(homeScreen, SWT.NONE).setLayoutData(gd);
// placeholder labels take up columns 1 and 2 in the grid.
new Label(homeScreen, SWT.NONE);
new Label(homeScreen, SWT.NONE);
// default size of the buttons is 200 by 100
// the buttons occupy columns 3 and 4 in the grid.
GridData playersGD = new GridData(SWT.RIGHT, SWT.BEGINNING);
playersGD.grabExcessHorizontalSpace = true;
playersGD.grabExcessVerticalSpace = true;
playersGD.widthHint = 200;
playersGD.heightHint = 100;
Button playersButton = new Button(homeScreen, SWT.PUSH);
playersButton.setLayoutData(playersGD);
playersButton.setText("Players");
playersButton.setSize(new Point(300, 400));
playersButton.pack();
// each element should have its own griddata object.
GridData dungeonMastersGD = new GridData(SWT.RIGHT, SWT.BEGINNING);
dungeonMastersGD.grabExcessHorizontalSpace = true;
dungeonMastersGD.grabExcessVerticalSpace = true;
dungeonMastersGD.widthHint = 200;
dungeonMastersGD.heightHint = 100;
Button dungeonMastersButton = new Button(homeScreen, SWT.PUSH);
dungeonMastersButton.setLayoutData(dungeonMastersGD);
dungeonMastersButton.setText("Dungeon Masters");
dungeonMastersButton.pack();
// placeholder labels for columns 5 and 6
new Label(homeScreen, SWT.NONE);
new Label(homeScreen, SWT.NONE);
///////////////////HOME SCREEN//////////////////////////
///////////////////PLAYER SCREEN//////////////////////////
characterPanel = new Composite(playerScreen, SWT.NONE);
characterComp = new Composite(characterPanel, SWT.NONE);
GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
gridData.horizontalSpan = 3;
characterPanel.setLayoutData(gridData);
charLayout = new StackLayout();
characterPanel.setLayout(charLayout);
charLayout.topControl = characterComp;
GridLayout characterCompLayout = new GridLayout(1, true);
characterComp.setLayout(characterCompLayout);
GridData chargridData = new GridData(SWT.FILL, SWT.BEGINNING, true , false);
Label playerLabel = new Label(characterComp, SWT.NONE);
playerLabel.setText("Characters:");
Font playerFont = Main.boldFont;
playerLabel.setFont(playerFont);
playerLabel.setLayoutData(chargridData);
gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
charList = new List(characterComp, SWT.V_SCROLL);
chargridData = new GridData(SWT.FILL, SWT.FILL, true, true);
chargridData.verticalSpan = 4;
charList.setLayoutData(chargridData);
charList.addSelectionListener(new SelectionListener(){
public void widgetDefaultSelected(SelectionEvent e){
//TODO populate the Character sheet
int charInd = charList.getSelectionIndex();
if (charInd < 0 || charInd > charList.getSize().x) {
return;
}
String charToLoad = charList.getSelection()[0];
String path = filepaths.get(charToLoad);
System.out.println(path);
String[] args = {path};
CharacterMain test = new CharacterMain(args, characterPanel, shell);
Main.gameState.currentlyLoadedCharacter.setCharMain(test);
charLayout.topControl = test.getMainWindow();
characterPanel.layout();
shell.setBounds((int)(display.getBounds().width * .05), (int)(display.getBounds().height * .05), (int)(display.getBounds().width * .9), (int)(display.getBounds().height * .8));
}
@Override
//leave blank, but must have
public void widgetSelected(SelectionEvent e) {}
});
Button addChar = new Button(characterComp, SWT.PUSH);
addChar.setText("Add Character");
chargridData = new GridData(SWT.LEFT, SWT.CENTER, true, true);
addChar.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
new CharacterWizard(shell.getDisplay());
}
});
Button deleteChar = new Button(characterComp, SWT.PUSH);
deleteChar.setText("Delete Character");
chargridData = new GridData(SWT.LEFT, SWT.CENTER, true, true);
deleteChar.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
if (charList.getSelectionIndex() < 0) {
return;
}
String charDescription = charList.getItem(charList.getSelectionIndex());
String delim = "[,]";
String[] tokens = charDescription.split(delim);
//TODO delete a char
deleteCharacter(tokens[0]);
}
});
Button playerBack = new Button(characterComp, SWT.PUSH);
playerBack.setText("Back");
chargridData = new GridData(SWT.LEFT, SWT.CENTER, true, true);
playerBack.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
navigateToHomeScreen();
}
});
// Call the seach panel composite
playerScreenReferencePanel = new referencePanel(playerScreen);
Composite ps_rp = playerScreenReferencePanel.getRefPanel();
gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
ps_rp.setLayoutData(gridData);
// set screens
characterComp.layout();
characterPanel.layout();
playerScreen.layout();
///////////////////PLAYER SCREEN//////////////////////////
///////////////////DUNGEON MASTERS SCREEN//////////////////////////
populateDungeonMasterScreen();
///////////////////DUNGEON SCREEN//////////////////////////
///////////////////DUNGEON GENCONFIG//////////////////////////
new Label(dungeonGenConfig, SWT.NONE);
Composite sliderComposite = new Composite(dungeonGenConfig, SWT.CENTER);
GridLayout sliderCompositeLayout = new GridLayout(2, false);
GridData sliderCompositeGridData = new GridData(SWT.LEFT, SWT.CENTER, true, true);
//sliderCompositeGridData.minimumWidth = 300;
sliderComposite.setLayoutData(sliderCompositeGridData);
sliderComposite.setLayout(sliderCompositeLayout);
Label sizeLabel = new Label(sliderComposite, SWT.NONE);
sizeLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
sizeLabel.setText("Size of Dungeon:");
final Scale sizeSlider = new Scale(sliderComposite, SWT.NONE);
sizeSlider.setIncrement(1);
sizeSlider.setMaximum(DungeonConstants.MAX_DUNGEON_SIZE);
sizeSlider.setMinimum(DungeonConstants.MIN_DUNGEON_SIZE);
sizeSlider.setSelection(30);
GridData sizeSliderGD = new GridData(SWT.LEFT, SWT.FILL, true, true);
sizeSlider.setLayoutData(sizeSliderGD);
Label densityLabel = new Label(sliderComposite, SWT.NONE);
densityLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
densityLabel.setText("Density of Passable Terrain:");
final Scale densitySlider = new Scale(sliderComposite, SWT.NULL);
densitySlider.setIncrement(1);
densitySlider.setMaximum(50);
densitySlider.setMinimum(10);
densitySlider.setSelection(20);
densitySlider.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, true, true));
Label squareSizeLabel = new Label(sliderComposite, SWT.NONE);
squareSizeLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
squareSizeLabel.setText("Size of Dungeon Tile:");
final Scale squareSizeSlider = new Scale(sliderComposite, SWT.NULL);
squareSizeSlider.setIncrement(5);
squareSizeSlider.setMaximum(50);
squareSizeSlider.setMinimum(10);
squareSizeSlider.setSelection(30);
squareSizeSlider.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, true, false));
sliderComposite.pack();
Button cancelButton = new Button(sliderComposite, SWT.NONE);
cancelButton.setText("Cancel");
cancelButton.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
new MenuBar(shell, hw, GameState.PAGE.DungeonMasterScreen);
navigateToDungeonMasterScreen();
}
});
// confirm generation configuration
Button confirmButton = new Button(sliderComposite, SWT.NONE);
confirmButton.setText("Confirm");
confirmButton.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
int sizeSelection = sizeSlider.getSelection();
int densitySelection = densitySlider.getSelection();
double density = 1 - ((double)densitySelection/100);
int squareSize = squareSizeSlider.getSelection();
new DungeonViewer(hw, sizeSelection, density, squareSize);
}
});
dungeonGenConfig.pack();
/////////////////////NESTED BUTTON LISTENERS////////////////////////
// dungeonMaster button
// loadButton
//
playersButton.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
//TODO call function to populate charList with characters
loadCharacters();
playerScreen.pack();
navigateToPlayerScreen();
}
});
dungeonMastersButton.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
navigateToDungeonMasterScreen();
}
});
homeScreen.pack();
mainWindowLayout.topControl = homeScreen;
}
public void navigateToHomeScreen() {
new MenuBar(shell, this, GameState.PAGE.HomeScreen);
GameState.currentPage = GameState.PAGE.HomeScreen;
this.shell.setSize(GameState.DEFAULT_WIDTH, GameState.DEFAULT_HEIGHT);
this.m_mainWindowLayout.topControl = this.homeScreen;
this.m_mainWindow.layout();
}
public void navigateToDungeonMasterScreen() {
new MenuBar(shell, this, GameState.PAGE.DungeonMasterScreen);
populateDungeonMasterScreen();
GameState.currentPage = GameState.PAGE.DungeonMasterScreen;
this.shell.setSize(GameState.DEFAULT_WIDTH, GameState.DEFAULT_HEIGHT);
this.m_mainWindowLayout.topControl = this.dungeonMasterScreen;
this.m_mainWindow.layout();
}
public void navigateToPlayerScreen() {
new MenuBar(shell, this, GameState.PAGE.PlayerScreen);
GameState.currentPage = GameState.PAGE.PlayerScreen;
this.shell.setSize(GameState.DEFAULT_WIDTH, GameState.DEFAULT_HEIGHT);
this.m_mainWindowLayout.topControl = this.playerScreen;
charLayout.topControl = characterComp;
characterPanel.layout();
this.m_mainWindow.layout();
}
//Parse through the user folders, and load the characters into
// the charList on the player window
public static void loadCharacters(){
charList.removeAll();
File CHARDIR = new File(System.getProperty("user.dir") + "//" + "User Data" + "//Character");
File[] files = new File(CHARDIR.getPath()).listFiles();
if(files != null){
character[] CharacterNames = new character[files.length];
int numCharacters = 0;
filepaths = new HashMap<String, String>();
String tmpName;
for(int i = 0; i < files.length; i++){
if(files[i].isDirectory()){
CharacterNames[numCharacters] = new character();
//TODO load the characters
try{
File CHARXML = new File(CHARDIR.getPath() + "//" + files[i].getName() +
"//" + files[i].getName() + ".xml");
dbFactory = DocumentBuilderFactory.newInstance();
dBuilder = dbFactory.newDocumentBuilder();
doc = dBuilder.parse(CHARXML);
doc.getDocumentElement().normalize();
NodeList nodes = doc.getElementsByTagName("Character");
Node node = nodes.item(0);
if (node.getNodeType() == Node.ELEMENT_NODE) {
element = (Element) node;
String name = getValue("Name", element);
CharacterNames[numCharacters].setName(name);
CharacterNames[numCharacters].setLevel(Integer.parseInt(getValue("Level", element)));
CharacterNames[numCharacters].setCharClass((ClassEntity)Main.gameState.classes.get(getValue("Class", element)));
CharacterNames[numCharacters].setCharRace((RaceEntity)Main.gameState.races.get(getValue("Race", element)));
}
tmpName = CharacterNames[numCharacters].getName() + ", Level "
+ CharacterNames[numCharacters].getLevel() + " "
+ CharacterNames[numCharacters].getCharRace().getName()
+ " " + CharacterNames[numCharacters].getCharClass().getName();
charList.add(tmpName);
filepaths.put(tmpName, CHARXML.getPath());
numCharacters ++;
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
}
public static void deleteCharacter(String name){
//TODO pull up the delete confirmation, showing the name of the character
// and reminds that favRolls with the char will also be deleted.
// with cancel/confirm buttons
// if confirm, delete the folder that the character file is in.
final Shell deleteChar = new Shell(display);
final GridLayout gridLay = new GridLayout();
gridLay.makeColumnsEqualWidth = false;
gridLay.horizontalSpacing = 3;
gridLay.numColumns = 3;
deleteChar.setLayout(gridLay);
deleteChar.setText("Delete");
//deleteFile.setSize(250, 150);
center(deleteChar);
new Label(deleteChar, SWT.NONE);
Label confirm = new Label(deleteChar, SWT.NONE);
GridData gridData = new GridData(SWT.RIGHT, SWT.CENTER, false, false);
gridData.horizontalIndent = 5;
gridData.horizontalSpan = 3;
confirm.setLayoutData(gridData);
confirm.setText("Are you sure you want to delete " + name + "?");
Button cancel = new Button(deleteChar, SWT.PUSH);
cancel.setText("Cancel");
gridData = new GridData(SWT.RIGHT, SWT.BEGINNING, false, false);
gridData.horizontalIndent = 5;
cancel.setLayoutData(gridData);
cancel.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
deleteChar.dispose();
}
});
new Label(deleteChar, SWT.NONE);
Button deleteFinal = new Button(deleteChar, SWT.PUSH);
deleteFinal.setText("Delete");
gridData = new GridData(SWT.RIGHT, SWT.END, false, false);
gridData.horizontalIndent = 5;
deleteFinal.setLayoutData(gridData);
deleteFinal.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
String charName = name.replaceAll("[^A-Za-z0-9]", "");
File charDirectory = new File(System.getProperty("user.dir")
+ "//" + "User Data" + "//Character" + "//DND" + charName);
try {
FileUtils.deleteDirectory(charDirectory);
loadCharacters();
deleteChar.dispose();
} catch (IOException e) {
System.out.println("Could not delete Character.");
}
deleteChar.dispose();
}
});
deleteChar.pack();
deleteChar.open();
while (!deleteChar.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
private static String getValue(String tag, Element element) {
NodeList nodes = element.getElementsByTagName(tag).item(0).getChildNodes();
Node node = (Node) nodes.item(0);
return node.getNodeValue();
}
public void populateDungeonMasterScreen() {
if (!dungeonMasterScreenPopulated) {
GridData dungeonMasterScreenCompGD = new GridData(SWT.FILL, SWT.FILL, true, true);
dungeonMasterScreenCompGD.horizontalSpan = 3;
dungeonMasterScreenComp.setLayoutData(dungeonMasterScreenCompGD);
GridLayout dungeonMasterScreenCompLayout = new GridLayout(1, false);
dungeonMasterScreenComp.setLayout(dungeonMasterScreenCompLayout);
// placeholder labels take up columns 2 and 3 in the grid.
new Label(dungeonMasterScreenComp, SWT.NONE);
new Label(dungeonMasterScreenComp, SWT.NONE);
GridData listGD = new GridData(SWT.FILL, SWT.FILL, true, true);
listGD.widthHint = 400;
listGD.heightHint = 500;
dungeonList.setLayoutData(listGD);
// load dungeon
Button loadButton = new Button(dungeonMasterScreenComp, SWT.PUSH);
loadButton.setText("Load Dungeon");
loadButton.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
if (dungeonList.getSelectionIndex() < 0) {
return;
}
String dungeonToLoad = dungeonList.getSelection()[0];
String svgToLoad = "file:///";
svgToLoad += DungeonConstants.SAVEDDUNGEONSDIR.toString() + "//" + dungeonToLoad;
new DungeonViewer(svgToLoad);
}
});
Button dungeonBack = new Button(dungeonMasterScreenComp, SWT.PUSH);
dungeonBack.setText("Back");
dungeonMasterScreenCompGD = new GridData(SWT.LEFT, SWT.CENTER, true, true);
dungeonBack.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
navigateToHomeScreen();
}
});
Composite BUTTONS = new Composite(dungeonMasterScreen, SWT.NONE);
GridLayout buttonsLayout = new GridLayout();
buttonsLayout.makeColumnsEqualWidth = true;
buttonsLayout.verticalSpacing = 15;
buttonsLayout.numColumns = 1;
BUTTONS.setLayout(buttonsLayout);
Button Loot = new Button(BUTTONS, SWT.PUSH);
Loot.setText("Generate Loot");
GridData gridData = new GridData(SWT.FILL, SWT.CENTER, true, true);
Loot.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
RNG rng = new RNG();
//TODO Loot generation
int armorNum = Main.gameState.armor.size();
int weaponsNum = Main.gameState.weapons.size();
int itemNum = Main.gameState.items.size();
if (armorNum == 0 || weaponsNum == 0 || itemNum == 0) {
return;
}
int choice = rng.GetRandomInteger(1, 4);
if(choice == 1){//Generate Armor
int armor = rng.GetRandomInteger(0, armorNum - 1);
Collection<DNDEntity> armorCol = Main.gameState.armor.values();
Iterator<DNDEntity> itr = armorCol.iterator();
ArrayList<DNDEntity> armorArray = new ArrayList<DNDEntity>();
while (itr.hasNext()) {
armorArray.add((DNDEntity) itr.next());
}
armorArray.get(armor).toTooltipWindow();
}else if(choice == 2){// Generate Weapons
int weapon = rng.GetRandomInteger(0, weaponsNum- 1);
Collection<DNDEntity> weaponCol = Main.gameState.weapons.values();
Iterator<DNDEntity> itr = weaponCol.iterator();
ArrayList<DNDEntity> weaponArray = new ArrayList<DNDEntity>();
while (itr.hasNext()) {
weaponArray.add((DNDEntity) itr.next());
}
weaponArray.get(weapon).toTooltipWindow();
}else if(choice == 3){// Generate Item
int item = rng.GetRandomInteger(0, itemNum- 1);
Collection<DNDEntity> itemCol = Main.gameState.items.values();
Iterator<DNDEntity> itr = itemCol.iterator();
ArrayList<DNDEntity> itemArray = new ArrayList<DNDEntity>();
while (itr.hasNext()) {
itemArray.add((DNDEntity) itr.next());
}
itemArray.get(item).toTooltipWindow();
}else{// Generate Gold
monies = rng.GetRandomInteger(1, 500);
final Shell lootGold = new Shell(display);
lootGold.setText("Loot: Gold");
//saveName.setSize(300, 200);
center(lootGold);
GridLayout layout = new GridLayout();
layout.makeColumnsEqualWidth = true;
layout.horizontalSpacing = 3;
layout.numColumns = 3;
lootGold.setLayout(layout);
// this appears when there is an empty save
Label lootLabel = new Label(lootGold, SWT.NONE);
lootLabel.setText("Gold Pieces: " + monies);
GridData gridData = new GridData(SWT.CENTER, SWT.CENTER, true, false);
gridData.horizontalIndent = 5;
gridData.horizontalSpan = 3;
lootLabel.setLayoutData(gridData);
lootLabel.pack();
Button okay = new Button(lootGold, SWT.PUSH);
okay.setText("Close");
gridData = new GridData(SWT.RIGHT, SWT.CENTER, false, false);
gridData.horizontalIndent = 5;
okay.setLayoutData(gridData);
okay.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
lootGold.dispose();
}
});
okay.pack();
new Label(lootGold, SWT.NONE);
Button reRoll = new Button(lootGold, SWT.PUSH);
reRoll.setText("ReRoll");
gridData = new GridData(SWT.RIGHT, SWT.CENTER, false, false);
gridData.horizontalIndent = 5;
reRoll.setLayoutData(gridData);
reRoll.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
monies = rng.GetRandomInteger(1, 500);
lootLabel.setText("Gold Pieces: " + monies);
lootLabel.pack();
//lootGold.pack();
}
});
reRoll.pack();
lootGold.pack();
lootGold.open();
while (!lootGold.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
}
});
Button Trap = new Button(BUTTONS, SWT.PUSH);
Trap.setText("Generate Trap");
gridData = new GridData(SWT.FILL, SWT.CENTER, true, true);
Trap.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
RNG rng = new RNG();
//TODO Trap generation
int trapNum = Main.gameState.traps.size();
if (trapNum == 0) {
return;
}
int trap = rng.GetRandomInteger(0, trapNum) - 1;
Collection<DNDEntity> trapCol = Main.gameState.traps.values();
Iterator<DNDEntity> itr = trapCol.iterator();
ArrayList<DNDEntity> trapArray = new ArrayList<DNDEntity>();
while (itr.hasNext()) {
trapArray.add((DNDEntity) itr.next());
}
trapArray.get(trap).toTooltipWindow();
}
});
Button Monster = new Button(BUTTONS, SWT.PUSH);
Monster.setText("Generate Monster");
gridData = new GridData(SWT.FILL, SWT.CENTER, true, true);
Monster.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
RNG rng = new RNG();
//TODO Monster generation
int monsterNum = Main.gameState.monsters.size();
if (monsterNum == 0) {
return;
}
int monster = rng.GetRandomInteger(0, monsterNum) - 1;
Collection<DNDEntity> monsterCol = Main.gameState.monsters.values();
Iterator<DNDEntity> itr = monsterCol.iterator();
ArrayList<DNDEntity> monsterArray = new ArrayList<DNDEntity>();
while (itr.hasNext()) {
monsterArray.add((DNDEntity) itr.next());
}
monsterArray.get(monster).toTooltipWindow();
}
});
// Call the search panel composite
dungeonMasterScreenReferencePanel = new referencePanel(dungeonMasterScreen);
Composite ds_rp = dungeonMasterScreenReferencePanel.getRefPanel();
gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
ds_rp.setLayoutData(gridData);
dungeonMasterScreen.pack();
dungeonMasterScreenPopulated = true;
}
dungeonList.removeAll();
// populate the list
for (String s: DungeonConstants.SAVEDDUNGEONSDIR.list()) {
if (s.contains(".svg")) {
dungeonList.add(s);
}
}
// make the list look good.
}
private Image resize(Image image, int width, int height) {
Image scaled = new Image(Display.getCurrent(), width, height);
GC gc = new GC(scaled);
gc.setAntialias(SWT.ON);
gc.setInterpolation(SWT.HIGH);
gc.drawImage(image, 0, 0, image.getBounds().width, image.getBounds().height, 0, 0, width, height);
gc.dispose();
image.dispose(); // don't forget about me!
return scaled;
}
// public static void main(String[] args) {
// Display display = new Display();
// HomeWindow hw = new HomeWindow(display);
// display.dispose();
// }
}