mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Merge branch 'woeful/1923-wrong-digging-tooltip' into 'master'
Fixes #1923 - Pickaxe tooltip wrong for digging Closes #1923 See merge request veloren/veloren!4263
This commit is contained in:
commit
0755f339a2
@ -669,7 +669,7 @@ pub struct DebugInfo {
|
|||||||
|
|
||||||
pub struct HudInfo {
|
pub struct HudInfo {
|
||||||
pub is_aiming: bool,
|
pub is_aiming: bool,
|
||||||
pub is_mining: bool,
|
pub active_mine_tool: Option<ToolKind>,
|
||||||
pub is_first_person: bool,
|
pub is_first_person: bool,
|
||||||
pub viewpoint_entity: specs::Entity,
|
pub viewpoint_entity: specs::Entity,
|
||||||
pub mutable_viewpoint: bool,
|
pub mutable_viewpoint: bool,
|
||||||
@ -2122,37 +2122,25 @@ impl Hud {
|
|||||||
})]
|
})]
|
||||||
},
|
},
|
||||||
BlockInteraction::Mine(mine_tool) => {
|
BlockInteraction::Mine(mine_tool) => {
|
||||||
if info.is_mining {
|
match (mine_tool, &info.active_mine_tool) {
|
||||||
match mine_tool {
|
(ToolKind::Pick, Some(ToolKind::Pick)) => {
|
||||||
ToolKind::Pick => {
|
|
||||||
vec![(
|
vec![(
|
||||||
Some(GameInput::Primary),
|
Some(GameInput::Primary),
|
||||||
i18n.get_msg("hud-mine").to_string(),
|
i18n.get_msg("hud-mine").to_string(),
|
||||||
)]
|
)]
|
||||||
},
|
},
|
||||||
ToolKind::Shovel => {
|
(ToolKind::Pick, _) => {
|
||||||
|
vec![(None, i18n.get_msg("hud-mine-needs_pickaxe").to_string())]
|
||||||
|
},
|
||||||
|
(ToolKind::Shovel, Some(ToolKind::Shovel)) => {
|
||||||
vec![(
|
vec![(
|
||||||
Some(GameInput::Primary),
|
Some(GameInput::Primary),
|
||||||
i18n.get_msg("hud-dig").to_string(),
|
i18n.get_msg("hud-dig").to_string(),
|
||||||
)]
|
)]
|
||||||
},
|
},
|
||||||
_ => {
|
(ToolKind::Shovel, _) => {
|
||||||
vec![(
|
|
||||||
None,
|
|
||||||
i18n.get_msg("hud-mine-needs_unhandled_case").to_string(),
|
|
||||||
)]
|
|
||||||
},
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
match mine_tool {
|
|
||||||
ToolKind::Pick => {
|
|
||||||
vec![(None, i18n.get_msg("hud-mine-needs_pickaxe").to_string())]
|
|
||||||
},
|
|
||||||
ToolKind::Shovel => {
|
|
||||||
vec![(None, i18n.get_msg("hud-mine-needs_shovel").to_string())]
|
vec![(None, i18n.get_msg("hud-mine-needs_shovel").to_string())]
|
||||||
}
|
},
|
||||||
// TODO: The required tool for mining something may not always be a
|
|
||||||
// pickaxe!
|
|
||||||
_ => {
|
_ => {
|
||||||
vec![(
|
vec![(
|
||||||
None,
|
None,
|
||||||
@ -2160,7 +2148,6 @@ impl Hud {
|
|||||||
)]
|
)]
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
|
||||||
},
|
},
|
||||||
BlockInteraction::Mount => {
|
BlockInteraction::Mount => {
|
||||||
let key = match block.get_sprite() {
|
let key = match block.get_sprite() {
|
||||||
|
@ -601,15 +601,16 @@ impl PlayState for SessionState {
|
|||||||
.get(player_entity)
|
.get(player_entity)
|
||||||
.map_or_else(|| false, |cb| cb.enabled);
|
.map_or_else(|| false, |cb| cb.enabled);
|
||||||
|
|
||||||
let is_mining = client
|
let active_mine_tool: Option<ToolKind> = if client.is_wielding() == Some(true) {
|
||||||
|
client
|
||||||
.inventories()
|
.inventories()
|
||||||
.get(player_entity)
|
.get(player_entity)
|
||||||
.and_then(|inv| inv.equipped(EquipSlot::ActiveMainhand))
|
.and_then(|inv| inv.equipped(EquipSlot::ActiveMainhand))
|
||||||
.and_then(|item| item.tool_info())
|
.and_then(|item| item.tool_info())
|
||||||
.map_or(false, |tool_kind| {
|
.filter(|tool_kind| matches!(tool_kind, ToolKind::Pick | ToolKind::Shovel))
|
||||||
matches!(tool_kind, ToolKind::Pick | ToolKind::Shovel)
|
} else {
|
||||||
})
|
None
|
||||||
&& client.is_wielding() == Some(true);
|
};
|
||||||
|
|
||||||
// Check to see whether we're aiming at anything
|
// Check to see whether we're aiming at anything
|
||||||
let (build_target, collect_target, entity_target, mine_target, terrain_target) =
|
let (build_target, collect_target, entity_target, mine_target, terrain_target) =
|
||||||
@ -618,7 +619,7 @@ impl PlayState for SessionState {
|
|||||||
cam_pos,
|
cam_pos,
|
||||||
cam_dir,
|
cam_dir,
|
||||||
can_build,
|
can_build,
|
||||||
is_mining,
|
active_mine_tool,
|
||||||
self.viewpoint_entity().0,
|
self.viewpoint_entity().0,
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -651,17 +652,21 @@ impl PlayState for SessionState {
|
|||||||
|
|
||||||
// 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(&[
|
let nearest_block_dist = find_shortest_distance(&[
|
||||||
mine_target.filter(|_| is_mining).map(|t| t.distance),
|
mine_target
|
||||||
|
.filter(|_| active_mine_tool.is_some())
|
||||||
|
.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(&[
|
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(|_| active_mine_tool.is_none())
|
||||||
|
.map(|t| t.distance),
|
||||||
]);
|
]);
|
||||||
// Set break_block_pos only if mining is closest.
|
// Set break_block_pos only if mining is closest.
|
||||||
self.inputs.break_block_pos = if let Some(mt) =
|
self.inputs.break_block_pos = if let Some(mt) = mine_target
|
||||||
mine_target.filter(|mt| is_mining && nearest_scene_dist == Some(mt.distance))
|
.filter(|mt| active_mine_tool.is_some() && nearest_scene_dist == Some(mt.distance))
|
||||||
{
|
{
|
||||||
self.scene.set_select_pos(Some(mt.position_int()));
|
self.scene.set_select_pos(Some(mt.position_int()));
|
||||||
Some(mt.position)
|
Some(mt.position)
|
||||||
@ -1507,7 +1512,7 @@ impl PlayState for SessionState {
|
|||||||
global_state.clock.get_stable_dt(),
|
global_state.clock.get_stable_dt(),
|
||||||
HudInfo {
|
HudInfo {
|
||||||
is_aiming,
|
is_aiming,
|
||||||
is_mining,
|
active_mine_tool,
|
||||||
is_first_person: matches!(
|
is_first_person: matches!(
|
||||||
self.scene.camera().get_mode(),
|
self.scene.camera().get_mode(),
|
||||||
camera::CameraMode::FirstPerson
|
camera::CameraMode::FirstPerson
|
||||||
|
@ -3,7 +3,7 @@ use vek::*;
|
|||||||
|
|
||||||
use client::{self, Client};
|
use client::{self, Client};
|
||||||
use common::{
|
use common::{
|
||||||
comp,
|
comp::{self, tool::ToolKind},
|
||||||
consts::MAX_PICKUP_RANGE,
|
consts::MAX_PICKUP_RANGE,
|
||||||
link::Is,
|
link::Is,
|
||||||
mounting::{Mount, Rider},
|
mounting::{Mount, Rider},
|
||||||
@ -50,7 +50,7 @@ pub(super) fn targets_under_cursor(
|
|||||||
cam_pos: Vec3<f32>,
|
cam_pos: Vec3<f32>,
|
||||||
cam_dir: Vec3<f32>,
|
cam_dir: Vec3<f32>,
|
||||||
can_build: bool,
|
can_build: bool,
|
||||||
is_mining: bool,
|
active_mine_tool: Option<ToolKind>,
|
||||||
viewpoint_entity: specs::Entity,
|
viewpoint_entity: specs::Entity,
|
||||||
) -> (
|
) -> (
|
||||||
Option<Target<Build>>,
|
Option<Target<Build>>,
|
||||||
@ -103,7 +103,8 @@ pub(super) fn targets_under_cursor(
|
|||||||
};
|
};
|
||||||
|
|
||||||
let (collect_pos, _, collect_cam_ray) = find_pos(|b: Block| b.is_collectible());
|
let (collect_pos, _, collect_cam_ray) = find_pos(|b: Block| b.is_collectible());
|
||||||
let (mine_pos, _, mine_cam_ray) = is_mining
|
let (mine_pos, _, mine_cam_ray) = active_mine_tool
|
||||||
|
.is_some()
|
||||||
.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_filled());
|
let (solid_pos, place_block_pos, solid_cam_ray) = find_pos(|b: Block| b.is_filled());
|
||||||
|
Loading…
Reference in New Issue
Block a user