38 lines
889 B
GDScript
38 lines
889 B
GDScript
class_name SimulationEnemies
|
|
extends RefCounted
|
|
|
|
static var _enemies: Dictionary = {}
|
|
static var _cache_valid := false
|
|
|
|
|
|
static func _ensure_cache() -> void:
|
|
if _cache_valid:
|
|
return
|
|
_enemies = {}
|
|
var catalog := ContentCatalog.create_core()
|
|
if catalog.is_valid():
|
|
for enemy in catalog.get_enemies():
|
|
_enemies[enemy.enemy_id] = enemy
|
|
_cache_valid = true
|
|
|
|
|
|
static func invalidate_cache() -> void:
|
|
_cache_valid = false
|
|
|
|
|
|
static func get_enemy(enemy_id: StringName) -> EnemyDefinition:
|
|
_ensure_cache()
|
|
return _enemies.get(enemy_id) as EnemyDefinition
|
|
|
|
|
|
static func get_all() -> Array[EnemyDefinition]:
|
|
_ensure_cache()
|
|
var values: Array[EnemyDefinition] = []
|
|
for enemy in _enemies.values():
|
|
values.append(enemy)
|
|
values.sort_custom(
|
|
func(first: EnemyDefinition, second: EnemyDefinition) -> bool:
|
|
return String(first.enemy_id) < String(second.enemy_id)
|
|
)
|
|
return values
|