mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-05-31 00:22:47 +00:00
perf[storage]: perfect gdscript generate option
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user