Created
March 8, 2021 17:34
-
-
Save geekrelief/159e05dcb578dda525a5c683e14f773e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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