From c1655c94967da5aad74c4ee8f3cd4aa6f9d1ecb3 Mon Sep 17 00:00:00 2001 From: ntr Date: Wed, 11 Dec 2019 14:52:25 +1000 Subject: [PATCH] wip --- core/src/construct.rs | 19 +++++++++++++++++++ core/src/effect.rs | 7 +++++++ 2 files changed, 26 insertions(+) diff --git a/core/src/construct.rs b/core/src/construct.rs index b445cdf6..03595135 100644 --- a/core/src/construct.rs +++ b/core/src/construct.rs @@ -360,6 +360,25 @@ impl Construct { None } + pub fn immune(&self, skill: Skill) -> Option { + // also checked in resolve stage so shouldn't happen really + if self.is_ko() { + return Some(vec![Effect::Ko]); + } + + let immunities = self.effects.iter() + .filter(|e| e.effect.immune(skill)) + .map(|e| e.effect) + .collect::>(); + + if immunities.len() > 0 { + return Some(immunities); + } + + None + } + + pub fn is_stunned(&self) -> bool { self.available_skills().len() == 0 } diff --git a/core/src/effect.rs b/core/src/effect.rs index 2edb6217..6d44d987 100644 --- a/core/src/effect.rs +++ b/core/src/effect.rs @@ -72,6 +72,7 @@ impl Effect { pub fn immune(&self, skill: Skill) -> bool { match self { Effect::Banish => true, + Effect::Sustain => [ Skill::Stun, Skill::Silence, @@ -84,6 +85,12 @@ impl Effect { Skill::RestrictPlus, Skill::RestrictPlusPlus ].contains(&skill), + + Effect::Siphoned => [ + Skill::SiphonTick, + Skill::SiphonTickPlus, + Skill::SiphonTickPlusPlus, + ].contains(&skill), _ => false, } }