52 lines
1.3 KiB
GDScript
52 lines
1.3 KiB
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 raider := EnemyDefinition.new()
|
|
raider.enemy_id = &"enemy_raider"
|
|
raider.display_name = "Raider"
|
|
raider.kind = SimulationIds.COMBATANT_KIND_RAIDER
|
|
raider.weapon_id = SimulationIds.ITEM_SWORD
|
|
raider.health = 60.0
|
|
raider.move_speed = 3.5
|
|
raider.body_color = Color(0.4, 0.13, 0.1, 1.0)
|
|
raider.accent_color = Color(0.55, 0.55, 0.58, 1.0)
|
|
_enemies[raider.enemy_id] = raider
|
|
|
|
var wolf := EnemyDefinition.new()
|
|
wolf.enemy_id = &"enemy_wolf"
|
|
wolf.display_name = "Wolf"
|
|
wolf.kind = SimulationIds.COMBATANT_KIND_WOLF
|
|
wolf.weapon_id = SimulationIds.ITEM_CLAW
|
|
wolf.health = 40.0
|
|
wolf.move_speed = 4.2
|
|
wolf.body_color = Color(0.32, 0.32, 0.34, 1.0)
|
|
wolf.accent_color = Color(0.95, 0.5, 0.12, 1.0)
|
|
wolf.visual_scale = Vector3(0.8, 0.8, 0.8)
|
|
_enemies[wolf.enemy_id] = wolf
|
|
_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)
|
|
return values
|