wowlab_engine_combat/state/combat_state/
telemetry.rs1use super::{
2 ActorId, AuraKey, AuraTelemetryScope, CombatState, EnemyIdx, TargetMetadata, TelemetryScope,
3};
4
5impl CombatState {
6 #[must_use]
8 pub fn telemetry_scope(&self, source: ActorId, target: EnemyIdx) -> Option<TelemetryScope> {
9 let definition = self.config.encounter.definition();
10 let enemy = definition.enemies.get(target.as_usize())?;
11 let group = definition.groups.get(enemy.group_id.as_usize())?;
12 let wave = definition.waves.get(group.wave_id.as_usize())?;
13
14 Some(TelemetryScope {
15 source,
16 target,
17 pull: wave.pull_id,
18 group: group.id,
19 })
20 }
21
22 #[must_use]
24 pub fn telemetry_targets(&self) -> Vec<TargetMetadata> {
25 self.enemy_definitions()
26 .map(|enemy| TargetMetadata {
27 id: enemy.id().to_target_idx(),
28 npc_id: enemy.npc_id(),
29 display_name: enemy.display_name().to_string(),
30 group: enemy.group_id(),
31 enemy_tags: enemy.enemy_tags().to_vec(),
32 group_tags: enemy.group_tags().to_vec(),
33 })
34 .collect()
35 }
36
37 #[must_use]
39 pub fn aura_telemetry_scope(&self, key: AuraKey) -> AuraTelemetryScope {
40 let (pull, group) = match key.affected() {
41 ActorId::Enemy(target) => self
42 .telemetry_scope(key.source(), target)
43 .map_or((self.runtime.encounter.active_pull(), None), |scope| {
44 (scope.pull, Some(scope.group))
45 }),
46 ActorId::Player | ActorId::External | ActorId::Pet(_) => {
47 (self.runtime.encounter.active_pull(), None)
48 }
49 };
50
51 AuraTelemetryScope {
52 source: key.source(),
53 affected: key.affected(),
54 pull,
55 group,
56 }
57 }
58}