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.
114 lines
3.1 KiB
114 lines
3.1 KiB
tool |
|
extends HBoxContainer |
|
|
|
export (bool) var optional := false |
|
|
|
var default_definition_text = 'Select Definition' |
|
var default_condition_text = 'equal to' |
|
onready var Definition = $Values/Definition |
|
onready var Condition = $Values/Condition |
|
onready var Value = $Values/Value |
|
var options = [{ |
|
"text": "equal to", |
|
"condition": "==" |
|
},{ |
|
"text": "different from", |
|
"condition": "!=" |
|
},{ |
|
"text": "greater than", |
|
"condition": ">" |
|
},{ |
|
"text": "greater or equal to", |
|
"condition": ">=" |
|
},{ |
|
"text": "less than", |
|
"condition": "<" |
|
},{ |
|
"text": "less or equal to", |
|
"condition": "<=" |
|
} |
|
] |
|
|
|
|
|
func _ready(): |
|
Definition.get_popup().connect("index_pressed", self, '_on_definition_selected') |
|
Definition.connect("about_to_show", self, "_on_definition_about_to_show") |
|
|
|
Condition.get_popup().connect("index_pressed", self, '_on_condition_selected') |
|
Condition.connect("about_to_show", self, "_on_condition_about_to_show") |
|
|
|
Value.connect("text_changed", self, "_on_value_changed") |
|
|
|
$HasCondition.visible = false |
|
$Values.visible = true |
|
|
|
if optional: |
|
$HasCondition.visible = true |
|
$HasCondition/CheckBox.connect('toggled', self, '_on_toggle_visibility') |
|
$Values.visible = false |
|
|
|
|
|
func _on_toggle_visibility(checkbox_value): |
|
$Values.visible = checkbox_value |
|
if checkbox_value == false: |
|
Definition.text = default_definition_text |
|
Condition.text = default_condition_text |
|
Value.text = '' |
|
get_parent().event_data['definition'] = '' |
|
get_parent().event_data['condition'] = '' |
|
get_parent().event_data['value'] = '' |
|
|
|
|
|
# Definition picker ------------------------------------------------------------ |
|
func set_definition(definition): |
|
if definition != '': |
|
for d in DialogicResources.get_default_definitions()['variables']: |
|
if d['id'] == definition: |
|
Definition.text = d['name'] |
|
else: |
|
Definition.text = default_definition_text |
|
|
|
|
|
func _on_definition_selected(index): |
|
var definition = Definition.get_popup().get_item_metadata(index).get('id', '') |
|
set_definition(definition) |
|
# Set values on the parent |
|
get_parent().event_data['definition'] = definition |
|
|
|
|
|
func _on_definition_about_to_show(): |
|
Definition.get_popup().clear() |
|
var index = 0 |
|
for d in DialogicUtil.get_default_definitions_list(): |
|
if d['type'] == 0: |
|
Definition.get_popup().add_item(d['name']) |
|
Definition.get_popup().set_item_metadata(index, d) |
|
index += 1 |
|
|
|
|
|
# Condition picker ------------------------------------------------------------- |
|
func set_condition(condition): |
|
for o in options: |
|
if o['condition'] == condition: |
|
Condition.text = o['text'] |
|
|
|
|
|
func _on_condition_selected(index): |
|
var condition = Condition.get_popup().get_item_metadata(index).get('condition') |
|
set_condition(condition) |
|
# Set values on the parent |
|
get_parent().event_data['condition'] = condition |
|
|
|
|
|
func _on_condition_about_to_show(): |
|
Condition.get_popup().clear() |
|
var index = 0 |
|
for o in options: |
|
Condition.get_popup().add_item(o['text']) |
|
Condition.get_popup().set_item_metadata(index, o) |
|
index += 1 |
|
|
|
# Value ------------------------------------------------------------------------ |
|
func _on_value_changed(new_text): |
|
# Set values on the parent |
|
get_parent().event_data['value'] = new_text
|
|
|