protected void RegisterMapping(ResourceMappingChecker checker, ResourceMappingMapper mapper, ResourceMappingMode mappingMode, ResourceGameMode replacementGameMode = ResourceGameMode.All, string pathToWhitelist = null) { // turn off replacement if not supported by current mode if (!IsCurrentGameMode(replacementGameMode)) { mappingMode &= ~ResourceMappingMode.Replacement; } if (mappingMode == ResourceMappingMode.None) { return; } var mapperId = GetMapperId(mapper); var mapperEntries = _checkers.GetOrInit(checker); var entry = mapperEntries.FirstOrDefault(e => e.MapperId == mapperId); if (entry == null) { mapperEntries.Add(new MapperEntry(mapperId, mappingMode)); } else { entry.Mode |= mappingMode; } if (_checkerModes.ContainsKey(checker)) { _checkerModes[checker] |= mappingMode; } else { _checkerModes[checker] = mappingMode; } if (!pathToWhitelist.IsNullOrEmpty()) { WhiteListPaths.Add(pathToWhitelist); } if (!HasReplacementMappingsForCurrentGameMode && (mappingMode & ResourceMappingMode.Replacement) == ResourceMappingMode.Replacement && (replacementGameMode & _currentModeFlag) == _currentModeFlag) { HasReplacementMappingsForCurrentGameMode = true; } ResetCaches(); }
private IEnumerable <ResourceMappingMapper> GetMappers(ResourceMappingChecker checker, ResourceMappingMode mode) { if (!_checkers.TryGetValue(checker, out var mapperEntries)) { yield break; } foreach (var id in mapperEntries.Where(e => (e.Mode & mode) == mode).Select(e => e.MapperId)) { if (_mappers.TryGetValue(id, out var mapper)) { yield return(mapper); } } }