155 lines
5.0 KiB
GDScript
155 lines
5.0 KiB
GDScript
class_name SimulationContentPack
|
|
extends Resource
|
|
|
|
@export var pack_id: StringName
|
|
@export var display_name: String
|
|
@export var required_pack_ids: Array[StringName] = []
|
|
@export var required_handler_ids: Array[StringName] = []
|
|
@export var actions: Array[ActionDefinition] = []
|
|
@export var professions: Array[ProfessionDefinition] = []
|
|
@export var capability_tags: Array[CapabilityTagDefinition] = []
|
|
@export var items: Array[ItemDefinition] = []
|
|
@export var resources: Array[ResourceDefinition] = []
|
|
@export var storages: Array[StorageDefinition] = []
|
|
@export var enemies: Array[EnemyDefinition] = []
|
|
@export var animals: Array[AnimalDefinition] = []
|
|
@export var situations: Array[SituationDefinition] = []
|
|
@export var dialogue_intents: Array[ConversationIntentDefinition] = []
|
|
@export var dialogue_template_catalogs: Array[ConversationTemplateCatalog] = []
|
|
|
|
|
|
func validate() -> Array[String]:
|
|
var errors: Array[String] = []
|
|
if pack_id.is_empty():
|
|
errors.append("pack_id is empty")
|
|
if display_name.is_empty():
|
|
errors.append("display_name is empty for pack '%s'" % pack_id)
|
|
_validate_dependency_ids(required_pack_ids, "required pack", errors)
|
|
_validate_dependency_ids(required_handler_ids, "required handler", errors)
|
|
if pack_id in required_pack_ids:
|
|
errors.append("pack '%s' cannot require itself" % pack_id)
|
|
_validate_actions(errors)
|
|
_validate_professions(errors)
|
|
_validate_capability_tags(errors)
|
|
_validate_items(errors)
|
|
_validate_resources(errors)
|
|
_validate_storages(errors)
|
|
_validate_enemies(errors)
|
|
_validate_animals(errors)
|
|
_validate_situations(errors)
|
|
_validate_dialogue_intents(errors)
|
|
_validate_dialogue_template_catalogs(errors)
|
|
return errors
|
|
|
|
|
|
func _validate_actions(errors: Array[String]) -> void:
|
|
for definition in actions:
|
|
if definition == null:
|
|
errors.append("actions contains a null definition")
|
|
continue
|
|
for error in definition.validate():
|
|
errors.append("ActionDefinition: " + error)
|
|
|
|
|
|
func _validate_professions(errors: Array[String]) -> void:
|
|
for definition in professions:
|
|
if definition == null:
|
|
errors.append("professions contains a null definition")
|
|
continue
|
|
for error in definition.validate():
|
|
errors.append("ProfessionDefinition: " + error)
|
|
|
|
|
|
func _validate_items(errors: Array[String]) -> void:
|
|
for definition in items:
|
|
if definition == null:
|
|
errors.append("items contains a null definition")
|
|
continue
|
|
for error in definition.validate():
|
|
errors.append("ItemDefinition: " + error)
|
|
|
|
|
|
func _validate_capability_tags(errors: Array[String]) -> void:
|
|
for definition in capability_tags:
|
|
if definition == null:
|
|
errors.append("capability_tags contains a null definition")
|
|
continue
|
|
for error in definition.validate():
|
|
errors.append("CapabilityTagDefinition: " + error)
|
|
|
|
|
|
func _validate_resources(errors: Array[String]) -> void:
|
|
for definition in resources:
|
|
if definition == null:
|
|
errors.append("resources contains a null definition")
|
|
continue
|
|
for error in definition.validate():
|
|
errors.append("ResourceDefinition: " + error)
|
|
|
|
|
|
func _validate_storages(errors: Array[String]) -> void:
|
|
for definition in storages:
|
|
if definition == null:
|
|
errors.append("storages contains a null definition")
|
|
continue
|
|
for error in definition.validate():
|
|
errors.append("StorageDefinition: " + error)
|
|
|
|
|
|
func _validate_enemies(errors: Array[String]) -> void:
|
|
for definition in enemies:
|
|
if definition == null:
|
|
errors.append("enemies contains a null definition")
|
|
continue
|
|
for error in definition.validate():
|
|
errors.append("EnemyDefinition: " + error)
|
|
|
|
|
|
func _validate_animals(errors: Array[String]) -> void:
|
|
for definition in animals:
|
|
if definition == null:
|
|
errors.append("animals contains a null definition")
|
|
continue
|
|
for error in definition.validate():
|
|
errors.append("AnimalDefinition: " + error)
|
|
|
|
|
|
func _validate_situations(errors: Array[String]) -> void:
|
|
for definition in situations:
|
|
if definition == null:
|
|
errors.append("situations contains a null definition")
|
|
continue
|
|
for error in definition.validate():
|
|
errors.append("SituationDefinition: " + error)
|
|
|
|
|
|
func _validate_dialogue_intents(errors: Array[String]) -> void:
|
|
for definition in dialogue_intents:
|
|
if definition == null:
|
|
errors.append("dialogue_intents contains a null definition")
|
|
continue
|
|
for error in definition.validate():
|
|
errors.append("ConversationIntentDefinition: " + error)
|
|
|
|
|
|
func _validate_dialogue_template_catalogs(errors: Array[String]) -> void:
|
|
for catalog in dialogue_template_catalogs:
|
|
if catalog == null:
|
|
errors.append("dialogue_template_catalogs contains a null catalog")
|
|
elif catalog.catalog_id.is_empty():
|
|
errors.append("ConversationTemplateCatalog: catalog_id is empty")
|
|
|
|
|
|
static func _validate_dependency_ids(
|
|
ids: Array[StringName], label: String, errors: Array[String]
|
|
) -> void:
|
|
var seen := {}
|
|
for dependency_id in ids:
|
|
if dependency_id.is_empty():
|
|
errors.append("%s ID is empty" % label)
|
|
continue
|
|
if seen.has(dependency_id):
|
|
errors.append("duplicate %s '%s'" % [label, dependency_id])
|
|
continue
|
|
seen[dependency_id] = true
|