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::Error;
|
||||||
use failure::err_msg;
|
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 effect::{Cooldown, Effect, Colour};
|
||||||
use spec::{Spec};
|
use spec::{Spec};
|
||||||
use item::{Item};
|
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???
|
// Should red type immunity block recharge???
|
||||||
|
let mut stages = EventStages::PostOnly;
|
||||||
if let Some(immunity) = self.immune(skill) {
|
if let Some(immunity) = self.immune(skill) {
|
||||||
return Event::Immunity {
|
return (Event::Immunity { skill, immunity }, stages);
|
||||||
skill,
|
|
||||||
immunity,
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do we need inversion?
|
// Do we need inversion?
|
||||||
@ -569,7 +567,11 @@ impl Construct {
|
|||||||
let new_blue_life = self.blue_life.value;
|
let new_blue_life = self.blue_life.value;
|
||||||
let blue = new_blue_life - current_blue_life;
|
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> {
|
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 {
|
fn sustain(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
|
||||||
let red_amount = source.red_power().pct(skill.multiplier());
|
let red_amount = source.red_power().pct(skill.multiplier());
|
||||||
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, skill.effect()[0])));
|
||||||
let e = target.recharge(skill, red_amount, 0);
|
let (e, stages) = 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
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
results.push(Resolution::new(source, target).event(e).stages(stages));
|
results.push(Resolution::new(source, target).event(e).stages(stages));
|
||||||
|
|
||||||
return results;
|
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)));
|
results.push(Resolution::new(source, target).event(target.add_effect(skill, intercept)));
|
||||||
|
|
||||||
let red_amount = source.red_power().pct(skill.multiplier());
|
let red_amount = source.red_power().pct(skill.multiplier());
|
||||||
let e = target.recharge(skill, red_amount, 0);
|
let (e, stages) = 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
|
|
||||||
}
|
|
||||||
};
|
|
||||||
results.push(Resolution::new(source, target).event(e).stages(stages));
|
results.push(Resolution::new(source, target).event(e).stages(stages));
|
||||||
|
|
||||||
return results;
|
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 {
|
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])));
|
results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
|
||||||
let blue_amount = source.blue_power().pct(skill.multiplier());
|
let blue_amount = source.blue_power().pct(skill.multiplier());
|
||||||
let e = target.recharge(skill, 0, blue_amount);
|
let (e, stages) = 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
|
|
||||||
}
|
|
||||||
};
|
|
||||||
results.push(Resolution::new(source, target).event(e).stages(stages));
|
results.push(Resolution::new(source, target).event(e).stages(stages));
|
||||||
return results;;
|
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])));
|
results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
|
||||||
|
|
||||||
let blue_amount = source.blue_power().pct(skill.multiplier());
|
let blue_amount = source.blue_power().pct(skill.multiplier());
|
||||||
let e = target.recharge(skill, 0, blue_amount);
|
let (e, stages) = 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
|
|
||||||
}
|
|
||||||
};
|
|
||||||
results.push(Resolution::new(source, target).event(e).stages(stages));
|
results.push(Resolution::new(source, target).event(e).stages(stages));
|
||||||
return results;;
|
return results;;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn recharge(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
|
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 red_amount = source.red_power().pct(skill.multiplier());
|
||||||
let blue_amount = source.blue_power().pct(skill.multiplier());
|
let blue_amount = source.blue_power().pct(skill.multiplier());
|
||||||
let e = target.recharge(skill, red_amount, blue_amount);
|
let (e, stages) = 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
|
|
||||||
}
|
|
||||||
};
|
|
||||||
results.push(Resolution::new(source, target).event(e).stages(stages));
|
results.push(Resolution::new(source, target).event(e).stages(stages));
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
@ -2195,6 +2145,7 @@ mod tests {
|
|||||||
|
|
||||||
let mut results = recharge(&mut x, &mut y, vec![], Skill::Recharge);
|
let mut results = recharge(&mut x, &mut y, vec![], Skill::Recharge);
|
||||||
|
|
||||||
|
results.remove(0);
|
||||||
let Resolution { source: _, target: _, event, stages: _ } = results.remove(0);
|
let Resolution { source: _, target: _, event, stages: _ } = results.remove(0);
|
||||||
match event {
|
match event {
|
||||||
Event::Recharge { red, blue, skill: _ } => {
|
Event::Recharge { red, blue, skill: _ } => {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user