aboutsummaryrefslogtreecommitdiff
path: root/addons/voxel-core/classes/readers/gpl.gd
blob: 4a6b943a556a07a1df18f29021591ab873a565b5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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