From 227095a4f710ac6afd43f0a7e8b296f188cf20be Mon Sep 17 00:00:00 2001 From: David Luevano Alvarado Date: Tue, 31 May 2022 21:11:46 -0600 Subject: add working gif maker --- src/addons/GifMaker/GifDecoder.gd | 44 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/addons/GifMaker/GifDecoder.gd (limited to 'src/addons/GifMaker/GifDecoder.gd') diff --git a/src/addons/GifMaker/GifDecoder.gd b/src/addons/GifMaker/GifDecoder.gd new file mode 100644 index 0000000..08ccaa9 --- /dev/null +++ b/src/addons/GifMaker/GifDecoder.gd @@ -0,0 +1,44 @@ +extends Node +class_name GifDecoder + +func decode_file(path): + var file = File.new() + file.open(path, File.READ) + var bytes = file.get_buffer(file.get_len()) + file.close() + + return decode_data(bytes) + +func decode_block(block: PoolByteArray, start, end): + var string = block.subarray(start, end).get_string_from_utf8() + if string.begins_with('GIF_MAKER::'): + return str2var(string.substr('GIF_MAKER::'.length(), string.length())) + return string + +func decode_data(bytes: PoolByteArray): + var index = 0 + var start = -1 + var end = -1 + var data = [] + + for byte in bytes: + if start != -1 \ + and byte == 0x21: + end = index - 1 + + data.append(decode_block(bytes, start, end)) + start = -1 + end = -1 + + if byte == 0x21 \ + and index < bytes.size() \ + and bytes[index + 1] == 0xFE: + start = index + 2 + + index += 1 + + if end == -1 and start != -1: + end = bytes.size() - 1 + data.append(decode_block(bytes, start, end)) + + return data -- cgit v1.2.3-54-g00ecf