- Fix recursion error in GalleryDialog by blocking signals during session filter updates
- Fix missing 'avatar_name' field in SetupWizard by registering the field properly
- Both dialogs should now work without errors
- Check evade type for 'target Evaded' or 'target Dodged'
- Count weapon cost on those events (you fired but missed)
- Armor decay still only counted on actual damage taken
- Fixes: weapon cost now accurate for all shots including misses
- Changed from 0.0005 to 0.00025 PED per damage (0.025 PEC)
- Based on user feedback: 504 damage should give ~0.14 PED decay
- Removed complex fallback logic, using simple accurate formula
- Formula: damage * 0.00025 = armor decay in PED
- log_info() needs log_output which is created in setup_ui()
- Move _load_settings() call to after UI initialization
- Fixes 'MainWindow' object has no attribute 'log_output' error
- Add QSettings import from PyQt6.QtCore
- Add _load_settings() method to load player name on startup
- Add _save_settings() method to save player name when settings change
- Settings stored in Lemontropia/Suite registry/file
- Player name now persists between app launches
- Use formula: Decay (PED) = damage * 0.0005 (approx 0.05 PEC per damage)
- This matches EU armor decay formula better than flat cost per hit
- 1966 damage would give ~0.98 PED decay (not 22 PED)
- Falls back to cost_per_hit if armor stats not available
- Save weapon_cost_total, armor_cost_total, healing_cost_total to decay_events
- This ensures core profit calculation matches HUD display
- Insert decay events before calling end_session
- Log the saved costs for verification
- Set hud.session_active = False when paused
- Set hud.session_active = True when resumed
- Update HUD status label to show paused state (orange)
- Prevents loot/costs from being tracked during breaks
- Remove separate update_kills() call from on_loot handler
- Let update_loot() handle kill counting internally
- Only increment kills when >2 second gap since last loot
- Add is_new_kill flag to track new mobs vs multi-item drops
- Add debug logging for kill counting
- Replace signal/slot approach with QTimer-based batched updates
- Add _refresh_pending flag and _request_refresh() method
- Refresh timer runs at 10Hz (100ms) on main thread
- Prevents race conditions and thread safety issues
- All update methods now just set the pending flag
- Remove dynamic color changes from _refresh_display
- Use fixed colors set during widget creation
- Just update text values in _refresh_display
- Prevents 'Could not parse stylesheet' errors
- Add refresh_needed signal to HUDOverlay
- Connect signal to _refresh_display with QueuedConnection
- Update all update methods to emit signal instead of calling _refresh_display directly
- This ensures all GUI operations (setStyleSheet, setText) happen on main thread
- Fixes crash caused by GUI operations from LogWatcher thread
- Initialize _session_costs and _session_display in __init__ (was causing crashes)
- Add [EVENT], [HUD], [DEBUG], [ERROR] prefix logging to all event handlers
- Add traceback logging for better debugging
- Add debug logging to all HUD update methods
- Log session_active state in HUD methods
- Add weapon cost tracking on damage_dealt using session_costs
- Add armor cost tracking on damage_taken using session_costs
- Fix on_loot to use update_kills() and update_loot() with proper params
- Fix on_heal to use update_healing_cost() and on_heal_event() with proper params
- All cost tracking now uses _session_costs from loadout selection
- Remove update_cost calls (method doesn't exist in new HUD)
- Remove update_stats with shots_add (not implemented)
- Add try/except to all event handlers to prevent crashes
- Simplify damage tracking to just update_damage methods
- Settings dialog now has Avatar Name field
- Store player_name in MainWindow
- Filter personal globals to only count if player name matches
- Warn user if no player name is configured
- Log other players' globals separately
- Fix float/Decimal type errors in damage event handlers
- Fix global counter counting other players' globals
- on_personal_global() only counts your globals, not on_global()
- on_global() now only logs but doesn't increment counter
- Add on_loot_event() and on_heal_event() handlers
- Convert damage values to Decimal in main_window callbacks
- Shrapnel is now integrated in the loot summary box (S: prefix)
- Remove show_shrapnel config option
- Remove shrapnel UI section from _setup_ui
- Remove shrapnel checkbox from settings dialog
- Update window size calculation
- Keep shrapnel data in HUDStats for internal tracking
- Add horizontal line separator after header
- Add styled boxes with borders for: gear, P/L, cost metrics, cost breakdown, combat, damage
- Add separators between major sections
- Footer separator before time/drag hint
- Each section has distinct background color and border
- Use time-based grouping: loot within 2 seconds = same kill
- Sum all items from a kill to calculate total loot value
- Update highest_loot when a kill is complete (gap > 2 sec)
- Initialize kill tracking fields on session start
- Check final kill on session stop
- Add highest_loot field to HUDStats
- Display 🏆 Best: X.XX in loot summary section
- Track highest loot value in update_loot()
- Add to to_dict for persistence
- Gold color with trophy emoji for visibility
- Add loot_other field to HUDStats for non-shrapnel loot
- Loot summary now shows: Total | 💎 Shrapnel | 📦 Regular
- Each type with distinct color coding
- update_loot() now accepts is_shrapnel parameter
- Remove duplicate shrapnel UI section (now integrated in summary)
- Update window height for two-row summary
- Add logging import and logger instance
- Add _safe_set_text() helper to handle deleted widgets gracefully
- Use safe access in _refresh_display to prevent RuntimeError on rebuild
- Wrap stylesheet updates in try/except for safety
- Change total cost display to show both Cost (red) and Loot (green) side by side
- Styled with background highlight for visibility
- Settings checkbox renamed to 'Cost & Loot Summary'
- Both values show PED amount
- Add damage_dealt and damage_taken to HUDStats
- Add shrapnel_total to HUDStats
- Add UI elements for damage stats in _setup_ui
- Add UI element for shrapnel in _setup_ui
- Update window size calculation for new elements
- Update _refresh_display to show damage and shrapnel
- Add update_damage() and update_shrapnel() public methods
- Add show_total_cost config option (enabled by default)
- Add total cost row between P/L and cost metrics
- Add Total Cost checkbox to settings dialog
- Update window size calculation for total cost row
- Update _refresh_display to show total cost
- Add end_session() as alias for stop_session() for backward compatibility
- Use delayed rebuild with QTimer.singleShot to avoid UI glitches
- Add container.show() at end of _setup_ui to ensure visibility
- Add error handling in _do_rebuild for recovery
- Added for backward compatibility with main_window.py
- These parameters are accepted but not used in the clean HUD
- Fixes TypeError when starting session
- Create container before calling _update_window_size in _setup_ui
- Fix _rebuild_ui to delete and recreate container properly
- Add VISION_PLAN.md with comprehensive computer vision/OCR plan
- Disable ArmorDecayTracker (it requires armor to be in hardcoded database)
- Use cost_per_hit from loadout directly when damage is taken
- This allows any armor to work, not just ones in the database
- Simplified approach: pre-calculate costs in loadout, use during session
- Don't enable click-through on show (allows initial interaction)
- Disable click-through when mouse enters HUD (allows clicking/dragging)
- Enable click-through when mouse leaves (so HUD doesn't block game)
- Remove duplicate leaveEvent handler
- User can now hold Ctrl and drag without issues