bring in damage trigger casts
This commit is contained in:
parent
61870b69ac
commit
1c24ab02bc
@ -912,6 +912,53 @@ impl Construct {
|
||||
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> {
|
||||
// if self.evasion.value == 0 {
|
||||
// return None;
|
||||
|
||||
@ -546,58 +546,16 @@ impl Game {
|
||||
}
|
||||
|
||||
fn event_reactions(&mut self, cast: &Cast, event: &Event) -> &mut Game {
|
||||
match event {
|
||||
Event::Damage { construct, colour, amount, mitigation, display: _ } => {
|
||||
if self.construct_by_id(*construct).unwrap().affected(Effect::Electric) && !cast.skill.is_tick() {
|
||||
let ConstructEffect { effect: _, duration: _, meta, tick: _ } =
|
||||
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));
|
||||
}
|
||||
},
|
||||
_ => (),
|
||||
let casts = match event {
|
||||
Event::Damage { construct, colour, amount, mitigation, display: _ } =>
|
||||
self.construct_by_id(*construct).unwrap().damage_trigger_casts(cast, event),
|
||||
_ => vec![],
|
||||
};
|
||||
|
||||
for cast in casts {
|
||||
self.resolve(cast);
|
||||
}
|
||||
|
||||
self
|
||||
}
|
||||
|
||||
@ -616,9 +574,9 @@ impl Game {
|
||||
self.construct_by_id(*construct).unwrap().effects.len().pct(*mult),
|
||||
|
||||
Value::ColourSkills { construct, colour, mult } => unimplemented!(),
|
||||
self.construct_by_id(*construct).unwrap().skills.iter()
|
||||
.filter(|ce| ce.)
|
||||
.count(),
|
||||
// self.construct_by_id(*construct).unwrap().skills.iter()
|
||||
// .filter(|ce| ce.)
|
||||
// .count(),
|
||||
|
||||
Value::DamageTaken { construct, colour, mult } =>
|
||||
events.iter().fold(0, |dmg, e| match e {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user