add skill delays

This commit is contained in:
Mashy 2020-01-09 14:23:40 +10:00
parent 9c5b7d0c89
commit 5b45d9b5e4
3 changed files with 154 additions and 5 deletions

View File

@ -52,7 +52,7 @@ impl ConstructSkill {
pub fn new(skill: Skill) -> ConstructSkill { pub fn new(skill: Skill) -> ConstructSkill {
ConstructSkill { ConstructSkill {
skill, skill,
cd: skill.base_cd(), cd: skill.delay(),
disabled: false, disabled: false,
} }
} }
@ -443,12 +443,12 @@ impl Construct {
self.skills self.skills
.iter_mut() .iter_mut()
.for_each(|s| match s.skill.base_cd() { .for_each(|s| match s.skill.delay() {
Some(cd) => match cd.saturating_sub(delay_reduction) { Some(cd) => match cd.saturating_sub(delay_reduction) {
0 => s.set_cooldown(None), 0 => s.set_cooldown(None),
_ => s.set_cooldown(Some(cd.saturating_sub(delay_reduction))) _ => s.set_cooldown(Some(cd.saturating_sub(delay_reduction)))
}, },
None => () None => s.set_cooldown(None)
}); });
} }
@ -1241,7 +1241,7 @@ mod tests {
i += 1; i += 1;
} }
assert_eq!(i, Skill::Sleep.base_cd().unwrap()); assert_eq!(i, Skill::Sleep.delay().unwrap());
} }
} }

View File

@ -1285,7 +1285,7 @@ mod tests {
// should auto progress back to skill phase // should auto progress back to skill phase
assert!(game.phase == Phase::Skill); assert!(game.phase == Phase::Skill);
assert!(game.player_by_id(y_player.id).unwrap().constructs[0].skill_on_cd(Skill::Stun).is_some()); assert!(game.player_by_id(y_player.id).unwrap().constructs[0].skill_on_cd(Skill::Stun).is_none());
assert!(game.player_by_id(x_player.id).unwrap().constructs[0].skill_on_cd(Skill::Block).is_none()); assert!(game.player_by_id(x_player.id).unwrap().constructs[0].skill_on_cd(Skill::Block).is_none());
game.add_skill(x_player.id, x_construct.id, y_construct.id, Skill::Attack).unwrap(); game.add_skill(x_player.id, x_construct.id, y_construct.id, Skill::Attack).unwrap();

View File

@ -522,6 +522,155 @@ impl Skill {
Skill::SustainPlus | Skill::SustainPlus |
Skill::SustainPlusPlus => Some(1), Skill::SustainPlusPlus => Some(1),
Skill::Electrify |
Skill::ElectrifyPlus |
Skill::ElectrifyPlusPlus => None,
Skill::Absorb |
Skill::AbsorbPlus |
Skill::AbsorbPlusPlus => Some(1),
//-----------
// Never cast directly
//---------
// Trigger
Skill::HybridBlast |
Skill::HasteStrike |
Skill::CounterAttack|
Skill::CounterAttackPlus |
Skill::CounterAttackPlusPlus | // counter
Skill::Electrocute|
Skill::ElectrocutePlus |
Skill::ElectrocutePlusPlus |
Skill::Absorption|
Skill::AbsorptionPlus |
Skill::AbsorptionPlusPlus |
// Ticks
Skill::ElectrocuteTick|
Skill::DecayTick|
Skill::SiphonTick|
Skill::TriageTick => None,
}
}
pub fn delay(&self) -> Cooldown {
match self {
Skill::Attack => None,
Skill::Block => None, // reduce damage
Skill::Buff => None,
Skill::Debuff => None,
Skill::Stun => Some(1),
Skill::Strike=> None,
Skill::StrikePlus => None,
Skill::StrikePlusPlus => None,
Skill::Counter|
Skill::CounterPlus |
Skill::CounterPlusPlus => None, // avoid all damage
Skill::Restrict |
Skill::RestrictPlus |
Skill::RestrictPlusPlus => Some(1),
Skill::Bash |
Skill::BashPlus |
Skill::BashPlusPlus => Some(1),
Skill::Heal=> None,
Skill::HealPlus => None,
Skill::HealPlusPlus => None,
Skill::Triage=> None, // hot
Skill::TriagePlus => None, // hot
Skill::TriagePlusPlus => None, // hot
Skill::Break | // no damage stun, adds vulnerable
Skill::BreakPlus |
Skill::BreakPlusPlus => Some(1),
Skill::Blast |
Skill::BlastPlus |
Skill::BlastPlusPlus => None,
Skill::Chaos |
Skill::ChaosPlus |
Skill::ChaosPlusPlus => None,
Skill::Amplify |
Skill::AmplifyPlus |
Skill::AmplifyPlusPlus => Some(1),
Skill::Hybrid |
Skill::HybridPlus |
Skill::HybridPlusPlus => Some(1),
Skill::Invert |
Skill::InvertPlus |
Skill::InvertPlusPlus => Some(2),
Skill::Decay => None, // dot
Skill::DecayPlus => None,
Skill::DecayPlusPlus => None,
Skill::Siphon|
Skill::SiphonPlus |
Skill::SiphonPlusPlus => None,
Skill::Curse |
Skill::CursePlus |
Skill::CursePlusPlus => Some(1),
Skill::Link |
Skill::LinkPlus |
Skill::LinkPlusPlus => Some(1),
Skill::Silence |
Skill::SilencePlus |
Skill::SilencePlusPlus => Some(1),
Skill::Purify |
Skill::PurifyPlus |
Skill::PurifyPlusPlus => None,
Skill::Purge |
Skill::PurgePlus |
Skill::PurgePlusPlus => Some(1),
Skill::Banish |
Skill::BanishPlus |
Skill::BanishPlusPlus => Some(1),
Skill::Haste |
Skill::HastePlus |
Skill::HastePlusPlus => Some(1),
Skill::Reflect |
Skill::ReflectPlus |
Skill::ReflectPlusPlus => None,
Skill::Recharge |
Skill::RechargePlus |
Skill::RechargePlusPlus => None,
Skill::Ruin |
Skill::RuinPlus |
Skill::RuinPlusPlus => Some(2),
Skill::Slay=> None,
Skill::SlayPlus => None,
Skill::SlayPlusPlus => None,
Skill::Sleep |
Skill::SleepPlus |
Skill::SleepPlusPlus => Some(1),
Skill::Sustain |
Skill::SustainPlus |
Skill::SustainPlusPlus => Some(1),
Skill::Intercept => Some(1), Skill::Intercept => Some(1),
Skill::InterceptPlus => Some(1), Skill::InterceptPlus => Some(1),
Skill::InterceptPlusPlus => Some(1), Skill::InterceptPlusPlus => Some(1),