mirror of
https://github.com/OMGeeky/ATCS.git
synced 2025-12-28 23:35:39 +01:00
own backlinks now. Quest log entries and dialogue replies are now translatable too. Multiple minor UI improvements (notably multiline text area are now taller, and rewards and requirements appear more clearly in the dialogue tree view).
199 lines
5.5 KiB
Java
199 lines
5.5 KiB
Java
package com.gpl.rpg.atcontentstudio.model.gamedata;
|
|
|
|
import java.awt.Image;
|
|
import java.io.File;
|
|
import java.io.FileNotFoundException;
|
|
import java.io.FileReader;
|
|
import java.io.IOException;
|
|
import java.util.ArrayList;
|
|
import java.util.LinkedHashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
import org.json.simple.parser.JSONParser;
|
|
import org.json.simple.parser.ParseException;
|
|
|
|
import com.gpl.rpg.atcontentstudio.Notification;
|
|
import com.gpl.rpg.atcontentstudio.model.GameDataElement;
|
|
import com.gpl.rpg.atcontentstudio.model.GameSource;
|
|
import com.gpl.rpg.atcontentstudio.ui.DefaultIcons;
|
|
|
|
public class Quest extends JSONElement {
|
|
|
|
private static final long serialVersionUID = 2004839647483250099L;
|
|
|
|
//Available from init state
|
|
//public String id = null; inherited.
|
|
public String name = null;
|
|
|
|
//Available in parsed state
|
|
public Integer visible_in_log = null;
|
|
public List<QuestStage> stages = null;
|
|
|
|
@Override
|
|
public String getDesc() {
|
|
return (needsSaving() ? "*" : "")+name+" ("+id+")";
|
|
}
|
|
|
|
public static String getStaticDesc() {
|
|
return "Quests";
|
|
}
|
|
|
|
|
|
@SuppressWarnings("rawtypes")
|
|
public static void fromJson(File jsonFile, GameDataCategory<Quest> category) {
|
|
JSONParser parser = new JSONParser();
|
|
FileReader reader = null;
|
|
try {
|
|
reader = new FileReader(jsonFile);
|
|
List quests = (List) parser.parse(reader);
|
|
for (Object obj : quests) {
|
|
Map questJson = (Map)obj;
|
|
Quest quest = fromJson(questJson);
|
|
quest.jsonFile = jsonFile;
|
|
quest.parent = category;
|
|
if (quest.getDataType() == GameSource.Type.created || quest.getDataType() == GameSource.Type.altered) {
|
|
quest.writable = true;
|
|
}
|
|
category.add(quest);
|
|
}
|
|
} catch (FileNotFoundException e) {
|
|
Notification.addError("Error while parsing JSON file "+jsonFile.getAbsolutePath()+": "+e.getMessage());
|
|
e.printStackTrace();
|
|
} catch (IOException e) {
|
|
Notification.addError("Error while parsing JSON file "+jsonFile.getAbsolutePath()+": "+e.getMessage());
|
|
e.printStackTrace();
|
|
} catch (ParseException e) {
|
|
Notification.addError("Error while parsing JSON file "+jsonFile.getAbsolutePath()+": "+e.getMessage());
|
|
e.printStackTrace();
|
|
} finally {
|
|
if (reader != null)
|
|
try {
|
|
reader.close();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
|
|
@SuppressWarnings("rawtypes")
|
|
public static Quest fromJson(String jsonString) throws ParseException {
|
|
Map questJson = (Map) new JSONParser().parse(jsonString);
|
|
Quest quest = fromJson(questJson);
|
|
quest.parse(questJson);
|
|
return quest;
|
|
}
|
|
|
|
@SuppressWarnings("rawtypes")
|
|
public static Quest fromJson(Map questJson) {
|
|
Quest quest = new Quest();
|
|
quest.id = (String) questJson.get("id");
|
|
quest.name = (String) questJson.get("name");
|
|
//Quests have to be parsed to have their stages initialized.
|
|
quest.parse(questJson);
|
|
return quest;
|
|
}
|
|
|
|
@SuppressWarnings("rawtypes")
|
|
@Override
|
|
public void parse(Map questJson) {
|
|
this.visible_in_log = JSONElement.getInteger((Number) questJson.get("showInLog"));
|
|
List questStagesJson = (List) questJson.get("stages");
|
|
if (questStagesJson != null && !questStagesJson.isEmpty()) {
|
|
this.stages = new ArrayList<QuestStage>();
|
|
for (Object questStageJsonObj : questStagesJson) {
|
|
Map questStageJson = (Map)questStageJsonObj;
|
|
QuestStage questStage = new QuestStage(this);
|
|
questStage.parse(questStageJson);
|
|
this.stages.add(questStage);
|
|
}
|
|
}
|
|
this.state = State.parsed;
|
|
}
|
|
|
|
@Override
|
|
public void link() {
|
|
if (this.state == State.created || this.state == State.modified || this.state == State.saved) {
|
|
//This type of state is unrelated to parsing/linking.
|
|
return;
|
|
}
|
|
if (this.state == State.init) {
|
|
//Not parsed yet.
|
|
this.parse();
|
|
} else if (this.state == State.linked) {
|
|
//Already linked.
|
|
return;
|
|
}
|
|
|
|
for (QuestStage stage : stages) {
|
|
stage.link();
|
|
}
|
|
//Nothing to link to :D
|
|
this.state = State.linked;
|
|
}
|
|
|
|
@Override
|
|
public Image getIcon() {
|
|
return DefaultIcons.getQuestIcon();
|
|
}
|
|
|
|
public Image getImage() {
|
|
return DefaultIcons.getQuestImage();
|
|
}
|
|
|
|
@Override
|
|
public GameDataElement clone() {
|
|
Quest clone = new Quest();
|
|
clone.jsonFile = this.jsonFile;
|
|
clone.state = this.state;
|
|
clone.id = this.id;
|
|
clone.name = this.name;
|
|
clone.visible_in_log = this.visible_in_log;
|
|
if (this.stages != null) {
|
|
clone.stages = new ArrayList<QuestStage>();
|
|
for (QuestStage stage : this.stages){
|
|
clone.stages.add((QuestStage) stage.clone(clone));
|
|
}
|
|
}
|
|
return clone;
|
|
}
|
|
|
|
@Override
|
|
public void elementChanged(GameDataElement oldOne, GameDataElement newOne) {
|
|
//Nothing to link to.
|
|
}
|
|
|
|
@SuppressWarnings({ "rawtypes", "unchecked" })
|
|
@Override
|
|
public Map toJson() {
|
|
Map questJson = new LinkedHashMap();
|
|
questJson.put("id", this.id);
|
|
if (this.name != null) questJson.put("name", this.name);
|
|
if (this.visible_in_log != null) questJson.put("showInLog", this.visible_in_log);
|
|
if (this.stages != null) {
|
|
List stagesJson = new ArrayList();
|
|
questJson.put("stages", stagesJson);
|
|
for (QuestStage stage : this.stages) {
|
|
stagesJson.add(stage.toJson());
|
|
}
|
|
}
|
|
return questJson;
|
|
}
|
|
|
|
|
|
@Override
|
|
public String getProjectFilename() {
|
|
return "questlist_"+getProject().name+".json";
|
|
}
|
|
|
|
public QuestStage getStage(Integer stageId) {
|
|
for (QuestStage stage : stages) {
|
|
if (stage.progress.equals(stageId)) {
|
|
return stage;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
}
|