1#[cfg(test)]
4macro_rules! process_single_aura_tick_fixture {
5 (
6 $state:expr,
7 $buf:expr,
8 $aura_id:expr,
9 $source:expr,
10 $target:expr,
11 $now:expr,
12 $rng:expr,
13 $sink:expr $(,)?
14 ) => {{
15 let mut ctx = $crate::CombatCtx {
16 state: $state,
17 buf: $buf,
18 sink: $sink,
19 now: $now,
20 rng: $rng,
21 source: $source,
22 target: $target,
23 };
24
25 $crate::systems::periodic::process_single_aura_tick_fixture(&mut ctx, $aura_id);
26 }};
27}
28#[cfg(test)]
29pub(crate) use process_single_aura_tick_fixture;
30
31mod absorbs;
32mod aoe;
33mod async_stacks;
34pub(crate) mod auras;
35mod auto_attack;
36pub(crate) mod buffs;
37pub(crate) use buffs::effective_periodic_interval_ms;
38mod casting;
39pub(crate) mod channel;
40mod cooldowns;
41pub(crate) mod damage_pipeline;
42mod effects;
43mod ground_effects;
44mod guardians;
45mod healing_pipeline;
46mod health_thresholds;
47pub(crate) mod mastery;
48pub(crate) mod periodic;
49mod pet_actions;
50mod procs;
51pub(crate) use procs::{attempt_weapon_enchants, weapon_enchants_on_player_impact};
52pub(crate) mod resources;
53pub(crate) mod spell_gates;
54
55pub(crate) use async_stacks::expire_async_stacks_due;
56pub(crate) use auras::{
57 AuraBreakTrigger, add_aura_stack, apply_aura, apply_aura_with_duration,
58 apply_aura_with_rolling_multiplier, aura_key_for, aura_keys_for_application, aura_remaining_ms,
59 aura_stacks, aura_stacks_by_id, break_auras_on_actor, break_auras_without_telemetry,
60 break_stealth_if_active, bypass_aura_active, consume_aura, consume_aura_stack,
61 consume_aura_stack_by_id, consume_aura_stacks, drain_deferred_work, expire_aura,
62 expire_auras_on_actor, extend_aura, is_aura_active, reduce_aura, refresh_aura_projections,
63 refresh_aura_snapshot_multiplier, take_aura_stacks,
64};
65pub(crate) use auto_attack::{
66 apply_auto_attack_action_lifecycle, earliest_auto_attack_time, phase_auto_attacks_for,
67};
68pub(crate) use buffs::{
69 accumulate_actor_buffs, accumulate_buffs, active_form_combat_round_time_ms,
70 active_stance_mask_exception, active_targeting_value, base_optional_primary_spell_cost,
71 base_primary_spell_cost, current_haste_mult, current_mastery_points, current_rppm_scaling,
72 effective_cast_time_ms, effective_gcd_ms, effective_optional_spell_cost, effective_spell_cost,
73 sync_player_health_from_stamina, sync_spell_costs,
74};
75pub(crate) use casting::{
76 apply_cast_pushback, apply_movement_event, can_cast_while_moving, effective_spell_ids,
77 end_channel, interrupt_cast, set_gcd,
78};
79pub(crate) use channel::process_channel_tick_for;
80pub(crate) use cooldowns::{
81 check_recharge, grant_charges, mutate_cooldown, reduce_cooldown, reset_cooldown,
82 start_cooldown, start_cooldown_in_slot, sync_max_charges, sync_recharge_rates,
83};
84pub(crate) use damage_pipeline::{
85 DamageFlags, DamagePayload, IncomingDamage, ProfiledDamageDef, damage_flags_from_data,
86 deal_damage_ap, deal_damage_ap_at, deal_damage_base, deal_damage_def, deal_damage_sp,
87 deal_damage_sp_at, deal_effect_damage_ap, deal_effect_damage_ap_with_geometry,
88 deal_effect_damage_sp_with_geometry, deal_incoming_damage, deal_profiled_damage_def,
89 deal_profiled_damage_def_at, deal_resolved_damage, dynamic_base_powers,
90 resolve_spell_impact_flags,
91};
92pub(crate) use effects::{
93 EffectExecution, effect_range_is_hostile, execute_effect_range, execute_effect_range_for_actor,
94 execute_proc_effect_range_for_actor,
95};
96pub(crate) use ground_effects::{
97 ground_pulse_anchor, process_ground_pulse, resolve_ground_effect_damage,
98};
99pub(crate) use guardians::{
100 active_guardian_count, command_guardians, dismiss_guardians, extend_guardians,
101 guardian_combat_coordinates, process_guardian_action, process_guardian_expire, summon_guardian,
102};
103pub(crate) use healing_pipeline::{HealRequest, deal_heal};
104pub(crate) use health_thresholds::{
105 process_actor_health_change, process_health_threshold_application,
106};
107pub(crate) use mastery::{MasteryFn, no_crit_damage, no_damage_bonus};
108pub(crate) use periodic::{
109 fire_partial_tick_on_expiry_for, fire_partial_tick_on_expiry_without_target,
110 periodic_tick_target, process_single_aura_tick_for, reapply_if_flagged,
111};
112pub(crate) use pet_actions::{
113 begin_proc_heartbeat, ensure_initial_proc_heartbeat, ensure_recurring_proc_heartbeat,
114 gain_pet_resource, initialize_pet_actions, pet_stat_snapshot, process_pet_action,
115 refresh_pet_actions_after_aura_change, refresh_pet_stat_snapshots,
116};
117#[cfg(test)]
118pub(crate) use procs::fire_impact_procs;
119pub(crate) use procs::{
120 ResourceTelemetry, emit_resource, fire_aura_application_procs, fire_heartbeat_procs,
121 fire_spell_phase_procs, gain_hook_resource_with_procs, gain_resource_with_procs,
122};
123pub(crate) use resources::{
124 gain_resource_from, gain_secondary_resource_from, rune_time_to_regen,
125 secondary_spends_all_points, spell_health_cost, spend_all_secondary_resource,
126 spend_health_cost, spend_resource, spend_secondary_resource, sync_resource,
127};
128pub(crate) use spell_gates::{
129 ignores_aura_state, reset_spell_gates, set_spell_gate, synchronize_active_spell_gates,
130};