refactor: route core definitions through content catalog

This commit is contained in:
Rijad Zuzo
2026-08-12 20:13:50 +02:00
parent 758d240438
commit c218909649
6 changed files with 50 additions and 55 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
class_name ItemDefinition class_name ItemDefinition
extends Resource extends Resource
const CATEGORY_RESOURCE := &"resource" const CATEGORY_RESOURCE := SimulationIds.ITEM_CATEGORY_RESOURCE
const CATEGORY_WEAPON := SimulationIds.ITEM_CATEGORY_WEAPON const CATEGORY_WEAPON := SimulationIds.ITEM_CATEGORY_WEAPON
const VALID_CATEGORIES := [CATEGORY_RESOURCE, CATEGORY_WEAPON] const VALID_CATEGORIES := [CATEGORY_RESOURCE, CATEGORY_WEAPON]
+15 -14
View File
@@ -30,6 +30,7 @@ static var _profession_list: Array[ProfessionDefinition] = []
static var _action_map: Dictionary = {} static var _action_map: Dictionary = {}
static var _profession_map: Dictionary = {} static var _profession_map: Dictionary = {}
static var _profession_id_list: Array[StringName] = [] static var _profession_id_list: Array[StringName] = []
static var _catalog_errors: Array[String] = []
static var _cache_valid := false static var _cache_valid := false
@@ -41,19 +42,19 @@ static func _ensure_cache() -> void:
_action_map = {} _action_map = {}
_profession_map = {} _profession_map = {}
_profession_id_list = [] _profession_id_list = []
_catalog_errors = []
for path in ACTION_PATHS: var catalog := ContentCatalog.create_core()
var definition := load(path) as ActionDefinition if not catalog.is_valid():
if definition != null: _catalog_errors = catalog.get_errors()
_action_list.append(definition) _cache_valid = true
_action_map[definition.action_id] = definition return
_action_list = catalog.get_actions()
for path in PROFESSION_PATHS: _profession_list = catalog.get_professions()
var definition := load(path) as ProfessionDefinition for definition in _action_list:
if definition != null: _action_map[definition.action_id] = definition
_profession_list.append(definition) for definition in _profession_list:
_profession_map[definition.profession_id] = definition _profession_map[definition.profession_id] = definition
_profession_id_list.append(definition.profession_id) _profession_id_list.append(definition.profession_id)
_cache_valid = true _cache_valid = true
@@ -89,7 +90,7 @@ static func get_profession_ids() -> Array[StringName]:
static func validate() -> Array[String]: static func validate() -> Array[String]:
_ensure_cache() _ensure_cache()
var errors: Array[String] = [] var errors: Array[String] = _catalog_errors.duplicate()
if _action_list.size() != ACTION_PATHS.size(): if _action_list.size() != ACTION_PATHS.size():
errors.append("One or more ActionDefinition resources failed to load") errors.append("One or more ActionDefinition resources failed to load")
if _profession_list.size() != PROFESSION_PATHS.size(): if _profession_list.size() != PROFESSION_PATHS.size():
+8 -22
View File
@@ -9,28 +9,10 @@ static func _ensure_cache() -> void:
if _cache_valid: if _cache_valid:
return return
_enemies = {} _enemies = {}
var raider := EnemyDefinition.new() var catalog := ContentCatalog.create_core()
raider.enemy_id = &"enemy_raider" if catalog.is_valid():
raider.display_name = "Raider" for enemy in catalog.get_enemies():
raider.kind = SimulationIds.COMBATANT_KIND_RAIDER _enemies[enemy.enemy_id] = enemy
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 _cache_valid = true
@@ -48,4 +30,8 @@ static func get_all() -> Array[EnemyDefinition]:
var values: Array[EnemyDefinition] = [] var values: Array[EnemyDefinition] = []
for enemy in _enemies.values(): for enemy in _enemies.values():
values.append(enemy) values.append(enemy)
values.sort_custom(
func(first: EnemyDefinition, second: EnemyDefinition) -> bool:
return String(first.enemy_id) < String(second.enemy_id)
)
return values return values
+12
View File
@@ -4,6 +4,17 @@ extends RefCounted
const PLAYER_ACTOR_ID := -1 const PLAYER_ACTOR_ID := -1
const PLAYER_INVENTORY_ID := &"player_inventory" const PLAYER_INVENTORY_ID := &"player_inventory"
const WORLD_CORE := &"world_core"
const LOCATION_JAJCE := &"settlement_jajce"
const ENTITY_PERSON := &"person"
const ENTITY_PLAYER := &"player"
const ENTITY_WORLD_TARGET := &"world_target"
const ENTITY_LOCATION := &"location"
const ENTITY_SETTLEMENT := &"settlement"
const ENTITY_MOBILE_GROUP := &"mobile_group"
const ENTITY_POLITY := &"polity"
const ACTION_IDLE := &"idle" const ACTION_IDLE := &"idle"
const ACTION_DEAD := &"dead" const ACTION_DEAD := &"dead"
const ACTION_SLEEP := &"sleep" const ACTION_SLEEP := &"sleep"
@@ -74,6 +85,7 @@ const KNOWLEDGE_ACQUISITION_LEGACY := &"legacy"
const ITEM_SWORD := &"item_sword" const ITEM_SWORD := &"item_sword"
const ITEM_CLAW := &"item_claw" const ITEM_CLAW := &"item_claw"
const ITEM_CATEGORY_RESOURCE := &"resource"
const ITEM_CATEGORY_WEAPON := &"weapon" const ITEM_CATEGORY_WEAPON := &"weapon"
const EQUIP_SLOT_HAND := &"hand" const EQUIP_SLOT_HAND := &"hand"
+8 -16
View File
@@ -9,25 +9,13 @@ static func _ensure_cache() -> void:
if _cache_valid: if _cache_valid:
return return
_items = {} _items = {}
_add_weapon(SimulationIds.ITEM_SWORD, "Sword", 24.0, 2.4, 0.55) var catalog := ContentCatalog.create_core()
_add_weapon(SimulationIds.ITEM_CLAW, "Claw", 10.0, 1.2, 0.4) if catalog.is_valid():
for item in catalog.get_items():
_items[item.item_id] = item
_cache_valid = true _cache_valid = true
static func _add_weapon(
item_id: StringName, display_name: String, damage: float, reach: float, cooldown: float
) -> void:
var item := ItemDefinition.new()
item.item_id = item_id
item.display_name = display_name
item.category = SimulationIds.ITEM_CATEGORY_WEAPON
item.equip_slot = SimulationIds.EQUIP_SLOT_HAND
item.damage = damage
item.reach = reach
item.attack_cooldown = cooldown
_items[item_id] = item
static func invalidate_cache() -> void: static func invalidate_cache() -> void:
_cache_valid = false _cache_valid = false
@@ -42,6 +30,10 @@ static func get_items() -> Array[ItemDefinition]:
var values: Array[ItemDefinition] = [] var values: Array[ItemDefinition] = []
for item in _items.values(): for item in _items.values():
values.append(item) values.append(item)
values.sort_custom(
func(first: ItemDefinition, second: ItemDefinition) -> bool:
return String(first.item_id) < String(second.item_id)
)
return values return values
+6 -2
View File
@@ -3,6 +3,7 @@ extends RefCounted
const SCHEMA_VERSION := 1 const SCHEMA_VERSION := 1
const ENTITY_TYPE_NPC := &"npc" const ENTITY_TYPE_NPC := &"npc"
const ENTITY_TYPE_PLAYER := &"player"
const ENTITY_TYPE_WORLD := &"world_entity" const ENTITY_TYPE_WORLD := &"world_entity"
const ROLE_ACTOR := &"actor" const ROLE_ACTOR := &"actor"
const ROLE_SOURCE := &"source" const ROLE_SOURCE := &"source"
@@ -102,9 +103,12 @@ static func from_economic_event(
if economic_event == null: if economic_event == null:
return null return null
var economic_data := economic_event.to_dictionary() var economic_data := economic_event.to_dictionary()
var actor_id := int(economic_data["actor_id"])
var actor_type := (
ENTITY_TYPE_PLAYER if actor_id == SimulationIds.PLAYER_ACTOR_ID else ENTITY_TYPE_NPC
)
var participants: Dictionary = { var participants: Dictionary = {
ROLE_ACTOR: ROLE_ACTOR: WorldEntityRef.create(actor_type, StringName(str(actor_id)))
WorldEntityRef.create(ENTITY_TYPE_NPC, StringName(str(int(economic_data["actor_id"]))))
} }
var source_id := StringName(economic_data["source_id"]) var source_id := StringName(economic_data["source_id"])
if not source_id.is_empty(): if not source_id.is_empty():