vsrg 0.3.0

Data structures for vertical scrolling rhythm games
Documentation
//! Beat time, clock time, note scroll position and conversion between them through event tracks.
//!
//! The main values are:
//! - [`BeatTime`], which is musical time measured in beats
//! - [`ClockTime`], which is real clock time measured in seconds
//! - [`ScrollPosition`], which is note position in the scrolling timeline of a typical vertical
//!   scrolling rhythm game.
//!
//! Converting between [`BeatTime`] and [`ClockTime`] requires knowing the [`Tempo`] of the song at
//! all point in time, which can be defined by a [`TempoTrack`]. Tempo may be eased by all
//! interpolations provided by [`crate::Easing`]
//!
//! Converting between [`ClockTime`] and [`ScrollPosition`] requires knowing the scroll speed at
//! all point in time, which can be defined by a [`ScrollSpeedTrack`]. Likewise, scroll speed may
//! be eased by all interpolations provided by [`crate::Easing`].
//!
//! Other than that, it also provides other constructs such as
//! - [`Time`]: union of [`BeatTime`] and [`ClockTime`].
//! - [`EventTrack`]: The generic collection of events over time, which [`ScrollSpeedTrack`] is based on.
//! - [`EventTracks`]; Collection of multiple [`EventTrack`], identified by [`TrackId`]. Useful for
//!   rhythm games that allow different groups of notes to be affected by different event tracks
//!   (notes with different scroll speed simultaneously, etc.)
//! - [`SameUnitTimeVec`]: used by [`TempoTrack`] to guarantee all events sharing the same unit of
//!   time.

mod speed;
mod tempo;
mod time;
mod track;

pub use speed::{ScrollPosition, ScrollSpeedChangeEvent, ScrollSpeedTrack, ScrollSpeedTracks};
pub use tempo::{Tempo, TempoChangeEvent, TempoTrack, TempoTracks};
pub use time::{
    BeatTime, ClockTime, SameUnitTime, SameUnitTimeVec, SameUnitTimeVecEditError,
    SameUnitTimeVecRead, Time,
};
pub use track::{EventTrack, EventTracks, TrackEvent, TrackId};