small racing game im working on
Diffstat (limited to 'ui/editor/export.gd')
| -rw-r--r-- | ui/editor/export.gd | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/ui/editor/export.gd b/ui/editor/export.gd new file mode 100644 index 0000000..d62aaaa --- /dev/null +++ b/ui/editor/export.gd @@ -0,0 +1,33 @@ +extends Button +class_name EditorMarshalling + +@onready var editor: TrackEditor = owner + +func _pressed() -> void: + var enc := EditorMarshalling.td2s(editor.to_trackdata()) + print_rich("exporting to `[code]%s[/code]`" % enc) # for funny clipboard shenanigans + DisplayServer.clipboard_set(enc) + +static func td2s(td: TrackResource) -> String: + var buf := var_to_bytes(td.to_d()) + var buf_c := buf.compress(FileAccess.COMPRESSION_DEFLATE) + return "%s|%s" % [Marshalls.raw_to_base64(buf_c), String.num_uint64(buf.size(), 16)] + +static func s2td(s: String) -> TrackResource: + var split := s.lstrip('`').rstrip('`').strip_edges().split("|", false, 1) + if not split.size() || split[0].length() < 100: + return null + var buf := Marshalls.base64_to_raw(split[0]) + if buf.size() < 100: + return + var decompressed: PackedByteArray = [] + if split.size() > 1 and split[1].length() < 20 and split[1].hex_to_int() > 0: + decompressed = buf.decompress(split[1].hex_to_int(), FileAccess.COMPRESSION_DEFLATE) + else: # size unknown! + decompressed = buf.decompress_dynamic(51200, FileAccess.COMPRESSION_DEFLATE) + if decompressed.size() < 4: + return null + var d = bytes_to_var(decompressed) + if d is Dictionary: + return TrackResource.from_d(d) + return null |