diff --git a/examples/basic/gfx.gif b/examples/basic/gfx.gif index 6d28de2..b98b169 100644 Binary files a/examples/basic/gfx.gif and b/examples/basic/gfx.gif differ diff --git a/src/background.rs b/src/background.rs index a63bd99..ecb0ef1 100644 --- a/src/background.rs +++ b/src/background.rs @@ -49,4 +49,56 @@ impl Background { } } } + + /// Shifts all tiles to the left, wrapping + pub fn shift_left(&mut self) { + for y in 0..self.size.y as usize { + let tmp = self.tiles[0][y]; + + for x in 0..self.size.x as usize - 1 { + self.tiles[x][y] = self.tiles[x+1][y]; + } + + self.tiles[self.size.x as usize - 1][y] = tmp; + } + } + + /// Shifts all tiles to the right, wrapping + pub fn shift_right(&mut self) { + for y in 0..self.size.y as usize { + let tmp = self.tiles[self.size.x as usize - 1][y]; + + for x in (1..self.size.x as usize).rev() { + self.tiles[x][y] = self.tiles[x-1][y]; + } + + self.tiles[0][y] = tmp; + } + } + + /// Shifts all tiles up, wrapping + pub fn shift_up(&mut self) { + for x in 0..self.size.x as usize { + let tmp = self.tiles[x][0]; + + for y in 0..self.size.y as usize - 1 { + self.tiles[x][y] = self.tiles[x][y+1]; + } + + self.tiles[x][self.size.y as usize - 1] = tmp; + } + } + + /// Shifts all tiles down, wrapping + pub fn shift_down(&mut self) { + for x in 0..self.size.x as usize { + let tmp = self.tiles[x][self.size.y as usize - 1]; + + for y in (1..self.size.y as usize).rev() { + self.tiles[x][y] = self.tiles[x][y-1]; + } + + self.tiles[x][0] = tmp; + } + } } diff --git a/src/mapedit/constants.rs b/src/mapedit/constants.rs index b4bf9b7..7a55fce 100644 --- a/src/mapedit/constants.rs +++ b/src/mapedit/constants.rs @@ -22,4 +22,8 @@ pub const BUT_LAYER1: usize = 3; pub const BUT_LAYER2: usize = 4; pub const BUT_LAYER3: usize = 5; pub const BUT_LAYERS: usize = 6; -pub const BUT_EXIT: usize = 8; +pub const BUT_SHIFT_LEFT: usize = 8; +pub const BUT_SHIFT_RIGHT: usize = 9; +pub const BUT_SHIFT_UP: usize = 10; +pub const BUT_SHIFT_DOWN: usize = 11; +pub const BUT_EXIT: usize = 13; diff --git a/src/mapedit/mod.rs b/src/mapedit/mod.rs index b9354ff..09d369e 100644 --- a/src/mapedit/mod.rs +++ b/src/mapedit/mod.rs @@ -232,6 +232,26 @@ pub(crate) fn run_mapedit() { stuff.all_layers = !stuff.all_layers; stuff.set_state(stuff.state); } + BUT_SHIFT_LEFT => { + stuff.gsa1.bg[0].shift_left(); + stuff.gsa1.bg[1].shift_left(); + stuff.gsa1.bg[2].shift_left(); + } + BUT_SHIFT_RIGHT => { + stuff.gsa1.bg[0].shift_right(); + stuff.gsa1.bg[1].shift_right(); + stuff.gsa1.bg[2].shift_right(); + } + BUT_SHIFT_UP => { + stuff.gsa1.bg[0].shift_up(); + stuff.gsa1.bg[1].shift_up(); + stuff.gsa1.bg[2].shift_up(); + } + BUT_SHIFT_DOWN => { + stuff.gsa1.bg[0].shift_down(); + stuff.gsa1.bg[1].shift_down(); + stuff.gsa1.bg[2].shift_down(); + } BUT_EXIT => { println!("exit"); *control_flow = ControlFlow::Exit; diff --git a/src/mapedit/stuff.rs b/src/mapedit/stuff.rs index cff7b85..4cbf2b6 100644 --- a/src/mapedit/stuff.rs +++ b/src/mapedit/stuff.rs @@ -75,6 +75,11 @@ impl Stuff { }; self.gsa2.bg[2].tiles[0][BUT_LAYERS] = if self.all_layers { 0x7114 } else { 0x7014 }; + self.gsa2.bg[2].tiles[0][BUT_SHIFT_LEFT] = 0x7314; + self.gsa2.bg[2].tiles[0][BUT_SHIFT_RIGHT] = 0x7315; + self.gsa2.bg[2].tiles[0][BUT_SHIFT_UP] = 0x7316; + self.gsa2.bg[2].tiles[0][BUT_SHIFT_DOWN] = 0x7317; + self.gsa2.bg[2].size = IVec2 { x: 120, y: 68 }; //enough to cover 4k monitors? <_< self.gsa2.bg[3].size = IVec2 { x: 240, y: 136 };