Skip to content

Conversation

@CoderGamester
Copy link
Owner

New:

  • Added IUiAnalytics interface and UiAnalytics implementation for performance tracking
  • Added three editor windows: UiAnalyticsWindow, UiServiceHierarchyWindow
  • Added new "UI Layer Hierarchy Visualizer" section to the UiConfigsEditor inspector
  • Added UiPresenterSceneGizmos for visual debugging in Scene view
  • Added UiPresenterEditor custom inspector with quick open/close buttons
  • Added multi-instance support for UI presenters via UiInstanceId struct and instance addresses
  • Added UiInstance struct to encapsulate presenter metadata (type, address, presenter reference)
  • Added feature-based presenter composition architecture with IPresenterFeature interface
  • Added PresenterFeatureBase base class for composable presenter features
  • Added AnimationDelayFeature and TimeDelayFeature components for delayed UI operations
  • Added UiToolkitPresenterFeature for UI Toolkit integration
  • Added DefaultUiConfigsEditor for out-of-the-box UI configuration (no custom implementation required)

Changed:

  • Replaced Task.Delay with UniTask.Delay throughout for better performance and WebGL compatibility
  • Updated CloseAllUi to avoid modifying collection during iteration
  • Enhanced UiService.Dispose() with proper cleanup of all presenters, layers, and asset loader
  • LoadUiAsync, OpenUiAsync methods now accept optional CancellationToken parameter
  • Updated the README with a complete information of the project
  • Replaced LoadedPresenters property with GetLoadedPresenters() method for better encapsulation
  • Migrated all delay functionality from PresenterDelayerBase to feature-based system (AnimationDelayFeature, TimeDelayFeature)
  • Converted all editor scripts to use UI Toolkit for better performance and modern UI
  • Refactored UiConfigsEditor to use UI Toolkit with improved visuals and drag-and-drop support
  • Optimized collection types (Dictionary, List) for better performance in UiService
  • Removed loading spinner from UiService (simplified initialization)

Fixed:

  • CRITICAL: Fixed GetOrLoadUiAsync returning null when loading new UI (now properly assigns return value)
  • Fixed exception handling in UnloadUi with proper TryGetValue checks
  • Fixed exception handling in RemoveUiSet with proper TryGetValue checks
  • Fixed redundant operations in CloseAllUi logic
  • Fixed initial value handling for UI sets in editor
  • Fixed serialization updates before property binding in editor
  • Fixed script indentation issues in delay presenter implementations

Miguel Cartier added 18 commits October 9, 2025 10:49
- Fix delay timing bugs in PresenterDelayerBase (wrong delay, missing unit conversion)
- Fix unit conversion in AnimationDelayer (remove incorrect * 1000 multiplication)
- Fix null reference in UiService.GetOrLoadUiAsync
- Fix DelayUiPresenterData<T> inheritance (wrong base class)

All critical blocking bugs from the architecture evaluation are now resolved.
- Add null checks for AnimationDelayer clips
- Add exception handling in UnloadUi and RemoveUiSet methods
- Optimize ReadOnly properties to eliminate GC allocations
- Fix CloseAllUi to avoid modification during iteration
- Add CancellationToken support to async methods
- Replace Task.Delay with UniTask.Delay for proper Unity patterns

BREAKING CHANGE: IUiAssetLoader and IPresenterDelayer interfaces now use UniTask and CancellationToken
- Add Migration Guide, Performance Optimization, and Troubleshooting sections to README
- Implement IDisposable pattern in UiService for proper cleanup
- Add validation in Init() for configs, addressable addresses, and layer numbers

BREAKING CHANGE: IUiServiceInit now extends IDisposable
- Add IUiAnalytics interface with performance tracking (load/open/close durations, counts, lifetime)
- Add UiAnalytics implementation with custom callback support and UnityEvents
- Integrate analytics tracking throughout UiService lifecycle operations
- Add editor windows: Analytics, Layer Visualizer, Hierarchy, and UiPresenter inspector
- Add AssemblyInfo for internal API access to editor tools
- Update README with analytics documentation and editor tools guide
- Add GameUiConfigsEditor extending UiConfigsEditor<UiSetId>
- Enable custom inspector visualization for UiConfigs asset
- Provides type-safe UI configuration editor for game-specific UiSetId enum
- Update the README and CHANGELOF documentation
- Bumped the project version to 1.0.0
fix: fixed the scripts identation
…r composition architecture

docs(samples): add feature composition examples

- Core refactoring: Removed DelayUiPresenter, DelayUiToolkitPresenter, UiToolkitPresenter, and all Delayers classes. Added feature system (IPresenterFeature, PresenterFeatureBase, AnimationDelayFeature, TimeDelayFeature, UiToolkitPresenterFeature). Modified UiPresenter to support feature lifecycle hooks and simplified UiService.
- Samples: Added sample implementations demonstrating feature composition patterns (BasicUiFlow, DataPresenter, DelayedPresenter, UiToolkit, DelayedUiToolkit, Analytics).
- Configuration: Updated .gitignore to allow Samples~ folder.
…uration

- Introduced DefaultUiConfigsEditor extending UiConfigsEditor with DefaultUiSetId enum for default UI sets.
- Provides a ready-to-use editor implementation for UiConfigs, allowing users to easily customize their UI without additional setup.
fix(editor): ensure serialization updates before property binding
refactor(editor): rename UI set enum values for clarity
…data

refactor(ui-service): replace LoadedPresenters property with GetLoadedPresenters method
refactor(editor): auto-set instance address from addressable address
chore(ui-service): improve analytics window help text
@coderabbitai
Copy link

coderabbitai bot commented Nov 3, 2025

Important

Review skipped

Auto reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch develop

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@CoderGamester CoderGamester merged commit 7a173a9 into master Nov 3, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants