-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathVectorPlaygroundMenu.gd
94 lines (65 loc) · 2.4 KB
/
VectorPlaygroundMenu.gd
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
extends VBoxContainer
onready var global = get_node("/root/Global")
var identifiers = []
var target_space
# Add a vector when the add vector button is pressed
func add_vector():
var menu = get_node("AddConfig/Vector")
var x = menu.get_node("Coordinates/x").get_text()
var y = menu.get_node("Coordinates/y").get_text()
var name = menu.get_node("Name/LineEdit").get_text()
var vec = global.Variable.new()
vec.name = name
vec.code = "Vector2(" + x + ", " + y + ")"
vec.result = Vector2()
add_identifier(vec)
# Add an expression when the add expression button is pressed
func add_expression():
var menu = get_node("AddConfig/Expression")
var code = menu.get_node("Code").get_text()
var name = menu.get_node("Name/LineEdit").get_text()
var expr = global.Expression.new()
expr.name = name
expr.code = code
add_identifier(expr)
# Add an identifier
func add_identifier(identifier):
if identifiers.size() > 0:
get_node("IdentifierList").add_child(HSeparator.new())
identifiers.push_back(identifier)
var node = get_identifier_node(identifier)
get_node("IdentifierList").add_child(node)
node.connect("expression_entered", self, "evaluate")
evaluate()
# (re-)evaluates all expressions
func evaluate():
global.evaluate(identifiers)
handle_evaluation()
# Updates the evaluation result to all items in the menu
func handle_evaluation():
var list = get_node("IdentifierList")
var children = list.get_children()
for c in children:
if c.has_method("update_expression"):
c.update_expression()
# Get the node for a certain identifier
func get_identifier_node(identifier):
var node
if identifier extends global.Expression:
node = preload("res://Expression.tscn").instance()
node.identifier = identifier
#get_node("IdentifierList").add_child(node)
node.set_name_text(identifier.name)
node.set_code_text(identifier.code)
if identifier extends global.Variable and typeof(identifier.result) == typeof(Vector2()):
node = preload("res://Vector.tscn").instance()
node.identifier = identifier
node.get_node("NameContainer/Name").set_text(identifier.name)
add_vector_visualizer(node)
return node
# Add the visualizer for a vector
func add_vector_visualizer(node):
var visualizer = target_space.add_vector(node.identifier)
node.vector_visualization = visualizer
if node.has_method("vector_visualization_drag"):
visualizer.connect("target_change", node, "vector_visualization_drag")