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 program: $state,
17 instance: $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_for_action;
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;
56#[cfg(test)]
57pub(crate) use auras::aura_stacks_by_id;
58pub(crate) use auras::{
59 AuraBreakTrigger, add_aura_stack, apply_aura, apply_aura_with_duration,
60 apply_aura_with_rolling_multiplier, aura_key_for, aura_keys_for_application, aura_remaining_ms,
61 aura_stacks, break_auras_on_actor, break_auras_without_telemetry, break_stealth_if_active,
62 consume_aura, consume_aura_stack, consume_aura_stacks, drain_deferred_work, expire_aura,
63 expire_auras_on_actor, extend_aura, is_aura_active, reduce_aura, refresh_all_aura_projections,
64 refresh_aura_snapshot_multiplier, refresh_aura_time_rates_for,
65};
66pub(crate) use auto_attack::{
67 apply_auto_attack_action_lifecycle, earliest_auto_attack_time, phase_auto_attacks_for,
68 reproject_pet_auto_attack_speeds, reproject_player_auto_attack_speeds,
69};
70pub(crate) use buffs::{
71 active_form_combat_round_time_ms, active_targeting_value, actor_buff_totals,
72 base_optional_primary_spell_cost, base_primary_spell_cost, buff_totals, current_haste_mult,
73 current_mastery_points, current_rppm_scaling, effective_cast_time_ms, effective_gcd_ms,
74 effective_optional_spell_cost, effective_spell_cost, initialize_all_spell_costs,
75 refresh_spell_costs_for, sync_player_health_from_stamina,
76};
77#[cfg(test)]
78pub(crate) use casting::set_gcd;
79pub(crate) use casting::{
80 apply_cast_pushback, apply_movement_event, can_cast_while_moving, end_channel, interrupt_cast,
81 set_gcd_for_candidate,
82};
83pub(crate) use channel::process_channel_tick_for;
84pub(crate) use cooldowns::{
85 check_recharge, grant_charges, mutate_cooldown, reduce_cooldown, refresh_maximum_charges_for,
86 refresh_recharge_rates_for, reset_cooldown, reset_cooldown_for_lifecycle, start_cooldown,
87 start_cooldown_in_slot,
88};
89#[cfg(feature = "rotation-optimizations")]
90pub(crate) use cooldowns::{initialize_cooldown_projections, reset_cooldown_projections};
91pub(crate) use damage_pipeline::{
92 DamageFlags, DamagePayload, IncomingDamage, ProfiledDamageDef, damage_flags_from_binding,
93 damage_flags_from_data, damage_flags_from_local, deal_bound_damage_ap, deal_bound_damage_sp,
94 deal_bound_effect_damage_ap_with_geometry, deal_bound_profiled_damage_def,
95 deal_bound_resolved_damage, deal_damage_ap_at, deal_damage_base, deal_damage_def,
96 deal_damage_sp_at, deal_effect_damage_ap, deal_effect_damage_sp_with_geometry,
97 deal_incoming_damage, deal_profiled_damage_def_at, dynamic_base_powers,
98 resolve_spell_impact_flags,
99};
100pub(crate) use effects::{
101 EffectExecution, effect_range_is_hostile, execute_effect_range, execute_effect_range_for_actor,
102 execute_proc_effect_range_for_actor,
103};
104pub(crate) use ground_effects::{ground_pulse_anchor, process_ground_pulse};
105pub(crate) use guardians::{
106 active_guardian_count, command_guardians, dismiss_guardians, extend_guardians,
107 guardian_combat_coordinates, process_guardian_action, process_guardian_expire,
108 reproject_guardian_action_speeds, summon_guardian,
109};
110pub(crate) use healing_pipeline::{HealRequest, deal_heal};
111pub(crate) use health_thresholds::{
112 process_actor_health_change, process_health_threshold_application,
113};
114pub(crate) use mastery::{MasteryFn, no_crit_damage, no_damage_bonus};
115pub(crate) use periodic::{
116 fire_partial_tick_on_expiry_for, fire_partial_tick_on_expiry_without_target,
117 periodic_tick_target, process_single_aura_tick_for, reapply_if_flagged,
118};
119pub(crate) use pet_actions::{
120 begin_proc_heartbeat, ensure_initial_proc_heartbeat, ensure_recurring_proc_heartbeat,
121 gain_pet_resource, initialize_pet_actions, pet_stat_snapshot, process_pet_action,
122 refresh_pet_actions_after_aura_change, refresh_pet_stat_snapshots,
123};
124#[cfg(test)]
125pub(crate) use procs::fire_impact_procs;
126pub(crate) use procs::{
127 ResourceTelemetry, emit_resource, fire_aura_application_procs, fire_heartbeat_procs,
128 fire_spell_phase_procs, gain_hook_resource_with_procs, gain_resource_with_procs,
129};
130pub(crate) use resources::{
131 gain_resource_from, gain_secondary_resource_from, refresh_primary_resource_projection,
132 rune_time_to_regen, secondary_spends_all_points, spell_health_cost,
133 spend_all_secondary_resource, spend_health_cost, spend_resource, spend_secondary_resource,
134 sync_resource,
135};
136pub(crate) use spell_gates::{refresh_spell_gates_for, reset_spell_gates, set_spell_gate};