// need to know the npcs to load, the scenery to load, the objects to load public static List <RegionContent> LoadContentForRegions(IServiceProvider serviceProvider, string rootDirectory, List <RegionNames> regions) { var regionContentList = new List <RegionContent>(); foreach (var region in regions) { var regionContent = new RegionContent(); var contentManager = new ContentManager(serviceProvider, rootDirectory); regionContent.Region = region; regionContent.NpcTextures = NpcContentLoader.LoadNpcsForRegion(contentManager, region); regionContent.ObjectTextures = LoadObjectTextures(contentManager, region); // don't need an object mapper because each object has it's own class regionContent.SceneryTextures = SceneryMapper.LoadSceneryTextures(contentManager, region); regionContent.SoundEffects = SoundMapper.LoadSoundsForRegion(contentManager, region); regionContent.ContentManager = contentManager; regionContentList.Add(regionContent); } return(regionContentList); }
private void ExecuteLoadUnloadRequest(List <RegionNames> regionsToLoad, List <RegionNames> regionsToUnload) { if (regionsToLoad.Count == 0 && regionsToUnload.Count == 0) { return; } var crossRegionNpcsToLoad = NpcMapper.GetCrossRegionNpcsForRegions(regionsToLoad); var currentCrossRegionNpcsUnload = NpcMapper.GetCrossRegionNpcsForRegions(_currentLoadedRegions); var crossRegionSoundsToLoad = SoundMapper.GetCrossRegionSoundEffects(regionsToLoad); var currentCrossRegionSoundsUnload = SoundMapper.GetCrossRegionSoundEffects(_currentLoadedRegions); foreach (var npc in crossRegionNpcsToLoad) { foreach (var region in NpcMapper.GetRegionsForCrossRegionNpc(npc)) { if (_currentLoadedRegions.Contains(region)) { crossRegionNpcsToLoad.Remove(npc); break; } } } foreach (var sound in crossRegionSoundsToLoad) { foreach (var region in SoundMapper.GetRegionsForSound(sound)) { if (_currentLoadedRegions.Contains(region)) { crossRegionSoundsToLoad.Remove(sound); break; } } } foreach (var region in regionsToLoad) { _currentLoadedRegions.Add(region); } foreach (var region in regionsToUnload) { _currentLoadedRegions.Remove(region); } foreach (var npc in currentCrossRegionNpcsUnload) { foreach (var region in NpcMapper.GetRegionsForCrossRegionNpc(npc)) { if (_currentLoadedRegions.Contains(region)) { currentCrossRegionNpcsUnload.Remove(npc); break; } } } foreach (var sound in currentCrossRegionSoundsUnload) { foreach (var region in SoundMapper.GetRegionsForSound(sound)) { if (_currentLoadedRegions.Contains(region)) { currentCrossRegionSoundsUnload.Remove(sound); break; } } } var saveData = DataHelper.GetCopySaveDataForCurrentFile(); // we need to use this to create the regions var regionContent = RegionContentLoader.LoadContentForRegions(_serviceProvider, _rootDirectory, regionsToLoad); var regions = RegionFactory.CreateRegions(regionsToLoad, saveData); var crossRegionNpcs = NpcMapper.CreateCrossRegionNpcs(crossRegionNpcsToLoad, saveData); var crossRegionContent = NpcContentLoader.LoadCrossRegionNpcContent(_serviceProvider, _rootDirectory, crossRegionNpcsToLoad); crossRegionContent.AddRange(SoundMapper.CreateCrossRegionSoundContent(_serviceProvider, _rootDirectory, crossRegionSoundsToLoad)); var loadedArgs = new AssetsLoadedEventArgs(); loadedArgs.RegionContent = regionContent; loadedArgs.Regions = regions; loadedArgs.CrossRegionContent = crossRegionContent; loadedArgs.CrossRegionNpcs = crossRegionNpcs; var unloadedArgs = new AssetsUnloadedEventArgs(); unloadedArgs.RegionsUnloaded = regionsToUnload; unloadedArgs.CrossRegionSoundUnloaded = currentCrossRegionSoundsUnload; unloadedArgs.CrossRegionNpcsUnloaded = currentCrossRegionNpcsUnload; AssetsLoaded(loadedArgs); AssetsUnloaded(unloadedArgs); }