aboutsummaryrefslogtreecommitdiff
path: root/server/src/entity/tutorial.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/entity/tutorial.rs')
-rw-r--r--server/src/entity/tutorial.rs49
1 files changed, 31 insertions, 18 deletions
diff --git a/server/src/entity/tutorial.rs b/server/src/entity/tutorial.rs
index d1390b20..87896a09 100644
--- a/server/src/entity/tutorial.rs
+++ b/server/src/entity/tutorial.rs
@@ -169,10 +169,9 @@ impl StepContext<'_> {
fn find_tile(&self, tile: TileIndex) -> Option<IVec2> {
self.ent
.game
- .tiles
- .iter()
- .find(|(_, t)| t.kind == tile)
- .map(|(p, _)| *p)
+ .tile_index
+ .get(&tile)
+ .and_then(|s| s.iter().next().copied())
}
fn aquire_placed_item(&mut self, item: ItemIndex) -> Result<IVec2, (Option<IVec2>, Message)> {
debug!(
@@ -193,9 +192,14 @@ impl StepContext<'_> {
}) {
Err((
Some(*pos),
- match self.ent.game.data.tile_name(tile.kind) {
- "stove" | "oven" => trm!("s.tutorial.prevent_burning"),
- _ => trm!("s.tutorial.take_now"),
+ if tile
+ .parts
+ .iter()
+ .any(|p| matches!(self.ent.game.data.tile_name(*p), "stove" | "oven"))
+ {
+ trm!("s.tutorial.prevent_burning")
+ } else {
+ trm!("s.tutorial.take_now")
},
))
} else {
@@ -288,11 +292,16 @@ impl StepContext<'_> {
speed,
..
} => {
- for (pos, tile) in self.ent.game.tiles.iter().filter(|(_, t)| t.kind == *tile) {
- if let Some(item) = &tile.item
- && item.kind == *input
- {
- return Err((Some(*pos), trm!("s.tutorial.hold_interact")));
+ if let Some(tiles) = self.ent.game.tile_index.get(tile) {
+ for pos in tiles {
+ let Some(tile) = self.ent.game.tiles.get(pos) else {
+ continue;
+ };
+ if let Some(item) = &tile.item
+ && item.kind == *input
+ {
+ return Err((Some(*pos), trm!("s.tutorial.hold_interact")));
+ }
}
}
if let Some(pos) = self.find_tile(*tile) {
@@ -312,12 +321,16 @@ impl StepContext<'_> {
input,
..
} => {
- for (_pos, tile) in self.ent.game.tiles.iter().filter(|(_, t)| t.kind == *tile)
- {
- if let Some(item) = &tile.item
- && item.kind == *input
- {
- return Err((None, trm!("s.tutorial.wait_finish")));
+ if let Some(tiles) = self.ent.game.tile_index.get(tile) {
+ for pos in tiles {
+ let Some(tile) = self.ent.game.tiles.get(pos) else {
+ continue;
+ };
+ if let Some(item) = &tile.item
+ && item.kind == *input
+ {
+ return Err((None, trm!("s.tutorial.wait_finish")));
+ }
}
}
if let Some(pos) = self.find_tile(*tile) {