Skip to content

Instantly share code, notes, and snippets.

@geekrelief
Created March 8, 2021 17:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save geekrelief/159e05dcb578dda525a5c683e14f773e to your computer and use it in GitHub Desktop.
Save geekrelief/159e05dcb578dda525a5c683e14f773e to your computer and use it in GitHub Desktop.
extends Node
var data:Dictionary #key: name:String, val:[Node, property:NodePath]
var handlers:Dictionary # key: name:String, val:[Node, meth name:String]
func dump():
print("Data:")
for key in data:
print(String(path(key)) + ":" + String(property(key)))
print("\nHandlers:")
for key in handlers:
for handler in handlers[key]:
var hPath = String(handler[0].get_path())
var hMeth = handler[1]
print(hPath + "." + hMeth)
func src(name:String, path:NodePath, property:NodePath):
data[name] = [get_node(path), property]
func unsrc(name:String):
data.erase(name)
if handlers.has(name):
handlers[name].clear()
func path(name:String) -> NodePath:
return data[name][0].get_path()
func property(name:String) -> NodePath:
return data[name][1]
func val(name:String):
var source = data[name]
if source != null:
return source[0].get_indexed(source[1])
return null
func put(name:String, val):
var source = data[name]
if source != null:
source[0].set_indexed(source[1], val)
if handlers.has(name):
for handler in handlers[name]:
handler[0].call(handler[1])
func bind(name:String, path:NodePath, handler:String):
if !data.has(name):
printerr("Trying to bind to non-existent data source: " + name + " with: " + String(path) + "." + handler)
if !handlers.has(name):
handlers[name] = []
handlers[name].append([get_node(path), handler])
func unbind(name:String, path:NodePath, handler:String):
if !handlers.has(name):
return
var index = 0
var node = get_node(path)
for entry in handlers[name]:
if entry[0] == node and entry[1] == handler:
break
index += 1
handlers[name].remove(index)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment