- Register InventoryModel, ShopModel as container-managed singletons
- Register GameController, ShopController, InventoryController via RegisterComponent
- Replace [SerializeField] with [Inject] for service dependencies in controllers
- Move maxActiveModifierSlots config to GameLifetimeScope (composition root)
- Remove manual model creation and Initialize() calls from GameController
- Add ToggleVisibility() to ShopController/InventoryController, removing GetComponentInChildren
- Move event subscriptions from Awake to Start for safe VContainer injection order
- Transfer game startup orchestration to GameController.Start()
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add abstract dice system (IDie interface, DieDefinitionSO, StandardDieSO, DieInstance)
to support future custom dice types while keeping backward compat via int[] DiceValues
- Replace YachtCategory enum and CategoryScorer switch with CategoryDefinitionSO hierarchy:
SumOfValueCategorySO, NOfAKindCategorySO, FullHouseCategorySO, StraightCategorySO, SumAllCategorySO
- Add CategoryCatalogSO for ordered category collections and DiceCheckUtility for shared logic
- Refactor ScoringSystem, Views, GameManager, GameController to use SO references
- Update CategoryCondition modifier to use SO reference instead of enum
- Update all editor tests to use SO-based categories and DieInstance
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implements the core game loop for Yacht dice: 5-dice rolling with
lock/unlock, 3 rolls per turn, 13 standard scoring categories, and
an extensible ScriptableObject-based modifier system that applies
additive then multiplicative bonuses (chips+mult pattern).
Includes two test modifiers: BonusForOnes (+10 per 1) and
MultiplierForSixes (x6 per 6).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>