mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Deduplicate bar text
This commit is contained in:
parent
e6c451ca4b
commit
1bdab02aad
@ -2,6 +2,7 @@ use crate::comp::Body;
|
|||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use specs::{Component, DerefFlaggedStorage};
|
use specs::{Component, DerefFlaggedStorage};
|
||||||
use specs_idvs::IdvStorage;
|
use specs_idvs::IdvStorage;
|
||||||
|
use std::cmp;
|
||||||
|
|
||||||
pub const ENERGY_PER_LEVEL: u32 = 50;
|
pub const ENERGY_PER_LEVEL: u32 = 50;
|
||||||
#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)]
|
#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)]
|
||||||
@ -116,6 +117,9 @@ impl Energy {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns the fraction of energy an entity has remaining
|
||||||
|
pub fn fraction(&self) -> f32 { self.current as f32 / cmp::max(self.maximum, 1) as f32 }
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct EnergyChange {
|
pub struct EnergyChange {
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
use crate::comp::Body;
|
use crate::comp::Body;
|
||||||
use crate::{uid::Uid, DamageSource};
|
use crate::{uid::Uid, DamageSource};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
use std::cmp;
|
||||||
|
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
use specs::{Component, DerefFlaggedStorage};
|
use specs::{Component, DerefFlaggedStorage};
|
||||||
@ -142,7 +143,7 @@ impl Health {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the fraction of health an entity has remaining
|
/// Returns the fraction of health an entity has remaining
|
||||||
pub fn fraction(&self) -> f32 { self.current as f32 / self.maximum.max(1) as f32 }
|
pub fn fraction(&self) -> f32 { self.current as f32 / cmp::max(self.maximum, 1) as f32 }
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
@ -29,10 +29,12 @@ use common::comp::{
|
|||||||
Energy, Health, Inventory, SkillSet,
|
Energy, Health, Inventory, SkillSet,
|
||||||
};
|
};
|
||||||
use conrod_core::{
|
use conrod_core::{
|
||||||
|
UiCell,
|
||||||
color,
|
color,
|
||||||
widget::{self, Button, Image, Rectangle, Text},
|
widget::{self, Button, Image, Rectangle, Text},
|
||||||
widget_ids, Color, Colorable, Positionable, Sizeable, Widget, WidgetCommon,
|
widget_ids, Color, Colorable, Positionable, Sizeable, Widget, WidgetCommon,
|
||||||
};
|
};
|
||||||
|
use std::cmp;
|
||||||
use vek::*;
|
use vek::*;
|
||||||
|
|
||||||
widget_ids! {
|
widget_ids! {
|
||||||
@ -373,20 +375,22 @@ impl<'a> Widget for Skillbar<'a> {
|
|||||||
common_base::prof_span!("Skillbar::update");
|
common_base::prof_span!("Skillbar::update");
|
||||||
let widget::UpdateArgs { state, ui, .. } = args;
|
let widget::UpdateArgs { state, ui, .. } = args;
|
||||||
|
|
||||||
let max_hp = self.health.base_max().max(self.health.maximum());
|
let (hp_percentage, energy_percentage): (f64, f64) = if self.health.is_dead {
|
||||||
|
(0.0, 0.0)
|
||||||
let mut hp_percentage = self.health.current() as f64 / max_hp as f64 * 100.0;
|
} else {
|
||||||
let mut energy_percentage =
|
let max_hp = cmp::max(self.health.base_max(), self.health.maximum()) as f64;
|
||||||
self.energy.current() as f64 / self.energy.maximum() as f64 * 100.0;
|
let current_hp = self.health.current() as f64;
|
||||||
if self.health.is_dead {
|
(
|
||||||
hp_percentage = 0.0;
|
current_hp / max_hp * 100.0,
|
||||||
energy_percentage = 0.0;
|
(self.energy.fraction() * 100.0).into(),
|
||||||
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
let bar_values = self.global_state.settings.interface.bar_numbers;
|
let bar_values = self.global_state.settings.interface.bar_numbers;
|
||||||
let shortcuts = self.global_state.settings.interface.shortcut_numbers;
|
let shortcuts = self.global_state.settings.interface.shortcut_numbers;
|
||||||
|
|
||||||
let hp_ani = (self.pulse * 4.0/* speed factor */).cos() * 0.5 + 0.8; //Animation timer
|
// Animation timer
|
||||||
|
let hp_ani = (self.pulse * 4.0/* speed factor */).cos() * 0.5 + 0.8;
|
||||||
let crit_hp_color: Color = Color::Rgba(0.79, 0.19, 0.17, hp_ani);
|
let crit_hp_color: Color = Color::Rgba(0.79, 0.19, 0.17, hp_ani);
|
||||||
|
|
||||||
let localized_strings = self.localized_strings;
|
let localized_strings = self.localized_strings;
|
||||||
@ -514,81 +518,63 @@ impl<'a> Widget for Skillbar<'a> {
|
|||||||
.set(state.ids.frame_stamina, ui);
|
.set(state.ids.frame_stamina, ui);
|
||||||
}
|
}
|
||||||
// Bar Text
|
// Bar Text
|
||||||
// Values
|
let show_bar_text = |hp_txt: &str, energy_txt: &str, ui: &mut UiCell| {
|
||||||
if let BarNumbers::Values = bar_values {
|
Text::new(hp_txt)
|
||||||
let mut hp_txt = format!(
|
.middle_of(state.ids.frame_health)
|
||||||
|
.font_size(self.fonts.cyri.scale(12))
|
||||||
|
.font_id(self.fonts.cyri.conrod_id)
|
||||||
|
.color(Color::Rgba(0.0, 0.0, 0.0, 1.0))
|
||||||
|
.set(state.ids.hp_txt_bg, ui);
|
||||||
|
Text::new(hp_txt)
|
||||||
|
.bottom_left_with_margins_on(state.ids.hp_txt_bg, 2.0, 2.0)
|
||||||
|
.font_size(self.fonts.cyri.scale(12))
|
||||||
|
.font_id(self.fonts.cyri.conrod_id)
|
||||||
|
.color(TEXT_COLOR)
|
||||||
|
.set(state.ids.hp_txt, ui);
|
||||||
|
Text::new(energy_txt)
|
||||||
|
.middle_of(state.ids.frame_stamina)
|
||||||
|
.font_size(self.fonts.cyri.scale(12))
|
||||||
|
.font_id(self.fonts.cyri.conrod_id)
|
||||||
|
.color(Color::Rgba(0.0, 0.0, 0.0, 1.0))
|
||||||
|
.set(state.ids.stamina_txt_bg, ui);
|
||||||
|
Text::new(energy_txt)
|
||||||
|
.bottom_left_with_margins_on(state.ids.stamina_txt_bg, 2.0, 2.0)
|
||||||
|
.font_size(self.fonts.cyri.scale(12))
|
||||||
|
.font_id(self.fonts.cyri.conrod_id)
|
||||||
|
.color(TEXT_COLOR)
|
||||||
|
.set(state.ids.stamina_txt, ui);
|
||||||
|
};
|
||||||
|
let bar_text = if self.health.is_dead {
|
||||||
|
Some((
|
||||||
|
self.localized_strings.get("hud.group.dead").to_owned(),
|
||||||
|
self.localized_strings.get("hud.group.dead").to_owned(),
|
||||||
|
))
|
||||||
|
} else if let BarNumbers::Values = bar_values {
|
||||||
|
Some((
|
||||||
|
format!(
|
||||||
"{}/{}",
|
"{}/{}",
|
||||||
(self.health.current() / 10).max(1) as u32, /* Don't show 0 health for
|
(self.health.current() / 10).max(1) as u32, /* Don't show 0 health for
|
||||||
* living players */
|
* living players */
|
||||||
(self.health.maximum() / 10) as u32
|
(self.health.maximum() / 10) as u32
|
||||||
);
|
),
|
||||||
let mut energy_txt = format!(
|
format!(
|
||||||
"{}/{}",
|
"{}/{}",
|
||||||
(self.energy.current() / 10) as u32,
|
(self.energy.current() / 10) as u32,
|
||||||
(self.energy.maximum() / 10) as u32
|
(self.energy.maximum() / 10) as u32
|
||||||
);
|
),
|
||||||
if self.health.is_dead {
|
))
|
||||||
hp_txt = self.localized_strings.get("hud.group.dead").to_string();
|
} else if let BarNumbers::Percent = bar_values {
|
||||||
energy_txt = self.localized_strings.get("hud.group.dead").to_string();
|
Some((
|
||||||
|
format!("{}%", hp_percentage as u32),
|
||||||
|
format!("{}%", energy_percentage as u32),
|
||||||
|
))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
};
|
};
|
||||||
Text::new(&hp_txt)
|
if let Some((hp_txt, energy_txt)) = bar_text {
|
||||||
.middle_of(state.ids.frame_health)
|
show_bar_text(&hp_txt, &energy_txt, ui);
|
||||||
.font_size(self.fonts.cyri.scale(12))
|
|
||||||
.font_id(self.fonts.cyri.conrod_id)
|
|
||||||
.color(Color::Rgba(0.0, 0.0, 0.0, 1.0))
|
|
||||||
.set(state.ids.hp_txt_bg, ui);
|
|
||||||
Text::new(&hp_txt)
|
|
||||||
.bottom_left_with_margins_on(state.ids.hp_txt_bg, 2.0, 2.0)
|
|
||||||
.font_size(self.fonts.cyri.scale(12))
|
|
||||||
.font_id(self.fonts.cyri.conrod_id)
|
|
||||||
.color(TEXT_COLOR)
|
|
||||||
.set(state.ids.hp_txt, ui);
|
|
||||||
Text::new(&energy_txt)
|
|
||||||
.middle_of(state.ids.frame_stamina)
|
|
||||||
.font_size(self.fonts.cyri.scale(12))
|
|
||||||
.font_id(self.fonts.cyri.conrod_id)
|
|
||||||
.color(Color::Rgba(0.0, 0.0, 0.0, 1.0))
|
|
||||||
.set(state.ids.stamina_txt_bg, ui);
|
|
||||||
Text::new(&energy_txt)
|
|
||||||
.bottom_left_with_margins_on(state.ids.stamina_txt_bg, 2.0, 2.0)
|
|
||||||
.font_size(self.fonts.cyri.scale(12))
|
|
||||||
.font_id(self.fonts.cyri.conrod_id)
|
|
||||||
.color(TEXT_COLOR)
|
|
||||||
.set(state.ids.stamina_txt, ui);
|
|
||||||
}
|
|
||||||
//Percentages
|
|
||||||
if let BarNumbers::Percent = bar_values {
|
|
||||||
let mut hp_txt = format!("{}%", hp_percentage as u32);
|
|
||||||
let mut energy_txt = format!("{}", energy_percentage as u32);
|
|
||||||
if self.health.is_dead {
|
|
||||||
hp_txt = self.localized_strings.get("hud.group.dead").to_string();
|
|
||||||
energy_txt = self.localized_strings.get("hud.group.dead").to_string();
|
|
||||||
};
|
|
||||||
Text::new(&hp_txt)
|
|
||||||
.middle_of(state.ids.frame_health)
|
|
||||||
.font_size(self.fonts.cyri.scale(12))
|
|
||||||
.font_id(self.fonts.cyri.conrod_id)
|
|
||||||
.color(Color::Rgba(0.0, 0.0, 0.0, 1.0))
|
|
||||||
.set(state.ids.hp_txt_bg, ui);
|
|
||||||
Text::new(&hp_txt)
|
|
||||||
.bottom_left_with_margins_on(state.ids.hp_txt_bg, 2.0, 2.0)
|
|
||||||
.font_size(self.fonts.cyri.scale(12))
|
|
||||||
.font_id(self.fonts.cyri.conrod_id)
|
|
||||||
.color(TEXT_COLOR)
|
|
||||||
.set(state.ids.hp_txt, ui);
|
|
||||||
Text::new(&energy_txt)
|
|
||||||
.middle_of(state.ids.frame_stamina)
|
|
||||||
.font_size(self.fonts.cyri.scale(12))
|
|
||||||
.font_id(self.fonts.cyri.conrod_id)
|
|
||||||
.color(Color::Rgba(0.0, 0.0, 0.0, 1.0))
|
|
||||||
.set(state.ids.stamina_txt_bg, ui);
|
|
||||||
Text::new(&energy_txt)
|
|
||||||
.bottom_left_with_margins_on(state.ids.stamina_txt_bg, 2.0, 2.0)
|
|
||||||
.font_size(self.fonts.cyri.scale(12))
|
|
||||||
.font_id(self.fonts.cyri.conrod_id)
|
|
||||||
.color(TEXT_COLOR)
|
|
||||||
.set(state.ids.stamina_txt, ui);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Slots
|
// Slots
|
||||||
// TODO: avoid this
|
// TODO: avoid this
|
||||||
let content_source = (self.hotbar, self.inventory, self.energy, self.skillset);
|
let content_source = (self.hotbar, self.inventory, self.energy, self.skillset);
|
||||||
@ -683,8 +669,8 @@ impl<'a> Widget for Skillbar<'a> {
|
|||||||
_ => None,
|
_ => None,
|
||||||
}),
|
}),
|
||||||
hotbar::SlotContents::Ability4 => {
|
hotbar::SlotContents::Ability4 => {
|
||||||
let hands =
|
let hands = |equip_slot| match inventory.equipped(equip_slot).map(|i| i.kind())
|
||||||
|equip_slot| match inventory.equipped(equip_slot).map(|i| i.kind()) {
|
{
|
||||||
Some(ItemKind::Tool(tool)) => Some(tool.hands),
|
Some(ItemKind::Tool(tool)) => Some(tool.hands),
|
||||||
_ => None,
|
_ => None,
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user