aboutsummaryrefslogtreecommitdiff
path: root/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 823cd71..32af64c 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -134,6 +134,27 @@ pub enum EvtcError {
Utf8Error(#[from] std::str::Utf8Error),
}
+/// The game mode in which a log was produced.
+///
+/// Note that the distinction made here is relatively arbitrary, but hopefully still useful. In
+/// Guild Wars 2 terms, there is no clear definition of what a "game mode" is.
+///
+/// The game mode of a [`Log`] is obtained through [`Log::game_mode()`].
+#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
+#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
+pub enum GameMode {
+ /// The log is from a raid encounter.
+ Raid,
+ /// The log is from a fractal fight.
+ Fractal,
+ /// The log is from a strike mission.
+ Strike,
+ /// The log is from a training golem.
+ Golem,
+ /// The log is from a world-versus-world fight.
+ WvW,
+}
+
/// A fully processed log file.
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone)]
@@ -274,6 +295,33 @@ impl Log {
pub fn is_generic(&self) -> bool {
self.boss_id == 1
}
+
+ /// Returns the game mode that the log was made in.
+ ///
+ /// Note that if the game mode cannot be determined or is unknown to `evtclib`, `None` is
+ /// returned.
+ pub fn game_mode(&self) -> Option<GameMode> {
+ // Here we assume that any generic log is a WvW log, I'm not aware of other generic logs
+ // being produced at the moment.
+ if self.is_generic() {
+ return Some(GameMode::WvW);
+ }
+ use Encounter::*;
+ match self.encounter()? {
+ MAMA | Siax | Ensolyss | Skorvald | Artsariiv | Arkk | Ai => Some(GameMode::Fractal),
+
+ ValeGuardian | Gorseval | Sabetha | Slothasor | BanditTrio | Matthias
+ | KeepConstruct | Xera | Cairn | MursaatOverseer | Samarog | Deimos
+ | SoullessHorror | RiverOfSouls | BrokenKing | EaterOfSouls | StatueOfDarkness
+ | VoiceInTheVoid | ConjuredAmalgamate | TwinLargos | Qadim | CardinalAdina
+ | CardinalSabir | QadimThePeerless => Some(GameMode::Raid),
+
+ IcebroodConstruct | Boneskinner | SuperKodanBrothers | FraenirOfJormag
+ | WhisperOfJormag => Some(GameMode::Strike),
+
+ StandardKittyGolem | MediumKittyGolem | LargeKittyGolem => Some(GameMode::Golem),
+ }
+ }
}
/// Convenience data accessing funtions for [`Log`][Log]s.