diff --git a/assets/server/manifests/presets.ron b/assets/server/manifests/presets.ron index 615af7a8da..136ef46054 100644 --- a/assets/server/manifests/presets.ron +++ b/assets/server/manifests/presets.ron @@ -127,6 +127,10 @@ (Sceptre(ADuration), 2), (Sceptre(ARange), 2), (Sceptre(ACost), 2), + // Mining + (Pick(Speed), 3), + (Pick(OreGain), 3), + (Pick(GemGain), 3), ], // Just copypasta from max with random reductions "middle": [ diff --git a/assets/voxygen/element/weapons/pickaxe.png b/assets/voxygen/element/weapons/pickaxe.png new file mode 100644 index 0000000000..9346118046 --- /dev/null +++ b/assets/voxygen/element/weapons/pickaxe.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a179c4898dabc76a0f0ebd660fb8c979f2548a9bd367c71b91a9eb06676ae23 +size 466 diff --git a/server/src/cmd.rs b/server/src/cmd.rs index eb6af36349..e2499761af 100644 --- a/server/src/cmd.rs +++ b/server/src/cmd.rs @@ -2610,7 +2610,7 @@ fn parse_skill_tree(skill_tree: &str) -> CmdResult "bow" => Ok(SkillGroupKind::Weapon(ToolKind::Bow)), "staff" => Ok(SkillGroupKind::Weapon(ToolKind::Staff)), "sceptre" => Ok(SkillGroupKind::Weapon(ToolKind::Sceptre)), - "pick" => Ok(SkillGroupKind::Weapon(ToolKind::Pick)), + "mining" => Ok(SkillGroupKind::Weapon(ToolKind::Pick)), _ => Err(format!("{} is not a skill group!", skill_tree)), } } diff --git a/voxygen/src/hud/img_ids.rs b/voxygen/src/hud/img_ids.rs index 2a48f5e028..6b5b5cfec0 100644 --- a/voxygen/src/hud/img_ids.rs +++ b/voxygen/src/hud/img_ids.rs @@ -80,6 +80,7 @@ image_ids! { staff: "voxygen.element.weapons.staff", mining: "voxygen.element.weapons.mining", pickaxe: "voxygen.element.skills.pickaxe", + pickaxe_ico: "voxygen.element.weapons.pickaxe", lock: "voxygen.element.ui.diary.buttons.lock", wpn_icon_border_skills: "voxygen.element.ui.diary.buttons.border_skills", wpn_icon_border: "voxygen.element.ui.generic.buttons.border", diff --git a/voxygen/src/hud/mod.rs b/voxygen/src/hud/mod.rs index b2944c0f39..a1501f6a2c 100644 --- a/voxygen/src/hud/mod.rs +++ b/voxygen/src/hud/mod.rs @@ -98,7 +98,7 @@ use conrod_core::{ widget::{self, Button, Image, Text}, widget_ids, Color, Colorable, Labelable, Positionable, Sizeable, Widget, }; -use hashbrown::HashMap; +use hashbrown::{HashMap, HashSet}; use rand::Rng; use specs::{Entity as EcsEntity, Join, WorldExt}; use std::{ @@ -211,6 +211,7 @@ widget_ids! { player_rank_up_icon, sct_exp_bgs[], sct_exps[], + sct_exp_icons[], sct_lvl_bg, sct_lvl, hurt_bg, @@ -324,6 +325,7 @@ pub struct ExpFloater { pub exp_change: i32, pub timer: f32, pub rand_offset: (f32, f32), + pub xp_pools: HashSet, } pub struct SkillPointGain { @@ -1252,7 +1254,11 @@ impl Hud { &mut self.ids.player_scts, &mut ui_widgets.widget_id_generator(), ); - // Increase font size based on fraction of maximum health + let player_sct_icon_id = player_sct_id_walker.next( + &mut self.ids.player_scts, + &mut ui_widgets.widget_id_generator(), + ); + // Increase font size based on fraction of maximum Experience // "flashes" by having a larger size in the first 100ms let font_size_xp = 30 + ((floater.exp_change as f32 / 300.0).min(1.0) * 50.0) as u32; @@ -1266,6 +1272,7 @@ impl Hud { }; if floater.exp_change > 0 { + let xp_pool = &floater.xp_pools; // Don't show 0 Exp Text::new(&format!("{} Exp", floater.exp_change.max(1))) .font_size(font_size_xp) @@ -1280,12 +1287,25 @@ impl Hud { Text::new(&format!("{} Exp", floater.exp_change.max(1))) .font_size(font_size_xp) .font_id(self.fonts.cyri.conrod_id) - .color(Color::Rgba(0.59, 0.41, 0.67, fade)) + .color( + if xp_pool.contains(&SkillGroupKind::Weapon(ToolKind::Pick)) { + Color::Rgba(0.18, 0.32, 0.9, fade) + } else { + Color::Rgba(0.59, 0.41, 0.67, fade) + }, + ) .x_y( ui_widgets.win_w * (0.5 * floater.rand_offset.0 as f64 - 0.25), ui_widgets.win_h * (0.15 * floater.rand_offset.1 as f64) + y, ) .set(player_sct_id, ui_widgets); + // Exp Source Image + if xp_pool.contains(&SkillGroupKind::Weapon(ToolKind::Pick)) { + Image::new(self.imgs.pickaxe_ico) + .w_h(font_size_xp as f64, font_size_xp as f64) + .left_from(player_sct_id, 5.0) + .set(player_sct_icon_id, ui_widgets); + } } } } @@ -1353,7 +1373,7 @@ impl Hud { Weapon(ToolKind::Sceptre) => &i18n.get("common.weapons.sceptre"), Weapon(ToolKind::Bow) => &i18n.get("common.weapons.bow"), Weapon(ToolKind::Staff) => &i18n.get("common.weapons.staff"), - Weapon(ToolKind::Pick) => &i18n.get("common.tool.pick"), + Weapon(ToolKind::Pick) => &i18n.get("common.tool.mining"), _ => "Unknown", }; Text::new(skill) @@ -1378,6 +1398,7 @@ impl Hud { Weapon(ToolKind::Sceptre) => self.imgs.sceptre, Weapon(ToolKind::Bow) => self.imgs.bow, Weapon(ToolKind::Staff) => self.imgs.staff, + Weapon(ToolKind::Pick) => self.imgs.mining, _ => self.imgs.swords_crossed, }) .w_h(20.0, 20.0) @@ -3658,16 +3679,15 @@ impl Hud { pub fn handle_outcome(&mut self, outcome: &Outcome) { match outcome { - Outcome::ExpChange { - uid, - exp, - xp_pools: _, - } => self.floaters.exp_floaters.push(ExpFloater { - owner: *uid, - exp_change: *exp, - timer: 4.0, - rand_offset: rand::thread_rng().gen::<(f32, f32)>(), - }), + Outcome::ExpChange { uid, exp, xp_pools } => { + self.floaters.exp_floaters.push(ExpFloater { + owner: *uid, + exp_change: *exp, + timer: 4.0, + rand_offset: rand::thread_rng().gen::<(f32, f32)>(), + xp_pools: xp_pools.clone(), + }) + }, Outcome::SkillPointGain { uid, skill_tree,