diff options
| author | Schark <jordan@schark.online> | 2026-02-25 02:43:23 -0500 |
|---|---|---|
| committer | Schark <jordan@schark.online> | 2026-02-25 02:43:23 -0500 |
| commit | 61f21cc5d0c32cf033916e568ef06e096541e0aa (patch) | |
| tree | b18d25c1b5d95a2d748d37355a30df3886043678 | |
| parent | 76f49ede79a1a9954df24f1fffc2c8624363e30b (diff) | |
| download | cs2pov-61f21cc5d0c32cf033916e568ef06e096541e0aa.tar.gz cs2pov-61f21cc5d0c32cf033916e568ef06e096541e0aa.zip | |
Navigation works save for first round
| -rw-r--r-- | cs2pov/navigation.py | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/cs2pov/navigation.py b/cs2pov/navigation.py index dbd173c..0ae4f24 100644 --- a/cs2pov/navigation.py +++ b/cs2pov/navigation.py @@ -46,6 +46,7 @@ class NavigationState: current_segment_index: int = 0 transitions: list[GotoTransition] = field(default_factory=list) recording_start_time: float = 0.0 + segment_start_wall_time: float = 0.0 buffer_seconds: float = 5.0 @@ -118,7 +119,7 @@ def handle_death( adjusted_tick = compute_goto_tick(target_tick, state.tick_offset) if verbose: - print(f" Death detected! Seeking to segment {state.current_segment_index + 1} " + print(f" Seeking to segment {state.current_segment_index + 1} " f"(tick {target_tick}, adjusted {adjusted_tick})") # Send demo_gototick command @@ -220,6 +221,8 @@ def recording_loop_tick_nav( print(f" {len(state.timeline.alive_segments)} alive segments to navigate") + state.segment_start_wall_time = time.time() + while True: elapsed = time.time() - start_time @@ -245,17 +248,44 @@ def recording_loop_tick_nav( # Check for death (only if we have a window to navigate with) if window_id: + death_triggered = False death_detected, death_log_position = check_death_in_console( console_log_path, state.player_slot, death_log_position ) if death_detected: + if verbose: + print(f" Death detected (segment {state.current_segment_index + 1})") has_more, death_log_position = handle_death( state, display, window_id, console_log_path, death_log_position, verbose ) + # Advance past any death messages generated during gototick seek + death_log_position = console_log_path.stat().st_size + state.segment_start_wall_time = time.time() if not has_more: print(" All alive segments complete") return "segments_complete", state.transitions + death_triggered = True + + # Time-based segment end: skip forward when alive segment duration elapsed + if not death_triggered and state.current_segment_index < len(state.timeline.alive_segments): + current_seg = state.timeline.alive_segments[state.current_segment_index] + expected_duration = current_seg.end_time - current_seg.start_time + segment_elapsed = time.time() - state.segment_start_wall_time + if segment_elapsed >= expected_duration: + if verbose: + print(f" Segment {state.current_segment_index + 1} timer expired " + f"({expected_duration:.1f}s elapsed, reason: {current_seg.reason_ended})") + has_more, death_log_position = handle_death( + state, display, window_id, console_log_path, + death_log_position, verbose + ) + # Advance past any death messages generated during gototick seek + death_log_position = console_log_path.stat().st_size + state.segment_start_wall_time = time.time() + if not has_more: + print(" All alive segments complete") + return "segments_complete", state.transitions # Send spec_lock (F5) every 3 seconds if elapsed - last_spec_lock >= 3.0: |
