def on_setting_changed(self, plugin_id, setting_id, value):
        """ Callback when a setting got changed. This will update the setting,
        and also call the callback for that setting, in case the plugin defined
        one. """
        if plugin_id not in self.settings or setting_id not in self.settings[plugin_id]:
            self.warn("Got invalid setting change:", plugin_id, "/", setting_id)
            return

        setting = self.settings[plugin_id][setting_id]
        setting.set_value(value)

        if plugin_id not in self.enabled_plugins:
            return

        if setting.runtime or setting.shader_runtime:
            update_method = self.instances[plugin_id], "update_" + setting_id
            if hasattr(*update_method):
                getattr(*update_method)()

        if setting.shader_runtime:
            self.init_defines()
            self._pipeline.stage_mgr.write_autoconfig()
            self.instances[plugin_id].reload_shaders()
 Callback when a setting got changed. This will update the setting,
        and also call the callback for that setting, in case the plugin defined
        one. 
metadrive/render_pipeline/rpcore/pluginbase/manager.py