Esempio n. 1
0
        // 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);
        }
Esempio n. 2
0
        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);
        }