diff --git a/src/core.rs b/src/core.rs index b6e6501..75122b4 100644 --- a/src/core.rs +++ b/src/core.rs @@ -350,6 +350,9 @@ pub trait PointLike { (self.x_i32(), self.y_i32()) } + fn floor(&self) -> (f32, f32) { + (self.x().floor(), self.y().floor()) + } fn to_index(&self, width: usize) -> usize { ((self.y_i32() * width as i32) + self.x_i32()) as usize } diff --git a/src/exploration.rs b/src/exploration.rs index 585c039..da9d046 100644 --- a/src/exploration.rs +++ b/src/exploration.rs @@ -171,46 +171,45 @@ where if !changed { return Ok(()); } - for (entity, visible_entities, focused, exploring) in explorers.iter() { + for (entity, visible_entities, focused_type, exploring) in explorers.iter() { let mut features = features .iter() .filter(|v| visible_entities.contains(&v.0)) - .map(|v| (v.1, v.2)) - .collect::>(); - features.sort_by(|(c1, _), (c2, _)| c1.partial_cmp(c2).unwrap()); - if let Some(focused) = &focused.0 { - features.retain(|(_, t)| **t == *focused); - } + .map(|v| (v.1.floor(), v.2)) + .collect::>(); if features.is_empty() { tts.speak("Nothing visible.", true)?; - } else { - let mut target: Option<&(&Coordinates, &ExplorationType)> = None; - if input.just_active(explore_focus_next.clone()) { - if let Some(exploring) = exploring { - target = features.iter().find(|(c, _)| ***c > **exploring); - if target.is_none() { - target = features.first(); - } - } else { + return Ok(()); + } + features.sort_by(|(c1, _), (c2, _)| c1.partial_cmp(c2).unwrap()); + if let Some(focused) = &focused_type.0 { + features.retain(|(_, t)| **t == *focused); + } + let mut target: Option<&((f32, f32), &ExplorationType)> = None; + if input.just_active(explore_focus_next.clone()) { + if let Some(exploring) = exploring { + target = features.iter().find(|(c, _)| *c > **exploring); + if target.is_none() { target = features.first(); } - } else if input.just_active(explore_focus_prev.clone()) { - if let Some(exploring) = exploring { - features.reverse(); - target = features.iter().find(|(c, _)| ***c < **exploring); - if target.is_none() { - target = features.first(); - } - } else { - target = features.last(); + } else { + target = features.first(); + } + } else if input.just_active(explore_focus_prev.clone()) { + if let Some(exploring) = exploring { + features.reverse(); + target = features.iter().find(|(c, _)| *c < **exploring); + if target.is_none() { + target = features.first(); } + } else { + target = features.last(); } - if let Some((coordinates, _)) = target { - commands.entity(entity).insert(Exploring(( - coordinates.x().floor(), - coordinates.y().floor(), - ))); - } + } + if let Some((coordinates, _)) = target { + commands + .entity(entity) + .insert(Exploring(coordinates.floor())); } } } @@ -271,7 +270,7 @@ fn exploration_focus( let mut exploring = if let Some(exploring) = exploring { **exploring } else { - (coordinates.x().floor(), coordinates.y().floor()) + coordinates.floor() }; let orig = exploring; if input.just_active(explore_forward.clone()) { @@ -337,7 +336,7 @@ fn exploration_changed_announcement( ) -> Result<(), Box> { if let Ok((coordinates, exploring)) = explorer.single() { let collider_set = QueryPipelineColliderComponentsSet(&collider_query); - let coordinates = (coordinates.x().floor(), coordinates.y().floor()); + let coordinates = coordinates.floor(); for (map, revealed_tiles, visible_tiles) in map.iter() { let point = **exploring; let idx = point.to_index(map.width);