wowlab_engine_application/simulate_intent/setup/
item_spells.rs1use 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}