aboutsummaryrefslogtreecommitdiff
path: root/src/gamedata.rs
diff options
context:
space:
mode:
authorDaniel Schadt <kingdread@gmx.de>2021-11-17 20:07:18 +0100
committerDaniel Schadt <kingdread@gmx.de>2021-11-17 20:07:18 +0100
commit70750b3c10aa05e8fe922b5d70e9cfe61253c72a (patch)
tree455dfb7be43e3f6724f52d4974eb4769ff9e8c40 /src/gamedata.rs
parentb962896e0d31667162b0a844e3f2186707b641ad (diff)
downloadevtclib-70750b3c10aa05e8fe922b5d70e9cfe61253c72a.tar.gz
evtclib-70750b3c10aa05e8fe922b5d70e9cfe61253c72a.tar.bz2
evtclib-70750b3c10aa05e8fe922b5d70e9cfe61253c72a.zip
Move game_mode to Encounter
If we already have an Encounter, it might be nice to determine the game mode from it as well - without needing to go through the whole log first. This is especially useful for raidgrep, where we can use the early filters - which don't have access to the whole Log item.
Diffstat (limited to 'src/gamedata.rs')
-rw-r--r--src/gamedata.rs41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/gamedata.rs b/src/gamedata.rs
index 8f9e3dc..a07ac05 100644
--- a/src/gamedata.rs
+++ b/src/gamedata.rs
@@ -7,6 +7,25 @@ use std::{
};
use thiserror::Error;
+/// 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.
+#[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,
+}
+
/// Enum containing all encounters with their IDs.
///
/// An encounter is a fight or event for which a log can exist. An encounter consists of no, one or
@@ -177,6 +196,28 @@ impl Encounter {
}
Boss::from_u16(id).map(Boss::encounter)
}
+
+ /// Returns the game mode of the encounter.
+ ///
+ /// This is one of [`GameMode::Raid`], [`GameMode::Fractal`], [`GameMode::Golem`] or
+ /// [`GameMode::Strike`].
+ pub fn game_mode(self) -> GameMode {
+ use Encounter::*;
+ match self {
+ MAMA | Siax | Ensolyss | Skorvald | Artsariiv | Arkk | Ai => 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 => GameMode::Raid,
+
+ IcebroodConstruct | Boneskinner | SuperKodanBrothers | FraenirOfJormag
+ | WhisperOfJormag => GameMode::Strike,
+
+ StandardKittyGolem | MediumKittyGolem | LargeKittyGolem => GameMode::Golem,
+ }
+ }
}
/// Error for when converting a string to an encounter fails.