diff --git a/ui/hud_overlay_clean.py b/ui/hud_overlay_clean.py index bc3865d..8d507d0 100644 --- a/ui/hud_overlay_clean.py +++ b/ui/hud_overlay_clean.py @@ -113,7 +113,11 @@ class HUDStats: loot_other: Decimal = Decimal('0.0') # Non-shrapnel loot # Session records - highest_loot: Decimal = Decimal('0.0') # Highest single loot + highest_loot: Decimal = Decimal('0.0') # Highest total loot from single kill + + # Kill tracking buffer + _current_kill_loot: Decimal = Decimal('0.0') + _last_loot_time: Optional[datetime] = None # Cost metrics (core) cost_per_shot: Decimal = Decimal('0.0') @@ -669,6 +673,11 @@ class HUDOverlay(QWidget): self._stats.cost_per_shot = cost_per_shot self._stats.cost_per_hit = cost_per_hit self._stats.cost_per_heal = cost_per_heal + + # Initialize kill tracking + self._stats._current_kill_loot = Decimal('0.0') + self._stats._last_loot_time = None + self.session_active = True self._timer.start(1000) @@ -682,6 +691,11 @@ class HUDOverlay(QWidget): def stop_session(self) -> None: """Stop the current session.""" + # Check if current kill is highest before stopping + if self._stats._current_kill_loot > self._stats.highest_loot: + self._stats.highest_loot = self._stats._current_kill_loot + self._refresh_display() + self.session_active = False self._timer.stop() self.status_label.setText("● Stopped") @@ -772,15 +786,34 @@ class HUDOverlay(QWidget): # === Public Update Methods === def update_loot(self, value_ped: Decimal, is_shrapnel: bool = False): - """Update loot value.""" + """Update loot value - tracks per-kill totals for highest loot.""" if self.session_active: + now = datetime.now() + + # Check if this is a new kill (gap of >2 seconds since last loot) + if self._stats._last_loot_time is not None: + time_since_last = (now - self._stats._last_loot_time).total_seconds() + if time_since_last > 2.0: + # Previous kill is complete, check if it was highest + if self._stats._current_kill_loot > self._stats.highest_loot: + self._stats.highest_loot = self._stats._current_kill_loot + # Start new kill + self._stats._current_kill_loot = value_ped + else: + # Same kill, add to current + self._stats._current_kill_loot += value_ped + else: + # First loot of session + self._stats._current_kill_loot = value_ped + + self._stats._last_loot_time = now + + # Add to totals if is_shrapnel: self._stats.shrapnel_total += value_ped else: self._stats.loot_other += value_ped - # Track highest single loot - if value_ped > self._stats.highest_loot: - self._stats.highest_loot = value_ped + self._stats.recalculate() self._refresh_display()