mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Stances now require a small amount of time to enter them
This commit is contained in:
parent
eb67cc2cf7
commit
2e8ad96121
@ -2128,7 +2128,7 @@ impl From<(&CharacterAbility, AbilityInfo, &JoinData<'_>)> for CharacterState {
|
|||||||
// If ability is a stance, enter the stance without beginning a strike, otherwise
|
// If ability is a stance, enter the stance without beginning a strike, otherwise
|
||||||
// immediately begin the strike
|
// immediately begin the strike
|
||||||
stage_section: if *is_stance {
|
stage_section: if *is_stance {
|
||||||
None
|
Some(StageSection::Charge)
|
||||||
} else {
|
} else {
|
||||||
Some(StageSection::Buildup)
|
Some(StageSection::Buildup)
|
||||||
},
|
},
|
||||||
|
@ -105,7 +105,8 @@ pub struct Data {
|
|||||||
pub completed_strikes: usize,
|
pub completed_strikes: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const STANCE_TIME: Duration = Duration::from_secs(3);
|
pub const STANCE_ENTER_TIME: Duration = Duration::from_millis(250);
|
||||||
|
pub const STANCE_LEAVE_TIME: Duration = Duration::from_secs(3);
|
||||||
|
|
||||||
impl CharacterBehavior for Data {
|
impl CharacterBehavior for Data {
|
||||||
fn behavior(&self, data: &JoinData, output_events: &mut OutputEvents) -> StateUpdate {
|
fn behavior(&self, data: &JoinData, output_events: &mut OutputEvents) -> StateUpdate {
|
||||||
@ -126,6 +127,17 @@ impl CharacterBehavior for Data {
|
|||||||
let strike_data = self.strike_data();
|
let strike_data = self.strike_data();
|
||||||
|
|
||||||
match self.stage_section {
|
match self.stage_section {
|
||||||
|
Some(StageSection::Charge) => {
|
||||||
|
// Adds a small duration to entering a stance to discourage spam swapping stances for ability activation benefits of matching stance
|
||||||
|
if self.timer < STANCE_ENTER_TIME {
|
||||||
|
if let CharacterState::ComboMelee2(c) = &mut update.character {
|
||||||
|
c.timer = tick_attack_or_default(data, self.timer, None);
|
||||||
|
}
|
||||||
|
} else if let CharacterState::ComboMelee2(c) = &mut update.character {
|
||||||
|
c.timer = Duration::default();
|
||||||
|
c.stage_section = None;
|
||||||
|
}
|
||||||
|
},
|
||||||
Some(StageSection::Buildup) => {
|
Some(StageSection::Buildup) => {
|
||||||
if let Some(movement) = strike_data.movement.buildup {
|
if let Some(movement) = strike_data.movement.buildup {
|
||||||
handle_forced_movement(data, &mut update, movement);
|
handle_forced_movement(data, &mut update, movement);
|
||||||
@ -221,7 +233,7 @@ impl CharacterBehavior for Data {
|
|||||||
data.updater.remove::<Melee>(data.entity);
|
data.updater.remove::<Melee>(data.entity);
|
||||||
},
|
},
|
||||||
None => {
|
None => {
|
||||||
if self.timer < STANCE_TIME {
|
if self.timer < STANCE_LEAVE_TIME {
|
||||||
if let CharacterState::ComboMelee2(c) = &mut update.character {
|
if let CharacterState::ComboMelee2(c) = &mut update.character {
|
||||||
c.timer = tick_attack_or_default(data, self.timer, None);
|
c.timer = tick_attack_or_default(data, self.timer, None);
|
||||||
}
|
}
|
||||||
|
@ -1754,19 +1754,26 @@ impl FigureMgr {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
CharacterState::ComboMelee2(s) => {
|
CharacterState::ComboMelee2(s) => {
|
||||||
if let Some(stage_section) = s.stage_section {
|
if matches!(
|
||||||
|
s.stage_section,
|
||||||
|
Some(
|
||||||
|
StageSection::Buildup
|
||||||
|
| StageSection::Action
|
||||||
|
| StageSection::Recover
|
||||||
|
)
|
||||||
|
) {
|
||||||
let timer = s.timer.as_secs_f32();
|
let timer = s.timer.as_secs_f32();
|
||||||
let current_strike =
|
let current_strike =
|
||||||
s.completed_strikes % s.static_data.strikes.len();
|
s.completed_strikes % s.static_data.strikes.len();
|
||||||
let strike_data = s.static_data.strikes[current_strike];
|
let strike_data = s.static_data.strikes[current_strike];
|
||||||
let progress = match stage_section {
|
let progress = match s.stage_section {
|
||||||
StageSection::Buildup => {
|
Some(StageSection::Buildup) => {
|
||||||
timer / strike_data.buildup_duration.as_secs_f32()
|
timer / strike_data.buildup_duration.as_secs_f32()
|
||||||
},
|
},
|
||||||
StageSection::Action => {
|
Some(StageSection::Action) => {
|
||||||
timer / strike_data.swing_duration.as_secs_f32()
|
timer / strike_data.swing_duration.as_secs_f32()
|
||||||
},
|
},
|
||||||
StageSection::Recover => {
|
Some(StageSection::Recover) => {
|
||||||
timer / strike_data.recover_duration.as_secs_f32()
|
timer / strike_data.recover_duration.as_secs_f32()
|
||||||
},
|
},
|
||||||
_ => 0.0,
|
_ => 0.0,
|
||||||
@ -1776,7 +1783,7 @@ impl FigureMgr {
|
|||||||
&target_base,
|
&target_base,
|
||||||
(
|
(
|
||||||
ability_id,
|
ability_id,
|
||||||
Some(stage_section),
|
s.stage_section,
|
||||||
Some(s.static_data.ability_info),
|
Some(s.static_data.ability_info),
|
||||||
current_strike,
|
current_strike,
|
||||||
move_dir,
|
move_dir,
|
||||||
|
Loading…
Reference in New Issue
Block a user