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.
51 lines
1.3 KiB
51 lines
1.3 KiB
extends Reference
|
|
tool
|
|
# We don't seem to need tool here yet but I'm keeping this comment JIC
|
|
|
|
var nodes: Dictionary = {}
|
|
var _created: bool = false
|
|
var cache: Array = []
|
|
|
|
func _init(nodes: Dictionary = {}) -> void:
|
|
self.nodes = nodes
|
|
|
|
func get_node(path: String) -> Node:
|
|
return nodes[path]
|
|
|
|
func double() -> Node:
|
|
if _created:
|
|
push_error("WAT: You can only create one instance of a double"
|
|
+ "Create a new doubler Object for new Test Doubles")
|
|
return nodes["."]
|
|
_created = true
|
|
var root: Node = nodes["."].double()
|
|
for nodepath in nodes:
|
|
var path: PoolStringArray = nodepath.split("/")
|
|
if nodepath == ".":
|
|
# Skip if root node since already defined
|
|
continue
|
|
elif path.size() == 1:
|
|
_add_child(path, nodepath, root)
|
|
elif path.size() > 1:
|
|
_add_grandchild(path, nodepath, root)
|
|
return root
|
|
|
|
func _add_child(path: PoolStringArray, nodepath: String, root: Node) -> void:
|
|
var node: Node = nodes[nodepath].double()
|
|
node.name = path[0]
|
|
root.add_child(node)
|
|
|
|
func _add_grandchild(path: PoolStringArray, nodepath: String, root: Node) -> void:
|
|
var node: Node = nodes[nodepath].double()
|
|
var p = Array(path)
|
|
node.name = p.pop_back()
|
|
var parent = ""
|
|
for element in p:
|
|
parent += "%s/" % element
|
|
parent = parent.rstrip("/")
|
|
var grandparent = root.get_node(parent)
|
|
grandparent.add_child(node)
|
|
|
|
func clear() -> void:
|
|
nodes = {}
|