60 lines
1.2 KiB
GDScript
60 lines
1.2 KiB
GDScript
extends Node
|
|
class_name Blackboard
|
|
|
|
var _base_memory: Dictionary #stores global info
|
|
var _tree_memory: Dictionary #store tree and node info
|
|
|
|
|
|
func _enter_tree() -> void:
|
|
_base_memory = {}
|
|
_tree_memory = {}
|
|
|
|
|
|
func set(key, value, behavior_tree = null, node_scope = null) -> void:
|
|
|
|
var memory := _get_memory(behavior_tree, node_scope)
|
|
memory[key] = value
|
|
|
|
|
|
func get(key, behavior_tree = null, node_scope = null):
|
|
|
|
var memory := _get_memory(behavior_tree, node_scope)
|
|
|
|
if memory.has(key):
|
|
return memory[key]
|
|
|
|
return null
|
|
|
|
|
|
func _get_memory(behavior_tree, node_scope) -> Dictionary:
|
|
|
|
var memory := _base_memory
|
|
|
|
if behavior_tree:
|
|
memory = _get_tree_memory(behavior_tree)
|
|
|
|
if node_scope:
|
|
memory = _get_node_memory(memory, node_scope)
|
|
|
|
return memory
|
|
|
|
|
|
func _get_tree_memory(behavior_tree) -> Dictionary:
|
|
|
|
if not _tree_memory.has(behavior_tree):
|
|
_tree_memory[behavior_tree] = {
|
|
'nodeMemory':{},
|
|
'openNodes':[]
|
|
}
|
|
|
|
return _tree_memory[behavior_tree]
|
|
|
|
|
|
func _get_node_memory(tree_memory: Dictionary, node_scope) -> Dictionary:
|
|
|
|
var memory: Dictionary = tree_memory['nodeMemory']
|
|
|
|
if not memory.has(node_scope):
|
|
memory[node_scope] = {}
|
|
return memory[node_scope]
|