diff options
author | jacopograndi <jacopo.grandi@outlook.it> | 2022-01-14 13:04:34 +0100 |
---|---|---|
committer | jacopograndi <jacopo.grandi@outlook.it> | 2022-01-14 13:04:34 +0100 |
commit | 4bfbf641dc2b8aca8de9f86a9908063f39bd6e31 (patch) | |
tree | 3d016842fc578f59cb0727ddb506c3b01cf53c62 /assets/addons/voxel-core/classes/readers/gpl.gd | |
parent | 90af765b430e3a75daa9b2b4d0343ae58ad5c33d (diff) |
.
Diffstat (limited to 'assets/addons/voxel-core/classes/readers/gpl.gd')
-rw-r--r-- | assets/addons/voxel-core/classes/readers/gpl.gd | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/assets/addons/voxel-core/classes/readers/gpl.gd b/assets/addons/voxel-core/classes/readers/gpl.gd new file mode 100644 index 0000000..4a6b943 --- /dev/null +++ b/assets/addons/voxel-core/classes/readers/gpl.gd @@ -0,0 +1,48 @@ +class_name GPLReader +extends Reference +# GIMP palette file reader + + + +# Public Methods +# Reads GPL file, and returns voxel palette +static func read(gpl_file : File) -> Dictionary: + var result := { + "error": OK, + "voxels": {}, + "palette": [], + } + + if gpl_file.get_line() == "GIMP Palette": + while not gpl_file.eof_reached(): + var line = gpl_file.get_line() + if typeof(line) == TYPE_STRING and not line.empty() and (line[0].is_valid_integer() or line[0] == " "): + var tokens = line.split("\t") + var name = "" + var color = tokens[0].split_floats(" ") + color = Color(color[0] / 255, color[1] / 255, color[2] / 255) + if tokens.size() > 1: + name = tokens[1] + var end = name.find("(") + name = name.substr(0, end) + + if not result["palette"].has(color): + var voxel := Voxel.colored(color) + result["palette"].append(voxel) + if not name.empty(): + Voxel.set_name(voxel, name.strip_edges()) + else: + result["error"] = ERR_FILE_UNRECOGNIZED + + return result + + +static func read_file(gpl_path : String) -> Dictionary: + var result := { "error": OK } + var file := File.new() + var error = file.open(gpl_path, File.READ) + if error == OK: + result = read(file) + if file.is_open(): + file.close() + return result |