Skip to content

Release 0.6.0#35

Merged
MBurchard merged 10 commits intomainfrom
fix/dual-routing
Apr 4, 2026
Merged

Release 0.6.0#35
MBurchard merged 10 commits intomainfrom
fix/dual-routing

Conversation

@MBurchard
Copy link
Copy Markdown
Owner

@MBurchard MBurchard commented Apr 4, 2026

Summary

  • Configurable keyboard shortcuts with game-binding conflict detection (InputActionAsset.ToJson parsing, LoadBindings deferred to main thread)
  • Debounced chat auto-open using ChatService.HandleMessageReceived (500ms debounce + 3s fallback)
  • ESC collect support for MissionsNotificationPopoutWidget
  • Symmetric AboutToShow/AboutToHide lifecycle for reward screen tracking (replaces Awake/OnDestroy)
  • Fix dual-key routing for PlayerPrefs (options/, mission/, keybindings etc. routed to [player])
  • Time-based log dedup (60s interval replaces session-based HashSet)
  • Remove legacy STFC Community Mod (stfc-mod/ directory + upstream remote)
  • Dependency updates (Rust + Node)

Test plan

  • Configurable shortcuts: change keys in UI, verify conflict detection against game bindings
  • Chat auto-open: sidebar opens with current messages after login, not stale history
  • ESC collect: works on all reward screens and mission notification popout
  • Reward screens: ESC collect remains reliable after extended play sessions
  • Multi-account: profile switching, PlayerPrefs isolation, keybindings per account
  • Build: macOS universal + Windows NSIS build succeeds without stfc-mod references

MBurchard added 10 commits April 1, 2026 23:19
- Add KeyRoute::Player for keys queried with and without uid prefix (options/*, mission/*,
  QualityManager/*, Scopely.Analytics.*, Scopely.Attribution.*, selected_language)
- Replace session-based log dedup (HashSet, once per session) with time-based dedup
  (HashMap<String, Instant>, once per 60 seconds)
- Add put_player_float helper for consistency with put_player_int and put_player_string
- Add tests for player routing, dual-key convergence and phase 1 routability
- Track widget instance via Awake hook (persists for the session)
- Resolve OnCollectButtonClicked at startup for ESC triggering
- Refactor collect_reward_screen() with check_active closure
- Widget-based collect screens checked after reward VC slots (0-3)
- Replace ChatPreviewController.OnEnable hook with AboutToShow
- AboutToShow fires after RegisterActiveChannels and SubscribeToEvents, ensuring channel
  subscriptions are active before the sidebar opens
- UIFrameManager.OnEnable hook remains unchanged
- Add shortcuts section to settings (backend, mod, Vue UI with key capture)
- Parse default game bindings from InputActionAsset.ToJson() at runtime
- Detect and resolve conflicts with game keybindings automatically
- Defer LoadBindings() to main thread to avoid IL2CPP thread crash
- Support queue attack: engage button check + queue button interactable check
- Rename spacebar.rs to main_action.rs, remove InitializeActions suppression
- Route "keybindings" PlayerPrefs key to [player] section
- cargo update for rust-mod (20 packages): tokio 1.50→1.51, toml 1.0→1.1, libc 0.2.183→0.2.184,
  zerocopy 0.8.47→0.8.48 and others
- cargo update for backend (58 packages): hyper 1.8→1.9, icu_* 2.1→2.2, tao 0.34.6→0.34.8,
  tokio 1.50→1.51, toml 1.0→1.1 and others
- pnpm update: vue 3.5.31→3.5.32, eslint 10.1→10.2, @types/node 24.12.0→24.12.2,
  @mburchard/bit-log 1.2.2→1.2.3
- Hook AboutToShow to track and AboutToHide to clear reward screen instances, using the UI
  visibility lifecycle instead of object lifecycle (Awake/OnDestroy)
- Prevents stale pointers: instances are only held while the screen is visible
- Three hook pairs cover all subclasses: AnimatedRewardsScreenViewController (slot 0),
  GenericRewardsScreenViewController (slots 1 + 3), FirstTimeSpenderScreenViewController (slot 2)
- Remove OnDestroy hooks entirely, no GC/lifetime assumptions needed
- Extract shared track/untrack_reward_instance() for class-based slot dispatch
- Collapse nested if in chat_frame.rs (Clippy lint)
- Remove stfc-mod/ directory (legacy C++ mod kept as reference, no longer needed)
- Remove C++ build path from build.ts (buildCppMod, ModVariant, xmake config)
- Simplify PlatformConfig to Rust-only fields (outputLibrary, rustLibrary)
- Update keyboard shortcuts feature description to reflect configurable shortcuts with game-binding
  conflict detection
@MBurchard MBurchard self-assigned this Apr 4, 2026
@MBurchard MBurchard merged commit 53ed503 into main Apr 4, 2026
1 check passed
@MBurchard MBurchard deleted the fix/dual-routing branch April 4, 2026 12:13
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.

1 participant