bring in damage trigger casts
This commit is contained in:
parent
61870b69ac
commit
1c24ab02bc
@ -912,6 +912,53 @@ impl Construct {
|
|||||||
return removals;
|
return removals;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn damage_trigger_casts(&mut self, cast: &Cast, event: &Event) -> Vec<Cast> {
|
||||||
|
match event {
|
||||||
|
Event::Damage { construct, colour, amount, mitigation, display: _ } => {
|
||||||
|
let mut casts = vec![];
|
||||||
|
if self.affected(Effect::Electric) && !cast.skill.is_tick() {
|
||||||
|
let ConstructEffect { effect: _, duration: _, meta, tick: _ } =
|
||||||
|
self.effects.iter().find(|e| e.effect == Effect::Electric).unwrap();
|
||||||
|
|
||||||
|
let skill = match meta {
|
||||||
|
Some(EffectMeta::Skill(s)) => s,
|
||||||
|
_ => panic!("no electrify skill"),
|
||||||
|
};
|
||||||
|
|
||||||
|
casts.push(Cast::new(self.id, self.account, cast.source, *skill));
|
||||||
|
}
|
||||||
|
|
||||||
|
// if self.affected(Effect::Absorb) {
|
||||||
|
// let ConstructEffect { effect, duration: _, meta, tick: _ } =
|
||||||
|
// self.effects.iter().find(|e| e.effect == Effect::Absorb).unwrap();
|
||||||
|
|
||||||
|
|
||||||
|
// let skill = match meta {
|
||||||
|
// Some(EffectMeta::Skill(s)) => s,
|
||||||
|
// _ => panic!("no absorption skill"),
|
||||||
|
// };
|
||||||
|
|
||||||
|
// casts.push(Cast::new(self.id, self.account, self.id, *skill));
|
||||||
|
// }
|
||||||
|
|
||||||
|
if self.affected(Effect::Counter) && *colour == Colour::Red {
|
||||||
|
let ConstructEffect { effect: _, duration: _, meta, tick: _ } =
|
||||||
|
self.effects.iter().find(|e| e.effect == Effect::Counter).unwrap();
|
||||||
|
|
||||||
|
let skill = match meta {
|
||||||
|
Some(EffectMeta::Skill(s)) => s,
|
||||||
|
_ => panic!("no counter skill"),
|
||||||
|
};
|
||||||
|
|
||||||
|
casts.push(Cast::new(self.id, self.account, cast.source, *skill));
|
||||||
|
}
|
||||||
|
|
||||||
|
casts
|
||||||
|
}
|
||||||
|
_ => vec![],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// pub fn evade(&self, skill: Skill) -> Option<Event> {
|
// pub fn evade(&self, skill: Skill) -> Option<Event> {
|
||||||
// if self.evasion.value == 0 {
|
// if self.evasion.value == 0 {
|
||||||
// return None;
|
// return None;
|
||||||
|
|||||||
@ -546,58 +546,16 @@ impl Game {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn event_reactions(&mut self, cast: &Cast, event: &Event) -> &mut Game {
|
fn event_reactions(&mut self, cast: &Cast, event: &Event) -> &mut Game {
|
||||||
match event {
|
let casts = match event {
|
||||||
Event::Damage { construct, colour, amount, mitigation, display: _ } => {
|
Event::Damage { construct, colour, amount, mitigation, display: _ } =>
|
||||||
if self.construct_by_id(*construct).unwrap().affected(Effect::Electric) && !cast.skill.is_tick() {
|
self.construct_by_id(*construct).unwrap().damage_trigger_casts(cast, event),
|
||||||
let ConstructEffect { effect: _, duration: _, meta, tick: _ } =
|
_ => vec![],
|
||||||
self.construct_by_id(*construct).unwrap().effects.iter().find(|e| e.effect == Effect::Electric).unwrap().clone();
|
|
||||||
|
|
||||||
let skill = match meta {
|
|
||||||
Some(EffectMeta::Skill(s)) => s,
|
|
||||||
_ => panic!("no electrify skill"),
|
|
||||||
};
|
|
||||||
|
|
||||||
let source = construct;
|
|
||||||
let player = self.construct_by_id(*construct).unwrap().account;
|
|
||||||
let target = cast.source;
|
|
||||||
|
|
||||||
self.resolve(Cast::new(*source, player, target, skill));
|
|
||||||
}
|
|
||||||
|
|
||||||
// if self.construct_by_id(*construct).unwrap().affected(Effect::Absorb) {
|
|
||||||
// let ConstructEffect { effect: _, duration: _, meta, tick: _ } =
|
|
||||||
// self.construct_by_id(*construct).unwrap().effects.iter().find(|e| e.effect == Effect::Absorb).unwrap().clone();
|
|
||||||
|
|
||||||
// let skill = match meta {
|
|
||||||
// Some(EffectMeta::Skill(s)) => s,
|
|
||||||
// _ => panic!("no absorption skill"),
|
|
||||||
// };
|
|
||||||
|
|
||||||
// let source = construct;
|
|
||||||
// let player = self.construct_by_id(*construct).unwrap().account;
|
|
||||||
// let target = cast.source;
|
|
||||||
|
|
||||||
// self.resolve(Cast::new(*source, player, target, skill));
|
|
||||||
// }
|
|
||||||
|
|
||||||
if self.construct_by_id(*construct).unwrap().affected(Effect::Electric) && *colour == Colour::Red {
|
|
||||||
let ConstructEffect { effect: _, duration: _, meta, tick: _ } =
|
|
||||||
self.construct_by_id(*construct).unwrap().effects.iter().find(|e| e.effect == Effect::Counter).unwrap().clone();
|
|
||||||
|
|
||||||
let skill = match meta {
|
|
||||||
Some(EffectMeta::Skill(s)) => s,
|
|
||||||
_ => panic!("no counter skill"),
|
|
||||||
};
|
|
||||||
|
|
||||||
let source = construct;
|
|
||||||
let player = self.construct_by_id(*construct).unwrap().account;
|
|
||||||
let target = cast.source;
|
|
||||||
|
|
||||||
self.resolve(Cast::new(*source, player, target, skill));
|
|
||||||
}
|
|
||||||
},
|
|
||||||
_ => (),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
for cast in casts {
|
||||||
|
self.resolve(cast);
|
||||||
|
}
|
||||||
|
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -616,9 +574,9 @@ impl Game {
|
|||||||
self.construct_by_id(*construct).unwrap().effects.len().pct(*mult),
|
self.construct_by_id(*construct).unwrap().effects.len().pct(*mult),
|
||||||
|
|
||||||
Value::ColourSkills { construct, colour, mult } => unimplemented!(),
|
Value::ColourSkills { construct, colour, mult } => unimplemented!(),
|
||||||
self.construct_by_id(*construct).unwrap().skills.iter()
|
// self.construct_by_id(*construct).unwrap().skills.iter()
|
||||||
.filter(|ce| ce.)
|
// .filter(|ce| ce.)
|
||||||
.count(),
|
// .count(),
|
||||||
|
|
||||||
Value::DamageTaken { construct, colour, mult } =>
|
Value::DamageTaken { construct, colour, mult } =>
|
||||||
events.iter().fold(0, |dmg, e| match e {
|
events.iter().fold(0, |dmg, e| match e {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user