rework recharge return into vec

This commit is contained in:
Mashy 2019-11-07 11:34:19 +10:00
parent 241467ec48
commit e01de8273e
2 changed files with 26 additions and 14 deletions

View File

@ -549,11 +549,14 @@ impl Construct {
}
}
pub fn recharge(&mut self, skill: Skill, red_amount: u64, blue_amount: u64) -> (Event, EventStages) {
pub fn recharge(&mut self, skill: Skill, red_amount: u64, blue_amount: u64) -> Vec<(Event, EventStages)> {
let mut events = vec![];
// Should red type immunity block recharge???
let mut stages = EventStages::PostOnly;
if let Some(immunity) = self.immune(skill) {
return (Event::Immunity { skill, immunity }, stages);
events.push((Event::Immunity { skill, immunity }, stages));
return events;
}
// Do we need inversion?
@ -571,7 +574,8 @@ impl Construct {
stages = EventStages::NoStages;
}
(Event::Recharge { red, blue, skill }, stages)
events.push((Event::Recharge { red, blue, skill }, stages));
return events;
}
pub fn deal_green_damage(&mut self, skill: Skill, amount: u64) -> Vec<Event> {

View File

@ -1408,10 +1408,12 @@ fn sleep(source: &mut Construct, target: &mut Construct, mut results: Resolution
}
fn sustain(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
let red_amount = source.red_power().pct(skill.multiplier());
results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
let (e, stages) = target.recharge(skill, red_amount, 0);
results.push(Resolution::new(source, target).event(e).stages(stages));
let red_amount = source.red_power().pct(skill.multiplier());
target.recharge(skill, red_amount, 0)
.into_iter()
.for_each(|(e, stages)| results.push(Resolution::new(source, target).event(e).stages(stages)));
return results;
}
@ -1421,8 +1423,9 @@ fn intercept(source: &mut Construct, target: &mut Construct, mut results: Resolu
results.push(Resolution::new(source, target).event(target.add_effect(skill, intercept)));
let red_amount = source.red_power().pct(skill.multiplier());
let (e, stages) = target.recharge(skill, red_amount, 0);
results.push(Resolution::new(source, target).event(e).stages(stages));
target.recharge(skill, red_amount, 0)
.into_iter()
.for_each(|(e, stages)| results.push(Resolution::new(source, target).event(e).stages(stages)));
return results;
}
@ -1684,8 +1687,9 @@ fn ruin(source: &mut Construct, target: &mut Construct, mut results: Resolutions
fn absorb(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
let blue_amount = source.blue_power().pct(skill.multiplier());
let (e, stages) = target.recharge(skill, 0, blue_amount);
results.push(Resolution::new(source, target).event(e).stages(stages));
target.recharge(skill, 0, blue_amount)
.into_iter()
.for_each(|(e, stages)| results.push(Resolution::new(source, target).event(e).stages(stages)));
return results;;
}
@ -1724,8 +1728,10 @@ fn reflect(source: &mut Construct, target: &mut Construct, mut results: Resoluti
results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
let blue_amount = source.blue_power().pct(skill.multiplier());
let (e, stages) = target.recharge(skill, 0, blue_amount);
results.push(Resolution::new(source, target).event(e).stages(stages));
target.recharge(skill, 0, blue_amount)
.into_iter()
.for_each(|(e, stages)| results.push(Resolution::new(source, target).event(e).stages(stages)));
return results;;
}
@ -1733,8 +1739,10 @@ fn recharge(source: &mut Construct, target: &mut Construct, mut results: Resolut
results.push(Resolution::new(source, target).event(Event::Skill { skill }).stages(EventStages::StartEnd));
let red_amount = source.red_power().pct(skill.multiplier());
let blue_amount = source.blue_power().pct(skill.multiplier());
let (e, stages) = target.recharge(skill, red_amount, blue_amount);
results.push(Resolution::new(source, target).event(e).stages(stages));
target.recharge(skill, red_amount, blue_amount)
.into_iter()
.for_each(|(e, stages)| results.push(Resolution::new(source, target).event(e).stages(stages)));
return results;
}