Skip to main content

wowlab_engine_application/simulate_intent/setup/
item_spells.rs

1use wowlab_engine_gamedata::ConsumableSpells;
2use wowlab_engine_ports::{ConsumableFlags, ContentCatalog};
3use wowlab_types::{constants::BLOODLUST_SPELL_ID, game::RaceId};
4
5use crate::{gear::GearResult, settings::racial_spell_id_for_race};
6
7#[derive(Clone, Debug, Default)]
8pub(in crate::simulate_intent) struct ResolvedConsumables {
9    pub flags: ConsumableFlags,
10    pub spells: ConsumableSpells,
11}
12
13pub(in crate::simulate_intent) fn assemble_item_spell_ids(
14    catalog: &ContentCatalog,
15    gear_result: &GearResult,
16    consumables: &ResolvedConsumables,
17    race: RaceId,
18) -> Vec<u32> {
19    let mut ids: Vec<u32> = gear_result
20        .equipped_items
21        .iter()
22        .flat_map(|item| {
23            item.effects
24                .iter()
25                .map(|effect| wowlab_types::numeric::i32_to_u32_nonnegative(effect.spell_id))
26        })
27        .collect();
28
29    ids.extend_from_slice(&gear_result.set_bonus_auras);
30
31    if consumables.flags.bloodlust {
32        ids.push(BLOODLUST_SPELL_ID);
33    }
34
35    ids.extend(consumables.spells.spell_ids());
36
37    if let Some(racial_id) = racial_spell_id_for_race(race) {
38        ids.push(racial_id);
39    }
40
41    for item in &gear_result.equipped_items {
42        ids.extend_from_slice(catalog.item_resolve_ids(item.item_id));
43    }
44
45    ids
46}