54 lines
1.3 KiB
GDScript
54 lines
1.3 KiB
GDScript
tool
|
|
extends MenuButton
|
|
|
|
var character := {}
|
|
var portrait := ""
|
|
|
|
var allow_dont_change := true
|
|
|
|
signal portrait_selected(portrait)
|
|
|
|
|
|
func _ready():
|
|
visible = false
|
|
connect("about_to_show", self, '_on_about_to_show')
|
|
get_popup().connect("index_pressed", self, '_on_portrait_selected')
|
|
if not allow_dont_change:
|
|
_set_portrait('Default')
|
|
|
|
|
|
func set_character(c: Dictionary, p: String = '') -> void:
|
|
character = c
|
|
visible = character.has('portraits') and character['portraits'].size() > 1
|
|
_set_portrait('Default')
|
|
if allow_dont_change and (p == "[Don't change]" or p.empty()):
|
|
_set_portrait('')
|
|
elif visible:
|
|
for port in character['portraits']:
|
|
if port['name'] == p:
|
|
_set_portrait(p)
|
|
|
|
func _set_portrait(val: String):
|
|
if (val.empty() or val == "[Don't change]") and allow_dont_change:
|
|
text = "[Don't change]"
|
|
portrait = ""
|
|
else:
|
|
text = val
|
|
portrait = val
|
|
|
|
|
|
func _on_about_to_show():
|
|
get_popup().clear()
|
|
var index = 0
|
|
if allow_dont_change:
|
|
get_popup().add_item("[Don't change]")
|
|
index += 1
|
|
if character.has('portraits'):
|
|
for p in character['portraits']:
|
|
get_popup().add_item(p['name'])
|
|
index += 1
|
|
|
|
|
|
func _on_portrait_selected(index: int):
|
|
set_character(character, get_popup().get_item_text(index))
|
|
emit_signal("portrait_selected", portrait)
|