serialize stages as strings

This commit is contained in:
ntr 2019-07-19 20:16:27 +10:00
parent 2026530370
commit 9f0c212643
2 changed files with 48 additions and 47 deletions

View File

@ -74,13 +74,14 @@ function getSequence(resolution) {
if (resolution.event[0] === 'Ko') return ['POST_SKILL']; if (resolution.event[0] === 'Ko') return ['POST_SKILL'];
switch (resolution.stages) { switch (resolution.stages) {
case 1: return ['START_SKILL', 'END_SKILL']; case 'AllStages': return ['START_SKILL', 'END_SKILL', 'POST_SKILL'];
case 2: return ['START_SKILL', 'POST_SKILL']; case 'StartEnd': return ['START_SKILL', 'END_SKILL'];
case 3: return ['START_SKILL']; case 'StartPost': return ['START_SKILL', 'POST_SKILL'];
case 4: return ['END_SKILL', 'POST_SKILL']; case 'StartOnly': return ['START_SKILL'];
case 5: return ['END_SKILL']; case 'EndPost': return ['END_SKILL', 'POST_SKILL'];
case 6: return ['POST_SKILL']; case 'EndOnly': return ['END_SKILL'];
case 7: return []; case 'PostOnly': return ['POST_SKILL'];
case 'None': return [];
default: return ['START_SKILL', 'END_SKILL', 'POST_SKILL']; default: return ['START_SKILL', 'END_SKILL', 'POST_SKILL'];
} }
} }

View File

