feat[gdscript]: compatible filed support gdscript

This commit is contained in:
godotg
2023-10-05 17:41:43 +08:00
parent 54765dc81c
commit b18559b4db
2 changed files with 22 additions and 6 deletions
@@ -95,7 +95,6 @@ public abstract class GenerateGdUtils {
FileUtils.writeStringToFile(byteBufferFile, StringUtils.format(byteBufferTemplate, protocolOutputRootPath), false);
var protocolManagerTemplate = ClassUtils.getFileFromClassPathToString("gdscript/ProtocolManagerTemplate.gd");
// 生成ProtocolManager.gd文件
var importBuilder = new StringBuilder();
var initList = new ArrayList<String>();
for (var protocol : protocolList) {
@@ -170,7 +169,7 @@ public abstract class GenerateGdUtils {
gdBuilder.append(StringUtils.format("var {}: {}", fieldName, fieldType));
if (fieldType.equals("Dictionary") || fieldType.equals("Array")) {
var typeNote = GenerateTsUtils.toTsClassName(field.getGenericType().toString());
gdBuilder.append(StringUtils.format(TAB_ASCII + "# {}", typeNote));
gdBuilder.append(StringUtils.format(TAB_ASCII + "# {}", typeNote));
}
gdBuilder.append(LS);
}
@@ -198,11 +197,20 @@ public abstract class GenerateGdUtils {
var fields = registration.getFields();
var fieldRegistrations = registration.getFieldRegistrations();
var gdBuilder = new StringBuilder();
if (registration.isCompatible()) {
gdBuilder.append("var beforeWriteIndex = buffer.getWriteOffset()").append(LS);
gdBuilder.append(TAB_ASCII).append(StringUtils.format("buffer.writeInt({})", registration.getPredictionLength())).append(LS);
} else {
gdBuilder.append(TAB_ASCII).append("buffer.writeInt(-1)").append(LS);
}
for (var i = 0; i < fields.length; i++) {
var field = fields[i];
var fieldRegistration = fieldRegistrations[i];
gdSerializer(fieldRegistration.serializer()).writeObject(gdBuilder, "packet." + field.getName(), 1, field, fieldRegistration);
}
if (registration.isCompatible()) {
gdBuilder.append(TAB_ASCII).append(StringUtils.format("buffer.adjustPadding({}, beforeWriteIndex)", registration.getPredictionLength())).append(LS);
}
return gdBuilder.toString();
}
@@ -214,8 +222,10 @@ public abstract class GenerateGdUtils {
var field = fields[i];
var fieldRegistration = fieldRegistrations[i];
if (field.isAnnotationPresent(Compatible.class)) {
gdBuilder.append(TAB_ASCII).append("if (!buffer.isReadable()):").append(LS);
gdBuilder.append(TAB_ASCII + TAB_ASCII).append("return packet").append(LS);
gdBuilder.append(TAB_ASCII).append("if buffer.compatibleRead(beforeReadIndex, length):").append(LS);
var compatibleReadObject = gdSerializer(fieldRegistration.serializer()).readObject(gdBuilder, 2, field, fieldRegistration);
gdBuilder.append(TAB_ASCII + TAB_ASCII).append(StringUtils.format("packet.{} = {};", field.getName(), compatibleReadObject)).append(LS);
continue;
}
var readObject = gdSerializer(fieldRegistration.serializer()).readObject(gdBuilder, 1, field, fieldRegistration);
gdBuilder.append(TAB_ASCII).append(StringUtils.format("packet.{} = {}", field.getName(), readObject)).append(LS);
@@ -10,13 +10,19 @@ func _to_string() -> String:
return JSON.stringify(m)
static func write(buffer, packet):
if (buffer.writePacketFlag(packet)):
if (packet == null):
buffer.writeInt(0)
return
{}
pass
static func read(buffer):
if (!buffer.readBool()):
var length = buffer.readInt()
if (length == 0):
return null
var beforeReadIndex = buffer.getReadOffset()
var packet = buffer.newInstance(PROTOCOL_ID)
{}
if (length > 0):
buffer.setReadOffset(beforeReadIndex + length)
return packet