z_mirror/PipeVisualizer
git clone https://git.raiguard.me/z_mirror/PipeVisualizer
9371b54
2.0
1local flib_bounding_box =require ( "__flib__/bounding-box" ) 2 3local entity_data =require ( "__PipeVisualizer__/scripts/entity-data" ) 4local iterator =require ( "__PipeVisualizer__/scripts/iterator" ) 5local util =require ( "__PipeVisualizer__/scripts/util" ) 6 7--- @alias BuiltEvent EventData.on_built_entity|EventData.on_robot_built_entity|EventData.on_entity_cloned|EventData.script_raised_built|EventData.script_raised_revive 8--- @alias DestroyedEvent EventData.on_player_mined_entity|EventData.on_robot_mined_entity|EventData.on_entity_died|EventData.script_raised_destroy 9 10--- @param iterator Iterator 11--- @param entity LuaEntity 12--- @return boolean 13local function is_relevant ( iterator , entity ) 14if iterator . in_overlay then 15local overlay =global . overlay [ iterator . player_index ] 16if not overlay or not overlay . last_position then 17return false 18end 19local box = 20flib_bounding_box . from_dimensions ( overlay . last_position , overlay . dimensions . width , overlay . dimensions . height ) 21return flib_bounding_box . contains_position ( box , entity . position ) 22end 23 24local fluidbox =entity . fluidbox 25for _ , fluid_system_id in util . iterate_fluid_systems ( fluidbox ) do 26if iterator . systems [ fluid_system_id ] then 27return true 28end 29end 30return false 31end 32 33--- @param it Iterator 34--- @param data EntityData 35local function update_neighbours ( it , data ) 36for _ , connections in pairs ( data . connections ) do 37for _ , connection in pairs ( connections ) do 38if connection . target_owner then 39iterator . request2 ( it , connection . target_owner ) 40end 41end 42end 43end 44 45--- @param e BuiltEvent 46local function on_entity_built ( e ) 47if not global . iterator then 48return 49end 50 51local entity =e . entity or e . created_entity or e . destination 52if not entity . valid then 53return 54end 55 56local unit_number =entity . unit_number 57if not unit_number then 58return 59end 60 61for _ , it in pairs ( global . iterator ) do 62if is_relevant ( it , entity ) then 63iterator . request2 ( it , entity , true ) 64end 65end 66end 67 68--- @param e DestroyedEvent 69local function on_entity_destroyed ( e ) 70if not global . iterator then 71return 72end 73 74local entity =e . entity 75if not entity . valid then 76return 77end 78 79local unit_number =entity . unit_number 80if not unit_number then 81return 82end 83 84for _ , it in pairs ( global . iterator ) do 85local data =it . entities [ unit_number ] 86if not data then 87goto continue 88end 89 90update_neighbours ( it , data ) 91entity_data . remove ( it , data ) 92 93:: continue :: 94end 95end 96 97--- @param e EventData.on_player_rotated_entity|EventData.on_entity_settings_pasted 98local function on_entity_updated ( e ) 99if not global . iterator then 100return 101end 102 103local entity =e . entity or e . destination 104if not entity . valid then 105return 106end 107 108local unit_number =entity . unit_number 109if not unit_number then 110return 111end 112 113for _ , it in pairs ( global . iterator ) do 114local data =it . entities [ unit_number ] 115if not data then 116if is_relevant ( it , entity ) then 117iterator . request2 ( it , entity ) 118end 119return 120end 121update_neighbours ( it , data ) 122iterator . request2 ( it , entity , true ) 123end 124end 125 126local entity_detection ={} 127 128entity_detection . events ={ 129[ defines . events . on_built_entity ] =on_entity_built , 130[ defines . events . on_entity_cloned ] =on_entity_built , 131[ defines . events . on_entity_died ] =on_entity_destroyed , 132[ defines . events . on_entity_settings_pasted ] =on_entity_updated , 133[ defines . events . on_player_mined_entity ] =on_entity_destroyed , 134[ defines . events . on_player_rotated_entity ] =on_entity_updated , 135[ defines . events . on_robot_built_entity ] =on_entity_built , 136[ defines . events . on_robot_mined_entity ] =on_entity_destroyed , 137[ defines . events . script_raised_built ] =on_entity_built , 138[ defines . events . script_raised_destroy ] =on_entity_destroyed , 139[ defines . events . script_raised_revive ] =on_entity_built , 140} 141 142return entity_detection