@ -405,15 +405,15 @@ pub struct EventConstruct {
} }
#[derive(Debug,Clone,PartialEq,Serialize,Deserialize)] #[derive(Debug,Clone,PartialEq,Serialize,Deserialize)]
pub enum LogStages { pub enum EventStages {
AllStages, // 0 Anim Anim Anim AllStages, // Anim Anim Anim
StartEnd, // 1 Anim Anim Skip StartEnd, // Anim Anim Skip
StartPost, // 2 Anim Skip Anim StartPost, // Anim Skip Anim
StartOnly, // 3 Anim Skip Skip StartOnly, // Anim Skip Skip
EndPost, // 4 Skip Anim Anim EndPost, // Skip Anim Anim
EndOnly, // 5 Skip Anim Skip EndOnly, // Skip Anim Skip
PostOnly, // 6 Skip Skip Anim PostOnly, // Skip Skip Anim
None, // 7 Skip Skip Skip None, // Skip Skip Skip
} }
#[derive(Debug,Clone,PartialEq,Serialize,Deserialize)] #[derive(Debug,Clone,PartialEq,Serialize,Deserialize)]
@ -421,7 +421,7 @@ pub struct Resolution {
pub source: EventConstruct, pub source: EventConstruct,
pub target: EventConstruct, pub target: EventConstruct,
pub event: Event, pub event: Event,
pub stages: u8, pub stages: EventStages,
} }
impl Resolution { impl Resolution {
@ -440,7 +440,7 @@ impl Resolution {
blue: target.blue_life(), blue: target.blue_life(),
}, },
event: Event::Incomplete, event: Event::Incomplete,
stages: LogStages::AllStages as u8, stages: EventStages::AllStages,
} }
} }
@ -449,8 +449,8 @@ impl Resolution {
self self
} }
fn stages(mut self, s: LogStages) -> Resolution { fn stages(mut self, s: EventStages) -> Resolution {
self.stages = s as u8; self.stages = s;
self self
} }
} }
@ -1268,7 +1268,7 @@ fn bash(source: &mut Construct, target: &mut Construct, mut results: Resolutions
let amount = source.red_power().pct(skill.multiplier().pct(100 + 45u64.saturating_mul(cds))); let amount = source.red_power().pct(skill.multiplier().pct(100 + 45u64.saturating_mul(cds)));
target.deal_red_damage(skill, amount) target.deal_red_damage(skill, amount)
.into_iter() .into_iter()
.for_each(|e| results.push(Resolution::new(source, target).event(e).stages(LogStages::PostOnly))); .for_each(|e| results.push(Resolution::new(source, target).event(e).stages(EventStages::PostOnly)));
} }
return results; return results;
@ -1282,7 +1282,7 @@ fn sleep(source: &mut Construct, target: &mut Construct, mut results: Resolution
let amount = source.green_power().pct(skill.multiplier()); let amount = source.green_power().pct(skill.multiplier());
target.deal_green_damage(skill, amount) target.deal_green_damage(skill, amount)
.into_iter() .into_iter()
.for_each(|e| results.push(Resolution::new(source, target).event(e).stages(LogStages::PostOnly))); .for_each(|e| results.push(Resolution::new(source, target).event(e).stages(EventStages::PostOnly)));
return results; return results;
} }
@ -1298,7 +1298,7 @@ fn intercept(source: &mut Construct, target: &mut Construct, mut results: Resolu
results.push(Resolution::new(source, target).event(target.recharge(skill, red_amount, 0))); results.push(Resolution::new(source, target).event(target.recharge(skill, red_amount, 0)));
let intercept = skill.effect()[0]; let intercept = skill.effect()[0];
results.push(Resolution::new(source, target).event(target.add_effect(skill, intercept)).stages(LogStages::PostOnly)); results.push(Resolution::new(source, target).event(target.add_effect(skill, intercept)).stages(EventStages::PostOnly));
return results; return results;
} }
@ -1306,7 +1306,7 @@ fn break_(source: &mut Construct, target: &mut Construct, mut results: Resolutio
let stun = skill.effect()[0]; let stun = skill.effect()[0];
results.push(Resolution::new(source, target).event(target.add_effect(skill, stun))); results.push(Resolution::new(source, target).event(target.add_effect(skill, stun)));
let vuln = skill.effect()[1]; let vuln = skill.effect()[1];
results.push(Resolution::new(source, target).event(target.add_effect(skill, vuln)).stages(LogStages::PostOnly)); results.push(Resolution::new(source, target).event(target.add_effect(skill, vuln)).stages(EventStages::PostOnly));
return results; return results;
} }
@ -1314,7 +1314,7 @@ fn break_(source: &mut Construct, target: &mut Construct, mut results: Resolutio
fn block(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { fn block(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
results.push(Resolution::new(source, target) results.push(Resolution::new(source, target)
.event(target.add_effect(skill, skill.effect()[0])) .event(target.add_effect(skill, skill.effect()[0]))
.stages(LogStages::StartEnd)); .stages(EventStages::StartEnd));
return results; return results;
} }
@ -1328,11 +1328,11 @@ fn counter(source: &mut Construct, target: &mut Construct, mut results: Resoluti
let red_amount = source.red_power().pct(skill.multiplier()); let red_amount = source.red_power().pct(skill.multiplier());
results.push(Resolution::new(source, target) results.push(Resolution::new(source, target)
.event(target.recharge(skill, red_amount, 0)) .event(target.recharge(skill, red_amount, 0))
.stages(LogStages::StartEnd)); .stages(EventStages::StartEnd));
results.push(Resolution::new(source, target) results.push(Resolution::new(source, target)
.event(target.add_effect(skill, skill.effect()[0])) .event(target.add_effect(skill, skill.effect()[0]))
.stages(LogStages::PostOnly)); .stages(EventStages::PostOnly));
return results; return results;
} }
@ -1341,7 +1341,7 @@ fn riposte(source: &mut Construct, target: &mut Construct, mut results: Resoluti
let amount = source.red_power().pct(skill.multiplier()); let amount = source.red_power().pct(skill.multiplier());
target.deal_red_damage(skill, amount) target.deal_red_damage(skill, amount)
.into_iter() .into_iter()
.for_each(|e| results.push(Resolution::new(source, target).event(e).stages(LogStages::StartPost))); .for_each(|e| results.push(Resolution::new(source, target).event(e).stages(EventStages::StartPost)));
return results; return results;
} }
@ -1360,7 +1360,7 @@ fn restrict(source: &mut Construct, target: &mut Construct, mut results: Resolut
let amount = source.red_power().pct(skill.multiplier()).pct(s_multi); let amount = source.red_power().pct(skill.multiplier()).pct(s_multi);
target.deal_red_damage(skill, amount) target.deal_red_damage(skill, amount)
.into_iter() .into_iter()
.for_each(|e| results.push(Resolution::new(source, target).event(e).stages(LogStages::PostOnly))); .for_each(|e| results.push(Resolution::new(source, target).event(e).stages(EventStages::PostOnly)));
return results; return results;
@ -1376,7 +1376,7 @@ fn slay(source: &mut Construct, target: &mut Construct, mut results: Resolutions
results.push(Resolution::new(source, target).event(e)); results.push(Resolution::new(source, target).event(e));
let heal = source.deal_green_damage(skill, amount); let heal = source.deal_green_damage(skill, amount);
for h in heal { for h in heal {
results.push(Resolution::new(source, source).event(h).stages(LogStages::PostOnly)); results.push(Resolution::new(source, source).event(h).stages(EventStages::PostOnly));
}; };
}, },
_ => results.push(Resolution::new(source, target).event(e)), _ => results.push(Resolution::new(source, target).event(e)),
@ -1409,7 +1409,7 @@ fn triage_tick(source: &mut Construct, target: &mut Construct, mut results: Reso
let amount = source.green_power().pct(skill.multiplier()); let amount = source.green_power().pct(skill.multiplier());
target.deal_green_damage(skill, amount) target.deal_green_damage(skill, amount)
.into_iter() .into_iter()
.for_each(|e| results.push(Resolution::new(source, target).event(e).stages(LogStages::EndPost))); .for_each(|e| results.push(Resolution::new(source, target).event(e).stages(EventStages::EndPost)));
return results; return results;
} }
@ -1424,7 +1424,7 @@ fn chaos(source: &mut Construct, target: &mut Construct, mut results: Resolution
let amount = source.red_power().pct(skill.multiplier()).pct(r_rng); let amount = source.red_power().pct(skill.multiplier()).pct(r_rng);
target.deal_red_damage(skill, amount) target.deal_red_damage(skill, amount)
.into_iter() .into_iter()
.for_each(|e| results.push(Resolution::new(source, target).event(e).stages(LogStages::PostOnly))); .for_each(|e| results.push(Resolution::new(source, target).event(e).stages(EventStages::PostOnly)));
return results; return results;
} }
@ -1464,7 +1464,7 @@ fn decay(source: &mut Construct, target: &mut Construct, mut results: Resolution
let decay = ConstructEffect::new(effect, duration).set_tick(Cast::new_tick(source, target, tick_skill)); let decay = ConstructEffect::new(effect, duration).set_tick(Cast::new_tick(source, target, tick_skill));
results.push(Resolution::new(source, target) results.push(Resolution::new(source, target)
.event(target.add_effect(skill, decay)) .event(target.add_effect(skill, decay))
.stages(LogStages::PostOnly)); .stages(EventStages::PostOnly));
return decay_tick(source, target, results, tick_skill); return decay_tick(source, target, results, tick_skill);
} }
@ -1473,7 +1473,7 @@ fn decay_tick(source: &mut Construct, target: &mut Construct, mut results: Resol
let amount = source.blue_power().pct(skill.multiplier()); let amount = source.blue_power().pct(skill.multiplier());
target.deal_blue_damage(skill, amount) target.deal_blue_damage(skill, amount)
.into_iter() .into_iter()
.for_each(|e| results.push(Resolution::new(source, target).event(e).stages(LogStages::EndPost))); .for_each(|e| results.push(Resolution::new(source, target).event(e).stages(EventStages::EndPost)));
return results; return results;
} }
@ -1495,7 +1495,7 @@ fn electrocute(source: &mut Construct, target: &mut Construct, mut results: Reso
let electrocute = ConstructEffect::new(effect, duration).set_tick(Cast::new_tick(source, target, tick_skill)); let electrocute = ConstructEffect::new(effect, duration).set_tick(Cast::new_tick(source, target, tick_skill));
results.push(Resolution::new(source, target) results.push(Resolution::new(source, target)
.event(target.add_effect(skill, electrocute)) .event(target.add_effect(skill, electrocute))
.stages(LogStages::StartPost)); .stages(EventStages::StartPost));
return electrocute_tick(source, target, results, tick_skill); return electrocute_tick(source, target, results, tick_skill);
} }
@ -1503,14 +1503,14 @@ fn electrocute_tick(source: &mut Construct, target: &mut Construct, mut results:
let amount = source.blue_power().pct(skill.multiplier()); let amount = source.blue_power().pct(skill.multiplier());
target.deal_blue_damage(skill, amount) target.deal_blue_damage(skill, amount)
.into_iter() .into_iter()
.for_each(|e| results.push(Resolution::new(source, target).event(e).stages(LogStages::EndPost))); .for_each(|e| results.push(Resolution::new(source, target).event(e).stages(EventStages::EndPost)));
return results; return results;
} }
fn ruin(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { fn ruin(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
results.push(Resolution::new(source, target) results.push(Resolution::new(source, target)
.event(target.add_effect(skill, skill.effect()[0])) .event(target.add_effect(skill, skill.effect()[0]))
.stages(LogStages::PostOnly)); .stages(EventStages::PostOnly));
return results;; return results;;
} }
@ -1529,7 +1529,7 @@ fn absorption(source: &mut Construct, target: &mut Construct, mut results: Resol
let absorb = skill.effect()[0].set_meta(EffectMeta::AddedDamage(amount)); let absorb = skill.effect()[0].set_meta(EffectMeta::AddedDamage(amount));
results.push(Resolution::new(source, target) results.push(Resolution::new(source, target)
.event(target.add_effect(reflect_skill, absorb)) .event(target.add_effect(reflect_skill, absorb))
.stages(LogStages::PostOnly)); .stages(EventStages::PostOnly));
return results;; return results;;
} }
@ -1554,7 +1554,7 @@ fn reflect(source: &mut Construct, target: &mut Construct, mut results: Resoluti
let blue_amount = source.blue_power().pct(skill.multiplier()); let blue_amount = source.blue_power().pct(skill.multiplier());
results.push(Resolution::new(source, target) results.push(Resolution::new(source, target)
.event(target.recharge(skill, 0, blue_amount)) .event(target.recharge(skill, 0, blue_amount))
.stages(LogStages::PostOnly)); .stages(EventStages::PostOnly));
return results;; return results;;
} }
@ -1586,13 +1586,13 @@ fn siphon_tick(source: &mut Construct, target: &mut Construct, mut results: Reso
for e in siphon_events { for e in siphon_events {
match e { match e {
Event::Damage { amount, mitigation: _, colour: _, skill: _ } => { Event::Damage { amount, mitigation: _, colour: _, skill: _ } => {
results.push(Resolution::new(source, target).event(e).stages(LogStages::EndPost)); results.push(Resolution::new(source, target).event(e).stages(EventStages::EndPost));
let heal = source.deal_green_damage(skill, amount); let heal = source.deal_green_damage(skill, amount);
for h in heal { for h in heal {
results.push(Resolution::new(source, source).event(h).stages(LogStages::PostOnly)); results.push(Resolution::new(source, source).event(h).stages(EventStages::PostOnly));
}; };
}, },
_ => results.push(Resolution::new(source, target).event(e).stages(LogStages::EndPost)), _ => results.push(Resolution::new(source, target).event(e).stages(EventStages::EndPost)),
} }
} }
@ -1604,7 +1604,7 @@ fn link(source: &mut Construct, target: &mut Construct, mut results: Resolutions
results.push(Resolution::new(source, target).event(target.recharge(skill, 0, blue_amount))); results.push(Resolution::new(source, target).event(target.recharge(skill, 0, blue_amount)));
let link = skill.effect()[0].set_meta(EffectMeta::LinkTarget(target.id)); let link = skill.effect()[0].set_meta(EffectMeta::LinkTarget(target.id));
results.push(Resolution::new(source, target).event(source.add_effect(skill, link)).stages(LogStages::PostOnly)); results.push(Resolution::new(source, target).event(source.add_effect(skill, link)).stages(EventStages::PostOnly));
return results; return results;
} }
@ -1625,7 +1625,7 @@ fn link_hit(source: &Construct, target: &Construct, mut results: Resolutions, ga
results.push(Resolution::new(target, link_target).event(Event::Skill { skill: Skill::LinkI })); results.push(Resolution::new(target, link_target).event(Event::Skill { skill: Skill::LinkI }));
res.into_iter().for_each(|e| results.push(Resolution::new(&source, &link_target) res.into_iter().for_each(|e| results.push(Resolution::new(&source, &link_target)
.event(e).stages(LogStages::EndPost))); .event(e).stages(EventStages::EndPost)));
} else { } else {
panic!("not a link target {:?}", link); panic!("not a link target {:?}", link);
} }
@ -1649,7 +1649,7 @@ fn silence(source: &mut Construct, target: &mut Construct, mut results: Resoluti
let amount = source.blue_power().pct(skill.multiplier()).pct(s_multi); let amount = source.blue_power().pct(skill.multiplier()).pct(s_multi);
target.deal_blue_damage(skill, amount) target.deal_blue_damage(skill, amount)
.into_iter() .into_iter()
.for_each(|e| results.push(Resolution::new(source, target).event(e).stages(LogStages::PostOnly))); .for_each(|e| results.push(Resolution::new(source, target).event(e).stages(EventStages::PostOnly)));
return results; return results;
} }
@ -1700,10 +1700,10 @@ fn purify(source: &mut Construct, target: &mut Construct, mut results: Resolutio
let ce = target.effects.remove(i); let ce = target.effects.remove(i);
results.push(Resolution::new(source, target) results.push(Resolution::new(source, target)
.event(Event::Removal { effect: ce.effect, construct_effects: target.effects.clone() }) .event(Event::Removal { effect: ce.effect, construct_effects: target.effects.clone() })
.stages(LogStages::PostOnly)); .stages(EventStages::PostOnly));
target.deal_green_damage(skill, amount) target.deal_green_damage(skill, amount)
.into_iter() .into_iter()
.for_each(|e| results.push(Resolution::new(source, target).event(e).stages(LogStages::PostOnly))); .for_each(|e| results.push(Resolution::new(source, target).event(e).stages(EventStages::PostOnly)));
} }
return results; return results;