util fn for aoe targets

This commit is contained in:
ntr 2019-03-24 22:43:14 +11:00
parent 24f3cb206a
commit d002e3c58b
2 changed files with 13 additions and 12 deletions

View File

@ -177,6 +177,16 @@ impl Game {
.collect::<Vec<Cryp>>() .collect::<Vec<Cryp>>()
} }
pub fn cryp_aoe_targets(&self, cryp_id: Uuid) -> Vec<Uuid> {
self.teams.iter()
.find(|t| t.cryps.iter().any(|c| c.id == cryp_id))
.unwrap()
.cryps
.iter()
.map(|c| c.id)
.collect()
}
fn update_cryp(&mut self, cryp: &mut Cryp) -> &mut Game { fn update_cryp(&mut self, cryp: &mut Cryp) -> &mut Game {
match self.teams.iter_mut().find(|t| t.cryps.iter().any(|c| c.id == cryp.id)) { match self.teams.iter_mut().find(|t| t.cryps.iter().any(|c| c.id == cryp.id)) {
Some(team) => { Some(team) => {

View File

@ -34,26 +34,17 @@ impl Cast {
pub fn finalise(&mut self, game: &mut Game) -> &mut Cast { pub fn finalise(&mut self, game: &mut Game) -> &mut Cast {
let mut results = vec![]; let mut results = vec![];
let mut source = game.cryp_by_id(self.source_cryp_id).unwrap().clone(); let mut source = game.cryp_by_id(self.source_cryp_id).unwrap().clone();
self.resolution.speed = source.skill_speed(self.skill);
let targets = match source.skill_is_aoe(self.skill) { let targets = match source.skill_is_aoe(self.skill) {
true => game.teams.iter() true => game.cryp_aoe_targets(self.target_cryp_id),
.find(|t| t.cryps.iter().any(|c| c.id == self.target_cryp_id))
.unwrap()
.cryps
.iter()
.map(|c| c.id)
.collect(),
false => vec![self.target_cryp_id], false => vec![self.target_cryp_id],
}; };
for target_id in targets { for target_id in targets {
// let mut source = game.cryp_by_id(self.source_cryp_id).unwrap(); // let mut source = game.cryp_by_id(self.source_cryp_id).unwrap();
let mut target = game.cryp_by_id(target_id).unwrap(); let mut target = game.cryp_by_id(target_id).unwrap();
results.append(&mut self.skill.resolve(&mut source, target)); results.append(&mut self.skill.resolve(&mut source, target));
// self.update_cryp(&mut source);
// self.update_cryp(&mut target);
} }
self.resolution.results = results; self.resolution.results = results;
@ -791,7 +782,7 @@ fn triage(cryp: &mut Cryp, target: &mut Cryp, mut results: Vec<ResolutionResult>
duration: Effect::Triage.duration(), duration: Effect::Triage.duration(),
tick: Some(Cast::new_tick(cryp, target, Skill::TriageTick)), tick: Some(Cast::new_tick(cryp, target, Skill::TriageTick)),
}; };
target.add_effect(Skill::Triage, effect); results.push(target.add_effect(Skill::Triage, effect));
return triage_tick(cryp, target, results); return triage_tick(cryp, target, results);
} }