grid_sim/world/rules/
input_cells.rs

1use std::str::FromStr;
2
3#[derive(Clone)]
4pub enum InputCells {
5    Custom(Vec<(i8, i8)>),
6    Neighbors,
7    NoCorners,
8    CornersOnly,
9    FarOnly,
10    FarAlso,
11    FarCornersOnly,
12}
13impl FromStr for InputCells {
14    type Err = ();
15    fn from_str(s: &str) -> Result<InputCells, ()> {
16        match s {
17            "Neighbors" => Ok(InputCells::Neighbors),
18            "NoCorners" => Ok(InputCells::NoCorners),
19            "CornersOnly" => Ok(InputCells::CornersOnly),
20            "FarOnly" => Ok(InputCells::FarOnly),
21            "FarAlso" => Ok(InputCells::FarAlso),
22            "FarCornersOnly" => Ok(InputCells::FarCornersOnly),
23            _ => Err(()),
24        }
25    }
26}
27impl InputCells {
28    pub fn get_data(&self) -> Vec<(i8, i8)> {
29        match *self {
30            InputCells::Neighbors => {
31                vec![
32                (-1,-1), (0,-1), (1,-1),
33                (-1, 0),         (1, 0),
34                (-1, 1), (0, 1), (1, 1)
35                ]
36            },
37            InputCells::NoCorners => {
38                vec![
39                         (0,-1),        
40                (-1, 0),         (1, 0),
41                         (0, 1)        
42                ]
43            },
44            InputCells::CornersOnly => {
45                vec![
46                (-1,-1),         (1,-1),
47                                        
48                (-1, 1),         (1, 1)
49                ]
50            },
51            InputCells::FarOnly => {
52                vec![
53                (-2,-2), (-1,-2), (0,-2), (1,-2), (2,-2),
54                (-2,-1),                          (2,-1),
55                (-2, 0),                          (2, 0),
56                (-2, 1),                          (2, 1),
57                (-2, 2), (-1, 2), (0, 2), (1, 2), (2, 2)
58                ]
59            },
60            InputCells::FarAlso => {
61                vec![
62                (-2,-2), (-1,-2), (0,-2), (1,-2), (2,-2),
63                (-2,-1), (-1,-1), (0,-1), (1,-1), (2,-1),
64                (-2, 0), (-1, 0),         (1, 0), (2, 0),
65                (-2, 1), (-1, 1), (0, 1), (1, 1), (2, 1),
66                (-2, 2), (-1, 2), (0, 2), (1, 2), (2, 2)
67                ]
68            },
69            InputCells::FarCornersOnly => {
70                vec![
71                (-2,-2), (-1,-2),         (1,-2), (2,-2),
72                (-2,-1),                          (2,-1),
73                                                         
74                (-2, 1),                          (2, 1),
75                (-2, 2), (-1, 2),         (1, 2), (2, 2)
76                ]
77            }
78            InputCells::Custom(ref coords) => coords.clone(),
79        }
80    }
81}