Animation System: Core Engine POC#270
Merged
michaelbeale-IL merged 4 commits intomasterfrom Feb 24, 2026
Merged
Conversation
…tions, config model, strategies, tests, and DI registration Co-authored-by: michaelbeale-IL <63321611+michaelbeale-IL@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Implement new animation engine core as proof-of-concept
Animation System: Core Engine POC
Feb 24, 2026
Contributor
|
@copilot - The build is failing. I think you need to migrate code from the Experiments Animation POC project. |
…des to fix build failure Co-authored-by: michaelbeale-IL <63321611+michaelbeale-IL@users.noreply.github.com>
Contributor
Author
Fixed in ad22576. The root cause was that Added all 19 new files to the |
michaelbeale-IL
approved these changes
Feb 24, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Original prompt
This section details on the original issue you should resolve
<issue_title>Animation System: Core Engine POC</issue_title>
<issue_description># Animation System: Core Engine POC
Labels
phase-3,workstream-b,animation,new-architectureMilestone
Phase 3: Animation System Modernization
Summary
Implement the new animation engine core as a proof-of-concept, following the architecture defined in ANIMATION_SYSTEM_DESIGN.md §8. This creates the new composable, testable animation architecture alongside the existing
AnimationPlayer.cs(which remains untouched as a legacy adapter).The new engine introduces 7 interfaces, their implementations, a JSON configuration model, DI registration, and comprehensive unit tests.
Context
Why This Matters
The animation system is ACAT's heartbeat — it drives the scanning highlight that allows users with motor disabilities to interact with the application. The current system has significant pain points (documented in Issue intel/acat#206 analysis):
AnimationPlayer.csis 1,835 lines mixing timer, state machine, highlighting, and configurationSystem.Timers.Timerand WinForms controls can't be mockedAnimationSharpManagerV2.cs, 2,885 lines) duplicates ~1,400 lines of core logicDesign Decisions (ADR-001)
AnimationPlayer.csretained as legacy adapter (not rewritten)IAnimationManager,IPanelAnimationManager,IUserControlAnimationManagerCurrent Animation Files (16 files, 4,925 lines)
Located in
src/Libraries/ACATCore/AnimationManagement/:AnimationPlayer.csAnimationManager.csAnimation.csUserControlAnimationManager.csPanelAnimationManager.csAnimationsCollection.csAnimations.csVariables.csAnimationWidget.csImplementation Steps
Step 1: Timer Abstraction
Create
IScanTimer— an injectable timer that replaces directSystem.Timers.Timerusage (pain point P1).Files to create:
src/Libraries/ACATCore/AnimationManagement/Interfaces/IScanTimer.cssrc/Libraries/ACATCore/AnimationManagement/SystemScanTimer.cs— wrapsSystem.Timers.Timerfor productionsrc/Libraries/ACATCore/AnimationManagement/TestScanTimer.cs— manually-triggered timer for unit testsStep 2: JSON Configuration Data Model
Create the
AnimationConfigmodel per design spec §6, enabling JSON-first configuration alongside existing XML.Files to create:
src/Libraries/ACATCore/AnimationManagement/Configuration/AnimationConfig.csAnimationConfig→PanelName,ScanStrategy,List<AnimationSequenceConfig>AnimationSequenceConfig→Name,IsFirst,AutoStart,Iterations(string for@VarName),ScanTime,FirstPauseTime,OnEnter,OnEnd,List<AnimationWidgetConfig>AnimationWidgetConfig→Name(supports wildcards),PlayBeep,OnSelectedsrc/Libraries/ACATCore/AnimationManagement/Interfaces/IAnimationConfigProvider.cssrc/Libraries/ACATCore/AnimationManagement/Configuration/AnimationConfigProvider.cs— JSON loader implementationsrc/Libraries/ACATCore/AnimationManagement/Configuration/XmlAnimationConfigAdapter.cs— reads existing XML<Animation>elements intoAnimationConfigmodel (enables migration without changing 69 XML files)Step 3: Scan Mode Strategies
Implement
IScanModeStrategy— strategy pattern that cleanly separates auto-scan, manual-scan, and step-scan logic (pain point P6).Files to create:
src/Libraries/ACATCore/AnimationManagement/Interfaces/IScanModeStrategy.cs✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.