purge / purify removes all effects

This commit is contained in:
Mashy 2019-11-11 11:58:29 +10:00
parent 6f453c45fc
commit ab7625def0
2 changed files with 20 additions and 44 deletions

View File

@ -168,6 +168,9 @@ function getText(resolution) {
if (type === 'Removal') { if (type === 'Removal') {
const { effect, construct_effects: effects } = event; const { effect, construct_effects: effects } = event;
if (!effect) {
return { text: 'Effect Removal', css: '', effects };
}
return { text: `-${effect}`, css: '', effects }; return { text: `-${effect}`, css: '', effects };
} }
return false; return false;

View File

@ -505,7 +505,7 @@ pub enum Event {
AoeSkill { skill: Skill }, AoeSkill { skill: Skill },
Skill { skill: Skill }, Skill { skill: Skill },
Effect { skill: Skill, effect: Effect, duration: u8, construct_effects: Vec<ConstructEffect> }, Effect { skill: Skill, effect: Effect, duration: u8, construct_effects: Vec<ConstructEffect> },
Removal { effect: Effect, construct_effects: Vec<ConstructEffect> }, Removal { effect: Option<Effect>, construct_effects: Vec<ConstructEffect> },
TargetKo { skill: Skill }, TargetKo { skill: Skill },
// skill not necessary but makes it neater as all events are arrays in js // skill not necessary but makes it neater as all events are arrays in js
Ko (), Ko (),
@ -1630,7 +1630,7 @@ fn electrocute(source: &mut Construct, target: &mut Construct, mut results: Reso
Some(eff) => { Some(eff) => {
let ce = source.effects.remove(eff); let ce = source.effects.remove(eff);
results.push(Resolution::new(source, source) results.push(Resolution::new(source, source)
.event(Event::Removal { effect: ce.effect, construct_effects: source.effects.clone() }) .event(Event::Removal { effect: Some(ce.effect), construct_effects: source.effects.clone() })
.stages(EventStages::PostOnly)); .stages(EventStages::PostOnly));
} }
None => () None => ()
@ -1701,7 +1701,7 @@ fn absorption(source: &mut Construct, target: &mut Construct, mut results: Resol
let ce = target.effects.remove(absorb_index); let ce = target.effects.remove(absorb_index);
results.push(Resolution::new(source, target) results.push(Resolution::new(source, target)
.event(Event::Removal { effect: ce.effect, construct_effects: target.effects.clone() }) .event(Event::Removal { effect: Some(ce.effect), construct_effects: target.effects.clone() })
.stages(EventStages::PostOnly)); .stages(EventStages::PostOnly));
return results;; return results;;
} }
@ -1816,58 +1816,31 @@ fn silence(source: &mut Construct, target: &mut Construct, mut results: Resoluti
fn purge(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { fn purge(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
results.push(Resolution::new(source, target).event(Event::Skill { skill }).stages(EventStages::StartEnd)); results.push(Resolution::new(source, target).event(Event::Skill { skill }).stages(EventStages::StartEnd));
while let Some(i) = target.effects if target.effects.len() > 0 {
.iter() target.effects.clear();
.position(|ce| { results.push(Resolution::new(source, target)
if let Some(c) = ce.effect.colour() { .event(Event::Removal { effect: None, construct_effects: target.effects.clone() })
c == Colour::Green .stages(EventStages::PostOnly));
} else { }
false
}
}) {
let ce = target.effects.remove(i);
results.push(Resolution::new(source, target)
.event(Event::Removal { effect: ce.effect, construct_effects: target.effects.clone() })
.stages(EventStages::PostOnly));
}
let effect = skill.effect()[0]; let effect = skill.effect()[0];
results.push(Resolution::new(source, target).event(target.add_effect(skill, effect)).stages(EventStages::PostOnly)); results.push(Resolution::new(source, target).event(target.add_effect(skill, effect)).stages(EventStages::PostOnly));
/*let mut turns = 1;
for cs in target.skills.iter_mut() {
if Effect::Purge.disables_skill(cs.skill) {
turns += 1;
}
}
if turns > 1 {
effect.duration = effect.duration * turns;
}*/
return results; return results;
} }
fn purify(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { fn purify(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
results.push(Resolution::new(source, target).event(Event::Skill { skill }).stages(EventStages::StartEnd)); results.push(Resolution::new(source, target).event(Event::Skill { skill }).stages(EventStages::StartEnd));
let amount = source.green_power().pct(skill.multiplier()); if target.effects.len() > 0 {
while let Some(i) = target.effects let amount = source.green_power().pct(skill.multiplier().saturating_mul(target.effects.len() as u64));
.iter() target.effects.clear();
.position(|ce| { results.push(Resolution::new(source, target)
if let Some(c) = ce.effect.colour() { .event(Event::Removal { effect: None, construct_effects: target.effects.clone() })
[Colour::Red, Colour::Blue].contains(&c) .stages(EventStages::PostOnly));
} else { target.deal_green_damage(skill, amount)
false
}
}) {
let ce = target.effects.remove(i);
results.push(Resolution::new(source, target)
.event(Event::Removal { effect: ce.effect, construct_effects: target.effects.clone() })
.stages(EventStages::PostOnly));
target.deal_green_damage(skill, amount)
.into_iter() .into_iter()
.for_each(|e| results.push(Resolution::new(source, target).event(e).stages(EventStages::PostOnly))); .for_each(|e| results.push(Resolution::new(source, target).event(e).stages(EventStages::PostOnly)));
} }
return results; return results;
} }