jagua_rs/probs/spp/entities/
strip.rs

1use crate::collision_detection::CDEConfig;
2use crate::entities::Container;
3use crate::geometry::primitives::{Rect, SPolygon};
4use crate::geometry::shape_modification::{ShapeModifyConfig, ShapeModifyMode};
5use crate::geometry::{DTransformation, OriginalShape};
6use anyhow::{Result, ensure};
7
8#[derive(Clone, Debug, Copy, PartialEq)]
9pub struct Strip {
10    pub fixed_height: f32,
11    pub cde_config: CDEConfig,
12    pub shape_modify_config: ShapeModifyConfig,
13    pub width: f32,
14}
15
16impl Strip {
17    pub fn new(
18        fixed_height: f32,
19        cde_config: CDEConfig,
20        shape_modify_config: ShapeModifyConfig,
21    ) -> Result<Self> {
22        ensure!(fixed_height > 0.0, "strip height must be positive");
23        Ok(Strip {
24            fixed_height,
25            cde_config,
26            shape_modify_config,
27            width: 0.0,
28        })
29    }
30
31    pub fn set_width(&mut self, width: f32) {
32        self.width = width;
33    }
34}
35
36impl From<Strip> for Container {
37    fn from(s: Strip) -> Container {
38        Container::new(
39            0,
40            OriginalShape {
41                shape: SPolygon::from(Rect::try_new(0.0, 0.0, s.width, s.fixed_height).unwrap()),
42                pre_transform: DTransformation::empty(),
43                modify_mode: ShapeModifyMode::Deflate,
44                modify_config: s.shape_modify_config,
45            },
46            vec![],
47            s.cde_config,
48        )
49        .unwrap()
50    }
51}