Files
kicking-high/proto3/godot/ai/blackboard.gd
2020-04-13 12:45:25 +03:00

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]