broken_seals_roguelike/game/addons/module_manager/panels/CreateNamePopup.gd

65 lines
1.4 KiB
GDScript

tool
extends ConfirmationDialog
signal ok_pressed
export(NodePath) var line_edit_path : NodePath
export(NodePath) var option_button_path : NodePath
var _resource_type : String
var _line_edit : LineEdit
var _option_button : OptionButton
func _ready():
_line_edit = get_node(line_edit_path) as LineEdit
_option_button = get_node(option_button_path) as OptionButton
connect("confirmed", self, "_on_OK_pressed")
connect("about_to_show", self, "about_to_show")
func set_resource_type(resource_type : String) -> void:
_resource_type = resource_type
func about_to_show():
_option_button.clear()
if not ClassDB.class_exists(_resource_type):
return
var arr : PoolStringArray = PoolStringArray()
arr.append(_resource_type)
arr.append_array(ClassDB.get_inheriters_from_class(_resource_type))
var gsc : Array = ProjectSettings.get("_global_script_classes")
var l : int = arr.size() - 1
while (arr.size() != l):
l = arr.size()
for i in range(gsc.size()):
var d : Dictionary = gsc[i] as Dictionary
var found = false
for j in range(arr.size()):
if arr[j] == d["class"]:
found = true
break
if found:
continue
for j in range(arr.size()):
if arr[j] == d["base"]:
arr.append(d["class"])
for a in arr:
_option_button.add_item(a)
func _on_OK_pressed():
emit_signal("ok_pressed", _line_edit.text, _option_button.get_item_text(_option_button.selected))
hide()