| 149 | state.root = Some(Arc::new(root)); |
| 150 | state.root_has_res_dir = has_res_dir; |
| 151 | state.archive = archive; |
| 152 | Ok(()) |
| 153 | } |
| 154 | |
| 155 | /// Install a project root, panicking when an embedded archive is invalid. |
| 156 | /// |
| 157 | /// Use [`try_set_project_root`] for untrusted or fallible startup paths. |
| 158 | pub fn set_project_root(root: ProjectRoot) { |
| 159 | try_set_project_root(root).expect("Failed to open PerroAssets archive"); |
| 160 | } |
| 161 | |
| 162 | pub fn set_demo_asset_filter(active: bool, excludes: Vec<String>) { |
| 163 | let compiled: Option<Arc<[CompiledPathPattern]>> = (!excludes.is_empty()).then(|| { |
| 164 | excludes |
| 165 | .iter() |
| 166 | .map(|pattern| CompiledPathPattern::new(pattern)) |
| 167 | .collect() |
| 168 | }); |
| 169 | let mut state = PROJECT_ASSET_STATE |
| 170 | .write() |
| 171 | .expect("required value must be present"); |
| 172 | state.demo = active; |
| 173 | state.demo_excludes = compiled; |