# Player - movement -> position_changed(player, vector) -> movement_system - attack -> attack_used(player, target) -> attack_system - ability -> ability_used(player, target) -> ability_system - role -> changed_role(player, role) -> role_system - targeting -> target_requested(player, target) -> targeting_system - camera -> no events # Enemy - detection -> player_detected(enemy, player) -> aggro_system - detection -> player_lost(enemy, player) -> aggro_system # HUD - on_health_changed(player, value) -> health - on_shield_changed(player, value) -> shield # Systems - movement_system <- on_position_changed(player, vector) - attack_system <- attack_used(player, target) - ability_system <- ability_used(player, target) - damage_calculator_system -> - health_system -> damage_dealt(player, damage) -> PlayerStats() # Autoloads - PlayerStats -> - health -> on_health_changed(player, value) - PlayerStats -> - health -> on_health_changed(player, value)