diff --git a/src/com/gpl/rpg/atcontentstudio/ATContentStudio.java b/src/com/gpl/rpg/atcontentstudio/ATContentStudio.java index da75ee8..8e42342 100644 --- a/src/com/gpl/rpg/atcontentstudio/ATContentStudio.java +++ b/src/com/gpl/rpg/atcontentstudio/ATContentStudio.java @@ -18,7 +18,7 @@ import com.gpl.rpg.atcontentstudio.ui.WorkspaceSelector; public class ATContentStudio { public static final String APP_NAME = "Andor's Trail Content Studio"; - public static final String APP_VERSION = "v0.4.3"; + public static final String APP_VERSION = "v0.4.4"; public static boolean STARTED = false; public static StudioFrame frame = null; diff --git a/src/com/gpl/rpg/atcontentstudio/model/GameSource.java b/src/com/gpl/rpg/atcontentstudio/model/GameSource.java index a5bb953..15dcefb 100644 --- a/src/com/gpl/rpg/atcontentstudio/model/GameSource.java +++ b/src/com/gpl/rpg/atcontentstudio/model/GameSource.java @@ -2,13 +2,29 @@ package com.gpl.rpg.atcontentstudio.model; import java.awt.Image; import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; import java.util.Enumeration; +import java.util.LinkedHashMap; +import java.util.LinkedList; import java.util.List; +import java.util.Map; import javax.swing.tree.TreeNode; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; + +import com.gpl.rpg.atcontentstudio.model.Project.ResourceSet; import com.gpl.rpg.atcontentstudio.model.gamedata.GameDataSet; import com.gpl.rpg.atcontentstudio.model.maps.TMXMapSet; import com.gpl.rpg.atcontentstudio.model.maps.Worldmap; @@ -21,6 +37,9 @@ public class GameSource implements ProjectTreeNode, Serializable { private static final long serialVersionUID = -1512979360971918158L; + public static final String DEFAULT_REL_PATH_FOR_GAME_RESOURCE = "res"+File.separator+"values"+File.separator+"loadresources.xml"; + public static final String DEFAULT_REL_PATH_FOR_DEBUG_RESOURCE = "res"+File.separator+"values"+File.separator+"loadresources_debug.xml"; + public transient GameDataSet gameData; public transient TMXMapSet gameMaps; public transient SpriteSheetSet gameSprites; @@ -39,6 +58,8 @@ public class GameSource implements ProjectTreeNode, Serializable { public transient Project parent = null; + public transient Map> referencedSourceFiles = null; + public GameSource(File folder, Project parent) { this.parent = parent; this.baseFolder = folder; @@ -59,6 +80,12 @@ public class GameSource implements ProjectTreeNode, Serializable { } public void initData() { + if (type == Type.source) { + if (parent.sourceSetToUse == ResourceSet.gameData || parent.sourceSetToUse == ResourceSet.debugData) { + referencedSourceFiles = new LinkedHashMap>(); + readResourceList(); + } + } this.gameData = new GameDataSet(this); this.gameMaps = new TMXMapSet(this); this.gameSprites = new SpriteSheetSet(this); @@ -70,6 +97,58 @@ public class GameSource implements ProjectTreeNode, Serializable { v.add(worldmap); } + public void readResourceList() { + File xmlFile = null; + if (parent.sourceSetToUse == ResourceSet.gameData) { + xmlFile = new File(baseFolder, DEFAULT_REL_PATH_FOR_GAME_RESOURCE); + } else if (parent.sourceSetToUse == ResourceSet.debugData) { + xmlFile = new File(baseFolder, DEFAULT_REL_PATH_FOR_DEBUG_RESOURCE); + } else { + return; + } + + if (!xmlFile.exists()) return; + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + Document doc; + try { + factory.setIgnoringComments(true); + factory.setIgnoringElementContentWhitespace(true); + factory.setExpandEntityReferences(false); + DocumentBuilder builder = factory.newDocumentBuilder(); + InputSource insrc = new InputSource(new FileInputStream(xmlFile)); +// insrc.setSystemId("http://worldmap/"); + insrc.setEncoding("UTF-8"); + doc = builder.parse(insrc); + + Element root = (Element) doc.getElementsByTagName("resources").item(0); + if (root != null) { + NodeList arraysList = root.getElementsByTagName("array"); + if (arraysList != null) { + for (int i = 0; i < arraysList.getLength(); i++) { + Element arrayNode = (Element) arraysList.item(i); + String name = arrayNode.getAttribute("name"); + List arrayContents = new LinkedList(); + NodeList arrayItems = arrayNode.getElementsByTagName("item"); + if (arrayItems != null) { + for (int j = 0; j < arrayItems.getLength(); j++) { + arrayContents.add(((Element)arrayItems.item(j)).getTextContent()); + } + referencedSourceFiles.put(name, arrayContents); + } + } + } + } + } catch (SAXException e) { + e.printStackTrace(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (ParserConfigurationException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + @Override public Enumeration children() { return v.getNonEmptyElements(); diff --git a/src/com/gpl/rpg/atcontentstudio/model/Project.java b/src/com/gpl/rpg/atcontentstudio/model/Project.java index 1777f3a..e02ef3e 100644 --- a/src/com/gpl/rpg/atcontentstudio/model/Project.java +++ b/src/com/gpl/rpg/atcontentstudio/model/Project.java @@ -73,10 +73,19 @@ public class Project implements ProjectTreeNode, Serializable { public transient Workspace parent; public Properties knownSpritesheetsProperties = null; + + public static enum ResourceSet { + gameData, + debugData, + allFiles + } + + public ResourceSet sourceSetToUse = ResourceSet.allFiles; - public Project(Workspace w, String name, File source) { + public Project(Workspace w, String name, File source, ResourceSet sourceSet) { this.parent = w; this.name = name; + this.sourceSetToUse = sourceSet; //CREATE PROJECT baseFolder = new File(w.baseFolder, name+File.separator); @@ -220,6 +229,10 @@ public class Project implements ProjectTreeNode, Serializable { } } + if (sourceSetToUse == null) { + sourceSetToUse = ResourceSet.allFiles; + } + // long l = new Date().getTime(); baseContent.refreshTransients(this); // l = new Date().getTime() - l; @@ -477,6 +490,21 @@ public class Project implements ProjectTreeNode, Serializable { return null; } + public int getItemCountIncludingAltered() { + return createdContent.gameData.items.size() + alteredContent.gameData.items.size() + baseContent.gameData.items.size(); + } + + public Item getItemIncludingAltered(int index) { + if (index < createdContent.gameData.items.size()) { + return createdContent.gameData.items.get(index); + } else if (index < createdContent.gameData.items.size() + alteredContent.gameData.items.size()){ + return alteredContent.gameData.items.get(index - createdContent.gameData.items.size()); + } else if (index < getItemCountIncludingAltered()) { + return baseContent.gameData.items.get(index - (createdContent.gameData.items.size() + alteredContent.gameData.items.size())); + } + return null; + } + public int getItemIndex(Item item) { if (item.getDataType() == GameSource.Type.created) { return createdContent.gameData.items.getIndex(item); @@ -542,6 +570,21 @@ public class Project implements ProjectTreeNode, Serializable { return null; } + public int getNPCCountIncludingAltered() { + return createdContent.gameData.npcs.size() + alteredContent.gameData.npcs.size() + baseContent.gameData.npcs.size(); + } + + public NPC getNPCIncludingAltered(int index) { + if (index < createdContent.gameData.npcs.size()) { + return createdContent.gameData.npcs.get(index); + } else if (index < createdContent.gameData.npcs.size() + alteredContent.gameData.npcs.size()){ + return alteredContent.gameData.npcs.get(index - createdContent.gameData.npcs.size()); + } else if (index < getNPCCountIncludingAltered()) { + return baseContent.gameData.npcs.get(index - (createdContent.gameData.npcs.size() + alteredContent.gameData.npcs.size())); + } + return null; + } + public int getNPCIndex(NPC npc) { if (npc.getDataType() == GameSource.Type.created) { return createdContent.gameData.npcs.getIndex(npc); diff --git a/src/com/gpl/rpg/atcontentstudio/model/Workspace.java b/src/com/gpl/rpg/atcontentstudio/model/Workspace.java index 2eb229f..7bcb029 100644 --- a/src/com/gpl/rpg/atcontentstudio/model/Workspace.java +++ b/src/com/gpl/rpg/atcontentstudio/model/Workspace.java @@ -146,7 +146,7 @@ public class Workspace implements ProjectTreeNode, Serializable { } - public static void createProject(final String projectName, final File gameSourceFolder) { + public static void createProject(final String projectName, final File gameSourceFolder, final Project.ResourceSet sourceSet) { WorkerDialog.showTaskMessage("Creating project "+projectName+"...", ATContentStudio.frame, new Runnable() { @Override public void run() { @@ -154,7 +154,7 @@ public class Workspace implements ProjectTreeNode, Serializable { Notification.addError("A project named "+projectName+" already exists in this workspace."); return; } - Project p = new Project(activeWorkspace, projectName, gameSourceFolder); + Project p = new Project(activeWorkspace, projectName, gameSourceFolder, sourceSet); activeWorkspace.projects.add(p); activeWorkspace.projectsName.add(projectName); activeWorkspace.projectsOpenByName.put(projectName, p.open); diff --git a/src/com/gpl/rpg/atcontentstudio/model/gamedata/GameDataSet.java b/src/com/gpl/rpg/atcontentstudio/model/gamedata/GameDataSet.java index 35981b0..666eecf 100644 --- a/src/com/gpl/rpg/atcontentstudio/model/gamedata/GameDataSet.java +++ b/src/com/gpl/rpg/atcontentstudio/model/gamedata/GameDataSet.java @@ -13,6 +13,7 @@ import com.gpl.rpg.atcontentstudio.Notification; import com.gpl.rpg.atcontentstudio.model.GameSource; import com.gpl.rpg.atcontentstudio.model.GameSource.Type; import com.gpl.rpg.atcontentstudio.model.Project; +import com.gpl.rpg.atcontentstudio.model.Project.ResourceSet; import com.gpl.rpg.atcontentstudio.model.ProjectTreeNode; import com.gpl.rpg.atcontentstudio.model.SavedSlotCollection; import com.gpl.rpg.atcontentstudio.ui.DefaultIcons; @@ -25,6 +26,17 @@ public class GameDataSet implements ProjectTreeNode, Serializable { public static final String DEFAULT_REL_PATH_IN_SOURCE = "res"+File.separator+"raw"+File.separator; public static final String DEFAULT_REL_PATH_IN_PROJECT = "json"+File.separator; + public static final String GAME_AC_ARRAY_NAME = "loadresource_actorconditions"; + public static final String GAME_DIALOGUES_ARRAY_NAME = "loadresource_conversationlists"; + public static final String GAME_DROPLISTS_ARRAY_NAME = "loadresource_droplists"; + public static final String GAME_ITEMS_ARRAY_NAME = "loadresource_items"; + public static final String GAME_ITEMCAT_ARRAY_NAME = "loadresource_itemcategories"; + public static final String GAME_NPC_ARRAY_NAME = "loadresource_monsters"; + public static final String GAME_QUESTS_ARRAY_NAME = "loadresource_quests"; + public static final String DEBUG_SUFFIX = "_debug"; + public static final String RESOURCE_PREFIX = "@raw/"; + public static final String FILENAME_SUFFIX = ".json"; + public File baseFolder; public GameDataCategory actorConditions; @@ -67,7 +79,87 @@ public class GameDataSet implements ProjectTreeNode, Serializable { v.add(quests); //Start parsing to populate categories' content. - if (parent.type != GameSource.Type.referenced) { + if (parent.type == GameSource.Type.source && (parent.parent.sourceSetToUse == ResourceSet.debugData || parent.parent.sourceSetToUse == ResourceSet.gameData)) { + String suffix = (parent.parent.sourceSetToUse == ResourceSet.debugData) ? DEBUG_SUFFIX : ""; + + if (parent.referencedSourceFiles.get(GAME_AC_ARRAY_NAME+suffix) != null) { + for (String resource : parent.referencedSourceFiles.get(GAME_AC_ARRAY_NAME+suffix)) { + File f = new File(baseFolder, resource.replaceAll(RESOURCE_PREFIX, "")+FILENAME_SUFFIX); + if (f.exists()) { + ActorCondition.fromJson(f, actorConditions); + } else { + Notification.addWarn("Unable to locate resource "+resource+" in the game source for project "+getProject().name); + } + } + } + + if (parent.referencedSourceFiles.get(GAME_DIALOGUES_ARRAY_NAME+suffix) != null) { + for (String resource : parent.referencedSourceFiles.get(GAME_DIALOGUES_ARRAY_NAME+suffix)) { + File f = new File(baseFolder, resource.replaceAll(RESOURCE_PREFIX, "")+FILENAME_SUFFIX); + if (f.exists()) { + Dialogue.fromJson(f, dialogues); + } else { + Notification.addWarn("Unable to locate resource "+resource+" in the game source for project "+getProject().name); + } + } + } + + if (parent.referencedSourceFiles.get(GAME_DROPLISTS_ARRAY_NAME+suffix) != null) { + for (String resource : parent.referencedSourceFiles.get(GAME_DROPLISTS_ARRAY_NAME+suffix)) { + File f = new File(baseFolder, resource.replaceAll(RESOURCE_PREFIX, "")+FILENAME_SUFFIX); + if (f.exists()) { + Droplist.fromJson(f, droplists); + } else { + Notification.addWarn("Unable to locate resource "+resource+" in the game source for project "+getProject().name); + } + } + } + + if (parent.referencedSourceFiles.get(GAME_ITEMS_ARRAY_NAME+suffix) != null) { + for (String resource : parent.referencedSourceFiles.get(GAME_ITEMS_ARRAY_NAME+suffix)) { + File f = new File(baseFolder, resource.replaceAll(RESOURCE_PREFIX, "")+FILENAME_SUFFIX); + if (f.exists()) { + Item.fromJson(f, items); + } else { + Notification.addWarn("Unable to locate resource "+resource+" in the game source for project "+getProject().name); + } + } + } + + if (parent.referencedSourceFiles.get(GAME_ITEMCAT_ARRAY_NAME+suffix) != null) { + for (String resource : parent.referencedSourceFiles.get(GAME_ITEMCAT_ARRAY_NAME+suffix)) { + File f = new File(baseFolder, resource.replaceAll(RESOURCE_PREFIX, "")+FILENAME_SUFFIX); + if (f.exists()) { + ItemCategory.fromJson(f, itemCategories); + } else { + Notification.addWarn("Unable to locate resource "+resource+" in the game source for project "+getProject().name); + } + } + } + + if (parent.referencedSourceFiles.get(GAME_NPC_ARRAY_NAME+suffix) != null) { + for (String resource : parent.referencedSourceFiles.get(GAME_NPC_ARRAY_NAME+suffix)) { + File f = new File(baseFolder, resource.replaceAll(RESOURCE_PREFIX, "")+FILENAME_SUFFIX); + if (f.exists()) { + NPC.fromJson(f, npcs); + } else { + Notification.addWarn("Unable to locate resource "+resource+" in the game source for project "+getProject().name); + } + } + } + + if (parent.referencedSourceFiles.get(GAME_QUESTS_ARRAY_NAME+suffix) != null) { + for (String resource : parent.referencedSourceFiles.get(GAME_QUESTS_ARRAY_NAME+suffix)) { + File f = new File(baseFolder, resource.replaceAll(RESOURCE_PREFIX, "")+FILENAME_SUFFIX); + if (f.exists()) { + Quest.fromJson(f, quests); + } else { + Notification.addWarn("Unable to locate resource "+resource+" in the game source for project "+getProject().name); + } + } + } + + } else if (parent.type != GameSource.Type.referenced) { for (File f : baseFolder.listFiles()) { if (f.getName().startsWith("actorconditions_")) { ActorCondition.fromJson(f, actorConditions); diff --git a/src/com/gpl/rpg/atcontentstudio/model/maps/TMXMapSet.java b/src/com/gpl/rpg/atcontentstudio/model/maps/TMXMapSet.java index 9229f76..2cce4ca 100644 --- a/src/com/gpl/rpg/atcontentstudio/model/maps/TMXMapSet.java +++ b/src/com/gpl/rpg/atcontentstudio/model/maps/TMXMapSet.java @@ -10,11 +10,14 @@ import java.util.List; import javax.swing.tree.TreeNode; +import com.gpl.rpg.atcontentstudio.Notification; import com.gpl.rpg.atcontentstudio.model.GameSource; import com.gpl.rpg.atcontentstudio.model.GameSource.Type; +import com.gpl.rpg.atcontentstudio.model.Project.ResourceSet; import com.gpl.rpg.atcontentstudio.model.Project; import com.gpl.rpg.atcontentstudio.model.ProjectTreeNode; import com.gpl.rpg.atcontentstudio.model.gamedata.GameDataSet; +import com.gpl.rpg.atcontentstudio.model.gamedata.Item; import com.gpl.rpg.atcontentstudio.ui.DefaultIcons; public class TMXMapSet implements ProjectTreeNode { @@ -22,6 +25,11 @@ public class TMXMapSet implements ProjectTreeNode { public static final String DEFAULT_REL_PATH_IN_SOURCE = "res/xml/"; public static final String DEFAULT_REL_PATH_IN_PROJECT = "maps/"; + public static final String GAME_MAPS_ARRAY_NAME = "loadresource_maps"; + public static final String DEBUG_SUFFIX = "_debug"; + public static final String RESOURCE_PREFIX = "@xml/"; + public static final String FILENAME_SUFFIX = ".tmx"; + public File mapFolder = null; public List tmxMaps; @@ -29,7 +37,9 @@ public class TMXMapSet implements ProjectTreeNode { public TMXMapSet(GameSource source) { this.parent = source; - if (source.type == GameSource.Type.source) this.mapFolder = new File(source.baseFolder, DEFAULT_REL_PATH_IN_SOURCE); + if (source.type == GameSource.Type.source) { + this.mapFolder = new File(source.baseFolder, DEFAULT_REL_PATH_IN_SOURCE); + } else if (source.type == GameSource.Type.created | source.type == GameSource.Type.altered) { this.mapFolder = new File(source.baseFolder, DEFAULT_REL_PATH_IN_PROJECT); if (!this.mapFolder.exists()) { @@ -38,7 +48,22 @@ public class TMXMapSet implements ProjectTreeNode { } this.tmxMaps = new ArrayList(); - if (this.mapFolder != null) { + if (source.type == GameSource.Type.source && (source.parent.sourceSetToUse == ResourceSet.debugData || source.parent.sourceSetToUse == ResourceSet.gameData)) { + String suffix = (source.parent.sourceSetToUse == ResourceSet.debugData) ? DEBUG_SUFFIX : ""; + + if (source.referencedSourceFiles.get(GAME_MAPS_ARRAY_NAME+suffix) != null) { + for (String resource : source.referencedSourceFiles.get(GAME_MAPS_ARRAY_NAME+suffix)) { + File f = new File(mapFolder, resource.replaceAll(RESOURCE_PREFIX, "")+FILENAME_SUFFIX); + if (f.exists()) { + TMXMap map = new TMXMap(this, f); + tmxMaps.add(map); + } else { + Notification.addWarn("Unable to locate resource "+resource+" in the game source for project "+getProject().name); + } + } + } + + } else if (this.mapFolder != null) { for (File f : this.mapFolder.listFiles()) { if (f.getName().endsWith(".tmx") || f.getName().endsWith(".TMX")) { TMXMap map = new TMXMap(this, f); diff --git a/src/com/gpl/rpg/atcontentstudio/model/maps/WorldmapSegment.java b/src/com/gpl/rpg/atcontentstudio/model/maps/WorldmapSegment.java index d3f9107..cdd00f9 100644 --- a/src/com/gpl/rpg/atcontentstudio/model/maps/WorldmapSegment.java +++ b/src/com/gpl/rpg/atcontentstudio/model/maps/WorldmapSegment.java @@ -90,7 +90,9 @@ public class WorldmapSegment extends GameDataElement { return; } for (String mapName : mapLocations.keySet()) { - getProject().getMap(mapName).addBacklink(this); + if (getProject().getMap(mapName) != null) { + getProject().getMap(mapName).addBacklink(this); + } } } diff --git a/src/com/gpl/rpg/atcontentstudio/ui/ProjectCreationWizard.java b/src/com/gpl/rpg/atcontentstudio/ui/ProjectCreationWizard.java index 2fd1f65..678a2eb 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/ProjectCreationWizard.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/ProjectCreationWizard.java @@ -1,5 +1,6 @@ package com.gpl.rpg.atcontentstudio.ui; +import java.awt.Component; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; @@ -8,18 +9,26 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.IOException; +import java.util.LinkedList; +import java.util.List; +import javax.swing.ComboBoxModel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JFileChooser; import javax.swing.JLabel; +import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JTextField; +import javax.swing.ListCellRenderer; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; +import javax.swing.event.ListDataListener; import com.gpl.rpg.atcontentstudio.ATContentStudio; +import com.gpl.rpg.atcontentstudio.model.Project; +import com.gpl.rpg.atcontentstudio.model.Project.ResourceSet; import com.gpl.rpg.atcontentstudio.model.Workspace; import com.gpl.rpg.atcontentstudio.model.gamedata.GameDataSet; import com.gpl.rpg.atcontentstudio.model.maps.TMXMapSet; @@ -30,7 +39,8 @@ public class ProjectCreationWizard extends JDialog { private static final long serialVersionUID = -2854969975146867119L; final JTextField projectNameField; - final JComboBox atSourceSelectionCombo; + final JComboBox atSourceSelectionCombo; + final JComboBox resourceSetToUse; final JButton browse; final JButton okButton; @@ -42,7 +52,62 @@ public class ProjectCreationWizard extends JDialog { super(ATContentStudio.frame); setTitle("Create project"); projectNameField = new JTextField(); - atSourceSelectionCombo = new JComboBox(); + atSourceSelectionCombo = new JComboBox(); + resourceSetToUse = new JComboBox(new ComboBoxModel() { + + Project.ResourceSet selected = Project.ResourceSet.allFiles; + + @Override + public int getSize() { + return Project.ResourceSet.values().length; + } + + @Override + public ResourceSet getElementAt(int index) { + return Project.ResourceSet.values()[index]; + } + + List listeners = new LinkedList(); + + @Override + public void addListDataListener(ListDataListener l) { + listeners.add(l); + } + + @Override + public void removeListDataListener(ListDataListener l) { + listeners.remove(l); + } + + @Override + public void setSelectedItem(Object anItem) { + selected = (ResourceSet) anItem; + } + + @Override + public Object getSelectedItem() { + return selected; + } + + }); + resourceSetToUse.setRenderer(new ListCellRenderer() { + @Override + public Component getListCellRendererComponent( + JList list, ResourceSet value, + int index, boolean isSelected, boolean cellHasFocus) { + switch (value) { + case allFiles: + return new JLabel("All available files"); + case debugData: + return new JLabel("Debug data"); + case gameData: + return new JLabel("Real game data"); + default: + return new JLabel(); + } + + } + }); browse = new JButton("Browse..."); okButton = new JButton("Ok"); cancelButton = new JButton("Cancel"); @@ -103,7 +168,7 @@ public class ProjectCreationWizard extends JDialog { if (!Workspace.activeWorkspace.knownMapSourcesFolders.contains(atSourceFolder)) { Workspace.activeWorkspace.knownMapSourcesFolders.add(atSourceFolder); } - Workspace.createProject(projectNameField.getText(), atSourceFolder); + Workspace.createProject(projectNameField.getText(), atSourceFolder, (Project.ResourceSet)resourceSetToUse.getSelectedItem()); ProjectCreationWizard.this.dispose(); } }); @@ -154,6 +219,17 @@ public class ProjectCreationWizard extends JDialog { c.weightx = 20; panel.add(browse, c); + c.gridy++; + c.gridx = 1; + c.gridwidth = 1; + c.weightx = 20; + panel.add(new JLabel("Resource set: "), c); + + c.gridx++; + c.weightx = 80; + c.gridwidth = 2; + panel.add(resourceSetToUse, c); + JPanel buttonPane = new JPanel(); buttonPane.setLayout(new GridBagLayout()); GridBagConstraints c2 = new GridBagConstraints(); diff --git a/src/com/gpl/rpg/atcontentstudio/ui/sprites/SpritesheetEditor.java b/src/com/gpl/rpg/atcontentstudio/ui/sprites/SpritesheetEditor.java index d2f4893..893c535 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/sprites/SpritesheetEditor.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/sprites/SpritesheetEditor.java @@ -151,10 +151,10 @@ public class SpritesheetEditor extends Editor { TableColumn col; while (columns.hasMoreElements()) { col = columns.nextElement(); - col.setMinWidth(sheet.spriteWidth + 1); - col.setMaxWidth(sheet.spriteWidth + 1); + col.setMinWidth(sheet.spriteWidth + 4); + col.setMaxWidth(sheet.spriteWidth + 4); } - spritesTable.setRowHeight(sheet.spriteHeight + 1); + spritesTable.setRowHeight(sheet.spriteHeight + 4); pane.add(new JScrollPane(spritesTable), BorderLayout.CENTER); } } diff --git a/src/com/gpl/rpg/atcontentstudio/ui/tools/ItemsTableView.java b/src/com/gpl/rpg/atcontentstudio/ui/tools/ItemsTableView.java index 22a44bd..552b84f 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/tools/ItemsTableView.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/tools/ItemsTableView.java @@ -18,7 +18,7 @@ public class ItemsTableView extends ElementTableView { private static final long serialVersionUID = 1474255176349837609L; public ItemsTableView(Project proj) { - super(new ItemsTableModel(proj), "Compare "+proj.getItemCount()+" items.", new ImageIcon(DefaultIcons.getItemIcon())); + super(new ItemsTableModel(proj), "Compare "+proj.getItemCountIncludingAltered()+" items.", new ImageIcon(DefaultIcons.getItemIcon())); } private static class ItemsTableModel implements TableModel { @@ -32,7 +32,7 @@ public class ItemsTableView extends ElementTableView { @Override public int getRowCount() { // return proj.getItemCount() + 1; - return proj.getItemCount(); + return proj.getItemCountIncludingAltered(); } @Override @@ -130,7 +130,7 @@ public class ItemsTableView extends ElementTableView { // return getColumnName(columnIndex); // } // Item item = proj.getItem(rowIndex - 1); - Item item = proj.getItem(rowIndex); + Item item = proj.getItemIncludingAltered(rowIndex); boolean canUse = item.category != null && item.category.action_type == ItemCategory.ActionType.use; boolean canEquip = item.category != null && item.category.action_type == ItemCategory.ActionType.equip; switch (columnIndex) { diff --git a/src/com/gpl/rpg/atcontentstudio/ui/tools/NPCsTableView.java b/src/com/gpl/rpg/atcontentstudio/ui/tools/NPCsTableView.java index 2aef2ec..829c2bf 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/tools/NPCsTableView.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/tools/NPCsTableView.java @@ -17,7 +17,7 @@ public class NPCsTableView extends ElementTableView { private static final long serialVersionUID = -4196852140899079621L; public NPCsTableView(Project proj) { - super(new NPCsTableModel(proj), "Compare "+proj.getNPCCount()+" NPCs.", new ImageIcon(DefaultIcons.getNPCIcon())); + super(new NPCsTableModel(proj), "Compare "+proj.getNPCCountIncludingAltered()+" NPCs.", new ImageIcon(DefaultIcons.getNPCIcon())); } private static class NPCsTableModel implements TableModel { @@ -30,7 +30,7 @@ public class NPCsTableView extends ElementTableView { @Override public int getRowCount() { - return proj.getNPCCount(); + return proj.getNPCCountIncludingAltered(); } @Override @@ -109,7 +109,7 @@ public class NPCsTableView extends ElementTableView { @Override public Object getValueAt(int rowIndex, int columnIndex) { - NPC npc = proj.getNPC(rowIndex); + NPC npc = proj.getNPCIncludingAltered(rowIndex); switch (columnIndex) { case 0: return new ImageIcon(npc.getIcon()); // Icon case 1: return npc.id; //ID