Hexagonal Grid

 avatar
unknown
rust
9 months ago
969 B
16
Indexable
struct HexagonalGrid<T>(Vec<Vec<T>>);

impl<T> HexagonalGrid<T> {
    fn left(&self, x: usize, y: usize) -> &T {
        &self.0[x - 1][y]
    }

    fn right(&self, x: usize, y: usize) -> &T {
        &self.0[x + 1][y]
    }

    fn top_left(&self, x: usize, y: usize) -> &T {
        if x % 2 == 0 {
            &self.0[x - 1][y - 1]
        } else {
            &self.0[x][y - 1]
        }
    }

    fn top_right(&self, x: usize, y: usize) -> &T {
        if x % 2 == 0 {
            &self.0[x][y - 1]
        } else {
            &self.0[x + 1][y - 1]
        }
    }

    fn bottom_left(&self, x: usize, y: usize) -> &T {
        if x % 2 == 0 {
            &self.0[x - 1][y + 1]
        } else {
            &self.0[x][y + 1]
        }
    }

    fn bottom_right(&self, x: usize, y: usize) -> &T {
        if x % 2 == 0 {
            &self.0[x][y + 1]
        } else {
            &self.0[x + 1][y + 1]
        }
    }
}
Editor is loading...
Leave a Comment