2023-08-23 13:48:05 +00:00
|
|
|
use crate::point::{Point, Color};
|
2023-08-23 11:13:53 +00:00
|
|
|
use crate::transformer::Transformers;
|
2023-06-29 21:24:56 +00:00
|
|
|
use crate::worldstate::WorldState;
|
|
|
|
|
2023-08-23 11:13:53 +00:00
|
|
|
use serde::{Deserialize, Serialize};
|
2023-06-06 09:31:45 +00:00
|
|
|
|
|
|
|
/// Replicate
|
|
|
|
|
|
|
|
#[allow(dead_code)]
|
2023-08-23 11:13:53 +00:00
|
|
|
#[derive(Serialize, Deserialize, Debug, Clone, Copy)]
|
2023-06-06 09:31:45 +00:00
|
|
|
pub enum Replicate {
|
|
|
|
Until(usize),
|
2023-08-23 11:13:53 +00:00
|
|
|
Times(usize),
|
2023-06-06 09:31:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl Transformers for Replicate {
|
2023-06-29 21:24:56 +00:00
|
|
|
fn apply(&self, point_list: &[Point], _ws: &WorldState) -> Vec<Point> {
|
2023-08-23 11:13:53 +00:00
|
|
|
let mut point_list2 = vec![];
|
2023-08-23 13:48:05 +00:00
|
|
|
|
2023-08-23 11:13:53 +00:00
|
|
|
match self {
|
|
|
|
Replicate::Until(n) => {
|
|
|
|
while point_list2.len() < *n {
|
2023-08-23 13:48:05 +00:00
|
|
|
if point_list.len() == 0 { // to prevent infinit loop in case of empty frame
|
|
|
|
point_list2.append(&mut vec![Point{x:0., y:0., color: Color{r:0, g:0, b:0}}; *n].to_vec());
|
|
|
|
} else {
|
|
|
|
point_list2.append(&mut point_list.to_vec());
|
|
|
|
}
|
2023-08-23 11:13:53 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
Replicate::Times(n) => {
|
|
|
|
for _ in 0..*n {
|
|
|
|
point_list2.append(&mut point_list.to_vec());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
point_list2
|
2023-06-06 09:31:45 +00:00
|
|
|
}
|
|
|
|
}
|