z_mirror/Krastorio2
git clone https://git.raiguard.me/z_mirror/Krastorio2
74419633
trunk
1local flib_position =require ( "__flib__.position" ) 2 3--- @param turbine LuaEntity 4local function build_collision ( turbine ) 5for _ , existing_collision in 6pairs ( turbine . surface . find_entities_filtered ( { name ="kr-wind-turbine-collision" , position =turbine . position } )) 7do 8if flib_position . eq ( existing_collision . position , turbine . position ) then 9return 10end 11end 12 13turbine . surface . create_entity ( { 14name ="kr-wind-turbine-collision" , 15position =turbine . position , 16force =turbine . force , 17create_build_effect_smoke =false , 18} ) 19end 20 21--- @param turbine LuaEntity 22local function destroy_collision ( turbine ) 23for _ , collision in 24pairs ( turbine . surface . find_entities_filtered ( { name ="kr-wind-turbine-collision" , position =turbine . position } )) 25do 26if flib_position . eq ( collision . position , turbine . position ) then 27collision . destroy () 28end 29end 30end 31 32--- @param e EntityBuiltEvent 33local function on_entity_built ( e ) 34local entity =e . entity or e . destination 35if not entity or not entity . valid or entity . name ~= "kr-wind-turbine" then 36return 37end 38 39build_collision ( entity ) 40end 41 42--- @param e EntityDestroyedEvent 43local function on_entity_destroyed ( e ) 44local entity =e . entity 45if not entity or not entity . valid or entity . name ~= "kr-wind-turbine" then 46return 47end 48 49destroy_collision ( entity ) 50end 51 52--- @class wind_turbine_handler: event_handler 53local wind_turbine_handler ={} 54 55function wind_turbine_handler . on_configuration_changed () 56for _ , surface in pairs ( game . surfaces ) do 57for _ , entity in 58pairs ( surface . find_entities_filtered ( { name ={ "kr-wind-turbine" , "kr-wind-turbine-collision" } } )) 59do 60if entity . name == "kr-wind-turbine" then 61build_collision ( entity ) 62elseif entity . name == "kr-wind-turbine-collision" then 63local existing_turbine =entity . surface . find_entity ( "kr-wind-turbine" , entity . position ) 64if not existing_turbine or not flib_position . eq ( existing_turbine . position , entity . position ) then 65entity . destroy () 66end 67end 68end 69end 70end 71 72wind_turbine_handler . events ={ 73[ defines . events . on_built_entity ] =on_entity_built , 74[ defines . events . on_entity_cloned ] =on_entity_built , 75[ defines . events . on_entity_died ] =on_entity_destroyed , 76[ defines . events . on_player_mined_entity ] =on_entity_destroyed , 77[ defines . events . on_robot_built_entity ] =on_entity_built , 78[ defines . events . on_robot_mined_entity ] =on_entity_destroyed , 79[ defines . events . on_space_platform_built_entity ] =on_entity_built , 80[ defines . events . on_space_platform_mined_entity ] =on_entity_destroyed , 81[ defines . events . script_raised_built ] =on_entity_built , 82[ defines . events . script_raised_destroy ] =on_entity_destroyed , 83[ defines . events . script_raised_revive ] =on_entity_built , 84} 85 86return wind_turbine_handler