/// <inheritdoc /> public IMapGrid?LoadBlueprint(MapId mapId, string path) { TextReader reader; var resPath = new ResourcePath(path).ToRootedPath(); // try user if (!_resMan.UserData.Exists(resPath)) { Logger.InfoS("map", $"No user blueprint path: {resPath}"); // fallback to content if (_resMan.TryContentFileRead(resPath, out var contentReader)) { reader = new StreamReader(contentReader); } else { Logger.ErrorS("map", $"No blueprint found: {resPath}"); return(null); } } else { var file = _resMan.UserData.Open(resPath, FileMode.Open); reader = new StreamReader(file); } IMapGrid grid; using (reader) { Logger.InfoS("map", $"Loading Grid: {resPath}"); var data = new MapData(reader); LoadedMapData?.Invoke(data.Stream, resPath.ToString()); if (data.GridCount != 1) { throw new InvalidDataException("Cannot instance map with multiple grids as blueprint."); } var context = new MapContext(_mapManager, _tileDefinitionManager, _serverEntityManager, _pauseManager, _componentManager, _prototypeManager, (YamlMappingNode)data.RootNode, mapId); context.Deserialize(); grid = context.Grids[0]; if (!context.MapIsPostInit && _pauseManager.IsMapInitialized(mapId)) { foreach (var entity in context.Entities) { entity.RunMapInit(); } } } return(grid); }
/// <inheritdoc /> public void LoadMap(MapId mapId, string path) { TextReader reader; var resPath = new ResourcePath(path).ToRootedPath(); // try user if (!_resMan.UserData.Exists(resPath)) { Logger.InfoS("map", $"No user map found: {resPath}"); // fallback to content if (_resMan.TryContentFileRead(resPath, out var contentReader)) { reader = new StreamReader(contentReader); } else { Logger.ErrorS("map", $"No map found: {resPath}"); return; } } else { var file = _resMan.UserData.Open(resPath, FileMode.Open); reader = new StreamReader(file); } using (reader) { Logger.InfoS("map", $"Loading Map: {resPath}"); var data = new MapData(reader); LoadedMapData?.Invoke(data.Stream, resPath.ToString()); var context = new MapContext(_mapManager, _tileDefinitionManager, _serverEntityManager, _pauseManager, _componentManager, _prototypeManager, (YamlMappingNode)data.RootNode, mapId); context.Deserialize(); if (!context.MapIsPostInit && _pauseManager.IsMapInitialized(mapId)) { foreach (var entity in context.Entities) { entity.RunMapInit(); } } } }