diff options
author | Daniel Schadt <kingdread@gmx.de> | 2020-06-28 17:22:43 +0200 |
---|---|---|
committer | Daniel Schadt <kingdread@gmx.de> | 2020-06-28 17:22:43 +0200 |
commit | 0978345648cf9cdad6222f583dd21497b409d07e (patch) | |
tree | 9470f87a879e36c68104ef067c6657eb94cd98e5 /src/analyzers/fractals.rs | |
parent | acdc4d977e573d54c73530f77ba210efd2184cf0 (diff) | |
download | evtclib-0978345648cf9cdad6222f583dd21497b409d07e.tar.gz evtclib-0978345648cf9cdad6222f583dd21497b409d07e.tar.bz2 evtclib-0978345648cf9cdad6222f583dd21497b409d07e.zip |
start implementing analyzers
It turns out that the different encounters do require quite some
encounter-specific logic, not only to determine whether the CM was
activated, but also to determine whether the fight was successful, the
duration of the fight, later the phases, ...
Wrapping all of this in pre-defined "triggers" (like CmTrigger) feels
like it will be a bit unfitting, so with this patch we have introduced
the evtclib::Analyzer, which can be used to analyze the fights.
Currently, the whole CM detection logic has been moved to this new
interface, and soon we also want the success-detection logic in there.
The tests pass and the interface of Log::is_cm is unchanged.
Diffstat (limited to 'src/analyzers/fractals.rs')
-rw-r--r-- | src/analyzers/fractals.rs | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/analyzers/fractals.rs b/src/analyzers/fractals.rs new file mode 100644 index 0000000..dd010ac --- /dev/null +++ b/src/analyzers/fractals.rs @@ -0,0 +1,54 @@ +//! Analyzers for (challenge mote) fractal encounters. +use crate::{ + analyzers::{helpers, Analyzer}, + Log, +}; + +pub const SKORVALD_CM_HEALTH: u64 = 5_551_340; + +/// Analyzer for the first boss of 100 CM, Skorvald. +/// +/// The CM is detected by the boss's health, which is higher in the challenge mote. +#[derive(Debug, Clone, Copy)] +pub struct Skorvald<'log> { + log: &'log Log, +} + +impl<'log> Skorvald<'log> { + pub fn new(log: &'log Log) -> Self { + Skorvald { log } + } +} + +impl<'log> Analyzer for Skorvald<'log> { + fn log(&self) -> &Log { + self.log + } + + fn is_cm(&self) -> bool { + helpers::boss_health(self.log) + .map(|h| h >= SKORVALD_CM_HEALTH) + .unwrap_or(false) + } +} + +#[derive(Debug, Clone, Copy)] +pub struct GenericFractal<'log> { + log: &'log Log, +} + +impl<'log> GenericFractal<'log> { + pub fn new(log: &'log Log) -> Self { + GenericFractal { log } + } +} + +impl<'log> Analyzer for GenericFractal<'log> { + fn log(&self) -> &Log { + self.log + } + + fn is_cm(&self) -> bool { + true + } +} |