perf[storage]: perfect gdscript generate option

This commit is contained in:
godotg
2022-10-28 12:17:10 +08:00
parent 1976be79a4
commit 370c090d23
7 changed files with 41 additions and 23 deletions
@@ -14,6 +14,7 @@
package com.zfoo.protocol.generate;
import com.zfoo.protocol.serializer.CodeLanguage;
import com.zfoo.protocol.util.StringUtils;
import java.util.EnumSet;
import java.util.Set;
@@ -39,7 +40,7 @@ public class GenerateOperation {
/**
* 生成协议的路径,默认为当前运行项目的路径
*/
private String protocolPath;
private String protocolPath = StringUtils.EMPTY;
/**
* 保留参数
@@ -48,7 +48,7 @@ import static com.zfoo.protocol.util.StringUtils.TAB_ASCII;
*/
public abstract class GenerateGdUtils {
private static String protocolOutputRootPath = "gdProtocol/";
private static String protocolOutputRootPath = "gdProtocol";
private static String protocolOutputPath = StringUtils.EMPTY;
private static Map<ISerializer, IGdSerializer> gdSerializerMap;
@@ -58,10 +58,16 @@ public abstract class GenerateGdUtils {
}
public static void init(GenerateOperation generateOperation) {
protocolOutputPath = FileUtils.joinPath(generateOperation.getProtocolPath(), protocolOutputRootPath);
// 如果没有配置路径,则使用默认路径
if (StringUtils.isEmpty(generateOperation.getProtocolPath())) {
protocolOutputPath = FileUtils.joinPath(generateOperation.getProtocolPath(), protocolOutputRootPath);
} else {
protocolOutputPath = generateOperation.getProtocolPath();
}
FileUtils.deleteFile(new File(protocolOutputPath));
FileUtils.createDirectory(protocolOutputPath);
var protocolOutputPathFile = FileUtils.createDirectory(protocolOutputPath);
protocolOutputRootPath = protocolOutputPathFile.getName();
gdSerializerMap = new HashMap<>();
gdSerializerMap.put(BooleanSerializer.INSTANCE, new GdBooleanSerializer());
@@ -87,12 +93,9 @@ public abstract class GenerateGdUtils {
}
public static void createProtocolManager(List<IProtocolRegistration> protocolList) throws IOException {
var list = List.of("gdscript/buffer/ByteBuffer.gd");
for (var fileName : list) {
var fileInputStream = ClassUtils.getFileFromClassPath(fileName);
var createFile = new File(StringUtils.format("{}/{}", protocolOutputPath, StringUtils.substringAfterFirst(fileName, "gdscript/")));
FileUtils.writeInputStreamToFile(createFile, fileInputStream);
}
var byteBufferFile = new File(StringUtils.format("{}/{}", protocolOutputPath, "ByteBuffer.gd"));
var byteBufferTemplate = StringUtils.bytesToString(IOUtils.toByteArray(ClassUtils.getFileFromClassPath("gdscript/buffer/ByteBuffer.gd")));
FileUtils.writeStringToFile(byteBufferFile, StringUtils.format(byteBufferTemplate, protocolOutputRootPath), false);
var protocolManagerTemplate = StringUtils.bytesToString(IOUtils.toByteArray(ClassUtils.getFileFromClassPath("gdscript/ProtocolManagerTemplate.gd")));
// 生成ProtocolManager.gd文件
@@ -102,7 +105,11 @@ public abstract class GenerateGdUtils {
var protocolId = protocol.protocolId();
var name = protocol.protocolConstructor().getDeclaringClass().getSimpleName();
var path = GenerateProtocolPath.getProtocolPath(protocolId);
importBuilder.append(StringUtils.format("const {} = preload(\"res://gdProtocol/{}/{}.gd\")", name, path, name)).append(LS);
if (StringUtils.isBlank(path)) {
importBuilder.append(StringUtils.format("const {} = preload(\"res://{}/{}.gd\")", name, protocolOutputRootPath, name)).append(LS);
} else {
importBuilder.append(StringUtils.format("const {} = preload(\"res://{}/{}/{}.gd\")", name, protocolOutputRootPath, path, name)).append(LS);
}
initList.add(StringUtils.format("{}{}: {}", TAB_ASCII, protocolId, name));
}
var initProtocols = StringUtils.joinWith(StringUtils.COMMA + LS, initList.toArray());
@@ -8,8 +8,8 @@ static func getProtocol(protocolId: int):
return protocols[protocolId]
static func newInstance(protocolId: int):
var protocol = protocols[protocolId]
return protocol.new()
var protocol = protocols[protocolId]
return protocol.new()
static func write(buffer, packet):
var protocolId: int = packet.PROTOCOL_ID
@@ -18,7 +18,7 @@ static func write(buffer, packet):
protocol.write(buffer, packet)
static func read(buffer):
var protocolId = buffer.readShort();
var protocol = protocols[protocolId]
var packet = protocol.read(buffer);
return packet;
var protocolId = buffer.readShort();
var protocol = protocols[protocolId]
var packet = protocol.read(buffer);
return packet;
@@ -1,4 +1,4 @@
const ProtocolManager = preload("res://gdProtocol/ProtocolManager.gd")
const ProtocolManager = preload("res://{}/ProtocolManager.gd")
const EMPTY: String = ""
@@ -68,10 +68,7 @@ public abstract class ExportUtils {
}
public static void csv2json(String inputDir, String outputDir) throws IOException {
var csvFiles = FileUtils.getAllReadableFiles(new File(inputDir))
.stream()
.filter(it -> ResourceEnum.getResourceEnumByType(FileUtils.fileExtName(it.getName())) == ResourceEnum.CSV)
.collect(Collectors.toList());
var csvFiles = scanCsvFiles(inputDir);
for (var csv : csvFiles) {
var excelSimpleName = FileUtils.fileSimpleName(csv.getName());
var resourceData = CsvReader.readResourceDataFromCSV(FileUtils.openInputStream(csv), csv.getName());
@@ -82,13 +79,20 @@ public abstract class ExportUtils {
}
}
private static List<File> scanExcelFiles(String inputDir) {
public static List<File> scanExcelFiles(String inputDir) {
return FileUtils.getAllReadableFiles(new File(inputDir))
.stream()
.filter(it -> ResourceEnum.isExcel(FileUtils.fileExtName(it.getName())))
.collect(Collectors.toList());
}
public static List<File> scanCsvFiles(String inputDir) {
return FileUtils.getAllReadableFiles(new File(inputDir))
.stream()
.filter(it -> ResourceEnum.getResourceEnumByType(FileUtils.fileExtName(it.getName())) == ResourceEnum.CSV)
.collect(Collectors.toList());
}
// 将class里的map自动赋值storage
public static <T> T autoWrapData(Class<T> clazz, Map<Class<?>, Storage<?, ?>> storageMap) {
var instance = ReflectionUtils.newInstance(clazz);
@@ -92,6 +92,7 @@ public class ExportBinaryTest {
protocols.add(ResourceData.class);
protocols.addAll(storageManager.storageMap().keySet());
var operation = new GenerateOperation();
operation.setProtocolPath("D:\\github\\godot-bird\\test\\storage\\protocol");
operation.getGenerateLanguages().add(CodeLanguage.GdScript);
ProtocolManager.initProtocolAuto(protocols, operation);
@@ -13,6 +13,7 @@
package com.zfoo.storage.export;
import com.zfoo.protocol.util.FileUtils;
import com.zfoo.protocol.util.StringUtils;
import com.zfoo.storage.interpreter.CsvReader;
import com.zfoo.storage.util.ExportUtils;
import org.junit.Ignore;
@@ -34,6 +35,10 @@ public class ExportCsvTest {
var outputDir = "E:\\workspace\\zfoo\\storage\\src\\test\\resources\\excel";
ExportUtils.excel2csv(inputDir, outputDir);
// godot4.x导入csv,莫名奇妙生成了一些translation文件,批量修改一下文件的名称
var csvFiles = ExportUtils.scanCsvFiles(outputDir);
csvFiles.stream().forEach(it -> it.renameTo(new File(StringUtils.format("{}.txt", it.getAbsolutePath()))));
csvFiles.stream().forEach(it -> FileUtils.deleteFile(it));
}
@Test