remove unneeded mut, provide default_select_pos to secondry key event handler, and use the is_filled() over the is_opaque() to be reader friendly

This commit is contained in:
anomaluridae 2021-09-15 13:38:44 -07:00
parent 82f3c3c3e8
commit d0bd1ddb24
3 changed files with 6 additions and 6 deletions

View File

@ -54,7 +54,7 @@ pub(super) fn select_interactable(
span!(_guard, "select_interactable"); span!(_guard, "select_interactable");
use common::{spiral::Spiral2d, terrain::TerrainChunk, vol::RectRasterableVol}; use common::{spiral::Spiral2d, terrain::TerrainChunk, vol::RectRasterableVol};
let nearest_dist = find_shortest_distance(&mut [ let nearest_dist = find_shortest_distance(&[
mine_target.map(|t| t.distance), mine_target.map(|t| t.distance),
entity_target.map(|t| t.distance), entity_target.map(|t| t.distance),
collect_target.map(|t| t.distance), collect_target.map(|t| t.distance),

View File

@ -426,12 +426,12 @@ impl PlayState for SessionState {
drop(client); drop(client);
// Nearest block to consider with GameInput primary or secondary key. // Nearest block to consider with GameInput primary or secondary key.
let nearest_block_dist = find_shortest_distance(&mut [ let nearest_block_dist = find_shortest_distance(&[
mine_target.filter(|_| is_mining).map(|t| t.distance), mine_target.filter(|_| is_mining).map(|t| t.distance),
build_target.filter(|_| can_build).map(|t| t.distance), build_target.filter(|_| can_build).map(|t| t.distance),
]); ]);
// Nearest block to be highlighted in the scene (self.scene.set_select_pos). // Nearest block to be highlighted in the scene (self.scene.set_select_pos).
let nearest_scene_dist = find_shortest_distance(&mut [ let nearest_scene_dist = find_shortest_distance(&[
nearest_block_dist, nearest_block_dist,
collect_target.filter(|_| !is_mining).map(|t| t.distance), collect_target.filter(|_| !is_mining).map(|t| t.distance),
]); ]);
@ -513,7 +513,7 @@ impl PlayState for SessionState {
client.handle_input( client.handle_input(
InputKind::Secondary, InputKind::Secondary,
state, state,
None, default_select_pos,
self.target_entity, self.target_entity,
); );
} }
@ -1542,7 +1542,7 @@ impl PlayState for SessionState {
fn egui_enabled(&self) -> bool { true } fn egui_enabled(&self) -> bool { true }
} }
fn find_shortest_distance(arr: &mut [Option<f32>]) -> Option<f32> { fn find_shortest_distance(arr: &[Option<f32>]) -> Option<f32> {
arr.iter() arr.iter()
.filter_map(|x| *x) .filter_map(|x| *x)
.min_by(|d1, d2| OrderedFloat(*d1).cmp(&OrderedFloat(*d2))) .min_by(|d1, d2| OrderedFloat(*d1).cmp(&OrderedFloat(*d2)))

View File

@ -103,7 +103,7 @@ pub(super) fn targets_under_cursor(
let (mine_pos, _, mine_cam_ray) = is_mining let (mine_pos, _, mine_cam_ray) = is_mining
.then(|| find_pos(|b: Block| b.mine_tool().is_some())) .then(|| find_pos(|b: Block| b.mine_tool().is_some()))
.unwrap_or((None, None, None)); .unwrap_or((None, None, None));
let (solid_pos, place_block_pos, solid_cam_ray) = find_pos(|b: Block| b.is_opaque()); let (solid_pos, place_block_pos, solid_cam_ray) = find_pos(|b: Block| b.is_filled());
// See if ray hits entities // See if ray hits entities
// Don't cast through blocks, (hence why use shortest_cam_dist from non-entity // Don't cast through blocks, (hence why use shortest_cam_dist from non-entity