package com.iambookmaster.qsp;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import com.iambookmaster.client.beans.Paragraph;
import com.iambookmaster.client.beans.Picture;
import com.iambookmaster.client.beans.Sound;
import com.iambookmaster.client.common.JSONBuilder;
import com.iambookmaster.client.editor.ModelPersist;
import com.iambookmaster.client.model.Model;
public class IPHoneExportTest extends QSPExportTest {
private static final String PREFIX_PARAGRAPH = "text";
private static final String OUTPUT_PATH = "content/iphone/game";
public void test1() throws Exception {
IPhoneExportCommand command = new IPhoneExportCommand();
// perform("attack2attack");
// perform("attack2defence");
// perform("attack2attackWeak");
// perform("attack2attackDeath");
// perform("attack2defenceFatal");
// perform("attack2defenceFatalMax");
// perform("1round");
// perform("3npc");
// perform("Sprites");
// perform("Kererleys");
// perform("Dragon");
// perform("DragonFull");
// perform("IvanDurak");
perform(command);
}
/*
package com.iambookmaster.client.iphone;
public class IPhoneModelLoader {
public static void loadModel(IPhoneModelLoaderListener listener) {
}
}
*/
public class IPhoneExportCommand {
public String alterLogo;
public String alterVersionScu;
private String model;
private String scu;
private String path;
private String donationId;//In App Purchase Apple ID
// private String lightId;//Light version ID
// private String fullId;//Full version ID
}
public void perform(IPhoneExportCommand command) throws Exception {
ModelPersist model = createModelFromJSON(command.model+".xml");
clearFolder(OUTPUT_PATH);
StringBuilder builder = new StringBuilder();
//create module
builder.append("package com.iambookmaster.client.iphone;\n");
builder.append("import com.iambookmaster.client.common.JSONParser;\n");
builder.append("import com.iambookmaster.client.exceptions.JSONException;\n");
builder.append("import com.iambookmaster.client.model.Model;\n");
builder.append("public class IPhoneModelLoader extends IPhoneModelLoaderStub{\n");
builder.append("//");
builder.append(command.model);
builder.append("\npublic void loadModel(IPhoneModelLoaderListener listener,Model model) {\n");
//fill model
populateModel(builder,model);
builder.append("}\n");
populateMethods(builder,model,command.path,OUTPUT_PATH);
builder.append("}\n");
//save result
String module = builder.toString();
FileOutputStream fileWriter = new FileOutputStream("src/com/iambookmaster/client/iphone/IPhoneModelLoader.java");
try {
fileWriter.write(module.getBytes("UTF-8"));
} finally {
fileWriter.close();
}
builder.setLength(0);
builder.append("//");
builder.append(model.getSettings().getBookTitle());
builder.append("\n//");
builder.append(model.getSettings().getBookAuthors());
builder.append("\n//GameId=");
builder.append(model.getGameId());
builder.append("\n//GameKey=");
builder.append(model.getGameKey());
builder.append("\n#define URL_MY_SCHEME @\"iambm");
builder.append(command.scu);
if (command.alterVersionScu == null) {
appendSuffix(builder,model.getSettings().isDemoVersion());
}
builder.append("\";\n//remove : when insert into INFO.PLIST\n#define URL_ALTER_SCHEME @\"iambm");
if (command.alterVersionScu == null) {
builder.append(command.scu);
appendSuffix(builder,model.getSettings().isDemoVersion()==false);
} else {
builder.append(command.alterVersionScu);
builder.append(':');
}
builder.append("\";\n");
builder.append("#define IN_APP_PURACHASE @\"");
if (command.donationId==null) {
builder.append("com.iambookmaster.");
builder.append(command.scu);
builder.append(".donate");
} else {
builder.append(command.donationId);
}
builder.append("\"\n");
if (model.getSettings().isDemoVersion()) {
builder.append("#define DEMO_VERSION\n");
builder.append("#define PAID_GAME\n");
} else {
for (Paragraph paragraph : model.getParagraphs()) {
if (paragraph.isCommercial() || paragraph.getType()==Paragraph.TYPE_COMMERCIAL) {
//has full/lighs versions
builder.append("#define PAID_GAME\n");
break;
}
}
}
module = builder.toString();
fileWriter = new FileOutputStream("content/iphone/global/GameDefenitions.h");
try {
fileWriter.write(module.getBytes("UTF-8"));
} finally {
fileWriter.close();
}
builder.setLength(0);
builder.append(command.path);
builder.append(File.separator);
int len = builder.length();
builder.append("Default.png");
copyFileToFolder(builder.toString(),OUTPUT_PATH);
builder.setLength(len);
builder.append("Default2.png");
copyFileToFolder(builder.toString(),OUTPUT_PATH);
builder.setLength(len);
if (command.alterLogo == null) {
builder.append("logo_small.png");
copyFileToFolder(builder.toString(),OUTPUT_PATH);
} else {
builder.append(command.alterLogo);
copyFileToFolder(builder.toString(),OUTPUT_PATH,"logo_small.png");
}
//help file
builder.setLength(len);
builder.append("help.txt");
copyFileToFolder(builder.toString(),"src/images");
}
private void copyFileToFolder(String source, String folder, String newName) throws Exception {
File file = new File(source);
copyFile(file,new File(folder.concat(File.separator).concat(newName)));
}
private void copyFileToFolder(String source, String folder) throws Exception {
File file = new File(source);
copyFile(file,new File(folder.concat(File.separator).concat(file.getName())));
}
private void appendSuffix(StringBuilder builder, boolean demoVersion) {
if (demoVersion) {
builder.append("l:");
} else {
builder.append("f:");
}
}
private void populateMethods(StringBuilder builder, ModelPersist model,String content,String output) throws Exception {
ArrayList<Paragraph> list = model.getParagraphs();
for (Paragraph paragraph : list) {
builder.append("public String ");
builder.append(PREFIX_PARAGRAPH);
builder.append(paragraph.getId());
builder.append("(){\nreturn \"");
builder.append(toText(paragraph.getDescription()));
builder.append("\";\n}\n");
paragraph.setDescription("");
}
ArrayList<Picture> images = model.getPictures();
for (Picture picture : images) {
picture.setUrl(copyContent(picture.getUrl(),content,output));
}
ArrayList<Sound> sounds = model.getSounds();
for (Sound sound : sounds) {
sound.setUrl(copyContent(sound.getUrl(),content,output));
}
JSONBuilder result = JSONBuilder.getStartInstance();
model.toJSON(Model.EXPORT_PLAY, result);
builder.append("public String ");
builder.append(PREFIX_PARAGRAPH);
builder.append("(){\n");
FileOutputStream fileWriter = new FileOutputStream("src/images/model.txt");
try {
fileWriter.write(result.toString().getBytes("UTF-8"));
} finally {
fileWriter.close();
}
builder.append("return com.iambookmaster.client.iphone.images.IPhoneImages.INSTANCE.model().getText();\n}\n");
}
protected String normalizeURL(String url) {
int i = url.lastIndexOf("/");
if (i>0) {
url = url.substring(i+1);
}
i = url.lastIndexOf("\\");
if (i>0) {
url = url.substring(i+1);
}
return url;
}
private String toText(String text) {
return text.replace("\n", "\\n").replace("\"", "\\\"");
}
private void populateModel(StringBuilder builder, ModelPersist model) {
builder.append("try {\n");
builder.append("model.restore(JSONParser.eval(");
builder.append(PREFIX_PARAGRAPH);
builder.append("()),JSONParser.getInstance());\n");
ArrayList<Paragraph> list = model.getParagraphs();
int i=0;
for (Paragraph paragraph : list) {
builder.append("model.getParagraphs().get(");
builder.append(i++);
builder.append(").setDescription(");
builder.append(PREFIX_PARAGRAPH);
builder.append(paragraph.getId());
builder.append("());\n");
}
builder.append("listener.success(model);\n");
builder.append("} catch (JSONException e) {\n");
builder.append("listener.error(e);\n");
builder.append("}\n");
}
}