mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Make skillbar buttons account for energy cost reduction
Previously, the buttons would compare the current energy to the base cost of the ability, so they would sometimes be grayed out while the ability was usable. Now they ajust the ability with the character skillset before getting the energy cost for the purposes of setting the skillbar icon color.
This commit is contained in:
parent
fef68ad2a1
commit
4f71c621f4
@ -96,6 +96,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
- Server now denies any running trades when a user exits to the character selection screen.
|
||||
- Sfx volume changes now also change the ambient sounds volume
|
||||
- Staff fire shockwave ability no longer has an unlimited vertical range
|
||||
- Skillbar buttons correctly account for skill points when checking if player has enough stamina for the ability.
|
||||
|
||||
## [0.9.0] - 2021-03-20
|
||||
|
||||
|
@ -2267,6 +2267,7 @@ impl Hud {
|
||||
let healths = ecs.read_storage::<comp::Health>();
|
||||
let inventories = ecs.read_storage::<comp::Inventory>();
|
||||
let energies = ecs.read_storage::<comp::Energy>();
|
||||
let skillsets = ecs.read_storage::<comp::SkillSet>();
|
||||
let character_states = ecs.read_storage::<comp::CharacterState>();
|
||||
let controllers = ecs.read_storage::<comp::Controller>();
|
||||
let ability_map = ecs.fetch::<comp::item::tool::AbilityMap>();
|
||||
@ -2289,12 +2290,14 @@ impl Hud {
|
||||
Some(health),
|
||||
Some(inventory),
|
||||
Some(energy),
|
||||
Some(skillset),
|
||||
Some(_character_state),
|
||||
Some(_controller),
|
||||
) = (
|
||||
healths.get(entity),
|
||||
inventories.get(entity),
|
||||
energies.get(entity),
|
||||
skillsets.get(entity),
|
||||
character_states.get(entity),
|
||||
controllers.get(entity).map(|c| &c.inputs),
|
||||
) {
|
||||
@ -2308,6 +2311,7 @@ impl Hud {
|
||||
&health,
|
||||
&inventory,
|
||||
&energy,
|
||||
&skillset,
|
||||
//&character_state,
|
||||
self.pulse,
|
||||
//&controller,
|
||||
|
@ -26,7 +26,7 @@ use common::comp::{
|
||||
tool::{AbilityMap, Tool, ToolKind},
|
||||
Hands, Item, ItemKind, MaterialStatManifest,
|
||||
},
|
||||
Energy, Health, Inventory,
|
||||
Energy, Health, Inventory, SkillSet,
|
||||
};
|
||||
use conrod_core::{
|
||||
color,
|
||||
@ -142,6 +142,7 @@ pub struct Skillbar<'a> {
|
||||
health: &'a Health,
|
||||
inventory: &'a Inventory,
|
||||
energy: &'a Energy,
|
||||
skillset: &'a SkillSet,
|
||||
// character_state: &'a CharacterState,
|
||||
// controller: &'a ControllerInputs,
|
||||
hotbar: &'a hotbar::State,
|
||||
@ -169,6 +170,7 @@ impl<'a> Skillbar<'a> {
|
||||
health: &'a Health,
|
||||
inventory: &'a Inventory,
|
||||
energy: &'a Energy,
|
||||
skillset: &'a SkillSet,
|
||||
// character_state: &'a CharacterState,
|
||||
pulse: f32,
|
||||
// controller: &'a ControllerInputs,
|
||||
@ -191,6 +193,7 @@ impl<'a> Skillbar<'a> {
|
||||
health,
|
||||
inventory,
|
||||
energy,
|
||||
skillset,
|
||||
common: widget::CommonBuilder::default(),
|
||||
// character_state,
|
||||
pulse,
|
||||
@ -449,6 +452,7 @@ impl<'a> Widget for Skillbar<'a> {
|
||||
self.hotbar,
|
||||
self.inventory,
|
||||
self.energy,
|
||||
self.skillset,
|
||||
self.ability_map,
|
||||
self.msm,
|
||||
); // TODO: avoid this
|
||||
@ -739,6 +743,7 @@ impl<'a> Widget for Skillbar<'a> {
|
||||
>= tool
|
||||
.get_abilities(&self.msm, item.components(), self.ability_map)
|
||||
.secondary
|
||||
.adjusted_by_skills(self.skillset, Some(tool.kind))
|
||||
.get_energy_cost()
|
||||
{
|
||||
Color::Rgba(1.0, 1.0, 1.0, 1.0)
|
||||
|
@ -10,7 +10,7 @@ use common::comp::{
|
||||
ItemKind, MaterialStatManifest,
|
||||
},
|
||||
slot::InvSlotId,
|
||||
Energy, Inventory,
|
||||
Energy, Inventory, SkillSet,
|
||||
};
|
||||
use conrod_core::{image, Color};
|
||||
use specs::Entity as EcsEntity;
|
||||
@ -126,6 +126,7 @@ type HotbarSource<'a> = (
|
||||
&'a hotbar::State,
|
||||
&'a Inventory,
|
||||
&'a Energy,
|
||||
&'a SkillSet,
|
||||
&'a AbilityMap,
|
||||
&'a MaterialStatManifest,
|
||||
);
|
||||
@ -136,7 +137,7 @@ impl<'a> SlotKey<HotbarSource<'a>, HotbarImageSource<'a>> for HotbarSlot {
|
||||
|
||||
fn image_key(
|
||||
&self,
|
||||
(hotbar, inventory, energy, ability_map, msm): &HotbarSource<'a>,
|
||||
(hotbar, inventory, energy, skillset, ability_map, msm): &HotbarSource<'a>,
|
||||
) -> Option<(Self::ImageKey, Option<Color>)> {
|
||||
hotbar.get(*self).and_then(|contents| match contents {
|
||||
hotbar::SlotContents::Inventory(idx) => inventory
|
||||
@ -173,7 +174,13 @@ impl<'a> SlotKey<HotbarSource<'a>, HotbarImageSource<'a>> for HotbarSlot {
|
||||
.abilities
|
||||
.get(0)
|
||||
{
|
||||
if energy.current() >= skill.1.get_energy_cost() {
|
||||
if energy.current()
|
||||
>= skill
|
||||
.1
|
||||
.clone()
|
||||
.adjusted_by_skills(skillset, Some(tool.kind))
|
||||
.get_energy_cost()
|
||||
{
|
||||
Some(Color::Rgba(1.0, 1.0, 1.0, 1.0))
|
||||
} else {
|
||||
Some(Color::Rgba(0.3, 0.3, 0.3, 0.8))
|
||||
@ -217,7 +224,13 @@ impl<'a> SlotKey<HotbarSource<'a>, HotbarImageSource<'a>> for HotbarSlot {
|
||||
.abilities
|
||||
.get(skill_index)
|
||||
{
|
||||
if energy.current() >= skill.1.get_energy_cost() {
|
||||
if energy.current()
|
||||
>= skill
|
||||
.1
|
||||
.clone()
|
||||
.adjusted_by_skills(skillset, Some(tool.kind))
|
||||
.get_energy_cost()
|
||||
{
|
||||
Some(Color::Rgba(1.0, 1.0, 1.0, 1.0))
|
||||
} else {
|
||||
Some(Color::Rgba(0.3, 0.3, 0.3, 0.8))
|
||||
@ -232,7 +245,7 @@ impl<'a> SlotKey<HotbarSource<'a>, HotbarImageSource<'a>> for HotbarSlot {
|
||||
})
|
||||
}
|
||||
|
||||
fn amount(&self, (hotbar, inventory, _, _, _): &HotbarSource<'a>) -> Option<u32> {
|
||||
fn amount(&self, (hotbar, inventory, _, _, _, _): &HotbarSource<'a>) -> Option<u32> {
|
||||
hotbar
|
||||
.get(*self)
|
||||
.and_then(|content| match content {
|
||||
|
Loading…
Reference in New Issue
Block a user