From 0b51f671ad5c33758b91453e32bff2bdceb2ae31 Mon Sep 17 00:00:00 2001 From: godotg Date: Sun, 5 Mar 2023 21:42:10 +0800 Subject: [PATCH] perf[gdscript]: gdscript map method of field --- .../serializer/gdscript/GenerateGdUtils.java | 21 ++++++++++++++++++- .../resources/gdscript/ProtocolTemplate.gd | 10 +++++++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/gdscript/GenerateGdUtils.java b/protocol/src/main/java/com/zfoo/protocol/serializer/gdscript/GenerateGdUtils.java index 7eb99f24..f216c9b8 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/gdscript/GenerateGdUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/gdscript/GenerateGdUtils.java @@ -120,11 +120,13 @@ public abstract class GenerateGdUtils { var includeSubProtocol = includeSubProtocol(registration); var classNote = GenerateProtocolNote.classNote(protocolId, CodeLanguage.GdScript); var fieldDefinition = fieldDefinition(registration); + var toStringMethod = toStringMethod(registration); var writeObject = writeObject(registration); var readObject = readObject(registration); var protocolTemplate = StringUtils.bytesToString(IOUtils.toByteArray(ClassUtils.getFileFromClassPath("gdscript/ProtocolTemplate.gd"))); - protocolTemplate = StringUtils.format(protocolTemplate, protocolId, includeSubProtocol, classNote, fieldDefinition.trim(), protocolClazzName, writeObject.trim(), readObject.trim()); + protocolTemplate = StringUtils.format(protocolTemplate, protocolId, protocolClazzName, includeSubProtocol, classNote, fieldDefinition.trim(), + StringUtils.EMPTY_JSON, toStringMethod, writeObject.trim(), readObject.trim()); var outputPath = StringUtils.format("{}/{}/{}.gd", protocolOutputPath, GenerateProtocolPath.getProtocolPath(protocolId), protocolClazzName); FileUtils.writeStringToFile(new File(outputPath), protocolTemplate, true); @@ -169,6 +171,23 @@ public abstract class GenerateGdUtils { return gdBuilder.toString(); } + private static String toStringMethod(ProtocolRegistration registration) { + var fields = registration.getFields(); + var fieldRegistrations = registration.getFieldRegistrations(); + var gdBuilder = new StringBuilder(); + var sequencedFields = ReflectionUtils.notStaticAndTransientFields(registration.getConstructor().getDeclaringClass()); + for (int i = 0; i < sequencedFields.size(); i++) { + var field = sequencedFields.get(i); + IFieldRegistration fieldRegistration = fieldRegistrations[GenerateProtocolFile.indexOf(fields, field)]; + var fieldName = field.getName(); + gdBuilder.append(TAB_ASCII).append(StringUtils.format("map[\"{}\"] = {}", fieldName, fieldName)); + if (i != sequencedFields.size() - 1) { + gdBuilder.append(LS); + } + } + return gdBuilder.toString(); + } + private static String writeObject(ProtocolRegistration registration) { var fields = registration.getFields(); var fieldRegistrations = registration.getFieldRegistrations(); diff --git a/protocol/src/main/resources/gdscript/ProtocolTemplate.gd b/protocol/src/main/resources/gdscript/ProtocolTemplate.gd index 58deba72..8bbc33ef 100644 --- a/protocol/src/main/resources/gdscript/ProtocolTemplate.gd +++ b/protocol/src/main/resources/gdscript/ProtocolTemplate.gd @@ -1,10 +1,16 @@ const PROTOCOL_ID = {} +const PROTOCOL_CLASS_NAME = "{}" {} {} {} -func toString() -> String: - return "{}" +func map() -> Dictionary: + var map = {} +{} + return map + +func _to_string() -> String: + return JSON.stringify(map()) static func write(buffer, packet): if (buffer.writePacketFlag(packet)):