48 lines
1.3 KiB
GDScript
48 lines
1.3 KiB
GDScript
extends Node
|
|
|
|
## Auto-discovers and registers all buff resources from res://docs/gyms/buffs/
|
|
|
|
const BUFF_DIRECTORY_PATH: String = "res://docs/gyms/buffs"
|
|
|
|
var _buff_by_id: Dictionary = {}
|
|
var _initialized: bool = false
|
|
|
|
func _ready() -> void:
|
|
_initialize_buff_catalog()
|
|
|
|
func _initialize_buff_catalog() -> void:
|
|
if _initialized:
|
|
return
|
|
|
|
_buff_by_id.clear()
|
|
var dir: DirAccess = DirAccess.open(BUFF_DIRECTORY_PATH)
|
|
if dir == null:
|
|
push_warning("Unable to open buff directory: %s" % BUFF_DIRECTORY_PATH)
|
|
_initialized = true
|
|
return
|
|
|
|
dir.list_dir_begin()
|
|
var entry_name: String = dir.get_next()
|
|
while not entry_name.is_empty():
|
|
if not dir.current_is_dir() and entry_name.ends_with(".tres"):
|
|
var path: String = "%s/%s" % [BUFF_DIRECTORY_PATH, entry_name]
|
|
var buff: GeneratorBuffData = load(path) as GeneratorBuffData
|
|
if buff != null:
|
|
_buff_by_id[buff.id] = buff
|
|
GameState.register_buff(buff)
|
|
entry_name = dir.get_next()
|
|
dir.list_dir_end()
|
|
|
|
_initialized = true
|
|
print("BuffDatabase initialized with %d buffs" % _buff_by_id.size())
|
|
|
|
func get_all_buffs() -> Array[GeneratorBuffData]:
|
|
var result: Array[GeneratorBuffData] = []
|
|
for buff in _buff_by_id.values():
|
|
if buff is GeneratorBuffData:
|
|
result.append(buff)
|
|
return result
|
|
|
|
func get_buff(buff_id: StringName) -> GeneratorBuffData:
|
|
return _buff_by_id.get(buff_id, null)
|