mirror of
https://github.com/OMGeeky/ATCS.git
synced 2025-12-28 23:35:39 +01:00
Initial commit
This commit is contained in:
364
src/com/gpl/rpg/atcontentstudio/model/gamedata/GameDataSet.java
Normal file
364
src/com/gpl/rpg/atcontentstudio/model/gamedata/GameDataSet.java
Normal file
@@ -0,0 +1,364 @@
|
||||
package com.gpl.rpg.atcontentstudio.model.gamedata;
|
||||
|
||||
import java.awt.Image;
|
||||
import java.io.File;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Enumeration;
|
||||
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;
|
||||
import com.gpl.rpg.atcontentstudio.model.ProjectTreeNode;
|
||||
import com.gpl.rpg.atcontentstudio.model.SavedSlotCollection;
|
||||
import com.gpl.rpg.atcontentstudio.ui.DefaultIcons;
|
||||
|
||||
|
||||
public class GameDataSet implements ProjectTreeNode, Serializable {
|
||||
|
||||
private static final long serialVersionUID = -8558067213826970968L;
|
||||
|
||||
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 File baseFolder;
|
||||
|
||||
public GameDataCategory<ActorCondition> actorConditions;
|
||||
public GameDataCategory<Dialogue> dialogues;
|
||||
public GameDataCategory<Droplist> droplists;
|
||||
public GameDataCategory<Item> items;
|
||||
public GameDataCategory<ItemCategory> itemCategories;
|
||||
public GameDataCategory<NPC> npcs;
|
||||
public GameDataCategory<Quest> quests;
|
||||
|
||||
public GameSource parent;
|
||||
public SavedSlotCollection v;
|
||||
|
||||
public GameDataSet(GameSource source) {
|
||||
|
||||
this.parent = source;
|
||||
v = new SavedSlotCollection();
|
||||
|
||||
if (parent.type.equals(GameSource.Type.altered) || parent.type.equals(GameSource.Type.created)) {
|
||||
this.baseFolder = new File(parent.baseFolder, GameDataSet.DEFAULT_REL_PATH_IN_PROJECT);
|
||||
if (!baseFolder.exists()) this.baseFolder.mkdirs();
|
||||
} else if (parent.type.equals(GameSource.Type.source)) {
|
||||
this.baseFolder = new File(source.baseFolder, DEFAULT_REL_PATH_IN_SOURCE);
|
||||
}
|
||||
|
||||
actorConditions = new GameDataCategory<ActorCondition>(this, ActorCondition.getStaticDesc());
|
||||
dialogues = new GameDataCategory<Dialogue>(this, Dialogue.getStaticDesc());
|
||||
droplists = new GameDataCategory<Droplist>(this, Droplist.getStaticDesc());
|
||||
items = new GameDataCategory<Item>(this, Item.getStaticDesc());
|
||||
itemCategories = new GameDataCategory<ItemCategory>(this, ItemCategory.getStaticDesc());
|
||||
npcs = new GameDataCategory<NPC>(this, NPC.getStaticDesc());
|
||||
quests = new GameDataCategory<Quest>(this, Quest.getStaticDesc());
|
||||
|
||||
v.add(actorConditions);
|
||||
v.add(dialogues);
|
||||
v.add(droplists);
|
||||
v.add(items);
|
||||
v.add(itemCategories);
|
||||
v.add(npcs);
|
||||
v.add(quests);
|
||||
|
||||
//Start parsing to populate categories' content.
|
||||
if (parent.type != GameSource.Type.referenced) {
|
||||
for (File f : baseFolder.listFiles()) {
|
||||
if (f.getName().startsWith("actorconditions_")) {
|
||||
ActorCondition.fromJson(f, actorConditions);
|
||||
} else if (f.getName().startsWith("conversationlist_")) {
|
||||
Dialogue.fromJson(f, dialogues);
|
||||
} else if (f.getName().startsWith("droplists_")) {
|
||||
Droplist.fromJson(f, droplists);
|
||||
} else if (f.getName().startsWith("itemlist_")) {
|
||||
Item.fromJson(f, items);
|
||||
} else if (f.getName().startsWith("itemcategories_")) {
|
||||
ItemCategory.fromJson(f, itemCategories);
|
||||
} else if (f.getName().startsWith("monsterlist_")) {
|
||||
NPC.fromJson(f, npcs);
|
||||
} else if (f.getName().startsWith("questlist")) {
|
||||
Quest.fromJson(f, quests);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Enumeration<ProjectTreeNode> children() {
|
||||
return v.getNonEmptyElements();
|
||||
}
|
||||
@Override
|
||||
public boolean getAllowsChildren() {
|
||||
return true;
|
||||
}
|
||||
@Override
|
||||
public TreeNode getChildAt(int arg0) {
|
||||
return v.getNonEmptyElementAt(arg0);
|
||||
}
|
||||
@Override
|
||||
public int getChildCount() {
|
||||
return v.getNonEmptySize();
|
||||
}
|
||||
@Override
|
||||
public int getIndex(TreeNode arg0) {
|
||||
return v.getNonEmptyIndexOf((ProjectTreeNode) arg0);
|
||||
}
|
||||
@Override
|
||||
public TreeNode getParent() {
|
||||
return parent;
|
||||
}
|
||||
@Override
|
||||
public boolean isLeaf() {
|
||||
return false;
|
||||
}
|
||||
@Override
|
||||
public void childrenAdded(List<ProjectTreeNode> path) {
|
||||
path.add(0, this);
|
||||
parent.childrenAdded(path);
|
||||
}
|
||||
@Override
|
||||
public void childrenChanged(List<ProjectTreeNode> path) {
|
||||
path.add(0, this);
|
||||
parent.childrenChanged(path);
|
||||
}
|
||||
@Override
|
||||
public void childrenRemoved(List<ProjectTreeNode> path) {
|
||||
if (path.size() == 1 && this.v.getNonEmptySize() == 1) {
|
||||
childrenRemoved(new ArrayList<ProjectTreeNode>());
|
||||
} else {
|
||||
path.add(0, this);
|
||||
parent.childrenRemoved(path);
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void notifyCreated() {
|
||||
childrenAdded(new ArrayList<ProjectTreeNode>());
|
||||
for (ProjectTreeNode node : v.getNonEmptyIterable()) {
|
||||
node.notifyCreated();
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public String getDesc() {
|
||||
return "JSON data";
|
||||
}
|
||||
|
||||
|
||||
public void refreshTransients() {
|
||||
|
||||
}
|
||||
|
||||
public ActorCondition getActorCondition(String id) {
|
||||
if (actorConditions == null) return null;
|
||||
for (ActorCondition gde : actorConditions) {
|
||||
if (id.equals(gde.id)){
|
||||
return gde;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public Dialogue getDialogue(String id) {
|
||||
if (dialogues == null) return null;
|
||||
for (Dialogue gde : dialogues) {
|
||||
if (id.equals(gde.id)){
|
||||
return gde;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public Droplist getDroplist(String id) {
|
||||
if (droplists == null) return null;
|
||||
for (Droplist gde : droplists) {
|
||||
if (id.equals(gde.id)){
|
||||
return gde;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public Item getItem(String id) {
|
||||
if (items == null) return null;
|
||||
for (Item gde : items) {
|
||||
if (id.equals(gde.id)){
|
||||
return gde;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public ItemCategory getItemCategory(String id) {
|
||||
if (itemCategories == null) return null;
|
||||
for (ItemCategory gde : itemCategories) {
|
||||
if (id.equals(gde.id)){
|
||||
return gde;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public NPC getNPC(String id) {
|
||||
if (npcs == null) return null;
|
||||
for (NPC gde : npcs) {
|
||||
if (id.equals(gde.id)){
|
||||
return gde;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public Quest getQuest(String id) {
|
||||
if (quests == null) return null;
|
||||
for (Quest gde : quests) {
|
||||
if (id.equals(gde.id)){
|
||||
return gde;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Project getProject() {
|
||||
return parent.getProject();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Image getIcon() {
|
||||
return getOpenIcon();
|
||||
}
|
||||
@Override
|
||||
public Image getClosedIcon() {
|
||||
return DefaultIcons.getJsonClosedIcon();
|
||||
}
|
||||
@Override
|
||||
public Image getLeafIcon() {
|
||||
return DefaultIcons.getJsonClosedIcon();
|
||||
}
|
||||
@Override
|
||||
public Image getOpenIcon() {
|
||||
return DefaultIcons.getJsonOpenIcon();
|
||||
}
|
||||
|
||||
public void addElement(JSONElement node) {
|
||||
ProjectTreeNode higherEmptyParent = this;
|
||||
while (higherEmptyParent != null) {
|
||||
if (higherEmptyParent.getParent() != null && ((ProjectTreeNode)higherEmptyParent.getParent()).isEmpty()) higherEmptyParent = (ProjectTreeNode)higherEmptyParent.getParent();
|
||||
else break;
|
||||
}
|
||||
if (higherEmptyParent == this && !this.isEmpty()) higherEmptyParent = null;
|
||||
if (node instanceof ActorCondition) {
|
||||
if (actorConditions.isEmpty() && higherEmptyParent == null) higherEmptyParent = actorConditions;
|
||||
actorConditions.add((ActorCondition) node);
|
||||
node.parent = actorConditions;
|
||||
} else if (node instanceof Dialogue) {
|
||||
if (dialogues.isEmpty() && higherEmptyParent == null) higherEmptyParent = dialogues;
|
||||
dialogues.add((Dialogue) node);
|
||||
node.parent = dialogues;
|
||||
} else if (node instanceof Droplist) {
|
||||
if (droplists.isEmpty() && higherEmptyParent == null) higherEmptyParent = droplists;
|
||||
droplists.add((Droplist) node);
|
||||
node.parent = droplists;
|
||||
} else if (node instanceof Item) {
|
||||
if (items.isEmpty() && higherEmptyParent == null) higherEmptyParent = items;
|
||||
items.add((Item) node);
|
||||
node.parent = items;
|
||||
} else if (node instanceof ItemCategory) {
|
||||
if (itemCategories.isEmpty() && higherEmptyParent == null) higherEmptyParent = itemCategories;
|
||||
itemCategories.add((ItemCategory) node);
|
||||
node.parent = itemCategories;
|
||||
} else if (node instanceof NPC) {
|
||||
if (npcs.isEmpty() && higherEmptyParent == null) higherEmptyParent = npcs;
|
||||
npcs.add((NPC) node);
|
||||
node.parent = npcs;
|
||||
} else if (node instanceof Quest) {
|
||||
if (quests.isEmpty() && higherEmptyParent == null) higherEmptyParent = quests;
|
||||
quests.add((Quest) node);
|
||||
node.parent = quests;
|
||||
} else {
|
||||
Notification.addError("Cannot add "+node.getDesc()+". Unknown data type.");
|
||||
return;
|
||||
}
|
||||
if (node.jsonFile != null && parent.type == GameSource.Type.altered) {
|
||||
//Altered node.
|
||||
node.jsonFile = new File(this.baseFolder, node.jsonFile.getName());
|
||||
} else {
|
||||
//Created node.
|
||||
node.jsonFile = new File(this.baseFolder, node.getProjectFilename());
|
||||
}
|
||||
if (higherEmptyParent != null) higherEmptyParent.notifyCreated();
|
||||
else node.notifyCreated();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public GameDataSet getDataSet() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type getDataType() {
|
||||
return parent.getDataType();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEmpty() {
|
||||
return v.isEmpty();
|
||||
}
|
||||
|
||||
public JSONElement getGameDataElement(Class<? extends JSONElement> gdeClass, String id) {
|
||||
if (gdeClass == ActorCondition.class) {
|
||||
return getActorCondition(id);
|
||||
}
|
||||
if (gdeClass == Dialogue.class) {
|
||||
return getDialogue(id);
|
||||
}
|
||||
if (gdeClass == Droplist.class) {
|
||||
return getDroplist(id);
|
||||
}
|
||||
if (gdeClass == ItemCategory.class) {
|
||||
return getItemCategory(id);
|
||||
}
|
||||
if (gdeClass == Item.class) {
|
||||
return getItem(id);
|
||||
}
|
||||
if (gdeClass == NPC.class) {
|
||||
return getNPC(id);
|
||||
}
|
||||
if (gdeClass == Quest.class) {
|
||||
return getQuest(id);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public GameDataCategory<? extends JSONElement> getCategory(Class<? extends JSONElement> gdeClass) {
|
||||
if (gdeClass == ActorCondition.class) {
|
||||
return actorConditions;
|
||||
}
|
||||
if (gdeClass == Dialogue.class) {
|
||||
return dialogues;
|
||||
}
|
||||
if (gdeClass == Droplist.class) {
|
||||
return droplists;
|
||||
}
|
||||
if (gdeClass == ItemCategory.class) {
|
||||
return itemCategories;
|
||||
}
|
||||
if (gdeClass == Item.class) {
|
||||
return items;
|
||||
}
|
||||
if (gdeClass == NPC.class) {
|
||||
return npcs;
|
||||
}
|
||||
if (gdeClass == Quest.class) {
|
||||
return quests;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user