Files
gamedev-the-steward/simulation/definitions/EnemyDefinition.gd
T
2026-08-12 20:34:55 +02:00

55 lines
1.8 KiB
GDScript

class_name EnemyDefinition
extends Resource
const BEHAVIOR_PROFILE_RAID_ASSAULT := &"raid_assault"
const BEHAVIOR_PROFILE_WOLF_HUNT := &"wolf_hunt"
const VALID_BEHAVIOR_PROFILE_IDS := [
BEHAVIOR_PROFILE_RAID_ASSAULT,
BEHAVIOR_PROFILE_WOLF_HUNT,
]
@export var enemy_id: StringName
@export var display_name: String
@export var kind: StringName = SimulationIds.COMBATANT_KIND_RAIDER
@export var behavior_profile_id: StringName = BEHAVIOR_PROFILE_RAID_ASSAULT
@export var combatant_id_prefix := "enemy"
@export var faction_id: StringName = SimulationIds.FACTION_TRIBE
@export var hostile := true
@export var weapon_id: StringName = SimulationIds.ITEM_SWORD
@export var health := 60.0
@export var move_speed := 3.5
@export var body_color := Color(0.4, 0.13, 0.1, 1.0)
@export var accent_color := Color(0.55, 0.55, 0.58, 1.0)
@export var visual_scale := Vector3.ONE
func validate() -> Array[String]:
var errors: Array[String] = []
if enemy_id.is_empty():
errors.append("enemy_id is empty")
if display_name.is_empty():
errors.append("display_name is empty for '%s'" % enemy_id)
if behavior_profile_id not in VALID_BEHAVIOR_PROFILE_IDS:
errors.append(
"behavior_profile_id '%s' is invalid for '%s'" % [behavior_profile_id, enemy_id]
)
if combatant_id_prefix.is_empty():
errors.append("combatant_id_prefix is empty for '%s'" % enemy_id)
elif not combatant_id_prefix.is_valid_identifier():
errors.append(
"combatant_id_prefix '%s' is invalid for '%s'" % [combatant_id_prefix, enemy_id]
)
if faction_id.is_empty():
errors.append("faction_id is empty for '%s'" % enemy_id)
if (
kind
not in [
SimulationIds.COMBATANT_KIND_RAIDER,
SimulationIds.COMBATANT_KIND_WOLF,
]
):
errors.append("kind '%s' is invalid for '%s'" % [kind, enemy_id])
if health <= 0.0:
errors.append("health must be positive for '%s'" % enemy_id)
return errors