mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Re-allowed for what stage you were on to persist through a roll
This commit is contained in:
parent
404c7f0905
commit
b25a376995
@ -1191,6 +1191,7 @@ impl From<(&CharacterAbility, AbilityInfo)> for CharacterState {
|
|||||||
stage_section: StageSection::Buildup,
|
stage_section: StageSection::Buildup,
|
||||||
was_wielded: false, // false by default. utils might set it to true
|
was_wielded: false, // false by default. utils might set it to true
|
||||||
was_sneak: false,
|
was_sneak: false,
|
||||||
|
was_combo: None,
|
||||||
}),
|
}),
|
||||||
CharacterAbility::ComboMelee {
|
CharacterAbility::ComboMelee {
|
||||||
stage_data,
|
stage_data,
|
||||||
|
@ -36,6 +36,8 @@ pub struct Data {
|
|||||||
pub was_wielded: bool,
|
pub was_wielded: bool,
|
||||||
/// Was sneaking
|
/// Was sneaking
|
||||||
pub was_sneak: bool,
|
pub was_sneak: bool,
|
||||||
|
/// Was in state with combo
|
||||||
|
pub was_combo: Option<(AbilityKey, u32)>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl CharacterBehavior for Data {
|
impl CharacterBehavior for Data {
|
||||||
@ -112,7 +114,9 @@ impl CharacterBehavior for Data {
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// Done
|
// Done
|
||||||
if self.was_wielded {
|
if let Some((key, stage)) = self.was_combo {
|
||||||
|
resume_combo(data, &mut update, key, stage);
|
||||||
|
} else if self.was_wielded {
|
||||||
update.character = CharacterState::Wielding;
|
update.character = CharacterState::Wielding;
|
||||||
} else if self.was_sneak {
|
} else if self.was_sneak {
|
||||||
update.character = CharacterState::Sneak;
|
update.character = CharacterState::Sneak;
|
||||||
@ -123,7 +127,9 @@ impl CharacterBehavior for Data {
|
|||||||
},
|
},
|
||||||
_ => {
|
_ => {
|
||||||
// If it somehow ends up in an incorrect stage section
|
// If it somehow ends up in an incorrect stage section
|
||||||
if self.was_wielded {
|
if let Some((key, stage)) = self.was_combo {
|
||||||
|
resume_combo(data, &mut update, key, stage);
|
||||||
|
} else if self.was_wielded {
|
||||||
update.character = CharacterState::Wielding;
|
update.character = CharacterState::Wielding;
|
||||||
} else if self.was_sneak {
|
} else if self.was_sneak {
|
||||||
update.character = CharacterState::Sneak;
|
update.character = CharacterState::Sneak;
|
||||||
|
@ -529,7 +529,17 @@ pub fn handle_dodge_input(data: &JoinData, update: &mut StateUpdate) {
|
|||||||
})
|
})
|
||||||
.filter(|ability| ability.requirements_paid(data, update))
|
.filter(|ability| ability.requirements_paid(data, update))
|
||||||
{
|
{
|
||||||
if data.character.is_wield() {
|
if let CharacterState::ComboMelee(c) = data.character {
|
||||||
|
update.character = (
|
||||||
|
&ability,
|
||||||
|
AbilityInfo::from_key(data, AbilityKey::Dodge, false),
|
||||||
|
)
|
||||||
|
.into();
|
||||||
|
if let CharacterState::Roll(roll) = &mut update.character {
|
||||||
|
roll.was_combo = Some((c.static_data.ability_info.key, c.stage));
|
||||||
|
roll.was_wielded = true;
|
||||||
|
}
|
||||||
|
} else if data.character.is_wield() {
|
||||||
update.character = (
|
update.character = (
|
||||||
&ability,
|
&ability,
|
||||||
AbilityInfo::from_key(data, AbilityKey::Dodge, false),
|
AbilityInfo::from_key(data, AbilityKey::Dodge, false),
|
||||||
@ -576,6 +586,16 @@ pub fn handle_interrupt(data: &JoinData, update: &mut StateUpdate, attacks_inter
|
|||||||
handle_dodge_input(data, update);
|
handle_dodge_input(data, update);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn resume_combo(data: &JoinData, update: &mut StateUpdate, key: AbilityKey, stage: u32) {
|
||||||
|
if ability_key_is_pressed(data, key) {
|
||||||
|
handle_interrupt(data, update, true);
|
||||||
|
}
|
||||||
|
// If other states are introduced that progress through stages, add them here
|
||||||
|
if let CharacterState::ComboMelee(c) = &mut update.character {
|
||||||
|
c.stage = stage;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn ability_key_is_pressed(data: &JoinData, ability_key: AbilityKey) -> bool {
|
pub fn ability_key_is_pressed(data: &JoinData, ability_key: AbilityKey) -> bool {
|
||||||
match ability_key {
|
match ability_key {
|
||||||
AbilityKey::Mouse1 => data.inputs.primary.is_pressed(),
|
AbilityKey::Mouse1 => data.inputs.primary.is_pressed(),
|
||||||
|
@ -189,6 +189,7 @@ fn maps_roll() {
|
|||||||
stage_section: states::utils::StageSection::Buildup,
|
stage_section: states::utils::StageSection::Buildup,
|
||||||
was_wielded: true,
|
was_wielded: true,
|
||||||
was_sneak: false,
|
was_sneak: false,
|
||||||
|
was_combo: None,
|
||||||
}),
|
}),
|
||||||
&PhysicsState {
|
&PhysicsState {
|
||||||
on_ground: true,
|
on_ground: true,
|
||||||
|
Loading…
Reference in New Issue
Block a user