Fixed wall region indexing bug
authorTomas Wenström <tomas.wenstrom@gmail.com>
Thu, 11 Mar 2021 18:36:45 +0000 (19:36 +0100)
committerTomas Wenström <tomas.wenstrom@gmail.com>
Thu, 11 Mar 2021 18:36:45 +0000 (19:36 +0100)
src/core/level/lvlgen.rs
src/core/level/mod.rs

index af6ab76..2e4d2f6 100644 (file)
@@ -227,7 +227,7 @@ impl LevelGenerator {
                let outline = r.outline(&grid.scale);
                let mut floats = outline.iter().map(|p| point!(p.x as f64, p.y as f64)).collect();
                self.smooth_wall(&mut floats, self.wall_smooth_radius as isize);
-               let wall = WallRegion::new(floats);
+               let wall = WallRegion::new(walls.len(), floats);
                walls.push(wall);
            }
        }
index e422042..47a4703 100644 (file)
@@ -204,8 +204,7 @@ pub struct WallRegion {
 }
 
 impl WallRegion {
-    pub fn new(points: Vec<Point<f64>>) -> Self {
-       let index: RegionIndex = 0; // use as param
+    pub fn new(index: RegionIndex, points: Vec<Point<f64>>) -> Self {
        let mut edges = Vec::with_capacity(points.len());
 
        for i in 0..points.len() {
@@ -223,12 +222,12 @@ impl WallRegion {
 
     fn next(&self, index: EdgeIndex) -> Rc<WallEdge> {
        let index = (index + 1) % self.edges.len();
-       Rc::clone(&self.edges[index])
+       self.edges[index].clone()
     }
 
     fn previous(&self, index: EdgeIndex) -> Rc<WallEdge> {
-       let index = (index + self.edges.len() + 1) % self.edges.len();
-       Rc::clone(&self.edges[index])
+       let index = (index + self.edges.len() - 1) % self.edges.len();
+       self.edges[index].clone()
     }
 }
 
@@ -270,18 +269,18 @@ pub struct Wall {
 
 impl Wall {
     #[allow(dead_code)]
-    pub fn next(self) -> Wall {
+    pub fn next(&self) -> Wall {
        Wall {
            edge: self.region.next(self.edge.id),
-           region: self.region,
+           region: self.region.clone(),
        }
     }
 
     #[allow(dead_code)]
-    pub fn previous(self) -> Wall {
+    pub fn previous(&self) -> Wall {
        Wall {
            edge: self.region.previous(self.edge.id),
-           region: self.region,
+           region: self.region.clone(),
        }
     }