z_mirror/EditorExtensions
git clone https://git.raiguard.me/z_mirror/EditorExtensions
e4c5e75
1.14
1--- @class Util 2local util ={} 3 4local coreutil =require ( "__core__/lualib/util" ) 5util . parse_energy =coreutil . parse_energy 6 7--- @param handler GuiElemHandler 8function util . close_button ( handler ) 9return { 10type ="sprite-button" , 11style ="frame_action_button" , 12sprite ="utility/close_white" , 13hovered_sprite ="utility/close_black" , 14clicked_sprite ="utility/close_black" , 15tooltip ={ "gui.close-instruction" } , 16mouse_button_filter ={ "left" } , 17handler ={ [ defines . events . on_gui_click ] =handler } , 18} 19end 20 21--- @param mode InfinityPipeMode 22--- @param handler GuiElemHandler 23--- @return GuiElemDef 24function util . mode_radio_button ( mode , handler ) 25return { 26type ="radiobutton" , 27name ="mode_radio_button_" .. string . gsub ( mode , "%-" , "_" ), 28caption ={ "gui-infinity-container." .. mode } , 29tooltip ={ "gui-infinity-pipe." .. mode .. "-tooltip" } , 30state =false , 31tags ={ mode =mode } , 32handler ={ [ defines . events . on_gui_checked_state_changed ] =handler } , 33} 34end 35 36function util . pusher () 37return { type ="empty-widget" , style ="flib_horizontal_pusher" , ignored_by_interaction =true } 38end 39 40--- @return boolean 41function util . in_debug_world () 42if not settings . global [ "ee-override-debug-world" ]. value then 43return false 44end 45if script . level . mod_name ~= "base" or script . level . level_name ~= "freeplay" then 46return false 47end 48local nauvis =game . get_surface ( "nauvis" ) 49if not nauvis then 50return false 51end 52local mps =nauvis . map_gen_settings 53return mps . height == 50 and mps . width == 50 54end 55 56--- @return boolean 57function util . in_testing_scenario () 58return script . level . mod_name == "EditorExtensions" and script . level . level_name == "testing" 59end 60 61--- @param player LuaPlayer 62--- @param message LocalisedString 63--- @param play_sound boolean? 64--- @param position MapPosition? 65function util . flying_text ( player , message , play_sound , position ) 66player . create_local_flying_text ( { 67text =message , 68create_at_cursor =not position , 69position =position , 70} ) 71if play_sound then 72player . play_sound ( { path ="utility/cannot_build" } ) 73end 74end 75 76--- @param player LuaPlayer 77--- @return boolean 78function util . player_can_use_editor ( player ) 79local can_use_editor =player . admin 80local permission_group =player . permission_group 81if permission_group then 82can_use_editor =permission_group . allows_action ( defines . input_action . toggle_map_editor ) 83if not can_use_editor and player . controller_type == defines . controllers . editor then 84player . ( { "message.ee-cannot-use-map-editor" } ) 85-- XXX: We need to re-enable the capability in order to get them out of the editor 86permission_group . set_allows_action ( defines . input_action . toggle_map_editor , true ) 87player . toggle_map_editor () 88permission_group . set_allows_action ( defines . input_action . toggle_map_editor , false ) 89end 90end 91player . set_shortcut_available ( "ee-toggle-map-editor" , can_use_editor ) 92return can_use_editor 93end 94 95--- @param e EventData.on_player_setup_blueprint 96--- @return LuaItemStack? 97function util . get_blueprint ( e ) 98local player =game . get_player ( e . player_index ) 99if not player then 100return 101end 102 103local bp =player . blueprint_to_setup 104if bp and bp . valid_for_read then 105return bp 106end 107 108bp =player . cursor_stack 109if not bp or not bp . valid_for_read then 110return 111end 112 113if bp . type == "blueprint-book" then 114local item_inventory =bp . get_inventory ( defines . inventory . item_main ) 115if item_inventory then 116bp =item_inventory [ bp . active_index ] 117else 118return 119end 120end 121 122return bp 123end 124 125return util