diff --git a/.voidbot/state/aetheria.cc b/.voidbot/state/aetheria.cc index f39ef4129..aa6d96011 100644 Binary files a/.voidbot/state/aetheria.cc and b/.voidbot/state/aetheria.cc differ diff --git a/Aetheria.State/README.md b/Aetheria.State/README.md index 0d5188895..c8e3c6e22 100644 --- a/Aetheria.State/README.md +++ b/Aetheria.State/README.md @@ -26,9 +26,10 @@ The Unity client no longer writes `PlayerSettings.msgpack`, `.loadout`, or replacement for bespoke loadout files, with structured hull/equipment/cargo/ docking item slots, nested child-entity loadouts, and weapon groups. `RuntimePlayerSettings` is the Unity session projection for menus, formatting, -and input binding edits; it queues typed `.cc.pending` player-settings commits -and is not portable state authority. Unity settings, loadout saves, and run -checkpoints now queue typed `.cc.pending` runtime commit envelopes beside +and input binding edits; menu and input-screen changes queue typed +`.cc.pending` player-settings commits and are not portable state authority. +Unity settings, loadout templates, and run checkpoints now queue typed +`.cc.pending` runtime commit envelopes beside `GameData/aetheria-world.cc`. `Aetheria.State` owns applying those envelopes into canonical typed state through `AetheriaRuntimeCommitLogApplier`; the Unity-side command log is command-only and cannot become durable truth by diff --git a/Assets/Scripts/Gameplay/ActionGameManager.cs b/Assets/Scripts/Gameplay/ActionGameManager.cs index 29e0da5fd..0073cdc8f 100644 --- a/Assets/Scripts/Gameplay/ActionGameManager.cs +++ b/Assets/Scripts/Gameplay/ActionGameManager.cs @@ -416,7 +416,7 @@ public class ActionGameManager : MonoBehaviour return CurrentGalaxy?.Factions == null || faction == null ? -1 : Array.IndexOf(CurrentGalaxy.Factions, faction); } - public void SaveLoadout(RuntimeEntityBlueprint blueprint) + public void QueueRuntimeLoadoutTemplateCommit(RuntimeEntityBlueprint blueprint) { LoadoutBlueprints.RemoveAll(loadout => loadout.Name == blueprint.Name); LoadoutBlueprints.Add(blueprint); diff --git a/Assets/Scripts/UI/InputScreen/InputDisplayLayout.cs b/Assets/Scripts/UI/InputScreen/InputDisplayLayout.cs index cccaceb90..8e7f69faa 100644 --- a/Assets/Scripts/UI/InputScreen/InputDisplayLayout.cs +++ b/Assets/Scripts/UI/InputScreen/InputDisplayLayout.cs @@ -494,12 +494,12 @@ public class InputDisplayLayout : MonoBehaviour } keyPress.Disable(); - SaveLayout(); + QueueRuntimeInputSettingsCommit(); } - private void SaveLayout() + private void QueueRuntimeInputSettingsCommit() { - Debug.LogWarning("Keyboard layout persistence belongs to the Verse state spine. Layout edits are runtime-only until Aetheria.State is available as a Unity runtime package."); + ActionGameManager.QueueRuntimePlayerSettingsCommit(); } private void OnEnable() @@ -558,6 +558,7 @@ public class InputDisplayLayout : MonoBehaviour { ActionGameManager.RuntimePlayerSettings.InputSettings.ActionBarInputs.Remove(buttonMapping.Button.InputSystemPath); } + QueueRuntimeInputSettingsCommit(); AssignColor(buttonMapping); }); diff --git a/Assets/Scripts/UI/Menu/InventoryPanel.cs b/Assets/Scripts/UI/Menu/InventoryPanel.cs index e94d2e03b..a974eca10 100644 --- a/Assets/Scripts/UI/Menu/InventoryPanel.cs +++ b/Assets/Scripts/UI/Menu/InventoryPanel.cs @@ -170,7 +170,7 @@ public class InventoryPanel : MonoBehaviour, IPointerClickHandler ContextMenu.AddOption("Save Loadout", () => { - GameManager.SaveLoadout(EntitySerializer.CaptureBlueprint(_displayedEntity)); + GameManager.QueueRuntimeLoadoutTemplateCommit(EntitySerializer.CaptureBlueprint(_displayedEntity)); }); if (GameManager.LoadoutBlueprints.Any()) diff --git a/docs/aetheria-perfect-machine-map.md b/docs/aetheria-perfect-machine-map.md index 0cfa20b5d..ba56201f6 100644 --- a/docs/aetheria-perfect-machine-map.md +++ b/docs/aetheria-perfect-machine-map.md @@ -69,7 +69,8 @@ legacy catalog cache, and legacy UI paths should be migration-only or deleted. name, tutorial flag, story-file hash cursors, gameplay formatting, graphics preferences, input binding overrides, and action-bar inputs. Unity's menu and input screens mutate `RuntimePlayerSettings` in memory and queue typed Verse - commits; the in-memory projection is not portable state authority. + commits through the shared player-settings commit primitive; the in-memory + projection is not portable state authority. - `Aetheria.State` now exposes typed node put/get ports for run state, zone state, and entity snapshots. The state smoke writes a run referencing a zone, a zone referencing an entity snapshot, and an entity snapshot carrying @@ -640,6 +641,9 @@ First Aetheria surfaces to publish: `RuntimePlayerSettings`; `AetheriaPlayerSettings` remains the typed Verse state document owner, while Unity only keeps a session projection and queues typed player-settings commits. + - Done: route input-screen binding/action-bar edits through the typed + player-settings commit primitive now that the Unity state package is live; + the stale runtime-only keyboard layout warning is gone. - Remaining: delete or quarantine old cache abstractions that no longer protect an invariant once catalog migration has a typed reader. @@ -688,6 +692,9 @@ First Aetheria surfaces to publish: `EntitySerializer.Unpack` hits. - Unity runtime settings projection is now `RuntimePlayerSettings`; live Unity source has no standalone `PlayerSettings` class/property/method symbols. +- Input binding and action-bar edits now queue the same typed player-settings + commit path as menu settings changes; the old `SaveLayout` runtime-only + warning is gone. - `Aetheria.State.Smoke` proves the provider-owned Eve command bridge drains `gamecult.eve.command.v1` envelopes, accepts advertised refresh commands, rejects unknown commands, persists `AetheriaEveCommandDrainStatus`, and exposes