From 27e699fb40acaa72c7a28f0ef99a8a9427be81d9 Mon Sep 17 00:00:00 2001
From: Tom Barrett <tom@tombarrett.xyz>
Date: Sun, 31 Jan 2021 18:42:08 +0100
Subject: shifted gems and fixed overflow bug

---
 src/main.rs | 39 ++++++++++++++++++++++-----------------
 1 file changed, 22 insertions(+), 17 deletions(-)

diff --git a/src/main.rs b/src/main.rs
index edbb973..2bd1ef0 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -15,6 +15,8 @@ pub const TILE_SCALE: f32 = 3.0;
 pub const TILE_HEIGHT: f32 = 16.0;
 pub const TILE_WIDTH: f32 = 16.0;
 pub const BORDER_SIZE: f32 = 3.0;
+pub const SHIFT_X: f32 = 50.0;
+pub const SHIFT_Y: f32 = 50.0;
 
 #[derive(Clone, Copy)]
 enum Occupant {
@@ -156,34 +158,37 @@ impl Game {
         let mut y = 0.0;
         for _ in 0..8 {
             let mut column = Vec::new();
-            column.push(Cell::new(Point2 { x: 0.0, y }));
             column.push(Cell::new(Point2 {
-                x: 1.0 * (TILE_WIDTH * TILE_SCALE + BORDER_SIZE),
-                y,
+                x: SHIFT_X,
+                y: y + SHIFT_Y,
             }));
             column.push(Cell::new(Point2 {
-                x: 2.0 * (TILE_WIDTH * TILE_SCALE + BORDER_SIZE),
-                y,
+                x: 1.0 * (TILE_WIDTH * TILE_SCALE + BORDER_SIZE) + SHIFT_X,
+                y: y + SHIFT_Y,
             }));
             column.push(Cell::new(Point2 {
-                x: 3.0 * (TILE_WIDTH * TILE_SCALE + BORDER_SIZE),
-                y,
+                x: 2.0 * (TILE_WIDTH * TILE_SCALE + BORDER_SIZE) + SHIFT_X,
+                y: y + SHIFT_Y,
             }));
             column.push(Cell::new(Point2 {
-                x: 4.0 * (TILE_WIDTH * TILE_SCALE + BORDER_SIZE),
-                y,
+                x: 3.0 * (TILE_WIDTH * TILE_SCALE + BORDER_SIZE) + SHIFT_X,
+                y: y + SHIFT_Y,
             }));
             column.push(Cell::new(Point2 {
-                x: 5.0 * (TILE_WIDTH * TILE_SCALE + BORDER_SIZE),
-                y,
+                x: 4.0 * (TILE_WIDTH * TILE_SCALE + BORDER_SIZE) + SHIFT_X,
+                y: y + SHIFT_Y,
             }));
             column.push(Cell::new(Point2 {
-                x: 6.0 * (TILE_WIDTH * TILE_SCALE + BORDER_SIZE),
-                y,
+                x: 5.0 * (TILE_WIDTH * TILE_SCALE + BORDER_SIZE) + SHIFT_X,
+                y: y + SHIFT_Y,
             }));
             column.push(Cell::new(Point2 {
-                x: 7.0 * (TILE_WIDTH * TILE_SCALE + BORDER_SIZE),
-                y,
+                x: 6.0 * (TILE_WIDTH * TILE_SCALE + BORDER_SIZE) + SHIFT_X,
+                y: y + SHIFT_Y,
+            }));
+            column.push(Cell::new(Point2 {
+                x: 7.0 * (TILE_WIDTH * TILE_SCALE + BORDER_SIZE) + SHIFT_X,
+                y: y + SHIFT_Y,
             }));
 
             y += TILE_HEIGHT * TILE_SCALE + BORDER_SIZE;
@@ -261,9 +266,9 @@ impl EventHandler for Game {
                     for (j, cell) in row.iter_mut().enumerate() {
                         if cell.contains(position)
                             && (((i + 1 == selected.0) && (j == selected.1))
-                                || ((i - 1 == selected.0) && (j == selected.1))
+                                || ((i.overflowing_sub(1).0 == selected.0) && (j == selected.1))
                                 || ((i == selected.0) && (j + 1 == selected.1))
-                                || ((i == selected.0) && (j - 1 == selected.1)))
+                                || ((i == selected.0) && (j.overflowing_sub(1)).0 == selected.1))
                         {
                             swap = Some((i, j));
                         }
-- 
cgit v1.2.3