# Terminal Animator Engine In Rust
This is a terminal animator engine written in Rust. It provides several text effects that can be used to animate text in the terminal.
## Features
### Text Effects
1. **Scattering**: This effect makes the text appear as if it's scattering across the terminal. Implemented in [`scattering.rs`](src/text_effects/scattering.rs).
2. **Typewriter**: This effect makes the text appear as if it's being typed out in real-time. Implemented in [`typewriter.rs`](src/text_effects/typewriter.rs).
3. **Scrolling**: This effect makes the text appear as if it's scrolling across the terminal. There are two variants of this effect: ScrollingLeft and ScrollingRight. Implemented in [`scrolling.rs`](src/text_effects/scrolling.rs).
4. **Blinking**: This effect makes the text blink in the terminal. Implemented in [`blinking.rs`](src/text_effects/blinking.rs).
5. **Color Changing**: This effect changes the color of the text in the terminal. Implemented in [`color_changing.rs`](src/text_effects/color_changing.rs).
6. **Climbing**: This effect makes the text appear as if it's climbing up the terminal. Implemented in [`climbing.rs`](src/text_effects/climbing.rs).
### Animation
The [`Animation`](src/structs/animation.rs) struct is used to create an animation from a sequence of frames. Each frame consists of a string of text and a text effect. The animation plays each frame in sequence, applying the text effect to the text before displaying it in the terminal.
## Usage
To use the terminal animator engine, create an `Animation` with a sequence of `Frame`s, then call `animation.next_frame()` in a loop. Here is an example:
```rs
let frames = vec![
Frame::new("I am in love with you please marry me!", Climbing),
Frame::new("Alice alice alice alice alice alice", Climbing),
Frame::new("I want to be with you forever!", Climbing),
];
let mut animation = Animation::new(frames, Duration::from_millis(100));
loop {
if let Err(e) = animation.next_frame() {
eprintln!("Error displaying frame: {}", e);
break;
}
}