package com.iambookmaster.client.editor;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import com.google.gwt.user.client.Window;
import com.iambookmaster.client.beans.AbstractParameter;
import com.iambookmaster.client.beans.Alchemy;
import com.iambookmaster.client.beans.Battle;
import com.iambookmaster.client.beans.DiceValue;
import com.iambookmaster.client.beans.Modificator;
import com.iambookmaster.client.beans.NPC;
import com.iambookmaster.client.beans.NPCParams;
import com.iambookmaster.client.beans.ObjectBean;
import com.iambookmaster.client.beans.Paragraph;
import com.iambookmaster.client.beans.ParagraphConnection;
import com.iambookmaster.client.beans.Parameter;
import com.iambookmaster.client.beans.ParametersCalculation;
import com.iambookmaster.client.beans.Picture;
import com.iambookmaster.client.beans.Sound;
import com.iambookmaster.client.common.JSONBuilder;
import com.iambookmaster.client.locale.AppConstants;
import com.iambookmaster.client.locale.AppMessages;
import com.iambookmaster.client.model.Model;
import com.iambookmaster.client.model.ParameterListener;
public class ModelPersist extends Model {
public ModelPersist(AppConstants appConstants, AppMessages appMessages) {
super(appConstants, appMessages);
}
public void setGameKey(String gameKey) {
this.gameKey = gameKey;
}
public String toJSON(int export, JSONBuilder result) {
result.newRow();
//parameters
JSONBuilder builder = result.getInstance();
int o=0;
for (AbstractParameter bean : parameters) {
bean.setOrder(o++);
bean.toJSON(builder,export);
}
result.childArray(JSON_PARAMETERS, builder);
//objects
builder = result.getInstance();
for (int i = 0; i < objects.size(); i++) {
ObjectBean bean = objects.get(i);
bean.toJSON(builder,export);
}
result.childArray(JSON_OBJECTS, builder);
//images
builder = result.getInstance();
for (int i = 0; i < pictures.size(); i++) {
Picture bean = pictures.get(i);
bean.toJSON(builder,export);
}
result.childArray(JSON_IMAGES, builder);
//sounds
builder = result.getInstance();
for (int i = 0; i < sounds.size(); i++) {
Sound bean = sounds.get(i);
bean.toJSON(builder,export);
}
result.childArray(JSON_SOUNDS, builder);
//locations
builder = result.getInstance();
for (int i = 0; i < paragraphs.size(); i++) {
Paragraph location = paragraphs.get(i);
location.toJSON(builder,export);
}
result.childArray(JSON_PARAGRAPHS, builder);
//connections
builder = result.getInstance();
for (int i = 0; i < paragraphConnections.size(); i++) {
ParagraphConnection connection = paragraphConnections.get(i);
connection.toJSON(builder,export);
}
result.childArray(JSON_PARAGRAPH_CONNECTION, builder);
if (export==EXPORT_ALL) {
result.field(JSON_NEXT_ID, nextId);
result.field(JSON_NEXT_OBJ_ID, nextObjId);
result.field(JSON_NEXT_CONTENT_ID, nextContentId);
result.field(JSON_PLOT, plot);
result.field(JSON_BOOK_RULES, bookRules);
}
result.field(JSON_PLAYER_RULES, playerRules);
result.field(JSON_COMMERCIAL_TEXT, commercialText);
result.field(JSON_DEMO_INFO_TEXT, demoInfoText);
if (startParagraph != null) {
result.field(JSON_START_PARAGRAPH, startParagraph.getId());
}
result.field(JSON_GAME_ID, getGameId());
result.field(JSON_GAME_KEY, getGameKey());
//settings
builder = result.getInstance();
settings.toJSON(builder,export);
result.child(JSON_SETTINGS, builder);
result.field(JSON_VERSION, getModelVersion());
return result.toString();
}
public void addModel(Paragraph paragraph, Model model) {
//add all paragraphs
ArrayList<Paragraph> list = model.getParagraphs();
for (int i = 0; i < list.size(); i++) {
Paragraph par = list.get(i);
if (par.getType()==Paragraph.TYPE_START) {
//clear this flag
par.setType(Paragraph.TYPE_NORMAL);
}
par.setX(par.getX()+paragraph.getX());
par.setY(par.getY()+paragraph.getY());
par.setId(getNextParagraphId());
getParagraphs().add(par);
}
list = null;
//add connections
ArrayList<ParagraphConnection> conns = model.getParagraphConnections();
for (int i = 0; i < conns.size(); i++) {
getParagraphConnections().add(conns.get(i));
}
conns = null;
//add objects
ArrayList<ObjectBean> currObjs = getObjects();
ArrayList<ObjectBean> objs = model.getObjects();
next_obj:
for (int i = 0; i < objs.size(); i++) {
ObjectBean object = objs.get(i);
String name = object.getName().toLowerCase().trim();
for (int j = 0; j < currObjs.size(); j++) {
ObjectBean obj = currObjs.get(j);
if (obj.getName().toLowerCase().trim().equals(name)) {
//the same
continue next_obj;
}
}
//not found, add
currObjs.add(object);
}
currObjs = null;
objs = null;
//add images
ArrayList<Picture> currPicts = getPictures();
ArrayList<Picture> picts = model.getPictures();
next_img:
for (int i = 0; i < picts.size(); i++) {
Picture picture = picts.get(i);
String name = picture.getName().toLowerCase().trim();
String url = picture.getUrl().trim();
boolean byURL = url.length()>0;
for (int j = 0; j < currPicts.size(); j++) {
Picture pkt = currPicts.get(j);
if (byURL) {
if (pkt.getUrl().trim().equals(url)) {
//the same
continue next_img;
}
} else if (pkt.getName().toLowerCase().trim().equals(name)) {
//the same
continue next_img;
}
}
//not found, add
currPicts.add(picture);
}
currPicts = null;
picts = null;
//add sounds
ArrayList<Sound> currSound = getSounds();
ArrayList<Sound> sounds = model.getSounds();
next_img:
for (int i = 0; i < sounds.size(); i++) {
Sound sound = sounds.get(i);
String name = sound.getName().toLowerCase().trim();
String url = sound.getUrl().trim();
boolean byURL = url.length()>0;
for (int j = 0; j < currSound.size(); j++) {
Sound snd = currSound.get(j);
if (byURL) {
if (snd.getUrl().trim().equals(url)) {
//the same
continue next_img;
}
} else if (snd.getName().toLowerCase().trim().equals(name)) {
//the same
continue next_img;
}
}
//not found, add
currSound.add(sound);
}
currSound = null;
sounds = null;
//done
refreshAll();
}
public void checkIntegrity() {
// HashSet<String> ids = new HashSet<String>(paragraphs.size());
// for (int i = 0; i < paragraphs.size(); i++) {
// String id = paragraphs.get(i).getId();
// while (true) {
// if (ids.contains(id)) {
// //ERROR
// id = String.valueOf(nextId++);
// paragraphs.get(i).setId(id);
// } else {
// ids.add(id);
// break;
// }
// }
// }
}
public void generateConnectionNames() {
for (ParagraphConnection connection : paragraphConnections) {
boolean refresh=false;
if (connection.getNameFrom().length()==0) {
//empty
connection.setNameFrom(connection.getTo().getName());
refresh=true;
}
if (connection.isBothDirections() && connection.getNameTo().length()==0) {
connection.setNameTo(connection.getFrom().getName());
refresh=true;
}
if (refresh) {
updateParagraphConnection(connection, null);
}
}
Window.alert(appConstants.validatorDone());
}
public void splitParagraphConnection(ParagraphConnection connection) {
Paragraph paragraph = addNewParagraph(null);
if (connection.getFrom().getX()>0 && connection.getFrom().getY()>0 && connection.getTo().getX()>0 && connection.getTo().getY()>0) {
int x = Math.min(connection.getFrom().getX(), connection.getTo().getX())+(Math.abs(connection.getFrom().getX()-connection.getTo().getX()))/2;
int y = Math.min(connection.getFrom().getY(), connection.getTo().getY())+(Math.abs(connection.getFrom().getY()-connection.getTo().getY()))/2;
paragraph.setX(x);
paragraph.setY(y);
}
ParagraphConnection connection2 = new ParagraphConnection();
ParagraphConnection connection3 = new ParagraphConnection();
connection3.setFrom(connection.getFrom());
connection3.setTo(paragraph);
connection2.setFrom(paragraph);
connection2.setTo(connection.getTo());
connection2.setBothDirections(connection.isBothDirections());
connection3.setBothDirections(connection.isBothDirections());
connection3.setType(connection.getType());
connection3.setColor(connection.getColor());
connection3.setCorrectionX(connection.getCorrectionX());
connection3.setCorrectionY(connection.getCorrectionY());
connection3.setModificator(connection.getModificator());
connection3.setObject(connection.getObject());
connection3.setParameter(connection.getParameter());
connection3.setParameterValue(connection.getParameterValue());
connection3.setStrictness(connection.getStrictness());
/*
* replace IDs in text
*/
String toId = CONNECTION_DELIMETER_FROM+connection.getToId()+CONNECTION_DELIMETER_TO_STR;
String toIdNew = CONNECTION_DELIMETER_FROM+connection3.getToId()+CONNECTION_DELIMETER_TO_STR;
String desc = connection3.getFrom().getDescription().replace(toId,toIdNew);
connection3.getFrom().setDescription(desc);
if (connection.isBothDirections()) {
String fromId = CONNECTION_DELIMETER_FROM_STR+connection.getFromId()+CONNECTION_DELIMETER_TO;
String fromIdNew = CONNECTION_DELIMETER_FROM_STR+connection2.getFromId()+CONNECTION_DELIMETER_TO;
desc = connection2.getTo().getDescription().replace(fromId,fromIdNew);
connection2.getTo().setDescription(desc);
}
removeParagraphConnection(connection);
addParagraphConnection(connection2,null);
addParagraphConnection(connection3,null);
fireParagraphEvent(EVENT_UPDATE, connection3.getFrom(), null);
fireParagraphEvent(EVENT_UPDATE, connection2.getTo(), null);
fireParagraphEvent(EVENT_UPDATE, paragraph, null);
selectParagraph(paragraph,null);
}
// private void addConnection(HashMap<Paragraph, ArrayList<ParagraphConnection>> connections, ParagraphConnection connection, Paragraph from) {
// ArrayList<ParagraphConnection> list = connections.get(from);
// if (list==null) {
// list = new ArrayList<ParagraphConnection>();
// connections.put(from, list);
// }
// list.add(connection);
// }
public ModelPersist getLightMode() {
ModelPersist result = new ModelPersist(appConstants, appMessages);
result.apply(this);
ArrayList<ParagraphConnection> connections =new ArrayList<ParagraphConnection>(paragraphConnections.size());
HashSet<ObjectBean> objects = new HashSet<ObjectBean>(this.objects.size());
HashSet<AbstractParameter> parameters = new HashSet<AbstractParameter>(this.parameters.size());
HashSet<Picture> pictures = new HashSet<Picture>(this.pictures.size());
HashSet<Sound> sounds = new HashSet<Sound>(this.sounds.size());
HashMap<Paragraph, Paragraph> fakeParargaprh = new HashMap<Paragraph, Paragraph>();
for (ParagraphConnection connection : getParagraphConnections()) {
boolean fake=false;
if (connection.isBothDirections()) {
if (connection.getFrom().isCommercial() && connection.getTo().isCommercial()) {
//connection between commercial paragraphs
continue;
}
if (connection.getFrom().isCommercial()) {
//make a copy and reverse
fake = true;
ParagraphConnection connection2 = new ParagraphConnection(connection);
connection2.setFrom(connection.getTo());
connection2.setTo(connection.getFrom());
connection2.setBothDirections(false);
connection = connection2;
} else if (connection.getTo().isCommercial()) {
//make a copy and make a one way
fake = true;
connection = new ParagraphConnection(connection);
connection.setBothDirections(false);
}
} else if (connection.getFrom().isCommercial()) {
//connection from commercial paragraph
continue;
}
if (connection.getTo().isCommercial()) {
//replace to a fake paragraph
if (fake==false) {
connection = new ParagraphConnection(connection);
}
Paragraph paragraph = fakeParargaprh.get(connection.getTo());
if (paragraph==null) {
paragraph = new Paragraph();
paragraph.setId(connection.getTo().getId());
paragraph.setName(connection.getTo().getName());
paragraph.setNumber(connection.getTo().getNumber());
paragraph.setX(connection.getTo().getX());
paragraph.setY(connection.getTo().getY());
paragraph.setStatus(connection.getTo().getStatus());
paragraph.setDescription("");
paragraph.setType(Paragraph.TYPE_SUCCESS);
paragraph.setCommercial(true);
fakeParargaprh.put(connection.getTo(),paragraph);
}
connection.setTo(paragraph);
}
connections.add(connection);
if (connection.getFrom().isCommercial()==false) {
addNonCommercialContent(connection.getFrom(),objects,parameters,pictures,sounds);
}
if (connection.isBothDirections() && connection.getTo().isCommercial()==false) {
addNonCommercialContent(connection.getFrom(),objects,parameters,pictures,sounds);
}
}
HashSet<Paragraph> paragraphs = new HashSet<Paragraph>(this.paragraphs.size());
for (ParagraphConnection connection : connections) {
paragraphs.add(connection.getFrom());
paragraphs.add(connection.getTo());
}
int counter=0;
for (Paragraph paragraph : paragraphs) {
if (paragraph.isCommercial()==false) {
counter++;
}
}
// for (Iterator<ParagraphConnection> iterator = connections.iterator(); iterator.hasNext();) {
// ParagraphConnection connection = iterator.next();
// if (connection.isBothDirections()==false && connection.isConditional()) {
// switch (connection.getType()) {
// case ParagraphConnection.TYPE_MODIFICATOR:
// if (parameters.contains(connection.getModificator())==false) {
// //cannot be passed
// iterator.remove();
// continue;
// }
// break;
// case ParagraphConnection.TYPE_NORMAL:
// if (objects.contains(connection.getObject())==false) {
// //cannot be passed
// iterator.remove();
// continue;
// }
// break;
// }
// }
// paragraphs.add(connection.getFrom());
// paragraphs.add(connection.getTo());
// }
//add all connection-releated stuff
for (ParagraphConnection connection : connections) {
addNonCommercialContent(connection,objects,parameters);
}
for (Picture picture : this.pictures) {
if (picture.isFiller()) {
pictures.add(picture);
}
}
result.paragraphs = new ArrayList<Paragraph>(paragraphs);
result.paragraphConnections = connections;
result.pictures = new ArrayList<Picture>(pictures);
result.sounds = new ArrayList<Sound>(sounds);
result.objects = new ArrayList<ObjectBean>(objects);
paragraphs = null;
connections = null;
pictures = null;
sounds = null;
//add all related parameters (NPC, battles, etc.)
ArrayList<AbstractParameter> list = new ArrayList<AbstractParameter>(this.parameters);
list.removeAll(parameters);
otter:
while (true) {
for (AbstractParameter parameter : list) {
for (AbstractParameter parameter2 : parameters) {
if (parameter2.dependsOn(parameter)) {
//add this parameter and check again
parameters.add(parameter);
list.remove(parameter);
continue otter;
}
}
}
break;
}
result.parameters = new ArrayList<AbstractParameter>(parameters);
result.demoInfoText = appMessages.demoInfoTextDefault(counter,this.paragraphs.size());
return result;
}
private void addNonCommercialContent(ParagraphConnection connection, HashSet<ObjectBean> objects, HashSet<AbstractParameter> parameters) {
for (ObjectBean bean : this.objects) {
if (connection.dependsOn(bean)) {
objects.add(bean);
}
}
for (AbstractParameter parameter : this.parameters) {
if (connection.dependsOn(parameter)) {
parameters.add(parameter);
}
}
}
private void addNonCommercialContent(Paragraph paragraph, HashSet<ObjectBean> objects, HashSet<AbstractParameter> parameters, HashSet<Picture> pictures, HashSet<Sound> sounds) {
for (Sound sound : this.sounds) {
if (paragraph.dependsOn(sound)) {
sounds.add(sound);
}
}
for (Picture picture : this.pictures) {
if (paragraph.dependsOn(picture)) {
pictures.add(picture);
}
}
for (ObjectBean bean : this.objects) {
if (paragraph.dependsOn(bean)) {
objects.add(bean);
}
}
for (AbstractParameter parameter : this.parameters) {
if (paragraph.dependsOn(parameter)) {
parameters.add(parameter);
}
}
}
public NPC addNewNPC(ParameterListener sender) {
return (NPC)addAbstractParameter(new NPC(),sender,appConstants.modelNewNPCName());
}
public Parameter addNewParameter(ParameterListener sender) {
return (Parameter)addAbstractParameter(new Parameter(),sender,appConstants.modelNewParameterName());
}
public Battle addNewBattle(ParameterListener sender) {
return (Battle)addAbstractParameter(new Battle(),sender,appConstants.modelNewBattleName());
}
public Modificator addNewModificator(ParameterListener sender) {
return (Modificator)addAbstractParameter(new Modificator(),sender,appConstants.modelNewModificatorName());
}
public Alchemy addNewAlchemy(ParameterListener sender) {
Alchemy alchemy = new Alchemy();
alchemy.setFromValue(1);
alchemy.setToValue(new DiceValue(6,0,3));
return (Alchemy)addAbstractParameter(alchemy,sender,appConstants.modelNewAlchemyName());
}
private AbstractParameter addAbstractParameter(AbstractParameter parameter, ParameterListener sender,String name) {
parameter.setId(String.valueOf(nextObjId++));
parameter.setName(name);
parameters.add(parameter);
fireParametersEvent(EVENT_ADD_NEW,parameter,sender);
return parameter;
}
public void sortNPC() {
sortAbastractParameters(AbstractParameter.TYPE_NPC);
}
private void sortAbastractParameters(int type) {
ArrayList<AbstractParameter> list = new ArrayList<AbstractParameter>(parameters.size());
for (Iterator<AbstractParameter> iterator = parameters.iterator(); iterator.hasNext();) {
AbstractParameter parameter = iterator.next();
if (parameter.getType()==type) {
//remove for sorting
list.add(parameter);
iterator.remove();
}
}
Collections.sort(list, new Comparator<AbstractParameter>() {
public int compare(AbstractParameter o1, AbstractParameter o2) {
return o1.getName().compareTo(o2.getName());
}
});
parameters.addAll(list);
fireParametersEvent(EVENT_REFRESH_ALL,null,null);
}
public void sortParameters() {
sortAbastractParameters(AbstractParameter.TYPE_PARAMETER);
}
public void sortBattles() {
sortAbastractParameters(AbstractParameter.TYPE_BATTLE);
}
public void sortModificators() {
sortAbastractParameters(AbstractParameter.TYPE_MODIFICATOR);
}
public void sortAlchemy() {
sortAbastractParameters(AbstractParameter.TYPE_ALCHEMY);
}
/**
* Generate text for paragraph
* @param paragraph
* @param export
*/
public void regenerateText(Paragraph paragraph,int export) {
ArrayList<ParagraphConnection> connections = getOutputParagraphConnections(paragraph);
StringBuffer buffer = new StringBuffer();
for (ParagraphConnection connection : connections) {
if (connection.getFrom()==paragraph && connection.isHiddenUsage(settings)) {
buffer.append(CONNECTION_DELIMETER_FROM);
buffer.append(connection.getToId());
buffer.append(CONNECTION_DELIMETER_TO);
}
}
buffer.append(paragraph.getName());
buffer.append('\n');
if (paragraph.getGotObjects().size()>0) {
for (ObjectBean bean : paragraph.getGotObjects()) {
buffer.append('+');
buffer.append(bean.getName());
buffer.append(' ');
buffer.append(CONNECTION_DELIMETER_FROM);
buffer.append(OBJECT_ID_PREFIX);
buffer.append(bean.getId());
buffer.append(CONNECTION_DELIMETER_TO);
buffer.append('\n');
}
}
if (paragraph.getLostObjects().size()>0) {
for (ObjectBean bean : paragraph.getLostObjects()) {
buffer.append('-');
buffer.append(bean.getName());
// buffer.append(' ');
// buffer.append(CONNECTION_DELIMETER_FROM);
// buffer.append(OBJECT_ID_PREFIX);
// buffer.append(bean.getId());
// buffer.append(CONNECTION_DELIMETER_TO);
buffer.append('\n');
}
}
buffer.append('\n');
for (int i = 0; i < connections.size(); i++) {
ParagraphConnection connection = connections.get(i);
if (connection.getFrom()==paragraph) {
//normal
if (connection.isHiddenUsage(settings)) {
//already added
continue;
}
switch (connection.getType()) {
case ParagraphConnection.TYPE_NORMAL:
if (connection.getObject() != null) {
//conditional
// buffer.append(CONNECTION_DELIMETER_FROM);
// buffer.append(CONNECTION_DELIMETER_TO);
buffer.append(connection.getObject().getName());
buffer.append(" - ");
}
break;
case ParagraphConnection.TYPE_MODIFICATOR:
if (connection.getModificator() != null) {
String id;
if (settings.isAddModificatorNamesToText()) {
id = "<m"+connection.getModificator().getId()+">";
} else {
id = connection.getModificator().getName();
}
switch (connection.getStrictness()) {
case ParagraphConnection.STRICTNESS_MUST:
if (connection.getModificator().isAbsolute()) {
buffer.append(appMessages.paragraphTemplateModificatorPresentMustAbs(id));
} else {
buffer.append(appMessages.paragraphTemplateModificatorPresentMust(id));
}
break;
case ParagraphConnection.STRICTNESS_MUST_NOT:
buffer.append(appMessages.paragraphTemplateModificatorPresentMustNot(id));
break;
default:
if (connection.getModificator().isAbsolute()) {
buffer.append(appMessages.paragraphTemplateModificatorPresentAbs(id));
} else {
buffer.append(appMessages.paragraphTemplateModificatorPresent(id));
}
}
buffer.append(' ');
// buffer.append(CONNECTION_DELIMETER_FROM);
// buffer.append(CONNECTION_DELIMETER_TO);
}
break;
case ParagraphConnection.TYPE_NO_MODIFICATOR:
if (connection.getModificator() != null) {
// buffer.append(CONNECTION_DELIMETER_FROM);
// buffer.append(CONNECTION_DELIMETER_TO);
String id;
if (settings.isAddModificatorNamesToText()) {
id = "<m"+connection.getModificator().getId()+">";
} else {
id = connection.getModificator().getName();
}
switch (connection.getStrictness()) {
case ParagraphConnection.STRICTNESS_MUST:
buffer.append(appMessages.paragraphTemplateModificatorNotPresentMust(id));
break;
case ParagraphConnection.STRICTNESS_MUST_NOT:
buffer.append(appMessages.paragraphTemplateModificatorNotPresentMustNot(id));
break;
default:
buffer.append(appMessages.paragraphTemplateModificatorNotPresent(id));
}
buffer.append(' ');
}
break;
case ParagraphConnection.TYPE_PARAMETER_LESS:
if (connection.getParameter() != null && connection.getParameterValue() !=null) {
// buffer.append(CONNECTION_DELIMETER_FROM);
// buffer.append(CONNECTION_DELIMETER_TO);
switch (connection.getStrictness()) {
case ParagraphConnection.STRICTNESS_MUST:
buffer.append(appMessages.paragraphTemplateParameterLessMust(connection.getParameter().getName(),connection.getParameterValue().toString()));
break;
case ParagraphConnection.STRICTNESS_MUST_NOT:
buffer.append(appMessages.paragraphTemplateParameterLessMustNot(connection.getParameter().getName(),connection.getParameterValue().toString()));
break;
default:
buffer.append(appMessages.paragraphTemplateParameterLess(connection.getParameter().getName(),connection.getParameterValue().toString()));
}
buffer.append(' ');
}
break;
case ParagraphConnection.TYPE_PARAMETER_MORE:
if (connection.getParameter() != null && connection.getParameterValue() !=null) {
// buffer.append(CONNECTION_DELIMETER_FROM);
// buffer.append(CONNECTION_DELIMETER_TO);
switch (connection.getStrictness()) {
case ParagraphConnection.STRICTNESS_MUST:
buffer.append(appMessages.paragraphTemplateParameterMoreMust(connection.getParameter().getName(),connection.getParameterValue().toString()));
break;
case ParagraphConnection.STRICTNESS_MUST_NOT:
buffer.append(appMessages.paragraphTemplateParameterMoreMustNot(connection.getParameter().getName(),connection.getParameterValue().toString()));
break;
default:
buffer.append(appMessages.paragraphTemplateParameterMore(connection.getParameter().getName(),connection.getParameterValue().toString()));
}
buffer.append(' ');
}
break;
case ParagraphConnection.TYPE_VITAL_LESS:
if (connection.getFrom().getBattle() != null && connection.getFrom().getBattle().getVital() != null) {
buffer.append(appMessages.paragraphTemplateVitalLess(connection.getFrom().getBattle().getVital().getName(),connection.getParameterValue().toString()));
// buffer.append(CONNECTION_DELIMETER_FROM);
// buffer.append(CONNECTION_DELIMETER_TO);
}
break;
case ParagraphConnection.TYPE_ENEMY_VITAL_LESS:
if (connection.getFrom().getBattle() != null && connection.getFrom().getBattle().getVital() != null) {
buffer.append(appMessages.paragraphTemplateNPCVitalLess(connection.getFrom().getBattle().getVital().getName(),connection.getParameterValue().toString()));
// buffer.append(CONNECTION_DELIMETER_FROM);
// buffer.append(CONNECTION_DELIMETER_TO);
}
break;
case ParagraphConnection.TYPE_BATTLE_ROUND_MORE:
switch (connection.getStrictness()) {
case ParagraphConnection.STRICTNESS_MUST:
buffer.append(appMessages.paragraphTemplateBattleRoundMoreMust(connection.getParameterValue().getConstant()));
break;
case ParagraphConnection.STRICTNESS_MUST_NOT:
buffer.append(appMessages.paragraphTemplateBattleRoundMoreMustNot(connection.getParameterValue().getConstant()));
break;
default:
buffer.append(appMessages.paragraphTemplateBattleRoundMore(connection.getParameterValue().getConstant()));
}
break;
}
buffer.append(connection.getTo().getName());
buffer.append(CONNECTION_DELIMETER_FROM);
buffer.append(connection.getToId());
buffer.append(CONNECTION_DELIMETER_TO);
} else {
//reverse
buffer.append(connection.getFrom().getName());
buffer.append(CONNECTION_DELIMETER_FROM);
buffer.append(connection.getFromId());
buffer.append(CONNECTION_DELIMETER_TO);
}
buffer.append('\n');
}
//change modificators
if (paragraph.getChangeModificators() != null && paragraph.getChangeModificators().size()>0) {
for (Modificator modificator : paragraph.getChangeModificators().keySet()) {
boolean value = paragraph.getChangeModificators().get(modificator);
if (settings.isAddModificatorNamesToText()){
if (value) {
buffer.append(appMessages.paragraphTemplateSetModificatorID(modificator.getId()));
} else {
buffer.append(appMessages.paragraphTemplateClearModificatorID(modificator.getId()));
}
} else {
if (value) {
if (modificator.isAbsolute()) {
buffer.append(appMessages.paragraphTemplateSetAbsoluteModificator(modificator.getName(),modificator.getId()));
} else {
buffer.append(appMessages.paragraphTemplateSetModificator(modificator.getName()));
}
} else {
buffer.append(appMessages.paragraphTemplateClearModificator(modificator.getName()));
}
}
}
}
//change parameters
if (paragraph.getChangeParameters() != null && paragraph.getChangeParameters().size()>0) {
for (Parameter parameter : paragraph.getChangeParameters().keySet()) {
ParametersCalculation calculation = paragraph.getChangeParameters().get(parameter);
buffer.append('\n');
buffer.append(calculation.toString(parameter,appMessages));
}
}
//add battle description
if (paragraph.getBattle() != null) {
buffer.append(appMessages.paragraphTemplateBattle(paragraph.getBattle().getName()));
if (paragraph.getEnemies() != null && paragraph.getEnemies().size()>0) {
boolean add=false;
int round=0;
for (NPCParams npc : paragraph.getEnemies()) {
if (npc.getRound()>round) {
round = npc.getRound();
buffer.append(appMessages.paragraphTemplateJoinAfterRound(round));
}
if (add) {
buffer.append(',');
} else {
add = true;
}
if (npc.isFriend()) {
buffer.append(appMessages.paragraphTemplateBattleFriend(npc.getNpc().getName()));
} else {
buffer.append(npc.getNpc().getName());
}
}
buffer.append('\n');
}
}
if (paragraph.getAlchemy() != null) {
for (Alchemy alchemy : paragraph.getAlchemy().keySet()) {
boolean value = paragraph.getAlchemy().get(alchemy);
if (value) {
if (settings.isAddAlchemyToText()) {
buffer.append(appMessages.paragraphTemplateAlchemyEnabledInText(alchemy.getName(),alchemy.getId(),alchemy.getFrom().getName(),alchemy.getTo().getName()));
} else {
buffer.append(appMessages.paragraphTemplateAlchemyEnabled(alchemy.getName(),String.valueOf(alchemy.getFromValue()),alchemy.getFrom().getName(),alchemy.getToValue().toString(),alchemy.getTo().getName()));
}
} else {
buffer.append(appMessages.paragraphTemplateAlchemyDisabled(alchemy.getName()));
}
buffer.append('\n');
}
}
paragraph.setDescription(buffer.toString());
fireParagraphEvent(EVENT_UPDATE, paragraph,null);
}
}