Re-allowed for what stage you were on to persist through a roll

This commit is contained in:
Sam 2021-02-27 19:09:51 -05:00
parent 404c7f0905
commit b25a376995
4 changed files with 31 additions and 3 deletions

View File

@ -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,

View File

@ -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;

View File

@ -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(),

View File

@ -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,