get_tile now returns an Option<&Tile>
This commit is contained in:
58
src/main.rs
58
src/main.rs
@@ -87,7 +87,9 @@ fn main() {
|
|||||||
match poll_event() {
|
match poll_event() {
|
||||||
Event::Quit(_) => break 'main,
|
Event::Quit(_) => break 'main,
|
||||||
Event::KeyDown(_, _, key, _, _, repeat) => {
|
Event::KeyDown(_, _, key, _, _, repeat) => {
|
||||||
keyboard.key_down(key);
|
if repeat == false {
|
||||||
|
keyboard.key_down(key);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
Event::KeyUp(_, _, key, _, _, _) => {
|
Event::KeyUp(_, _, key, _, _, _) => {
|
||||||
keyboard.key_up(key);
|
keyboard.key_up(key);
|
||||||
@@ -155,11 +157,14 @@ fn main() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// @todo get_tile should return Option<Tile>
|
if let Some(tile) = layer.get_tile(x, y) {
|
||||||
d = match *layer.get_tile(x, y) {
|
d = match *tile {
|
||||||
Tile::Empty => d,
|
Tile::Empty => d,
|
||||||
Tile::Floor(_) => d.min(t)
|
Tile::Floor(_) => d.min(t)
|
||||||
};
|
};
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
x += 1;
|
x += 1;
|
||||||
}
|
}
|
||||||
@@ -184,11 +189,14 @@ fn main() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// @todo get_tile should return Option<Tile>
|
if let Some(tile) = layer.get_tile(x, y) {
|
||||||
d = match *layer.get_tile(x, y) {
|
d = match *tile {
|
||||||
Tile::Empty => d,
|
Tile::Empty => d,
|
||||||
Tile::Floor(_) => d.max(t)
|
Tile::Floor(_) => d.max(t)
|
||||||
};
|
};
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
x -= 1;
|
x -= 1;
|
||||||
}
|
}
|
||||||
@@ -215,11 +223,14 @@ fn main() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// @todo get_tile should return Option<Tile>
|
if let Some(tile) = layer.get_tile(x, y) {
|
||||||
d = match *layer.get_tile(x, y) {
|
d = match *tile {
|
||||||
Tile::Empty => d,
|
Tile::Empty => d,
|
||||||
Tile::Floor(_) => d.min(t)
|
Tile::Floor(_) => d.min(t)
|
||||||
};
|
};
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
y += 1;
|
y += 1;
|
||||||
}
|
}
|
||||||
@@ -242,17 +253,18 @@ fn main() {
|
|||||||
loop {
|
loop {
|
||||||
let t = (y * TILE_HEIGHT + TILE_HEIGHT) as f32 - p;
|
let t = (y * TILE_HEIGHT + TILE_HEIGHT) as f32 - p;
|
||||||
|
|
||||||
println!("x={}, y={}, d={}, t={}", x, y, d, t);
|
|
||||||
|
|
||||||
if t < d {
|
if t < d {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// @todo get_tile should return Option<Tile>
|
if let Some(tile) = layer.get_tile(x, y) {
|
||||||
d = match *layer.get_tile(x, y) {
|
d = match *tile {
|
||||||
Tile::Empty => d,
|
Tile::Empty => d,
|
||||||
Tile::Floor(_) => d.max(t)
|
Tile::Floor(_) => d.max(t)
|
||||||
};
|
};
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
y -= 1;
|
y -= 1;
|
||||||
}
|
}
|
||||||
|
|||||||
10
src/tile.rs
10
src/tile.rs
@@ -23,10 +23,14 @@ impl<T> Layer<T> where T: Clone {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_tile(&self, x: i32, y: i32) -> &T {
|
pub fn get_tile(&self, x: i32, y: i32) -> Option<&T> {
|
||||||
let offset = (x + y * self.width) as usize;
|
let offset = (x + y * self.width) as usize;
|
||||||
|
|
||||||
&self.tiles[offset]
|
if offset >= 0 && offset < self.tiles.len() {
|
||||||
|
Some(&self.tiles[offset])
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_tile(&mut self, x: i32, y: i32, tile: T) {
|
pub fn set_tile(&mut self, x: i32, y: i32, tile: T) {
|
||||||
@@ -58,7 +62,7 @@ impl<T> Layer<T> where T: Clone {
|
|||||||
for x in range(intersect.x, intersect.x + intersect.w + 1) {
|
for x in range(intersect.x, intersect.x + intersect.w + 1) {
|
||||||
let position = Rect::new(x * self.tile_width, y * self.tile_height, self.tile_width, self.tile_height);
|
let position = Rect::new(x * self.tile_width, y * self.tile_height, self.tile_width, self.tile_height);
|
||||||
|
|
||||||
f(self.get_tile(x, y), &position);
|
f(self.get_tile(x, y).unwrap(), &position);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user