cleaning up ugly recharge code
This commit is contained in:
parent
2792061186
commit
241467ec48
@ -7,7 +7,7 @@ use postgres::transaction::Transaction;
|
||||
use failure::Error;
|
||||
use failure::err_msg;
|
||||
|
||||
use skill::{Skill, Cast, Immunity, Disable, Event};
|
||||
use skill::{Skill, Cast, Immunity, Disable, Event, EventStages};
|
||||
use effect::{Cooldown, Effect, Colour};
|
||||
use spec::{Spec};
|
||||
use item::{Item};
|
||||
@ -549,13 +549,11 @@ impl Construct {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn recharge(&mut self, skill: Skill, red_amount: u64, blue_amount: u64) -> Event {
|
||||
pub fn recharge(&mut self, skill: Skill, red_amount: u64, blue_amount: u64) -> (Event, EventStages) {
|
||||
// Should red type immunity block recharge???
|
||||
let mut stages = EventStages::PostOnly;
|
||||
if let Some(immunity) = self.immune(skill) {
|
||||
return Event::Immunity {
|
||||
skill,
|
||||
immunity,
|
||||
};
|
||||
return (Event::Immunity { skill, immunity }, stages);
|
||||
}
|
||||
|
||||
// Do we need inversion?
|
||||
@ -569,7 +567,11 @@ impl Construct {
|
||||
let new_blue_life = self.blue_life.value;
|
||||
let blue = new_blue_life - current_blue_life;
|
||||
|
||||
Event::Recharge { red, blue, skill }
|
||||
if red == 0 && blue == 0 {
|
||||
stages = EventStages::NoStages;
|
||||
}
|
||||
|
||||
(Event::Recharge { red, blue, skill }, stages)
|
||||
}
|
||||
|
||||
pub fn deal_green_damage(&mut self, skill: Skill, amount: u64) -> Vec<Event> {
|
||||
|
||||
@ -1410,18 +1410,7 @@ 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 = target.recharge(skill, red_amount, 0);
|
||||
let stages = match e {
|
||||
Event::Recharge { red, blue, skill: _ } => {
|
||||
if red > 0 || blue > 0 { EventStages::PostOnly }
|
||||
else { EventStages::NoStages }
|
||||
}
|
||||
_ => {
|
||||
warn!("no recharge event found {:?}", e);
|
||||
EventStages::NoStages
|
||||
}
|
||||
};
|
||||
|
||||
let (e, stages) = target.recharge(skill, red_amount, 0);
|
||||
results.push(Resolution::new(source, target).event(e).stages(stages));
|
||||
|
||||
return results;
|
||||
@ -1432,17 +1421,7 @@ 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 = target.recharge(skill, red_amount, 0);
|
||||
let stages = match e {
|
||||
Event::Recharge { red, blue, skill: _ } => {
|
||||
if red > 0 || blue > 0 { EventStages::PostOnly }
|
||||
else { EventStages::NoStages }
|
||||
}
|
||||
_ => {
|
||||
warn!("no recharge event found {:?}", e);
|
||||
EventStages::NoStages
|
||||
}
|
||||
};
|
||||
let (e, stages) = target.recharge(skill, red_amount, 0);
|
||||
results.push(Resolution::new(source, target).event(e).stages(stages));
|
||||
|
||||
return results;
|
||||
@ -1705,17 +1684,7 @@ 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 = target.recharge(skill, 0, blue_amount);
|
||||
let stages = match e {
|
||||
Event::Recharge { red, blue, skill: _ } => {
|
||||
if red > 0 || blue > 0 { EventStages::PostOnly }
|
||||
else { EventStages::NoStages }
|
||||
}
|
||||
_ => {
|
||||
warn!("no recharge event found {:?}", e);
|
||||
EventStages::NoStages
|
||||
}
|
||||
};
|
||||
let (e, stages) = target.recharge(skill, 0, blue_amount);
|
||||
results.push(Resolution::new(source, target).event(e).stages(stages));
|
||||
return results;;
|
||||
}
|
||||
@ -1755,35 +1724,16 @@ 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 = target.recharge(skill, 0, blue_amount);
|
||||
let stages = match e {
|
||||
Event::Recharge { red, blue, skill: _ } => {
|
||||
if red > 0 || blue > 0 { EventStages::PostOnly }
|
||||
else { EventStages::NoStages }
|
||||
}
|
||||
_ => {
|
||||
warn!("no recharge event found {:?}", e);
|
||||
EventStages::NoStages
|
||||
}
|
||||
};
|
||||
let (e, stages) = target.recharge(skill, 0, blue_amount);
|
||||
results.push(Resolution::new(source, target).event(e).stages(stages));
|
||||
return results;;
|
||||
}
|
||||
|
||||
fn recharge(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));
|
||||
let red_amount = source.red_power().pct(skill.multiplier());
|
||||
let blue_amount = source.blue_power().pct(skill.multiplier());
|
||||
let e = target.recharge(skill, red_amount, blue_amount);
|
||||
let stages = match e {
|
||||
Event::Recharge { red, blue, skill: _ } => {
|
||||
if red > 0 || blue > 0 { EventStages::AllStages }
|
||||
else { EventStages::StartEnd }
|
||||
}
|
||||
_ => {
|
||||
warn!("no recharge event found {:?}", e);
|
||||
EventStages::NoStages
|
||||
}
|
||||
};
|
||||
let (e, stages) = target.recharge(skill, red_amount, blue_amount);
|
||||
results.push(Resolution::new(source, target).event(e).stages(stages));
|
||||
return results;
|
||||
}
|
||||
@ -2195,6 +2145,7 @@ mod tests {
|
||||
|
||||
let mut results = recharge(&mut x, &mut y, vec![], Skill::Recharge);
|
||||
|
||||
results.remove(0);
|
||||
let Resolution { source: _, target: _, event, stages: _ } = results.remove(0);
|
||||
match event {
|
||||
Event::Recharge { red, blue, skill: _ } => {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user