fixed description, remove first().unwrap()

This commit is contained in:
Mashy 2019-05-30 16:55:08 +10:00
parent f94aff376d
commit 934ead830a
3 changed files with 74 additions and 83 deletions

View File

@ -72,7 +72,7 @@ pub enum EffectMeta {
Multiplier(u64), Multiplier(u64),
} }
#[derive(Debug,Clone,PartialEq,Serialize,Deserialize)] #[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
pub struct ConstructEffect { pub struct ConstructEffect {
pub effect: Effect, pub effect: Effect,
pub duration: u8, pub duration: u8,
@ -104,6 +104,13 @@ impl ConstructEffect {
Some(EffectMeta::Multiplier(s)) => s, Some(EffectMeta::Multiplier(s)) => s,
_ => 0 _ => 0
} }
}
pub fn get_skill(&self) -> Option<Skill> {
match self.meta {
Some(EffectMeta::Skill(s)) => Some(s),
_ => None,
}
} }
} }

View File

@ -408,15 +408,15 @@ impl Item {
Item::Attack => format!("Deal RedDamage based on {:?}% RedPower", Item::Attack => format!("Deal RedDamage based on {:?}% RedPower",
self.into_skill().unwrap().multiplier()), self.into_skill().unwrap().multiplier()),
Item::Block => format!("Reduce incoming RedDamage by {:?}%", Item::Block => format!("Reduce incoming RedDamage by {:?}%",
100 - self.into_skill().unwrap().effect().first().unwrap().get_multiplier()), 100 - self.into_skill().unwrap().effect()[0].get_multiplier()),
Item::Stun => format!("Stun target construct for {:?}T", Item::Stun => format!("Stun target construct for {:?}T",
self.into_skill().unwrap().effect().first().unwrap().get_duration()), self.into_skill().unwrap().effect()[0].get_duration()),
Item::Buff => format!("Increase target construct RedPower and speed by {:?}%", Item::Buff => format!("Increase target construct RedPower and speed by {:?}%",
self.into_skill().unwrap().effect().first().unwrap().get_multiplier() - 100), self.into_skill().unwrap().effect()[0].get_multiplier() - 100),
Item::Debuff => format!("Slow target construct speed by {:?}%", Item::Debuff => format!("Slow target construct speed by {:?}%",
100 - self.into_skill().unwrap().effect().first().unwrap().get_multiplier()), 100 - self.into_skill().unwrap().effect()[0].get_multiplier()),
// specs // specs
// Base // Base
Item::Power => format!("Base ITEM for increased Power. Power determines the damage caused by your SKILLS."), Item::Power => format!("Base ITEM for increased Power. Power determines the damage caused by your SKILLS."),
@ -456,14 +456,14 @@ impl Item {
Item::AmplifyI | Item::AmplifyI |
Item::AmplifyII | Item::AmplifyII |
Item::AmplifyIII => format!("Increase red and blue power by {:?}%. Lasts {:?}T", Item::AmplifyIII => format!("Increase red and blue power by {:?}%. Lasts {:?}T",
self.into_skill().unwrap().effect().first().unwrap().get_multiplier() - 100, self.into_skill().unwrap().effect()[0].get_multiplier() - 100,
self.into_skill().unwrap().effect().first().unwrap().get_duration()), self.into_skill().unwrap().effect()[0].get_duration()),
Item::BanishI | Item::BanishI |
Item::BanishII | Item::BanishII |
Item::BanishIII => format!("Banish target for {:?}T. Item::BanishIII => format!("Banish target for {:?}T.
Banished constructs are immune to all skills and effects.", Banished constructs are immune to all skills and effects.",
self.into_skill().unwrap().effect().first().unwrap().get_duration()), self.into_skill().unwrap().effect()[0].get_duration()),
Item::BlastI | Item::BlastI |
Item::BlastII | Item::BlastII |
@ -477,48 +477,51 @@ impl Item {
Item::ClutchI | Item::ClutchI |
Item::ClutchII | Item::ClutchII |
Item::ClutchIII => format!("Construct cannot be KO'd while active. Additionally provides immunity to disables."), Item::ClutchIII => format!("Construct cannot be KO'd while active. Additionally provides immunity to disables. \
Lasts {:?}T",
self.into_skill().unwrap().effect()[0].get_duration()),
Item::CorruptI | Item::CorruptI |
Item::CorruptII | Item::CorruptII |
Item::CorruptIII => format!( Item::CorruptIII => format!(
"Self targetting defensive for {:?}T. Applies corrupt to attackers dealing BlueDamage {:?}% \ "Self targetting defensive for {:?}T. Applies Corruption to attackers dealing BlueDamage {:?}% \
BluePower per turn for {:?}T.", BluePower per turn for {:?}T.",
self.into_skill().unwrap().effect().first().unwrap().get_duration(), self.into_skill().unwrap().effect()[0].get_duration(),
Skill::CorruptI.multiplier(), // TO BE FIXT self.into_skill().unwrap().effect()[0].get_skill().unwrap().effect()[0].get_skill().unwrap().multiplier(),
self.into_skill().unwrap().effect().last().unwrap().get_duration()), self.into_skill().unwrap().effect()[0].get_skill().unwrap().effect()[0].get_duration()),
Item::CurseI | Item::CurseI |
Item::CurseII | Item::CurseII |
Item::CurseIII => format!( Item::CurseIII => format!(
"Increases red and blue damage taken by {:?}%. Lasts {:?}T", "Increases red and blue damage taken by {:?}%. Lasts {:?}T",
self.into_skill().unwrap().effect().first().unwrap().get_multiplier() - 100, self.into_skill().unwrap().effect()[0].get_multiplier() - 100,
self.into_skill().unwrap().effect().first().unwrap().get_duration()), self.into_skill().unwrap().effect()[0].get_duration()),
Item::DecayI | Item::DecayI |
Item::DecayII | Item::DecayII |
Item::DecayIII => format!( Item::DecayIII => format!(
"Reduces healing taken by {:?}% and deals blue damage {:?}% blue power each turn. Lasts {:?}T", "Reduces healing taken by {:?}% for {:?}T. Deals blue damage {:?}% blue power each turn for {:?}T",
100 - self.into_skill().unwrap().effect().first().unwrap().get_multiplier(), 100 - self.into_skill().unwrap().effect()[0].get_multiplier(),
self.into_skill().unwrap().multiplier(), self.into_skill().unwrap().effect()[0].get_duration(),
self.into_skill().unwrap().effect().first().unwrap().get_duration()), self.into_skill().unwrap().effect()[1].get_skill().unwrap().multiplier(),
self.into_skill().unwrap().effect()[1].get_duration()),
Item::HostilityI | Item::HostilityI |
Item::HostilityII | Item::HostilityII |
Item::HostilityIII => format!( Item::HostilityIII => format!(
"Gain Hostility for {:?}T. {} Hatred lasts {:?}T", "Gain Hostility for {:?}T. {} Hatred lasts {:?}T",
self.into_skill().unwrap().effect().first().unwrap().get_duration(), self.into_skill().unwrap().effect()[0].get_duration(),
"When attacked by Hostility you gain Hatred which increased red and blue power based on Damage taken.", "When attacked by Hostility you gain Hatred which increased red and blue power based on Damage taken.",
self.into_skill().unwrap().effect().last().unwrap().get_duration()), self.into_skill().unwrap().effect()[0].get_skill().unwrap().effect()[0].get_duration()),
Item::HasteI | Item::HasteI |
Item::HasteII | Item::HasteII |
Item::HasteIII => format!( Item::HasteIII => format!(
"Haste increases Speed by {:?}%, Red based Attack skills will strike again dealing {:?}{}. Lasts {:?}T", "Haste increases Speed by {:?}%, Red based Attack skills will strike again dealing {:?}{}. Lasts {:?}T",
self.into_skill().unwrap().effect().first().unwrap().get_multiplier() - 100, self.into_skill().unwrap().effect()[0].get_multiplier() - 100,
Skill::HasteStrike.multiplier(), Skill::HasteStrike.multiplier(),
"% Speed as RedDamage", "% Speed as RedDamage",
self.into_skill().unwrap().effect().first().unwrap().get_duration()), self.into_skill().unwrap().effect()[0].get_duration()),
Item::HealI | Item::HealI |
Item::HealII | Item::HealII |
@ -528,16 +531,16 @@ impl Item {
Item::HexII | Item::HexII |
Item::HexIII => format!("Blue based skill that applies Hex for {:?}T. \ Item::HexIII => format!("Blue based skill that applies Hex for {:?}T. \
Hexed targets cannot cast any skills.", Hexed targets cannot cast any skills.",
self.into_skill().unwrap().effect().first().unwrap().get_duration()), self.into_skill().unwrap().effect()[0].get_duration()),
Item::ImpurityI | Item::ImpurityI |
Item::ImpurityII | Item::ImpurityII |
Item::ImpurityIII => format!( Item::ImpurityIII => format!(
"Impurity increases Green Power by {:?}%, Blue based Attack skills will blast again dealing {:?}{}. Lasts {:?}T", "Impurity increases Green Power by {:?}%, Blue based Attack skills will blast again dealing {:?}{}. Lasts {:?}T",
self.into_skill().unwrap().effect().first().unwrap().get_multiplier() - 100, self.into_skill().unwrap().effect()[0].get_multiplier() - 100,
Skill::ImpureBlast.multiplier(), Skill::ImpureBlast.multiplier(),
"% GreenPower as BluePower", "% GreenPower as BluePower",
self.into_skill().unwrap().effect().first().unwrap().get_duration()), self.into_skill().unwrap().effect()[0].get_duration()),
Item::InvertI | Item::InvertI |
Item::InvertII | Item::InvertII |
@ -550,9 +553,9 @@ impl Item {
Item::ParryIII => format!("{} {:?}% red power and blocks red skills for {:?}T. {} {:?}% red power.", Item::ParryIII => format!("{} {:?}% red power and blocks red skills for {:?}T. {} {:?}% red power.",
"Self targetting skill. Recharges RedLife for", "Self targetting skill. Recharges RedLife for",
self.into_skill().unwrap().multiplier(), self.into_skill().unwrap().multiplier(),
self.into_skill().unwrap().effect().first().unwrap().get_duration(), self.into_skill().unwrap().effect()[0].get_duration(),
"If a red skill is parried the construct will riposte the source dealing red damage", "If a red skill is parried the construct will riposte the source dealing red damage",
Skill::RiposteI.multiplier()), self.into_skill().unwrap().effect()[0].get_skill().unwrap().multiplier()),
Item::PurgeI | Item::PurgeI |
Item::PurgeII | Item::PurgeII |
@ -568,7 +571,7 @@ impl Item {
Item::ReflectII | Item::ReflectII |
Item::ReflectIII => format!( Item::ReflectIII => format!(
"Reflect incoming skills to source. Lasts {:?}T", "Reflect incoming skills to source. Lasts {:?}T",
self.into_skill().unwrap().effect().first().unwrap().get_duration()), self.into_skill().unwrap().effect()[0].get_duration()),
Item::RechargeI | Item::RechargeI |
Item::RechargeII | Item::RechargeII |
@ -580,7 +583,7 @@ impl Item {
Item::RuinII | Item::RuinII |
Item::RuinIII => format!( Item::RuinIII => format!(
"Team wide Stun for {:?}T. Stunned constructs are unable to cast skills.", "Team wide Stun for {:?}T. Stunned constructs are unable to cast skills.",
self.into_skill().unwrap().effect().first().unwrap().get_duration()), self.into_skill().unwrap().effect()[0].get_duration()),
Item::ScatterI | Item::ScatterI |
Item::ScatterII | Item::ScatterII |
@ -592,7 +595,7 @@ impl Item {
Item::SilenceII | Item::SilenceII |
Item::SilenceIII => format!( Item::SilenceIII => format!(
"Block the target from using blue skills for {:?}T and deals blue damage {:?}% blue power. {}", "Block the target from using blue skills for {:?}T and deals blue damage {:?}% blue power. {}",
self.into_skill().unwrap().effect().first().unwrap().get_duration(), self.into_skill().unwrap().effect()[0].get_duration(),
self.into_skill().unwrap().multiplier(), self.into_skill().unwrap().multiplier(),
"Deals 45% more Damage per blue skill on target"), "Deals 45% more Damage per blue skill on target"),
@ -606,14 +609,14 @@ impl Item {
Item::SleepII | Item::SleepII |
Item::SleepIII => format!( Item::SleepIII => format!(
"Stun for {:?}T and heal for {:?}% GreenPower.", "Stun for {:?}T and heal for {:?}% GreenPower.",
self.into_skill().unwrap().effect().first().unwrap().get_duration(), self.into_skill().unwrap().effect()[0].get_duration(),
self.into_skill().unwrap().multiplier()), self.into_skill().unwrap().multiplier()),
Item::SnareI | Item::SnareI |
Item::SnareII | Item::SnareII |
Item::SnareIII => format!( Item::SnareIII => format!(
"Block the target from using red skills for {:?}T and deals RedDamage {:?}% RedPower. {}", "Block the target from using red skills for {:?}T and deals RedDamage {:?}% RedPower. {}",
self.into_skill().unwrap().effect().first().unwrap().get_duration(), self.into_skill().unwrap().effect()[0].get_duration(),
self.into_skill().unwrap().multiplier(), self.into_skill().unwrap().multiplier(),
"Deals 35% more Damage per red skill on target"), "Deals 35% more Damage per red skill on target"),
@ -622,8 +625,8 @@ impl Item {
Item::StrangleIII => format!( Item::StrangleIII => format!(
"Strangle the target disabling skills from both the caster and the target. "Strangle the target disabling skills from both the caster and the target.
While strangling deal RedDamage each turn {:?}% RedPower. Lasts {:?}T.", While strangling deal RedDamage each turn {:?}% RedPower. Lasts {:?}T.",
self.into_skill().unwrap().multiplier(), self.into_skill().unwrap().effect()[0].get_skill().unwrap().multiplier(),
self.into_skill().unwrap().effect().first().unwrap().get_duration()), self.into_skill().unwrap().effect()[0].get_duration()),
Item::StrikeI | Item::StrikeI |
Item::StrikeII | Item::StrikeII |
@ -635,33 +638,30 @@ impl Item {
Item::SiphonII | Item::SiphonII |
Item::SiphonIII => format!( Item::SiphonIII => format!(
"Deals BlueDamage {:?}% BluePower each turn and heals caster based on Damage dealt. Lasts {:?}T", "Deals BlueDamage {:?}% BluePower each turn and heals caster based on Damage dealt. Lasts {:?}T",
self.into_skill().unwrap().multiplier(), self.into_skill().unwrap().effect()[0].get_skill().unwrap().multiplier(),
self.into_skill().unwrap().effect().first().unwrap().get_duration()), self.into_skill().unwrap().effect()[0].get_duration()),
Item::TauntI | Item::TauntI |
Item::TauntII | Item::TauntII |
Item::TauntIII => format!("Taunt redirects skills against the team to target, lasts {:?}T.\ Item::TauntIII => format!("Taunt redirects skills against the team to target, lasts {:?}T.\
Recharges RedLife for {:?} RedPower.", Recharges RedLife for {:?} RedPower.",
self.into_skill().unwrap().effect().first().unwrap().get_duration(), self.into_skill().unwrap().effect()[0].get_duration(),
self.into_skill().unwrap().multiplier()), self.into_skill().unwrap().multiplier()),
Item::ThrowI | Item::ThrowI |
Item::ThrowII | Item::ThrowII |
Item::ThrowIII => format!( Item::ThrowIII => format!(
"Stun the target for {:?}T and applies Vulnerable increasing RedDamage taken by {:?}% for {:?}T", "Stun the target for {:?}T and applies Vulnerable increasing RedDamage taken by {:?}% for {:?}T",
self.into_skill().unwrap().effect()[0].get_duration(),
self.into_skill().unwrap().effect().first().unwrap().get_duration(), self.into_skill().unwrap().effect()[1].get_multiplier() - 100,
self.into_skill().unwrap().effect().last().unwrap().get_multiplier() - 100, self.into_skill().unwrap().effect()[1].get_duration()),
self.into_skill().unwrap().effect().last().unwrap().get_duration()),
Item::TriageI | Item::TriageI |
Item::TriageII | Item::TriageII |
Item::TriageIII => format!( Item::TriageIII => format!(
"Heals target for {:?}% GreenPower each turn. Lasts {:?}T", "Heals target for {:?}% GreenPower each turn. Lasts {:?}T",
self.into_skill().unwrap().multiplier(), self.into_skill().unwrap().effect()[0].get_skill().unwrap().multiplier(),
self.into_skill().unwrap().effect().first().unwrap().get_duration()), self.into_skill().unwrap().effect()[0].get_duration()),
_ => format!("..."),
} }
} }

View File

@ -1506,7 +1506,7 @@ fn throw(source: &mut Construct, target: &mut Construct, mut results: Resolution
} }
fn strangle(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { fn strangle(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect().first().unwrap().clone(); let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[0];
let tick_skill = match meta { let tick_skill = match meta {
Some(EffectMeta::Skill(s)) => s, Some(EffectMeta::Skill(s)) => s,
_ => panic!("no strangle tick skill"), _ => panic!("no strangle tick skill"),
@ -1659,29 +1659,26 @@ fn blast(source: &mut Construct, target: &mut Construct, mut results: Resolution
} }
fn amplify(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { fn amplify(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
skill.effect().into_iter() results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
.for_each(|e| (results.push(Resolution::new(source, target).event(target.add_effect(skill, e)))));
return results;; return results;;
} }
fn haste(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { fn haste(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
skill.effect().into_iter() results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
.for_each(|e| (results.push(Resolution::new(source, target).event(target.add_effect(skill, e)))));
return results;; return results;;
} }
fn debuff(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { fn debuff(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
skill.effect().into_iter() results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
.for_each(|e| (results.push(Resolution::new(source, target).event(target.add_effect(skill, e)))));
return results;; return results;;
} }
fn decay(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { fn decay(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
let wither = skill.effect().first().unwrap().clone(); let wither = skill.effect()[0];
results.push(Resolution::new(source, target).event(target.add_effect(skill, wither))); results.push(Resolution::new(source, target).event(target.add_effect(skill, wither)));
let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect().last().unwrap().clone(); let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[1];
let tick_skill = match meta { let tick_skill = match meta {
Some(EffectMeta::Skill(s)) => s, Some(EffectMeta::Skill(s)) => s,
_ => panic!("no decay tick skill"), _ => panic!("no decay tick skill"),
@ -1703,14 +1700,14 @@ fn decay_tick(source: &mut Construct, target: &mut Construct, mut results: Resol
// corrupt is the buff effect // corrupt is the buff effect
// when attacked it runs corruption and applies a debuff // when attacked it runs corruption and applies a debuff
fn corrupt(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { fn corrupt(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
let corrupt = skill.effect().first().unwrap().clone(); let corrupt = skill.effect()[0];
results.push(Resolution::new(source, target).event(target.add_effect(skill, corrupt))); results.push(Resolution::new(source, target).event(target.add_effect(skill, corrupt)));
return results;; return results;;
} }
fn corruption(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { fn corruption(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect().first().unwrap().clone(); let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[0];
let tick_skill = match meta { let tick_skill = match meta {
Some(EffectMeta::Skill(s)) => s, Some(EffectMeta::Skill(s)) => s,
_ => panic!("no corruption tick skill"), _ => panic!("no corruption tick skill"),
@ -1729,53 +1726,44 @@ fn corruption_tick(source: &mut Construct, target: &mut Construct, mut results:
} }
fn ruin(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { fn ruin(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
skill.effect().into_iter() results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
.for_each(|e| (results.push(Resolution::new(source, target).event(target.add_effect(skill, e)))));
return results;; return results;;
} }
fn hex(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { fn hex(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
skill.effect().into_iter() results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
.for_each(|e| (results.push(Resolution::new(source, target).event(target.add_effect(skill, e)))));
return results;; return results;;
} }
fn hostility(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { fn hostility(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
let hostility = skill.effect().first().unwrap().clone(); results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
results.push(Resolution::new(source, target).event(target.add_effect(skill, hostility)));
return results;; return results;;
} }
fn hatred(source: &mut Construct, target: &mut Construct, mut results: Resolutions, reflect_skill: Skill, amount: u64, skill: Skill) -> Resolutions { fn hatred(source: &mut Construct, target: &mut Construct, mut results: Resolutions, reflect_skill: Skill, amount: u64, skill: Skill) -> Resolutions {
let hatred = skill.effect().first().unwrap().clone() let hatred = skill.effect()[0].set_meta(EffectMeta::AddedDamage(amount));
.set_meta(EffectMeta::AddedDamage(amount));
results.push(Resolution::new(source, target).event(target.add_effect(reflect_skill, hatred))); results.push(Resolution::new(source, target).event(target.add_effect(reflect_skill, hatred)));
return results;; return results;;
} }
fn curse(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { fn curse(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
skill.effect().into_iter() results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
.for_each(|e| (results.push(Resolution::new(source, target).event(target.add_effect(skill, e)))));
return results;; return results;;
} }
fn impurity(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { fn impurity(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
skill.effect().into_iter() results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
.for_each(|e| (results.push(Resolution::new(source, target).event(target.add_effect(skill, e)))));
return results;; return results;;
} }
fn invert(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { fn invert(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
skill.effect().into_iter() results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
.for_each(|e| (results.push(Resolution::new(source, target).event(target.add_effect(skill, e)))));
return results;; return results;;
} }
fn reflect(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { fn reflect(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
skill.effect().into_iter() results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
.for_each(|e| (results.push(Resolution::new(source, target).event(target.add_effect(skill, e)))));
let blue_amount = source.blue_power().pct(skill.multiplier()); let blue_amount = source.blue_power().pct(skill.multiplier());
results.push(Resolution::new(source, target).event(target.recharge(skill, 0, blue_amount))); results.push(Resolution::new(source, target).event(target.recharge(skill, 0, blue_amount)));
@ -1792,7 +1780,7 @@ fn recharge(source: &mut Construct, target: &mut Construct, mut results: Resolut
} }
fn siphon(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { fn siphon(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect().first().unwrap().clone(); let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[0];
let tick_skill = match meta { let tick_skill = match meta {
Some(EffectMeta::Skill(s)) => s, Some(EffectMeta::Skill(s)) => s,
_ => panic!("no siphon tick skill"), _ => panic!("no siphon tick skill"),
@ -1827,10 +1815,8 @@ fn scatter(source: &mut Construct, target: &mut Construct, mut results: Resoluti
let blue_amount = source.blue_power().pct(skill.multiplier()); let blue_amount = source.blue_power().pct(skill.multiplier());
results.push(Resolution::new(source, target).event(target.recharge(skill, 0, blue_amount))); results.push(Resolution::new(source, target).event(target.recharge(skill, 0, blue_amount)));
skill.effect().into_iter().for_each(|e| { let scatter = skill.effect()[0].set_meta(EffectMeta::ScatterTarget(target.id));
let scatter = e.clone().set_meta(EffectMeta::ScatterTarget(target.id)); results.push(Resolution::new(source, target).event(source.add_effect(skill, scatter)));
results.push(Resolution::new(source, target).event(source.add_effect(skill, scatter)));
});
return results; return results;
} }
@ -1862,8 +1848,7 @@ fn scatter_hit(source: &Construct, target: &Construct, mut results: Resolutions,
} }
fn silence(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { fn silence(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
skill.effect().into_iter() results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
.for_each(|e| (results.push(Resolution::new(source, target).event(target.add_effect(skill, e)))));
let s_multi = target.skills let s_multi = target.skills
.iter() .iter()
@ -1908,8 +1893,7 @@ fn purify(source: &mut Construct, target: &mut Construct, mut results: Resolutio
} }
fn banish(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { fn banish(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
skill.effect().into_iter() results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
.for_each(|e| (results.push(Resolution::new(source, target).event(target.add_effect(skill, e)))));
return results; return results;
} }