mirror of
https://github.com/OMGeeky/ATCS.git
synced 2026-02-23 15:38:23 +01:00
Corrected linking of spritesheets in tmx
- added or altered spritesheets are now linked with relative paths so that they can be committed to an ATCS project and don't have any unwanted path infomation included - when exporting the project all links to spritesheets are now changed to ../drawable/FILENAME.PNG
This commit is contained in:
@@ -47,6 +47,9 @@ import java.util.Vector;
|
|||||||
import java.util.zip.DeflaterOutputStream;
|
import java.util.zip.DeflaterOutputStream;
|
||||||
import java.util.zip.GZIPOutputStream;
|
import java.util.zip.GZIPOutputStream;
|
||||||
|
|
||||||
|
import com.gpl.rpg.atcontentstudio.model.GameSource.Type;
|
||||||
|
import com.gpl.rpg.atcontentstudio.model.maps.TMXMapSet;
|
||||||
|
|
||||||
import tiled.core.AnimatedTile;
|
import tiled.core.AnimatedTile;
|
||||||
import tiled.core.Map;
|
import tiled.core.Map;
|
||||||
import tiled.core.MapLayer;
|
import tiled.core.MapLayer;
|
||||||
@@ -238,7 +241,11 @@ public class TMXMapWriter
|
|||||||
} else {
|
} else {
|
||||||
w.startElement("tileset");
|
w.startElement("tileset");
|
||||||
w.writeAttribute("firstgid", getFirstGidForTileset(set));
|
w.writeAttribute("firstgid", getFirstGidForTileset(set));
|
||||||
w.writeAttribute("source", getRelativePath(wp, source));
|
if (set.sheet.parent.getDataType() == Type.source) {
|
||||||
|
w.writeAttribute("source", (TMXMapSet.DEFAULT_REL_PATH_TO_DRAWABLE + set.getName()).replace("\\", "/"));
|
||||||
|
} else {
|
||||||
|
w.writeAttribute("source", getRelativePath(wp, source));
|
||||||
|
}
|
||||||
if (set.getBaseDir() != null) {
|
if (set.getBaseDir() != null) {
|
||||||
w.writeAttribute("basedir", set.getBaseDir());
|
w.writeAttribute("basedir", set.getBaseDir());
|
||||||
}
|
}
|
||||||
@@ -279,7 +286,11 @@ public class TMXMapWriter
|
|||||||
|
|
||||||
if (tileBitmapFile != null) {
|
if (tileBitmapFile != null) {
|
||||||
w.startElement("image");
|
w.startElement("image");
|
||||||
w.writeAttribute("source", getRelativePath(wp, tileBitmapFile));
|
if (set.sheet.parent.getDataType() == Type.source) {
|
||||||
|
w.writeAttribute("source", (TMXMapSet.DEFAULT_REL_PATH_TO_DRAWABLE + set.getName()).replace("\\", "/"));
|
||||||
|
} else {
|
||||||
|
w.writeAttribute("source", getRelativePath(wp, tileBitmapFile));
|
||||||
|
}
|
||||||
if (set.sheetDimensions != null) {
|
if (set.sheetDimensions != null) {
|
||||||
w.writeAttribute("width", set.sheetDimensions.width);
|
w.writeAttribute("width", set.sheetDimensions.width);
|
||||||
w.writeAttribute("height", set.sheetDimensions.height);
|
w.writeAttribute("height", set.sheetDimensions.height);
|
||||||
|
|||||||
@@ -11,6 +11,10 @@ import java.io.IOException;
|
|||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.io.StringReader;
|
import java.io.StringReader;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
@@ -74,7 +78,9 @@ import com.gpl.rpg.atcontentstudio.utils.FileUtils;
|
|||||||
public class Project implements ProjectTreeNode, Serializable {
|
public class Project implements ProjectTreeNode, Serializable {
|
||||||
|
|
||||||
private static final long serialVersionUID = 4807454973303366758L;
|
private static final long serialVersionUID = 4807454973303366758L;
|
||||||
|
private static final String drawablePath = TMXMapSet.DEFAULT_REL_PATH_TO_DRAWABLE.replace("\\", "/");
|
||||||
|
|
||||||
|
|
||||||
//Every instance field that is not transient will be saved in this file.
|
//Every instance field that is not transient will be saved in this file.
|
||||||
public static final String SETTINGS_FILE = ".project";
|
public static final String SETTINGS_FILE = ".project";
|
||||||
|
|
||||||
@@ -1079,10 +1085,16 @@ public class Project implements ProjectTreeNode, Serializable {
|
|||||||
public void run() {
|
public void run() {
|
||||||
Notification.addInfo("Exporting project \""+name+"\" as "+target.getAbsolutePath());
|
Notification.addInfo("Exporting project \""+name+"\" as "+target.getAbsolutePath());
|
||||||
|
|
||||||
File tmpDir = exportProjectToTmpDir();
|
File tmpDir;
|
||||||
|
try {
|
||||||
|
tmpDir = exportProjectToTmpDir();
|
||||||
|
FileUtils.writeToZip(tmpDir, target);
|
||||||
|
FileUtils.deleteDir(tmpDir);
|
||||||
|
} catch (IOException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
FileUtils.writeToZip(tmpDir, target);
|
|
||||||
FileUtils.deleteDir(tmpDir);
|
|
||||||
Notification.addSuccess("Project \""+name+"\" exported as "+target.getAbsolutePath());
|
Notification.addSuccess("Project \""+name+"\" exported as "+target.getAbsolutePath());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1096,10 +1108,16 @@ public class Project implements ProjectTreeNode, Serializable {
|
|||||||
public void run() {
|
public void run() {
|
||||||
Notification.addInfo("Exporting project \""+name+"\" into "+target.getAbsolutePath());
|
Notification.addInfo("Exporting project \""+name+"\" into "+target.getAbsolutePath());
|
||||||
|
|
||||||
File tmpDir = exportProjectToTmpDir();
|
File tmpDir;
|
||||||
|
try {
|
||||||
|
tmpDir = exportProjectToTmpDir();
|
||||||
|
FileUtils.copyOver(tmpDir, target);
|
||||||
|
FileUtils.deleteDir(tmpDir);
|
||||||
|
} catch (IOException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
FileUtils.copyOver(tmpDir, target);
|
|
||||||
FileUtils.deleteDir(tmpDir);
|
|
||||||
Notification.addSuccess("Project \""+name+"\" exported into "+target.getAbsolutePath());
|
Notification.addSuccess("Project \""+name+"\" exported into "+target.getAbsolutePath());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1107,7 +1125,7 @@ public class Project implements ProjectTreeNode, Serializable {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public File exportProjectToTmpDir() {
|
public File exportProjectToTmpDir() throws IOException {
|
||||||
File tmpDir = new File(baseFolder, "tmp");
|
File tmpDir = new File(baseFolder, "tmp");
|
||||||
FileUtils.deleteDir(tmpDir);
|
FileUtils.deleteDir(tmpDir);
|
||||||
tmpDir.mkdir();
|
tmpDir.mkdir();
|
||||||
@@ -1139,12 +1157,12 @@ public class Project implements ProjectTreeNode, Serializable {
|
|||||||
writtenFiles = new LinkedList<String>();
|
writtenFiles = new LinkedList<String>();
|
||||||
for (File createdMapFile : createdContent.gameMaps.mapFolder.listFiles()) {
|
for (File createdMapFile : createdContent.gameMaps.mapFolder.listFiles()) {
|
||||||
if (createdMapFile.getName().equalsIgnoreCase("worldmap.xml")) continue;
|
if (createdMapFile.getName().equalsIgnoreCase("worldmap.xml")) continue;
|
||||||
FileUtils.copyFile(createdMapFile, new File(tmpMapDir, createdMapFile.getName()));
|
copyTmxConverted(createdMapFile.toPath(), Paths.get(tmpMapDir.getAbsolutePath(), createdMapFile.getName()));
|
||||||
writtenFiles.add(createdMapFile.getName());
|
writtenFiles.add(createdMapFile.getName());
|
||||||
}
|
}
|
||||||
for (File alteredMapFile : alteredContent.gameMaps.mapFolder.listFiles()) {
|
for (File alteredMapFile : alteredContent.gameMaps.mapFolder.listFiles()) {
|
||||||
if (alteredMapFile.getName().equalsIgnoreCase("worldmap.xml")) continue;
|
if (alteredMapFile.getName().equalsIgnoreCase("worldmap.xml")) continue;
|
||||||
FileUtils.copyFile(alteredMapFile, new File(tmpMapDir, alteredMapFile.getName()));
|
copyTmxConverted(alteredMapFile.toPath(), Paths.get(tmpMapDir.getAbsolutePath(), alteredMapFile.getName()));
|
||||||
writtenFiles.add(alteredMapFile.getName());
|
writtenFiles.add(alteredMapFile.getName());
|
||||||
}
|
}
|
||||||
writtenFilesPerDataType.put(TMXMap.class, writtenFiles);
|
writtenFilesPerDataType.put(TMXMap.class, writtenFiles);
|
||||||
@@ -1177,6 +1195,16 @@ public class Project implements ProjectTreeNode, Serializable {
|
|||||||
return tmpDir;
|
return tmpDir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void copyTmxConverted(Path from, Path to) throws IOException {
|
||||||
|
String xml = new String(Files.readAllBytes(from), StandardCharsets.UTF_8);
|
||||||
|
xml = xml.replace("../../altered/spritesheets/", drawablePath);
|
||||||
|
xml = xml.replace("../../created/spritesheets/", drawablePath);
|
||||||
|
xml = xml.replace("../spritesheets/", drawablePath);
|
||||||
|
xml = xml.replace("../spritesheets/", drawablePath);
|
||||||
|
Files.write(to, xml.getBytes(StandardCharsets.UTF_8));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
public List<String> writeDataDeltaForDataType(GameDataCategory<? extends JSONElement> created, GameDataCategory<? extends JSONElement> altered, GameDataCategory<? extends JSONElement> source, Class<? extends JSONElement> gdeClass, File targetFolder) {
|
public List<String> writeDataDeltaForDataType(GameDataCategory<? extends JSONElement> created, GameDataCategory<? extends JSONElement> altered, GameDataCategory<? extends JSONElement> source, Class<? extends JSONElement> gdeClass, File targetFolder) {
|
||||||
List<String> filenamesToWrite = new LinkedList<String>();
|
List<String> filenamesToWrite = new LinkedList<String>();
|
||||||
|
|||||||
@@ -258,7 +258,7 @@ public class TMXMap extends GameDataElement {
|
|||||||
if (getDataType() == GameSource.Type.source) {
|
if (getDataType() == GameSource.Type.source) {
|
||||||
writer.writeMap(tmxMap, baos, tmxFile.getAbsolutePath());
|
writer.writeMap(tmxMap, baos, tmxFile.getAbsolutePath());
|
||||||
} else {
|
} else {
|
||||||
writer.writeMap(tmxMap, baos, getProject().baseContent.gameMaps.mapFolder.getAbsolutePath()+File.separator+"placeholder.tmx");
|
writer.writeMap(tmxMap, baos, ((TMXMapSet)this.parent).mapFolder.getAbsolutePath()+File.separator+"placeholder.tmx");
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Notification.addError("Error while converting map "+getDesc()+" to XML: "+e.getMessage());
|
Notification.addError("Error while converting map "+getDesc()+" to XML: "+e.getMessage());
|
||||||
|
|||||||
Reference in New Issue
Block a user