feat(progression): composition root and event republisher (slice 9)
ProgressionRoot autoload builds the JSON stores from
GlobalizePath("user://"), loads the Profile, reads the authored upgrade
tables into a SkillCatalogue, and owns the ProgressionService. Every
mutating operation is wrapped so draining and republishing cannot be
forgotten - the one risk of the DrainEvents design, now confined to one
file.
ProgressionEventRepublisher turns domain records into EventBus signals
(ADR-0004), so existing subscribers and scene wiring keep working. New
RunEnded signal: GameOverScreen reads Lives directly today, which is the
last-life soft-lock.
Registered after SkillManager, since the skill catalogue is built from
AvailableSkills. GameStateStore stays until slice 10 moves the callers.
Transitional: LevelStarted is republished with a catalogue index because
GhostManager names files ghost_level_{index}.json.
This commit is contained in:
9
objects/progression_root.tscn
Normal file
9
objects/progression_root.tscn
Normal file
@@ -0,0 +1,9 @@
|
||||
[gd_scene load_steps=3 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://Autoloads/ProgressionRoot.cs" id="1_script"]
|
||||
[ext_resource type="Resource" path="res://resources/levels/level_catalogue.tres" id="2_catalogue"]
|
||||
|
||||
[node name="ProgressionRoot" type="Node"]
|
||||
script = ExtResource("1_script")
|
||||
Catalogue = ExtResource("2_catalogue")
|
||||
StartingLives = 3
|
||||
Reference in New Issue
Block a user