You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
169 lines
3.3 KiB
169 lines
3.3 KiB
tool
|
|
extends Resource
|
|
|
|
var char_utils := preload("../Util/CharUtils.gd").new()
|
|
|
|
# {
|
|
# for_char: String = {
|
|
# advance: int,
|
|
# offset: Vector2
|
|
# }
|
|
# }
|
|
export var char_settings: Dictionary
|
|
|
|
# [
|
|
# {
|
|
# from: String,
|
|
# to: String,
|
|
# kerning: int
|
|
# }
|
|
# ]
|
|
export var kerning_pairs: Array
|
|
|
|
export var gap := 2
|
|
export var horizontal_align := 1
|
|
export var vertical_align := 0
|
|
export var monospace := false
|
|
|
|
|
|
export var preview_color: Color = Color("202431")
|
|
export var preview_chars: String
|
|
|
|
|
|
func get_default_setting():
|
|
return {
|
|
advance = 0.0,
|
|
offset = Vector2.ZERO
|
|
}
|
|
|
|
func _init():
|
|
char_settings = {}
|
|
kerning_pairs = []
|
|
|
|
# ------ Settings Functions ------
|
|
|
|
func add_setting(for_char: String) -> Dictionary:
|
|
char_settings[for_char] = {
|
|
advance = 0.0,
|
|
offset = Vector2.ZERO
|
|
}
|
|
|
|
return char_settings[for_char]
|
|
|
|
|
|
func insert_setting(for_char: String, setting: Dictionary):
|
|
char_settings[for_char] = setting
|
|
|
|
|
|
func remove_setting(for_char: String):
|
|
if char_settings.has(for_char):
|
|
char_settings.erase(for_char)
|
|
|
|
|
|
func set_setting(for_char: String, advance: int, offset: Vector2):
|
|
char_settings[for_char] = {
|
|
advance = advance,
|
|
offset = offset
|
|
}
|
|
|
|
|
|
func get_setting(char_code: int):
|
|
if char_code == -1:
|
|
return get_default_setting()
|
|
|
|
for char_string in char_settings:
|
|
var char_codes: Array = char_utils.chars_to_codes(char_string).front()
|
|
if char_code in char_codes:
|
|
return char_settings[char_string]
|
|
|
|
return get_default_setting()
|
|
|
|
|
|
func set_advance(for_char: String, advance: int):
|
|
if not char_settings.has(for_char):
|
|
add_setting(for_char)
|
|
|
|
char_settings[for_char].advance = advance
|
|
|
|
|
|
func set_offset(for_char: String, offset: Vector2):
|
|
if not char_settings.has(for_char):
|
|
add_setting(for_char)
|
|
|
|
char_settings[for_char].offset = offset
|
|
|
|
|
|
func get_advance(for_char: String):
|
|
if char_settings.has(for_char):
|
|
return char_settings[for_char].advance
|
|
else:
|
|
return 0.0
|
|
|
|
|
|
func get_offset(for_char: String):
|
|
if char_settings.has(for_char):
|
|
return char_settings[for_char].offset
|
|
else:
|
|
return Vector2.ZERO
|
|
|
|
|
|
# ------ Kerning Pair Functions ------
|
|
|
|
func add_kerning_pair() -> Dictionary:
|
|
var new_pair = {
|
|
from = "",
|
|
to = "",
|
|
kerning = 0
|
|
}
|
|
|
|
kerning_pairs.append(new_pair)
|
|
return new_pair
|
|
|
|
|
|
func insert_kerning_pair(idx: int, new_kerning: Dictionary):
|
|
kerning_pairs.insert(idx, new_kerning)
|
|
|
|
|
|
func remove_kerning_pair(idx: int):
|
|
kerning_pairs.remove(idx)
|
|
|
|
|
|
func set_kerning_pair(idx: int, new_kerning: Dictionary):
|
|
kerning_pairs[idx] = new_kerning
|
|
|
|
|
|
func set_kerning_pair_from(idx: int, new_from: String):
|
|
kerning_pairs[idx].from = new_from
|
|
|
|
|
|
func set_kerning_pair_to(idx: int, new_to: String):
|
|
kerning_pairs[idx].to = new_to
|
|
|
|
|
|
func set_kerning_pair_kerning(idx: int, new_kerning: int):
|
|
kerning_pairs[idx].kerning = new_kerning
|
|
|
|
|
|
func get_kerning_pair(idx: int) -> Dictionary:
|
|
return kerning_pairs[idx]
|
|
|
|
|
|
func solve_kerning_pairs() -> Array:
|
|
var solved_list := []
|
|
for pair in kerning_pairs:
|
|
if pair.from == "" or pair.to == "" or pair.kerning == 0:
|
|
continue
|
|
|
|
var from_array: Array = char_utils.chars_to_codes(pair.from).front()
|
|
var to_array: Array = char_utils.chars_to_codes(pair.to).front()
|
|
|
|
for a in from_array:
|
|
for b in to_array:
|
|
solved_list.append({
|
|
char_a = a,
|
|
char_b = b,
|
|
kerning = pair.kerning
|
|
})
|
|
|
|
return solved_list
|