z_mirror/StatsGui
git clone https://git.raiguard.me/z_mirror/StatsGui
7ef4dd0
trunk
1local constants =require ( "constants" ) 2 3local player_data =require ( "scripts.player-data" ) 4local preprocessors =require ( "scripts.preprocessors" ) 5local sensors =require ( "scripts.sensors" ) 6local stats_gui =require ( "scripts.stats-gui" ) 7 8-- ----------------------------------------------------------------------------- 9-- EVENT HANDLERS 10 11-- BOOTSTRAP 12 13script . on_init ( function () 14storage . players ={} 15storage . research_progress_samples ={} 16storage . research_progress_strings ={} 17for i , player in pairs ( game . players ) do 18player_data . init ( i ) 19player_data . refresh ( player , storage . players [ i ]) 20end 21end ) 22 23script . on_configuration_changed ( function ( e ) 24local old_version =e . mod_changes and e . mod_changes [ script . mod_name ] and e . mod_changes [ script . mod_name ]. old_version 25if not old_version then 26return 27end 28 29if helpers . compare_versions ( old_version , "1.1.0" ) < 0 then 30storage . research_progress_strings ={} 31end 32 33storage . research_progress_samples ={} 34for i , player in pairs ( game . players ) do 35player_data . refresh ( player , storage . players [ i ]) 36end 37end ) 38 39-- PLAYER 40 41script . on_event ( defines . events . on_player_created , function ( e ) 42local player =game . get_player ( e . player_index ) 43player_data . init ( e . player_index ) 44player_data . refresh ( player , storage . players [ e . player_index ]) 45end ) 46 47script . on_event ( defines . events . on_player_removed , function ( e ) 48storage . players [ e . player_index ] =nil 49end ) 50 51script . on_event ( 52{ defines . events . on_player_display_resolution_changed , defines . events . on_player_display_scale_changed } , 53--- @param e EventData.on_player_display_resolution_changed|EventData.on_player_display_scale_changed 54function ( e ) 55local player =game . get_player ( e . player_index ) 56if not player then 57return 58end 59local player_table =storage . players [ e . player_index ] 60stats_gui . update ( player , player_table ) 61end 62) 63 64-- SETTINGS 65 66script . on_event ( defines . events . on_runtime_mod_setting_changed , function ( e ) 67if string . sub ( e . setting , 1 , 8 ) == "statsgui" then 68local player =game . get_player ( e . player_index ) 69local player_table =storage . players [ e . player_index ] 70if 71e . setting == "statsgui-single-line" 72or e . setting == "statsgui-adjust-for-fps-ups" 73or e . setting == "statsgui-adjust-for-clock" 74then 75-- recreate the GUI to change the frame direction and/or padding 76player_data . refresh ( player , player_table ) 77else 78player_data . update_settings ( player , player_table ) 79end 80end 81end ) 82 83-- TICK 84 85-- update stats once per second 86script . on_nth_tick ( 60 , function () 87-- run preprocessors 88for _ , preprocessor in pairs ( preprocessors ) do 89preprocessor () 90end 91-- update GUIs 92for _ , player in pairs ( game . connected_players ) do 93local player_table =storage . players [ player . index ] 94stats_gui . update ( player , player_table ) 95end 96end ) 97 98-- CONTROLLER 99 100script . on_event ( 101{ defines . events . on_cutscene_started , defines . events . on_cutscene_finished , defines . events . on_cutscene_cancelled } , 102--- @param e EventData.on_cutscene_started|EventData.on_cutscene_finished|EventData.on_cutscene_cancelled 103function ( e ) 104local player =game . get_player ( e . player_index ) 105if not player then 106return 107end 108local player_table =storage . players [ e . player_index ] 109if not player_table then 110return 111end 112player_table . stats_window . visible =player . controller_type ~= defines . controllers . cutscene 113end 114) 115 116script . on_event ( defines . events . on_player_controller_changed , function ( e ) 117local player =game . get_player ( e . player_index ) 118if not player then 119return 120end 121local player_table =storage . players [ e . player_index ] 122if not player_table then 123return 124end 125stats_gui . update ( player , player_table ) 126end ) 127 128script . on_event ( 129{ defines . events . on_gui_opened , defines . events . on_gui_closed } , 130--- @param e EventData.on_gui_opened|EventData.on_gui_closed 131function ( e ) 132if e . gui_type ~= defines . gui_type . entity or e . entity . type ~= "locomotive" then 133return 134end 135 136local player =game . get_player ( e . player_index ) 137if not player then 138return 139end 140local player_table =storage . players [ e . player_index ] 141if not player_table then 142return 143end 144stats_gui . update ( player , player_table ) 145end 146) 147 148-- ----------------------------------------------------------------------------- 149-- REMOTE INTERFACE 150 151remote . add_interface ( "StatsGui" , { 152add_preprocessor =function ( interface , func ) 153-- create a dummy function that calls the specified remote interface and returns what it returns 154preprocessors [ # preprocessors + 1 ] =function () 155return remote . call ( interface , func ) 156end 157end , 158add_sensor =function ( interface , func ) 159-- create a dummy function that calls the specified remote interface and returns what it returns 160sensors [ # sensors + 1 ] =function ( player ) 161return remote . call ( interface , func , player ) 162end 163end , 164version =function () 165return constants . interface_version 166end , 167} )