5050//! // Create window, render resources etc...
5151//!
5252//! loop {
53- //! // Get current frame's time
54- //! let time = music.get_time();
55- //!
56- //! // Keep the rocket tracker in sync.
57- //! // It's recommended to combine consecutive seek events to a single seek.
58- //! let mut seek = None;
53+ //! // Handle events from the rocket tracker
5954//! while let Some(event) = rocket.poll_events().ok().flatten() {
6055//! match dbg!(event) {
61- //! Event::Seek(to) => seek = Some (to),
56+ //! Event::Seek(to) => music. seek(to),
6257//! Event::Pause(state) => music.pause(state),
6358//! Event::NotConnected => break,
6459//! }
6560//! }
66- //! // It's recommended to call set_time only when the not seeking.
67- //! // This ensures the smoothest scrolling in editor.
68- //! match seek {
69- //! Some(to) => {
70- //! music.seek(to);
71- //! continue;
72- //! }
73- //! None => rocket.set_time(&time),
74- //! }
61+ //!
62+ //! // Get current frame's time and keep the tracker updated
63+ //! let time = music.get_time();
64+ //! rocket.set_time(&time);
7565//!
7666//! // Read values with Rocket's get_value function while rendering the frame
7767//! let _ = rocket.get_value("track0");
@@ -132,7 +122,8 @@ pub enum Event {
132122 Seek ( Duration ) ,
133123 /// The tracker pauses or unpauses.
134124 Pause ( bool ) ,
135- /// The client is not connected. Next call to `poll_events` will attempt a reconnection.
125+ /// The client is not connected. Next calls to [`poll_events`](Rocket::poll_events) will eventually attempt to
126+ /// reconnect.
136127 ///
137128 /// There are three equally sensible ways to handle this variant:
138129 ///
@@ -144,22 +135,22 @@ pub enum Event {
144135 ///
145136 /// Options 2 and 3 result is a busy wait, e.g. waste a lot of CPU time.
146137 /// It's better to combine them with `std::thread::sleep` for at least a few milliseconds in order to mitigate that.
147- ///
148- /// See [module documentation](crate:: simple#Examples) and [`poll_events`](Rocket::poll_events) .
138+ ///
139+ /// See ` simple.rs` in the `examples`-directory .
149140 NotConnected ,
150141}
151142
152143/// Provides sync values.
153144///
154145/// # Usage
155146///
156- /// See [module-level documentation](crate::simple#Usage).
147+ /// See [module documentation](crate::simple#Usage).
157148pub struct Rocket < P : AsRef < Path > > {
158149 path : P ,
159150 bps : f32 ,
160151 row : f32 ,
161152 #[ cfg( not( feature = "player" ) ) ]
162- sent_row : u32 ,
153+ tracker_row : u32 ,
163154 #[ cfg( not( feature = "player" ) ) ]
164155 connected : bool ,
165156 #[ cfg( not( feature = "player" ) ) ]
@@ -175,7 +166,7 @@ impl<P: AsRef<Path>> Rocket<P> {
175166 ///
176167 /// # Without `player` feature
177168 ///
178- /// Attemps to connect to a rocket tracker, and retries indefinitely every 1s if connection can't be established,
169+ /// Attempts to connect to a rocket tracker, and retries indefinitely every 1s if connection can't be established,
179170 /// during which the function doesn't return and the caller is **blocked**.
180171 ///
181172 /// # With `player` feature
@@ -235,7 +226,7 @@ impl<P: AsRef<Path>> Rocket<P> {
235226 bps : bpm / SECS_PER_MINUTE ,
236227 row : 0. ,
237228 #[ cfg( not( feature = "player" ) ) ]
238- sent_row : 0 ,
229+ tracker_row : 0 ,
239230 #[ cfg( not( feature = "player" ) ) ]
240231 connected : true ,
241232 #[ cfg( not( feature = "player" ) ) ]
@@ -284,12 +275,14 @@ impl<P: AsRef<Path>> Rocket<P> {
284275 #[ cfg( not( feature = "player" ) ) ]
285276 {
286277 let row = self . row as u32 ;
287- if self . connected && row != self . sent_row {
288- while let Err ( ref e) = self . rocket . set_row ( row) {
289- print_errors ( PREFIX , e) ;
290- self . connected = false ;
278+ if self . connected && row != self . tracker_row {
279+ match self . rocket . set_row ( row) {
280+ Ok ( ( ) ) => self . tracker_row = row,
281+ Err ( ref e) => {
282+ print_errors ( PREFIX , e) ;
283+ self . connected = false ;
284+ }
291285 }
292- self . sent_row = row;
293286 }
294287 }
295288 }
@@ -371,6 +364,7 @@ impl<P: AsRef<Path>> Rocket<P> {
371364 Ok ( Some ( event) ) => {
372365 let handled = match event {
373366 crate :: client:: Event :: SetRow ( row) => {
367+ self . tracker_row = row;
374368 let beat = row as f32 / ROWS_PER_BEAT ;
375369 Event :: Seek ( Duration :: from_secs_f32 ( beat / self . bps ) )
376370 }
0 commit comments