private void LoadLevel(string level, string episode) { string levelPath = PathOp.Combine(DualityApp.DataDirectory, "Episodes", episode, level + ".level"); IFileSystem levelPackage = new CompressedContent(levelPath); LevelConfigJson json; using (Stream s = levelPackage.OpenFile(".res", FileAccessMode.Read)) { json = ContentResolver.Current.Json.Parse <LevelConfigJson>(s); } if (json.Version.LayerFormat > LayerFormatVersion || json.Version.EventSet > EventSetVersion) { throw new NotSupportedException("Level version not supported"); } Log.Write(LogType.Info, "Loading level \"" + json.Description.Name + "\"..."); levelFriendlyName = json.Description.Name; //defaultNextLevel = json.Description.NextLevel; //defaultSecretLevel = json.Description.SecretLevel; // Palette ColorRgba[] tileMapPalette; if (levelPackage.FileExists("Main.palette")) { using (Stream s = levelPackage.OpenFile("Main.palette", FileAccessMode.Read)) { tileMapPalette = TileSet.LoadPalette(s); } } else { tileMapPalette = null; } // Tileset tileMap = new TileMap(this, json.Description.DefaultTileset, tileMapPalette, (json.Description.Flags & LevelFlags.HasPit) != 0); // Additional tilesets if (json.Tilesets != null) { for (int i = 0; i < json.Tilesets.Count; i++) { LevelConfigJson.TilesetSection part = json.Tilesets[i]; tileMap.ReadTilesetPart(part.Name, part.Offset, part.Count); } } // Read all layers json.Layers.Add("Sprite", new LevelConfigJson.LayerSection { XSpeed = 1, YSpeed = 1 }); foreach (var layer in json.Layers.OrderBy(layer => layer.Value.Depth)) { LayerType type; if (layer.Key == "Sprite") { type = LayerType.Sprite; } else if (layer.Key == "Sky") { type = LayerType.Sky; //if (layer.Value.BackgroundStyle != 0 /*Plain*/ && layer.Value.BackgroundColor != null && layer.Value.BackgroundColor.Count >= 3) { // camera.GetComponent<Camera>().ClearColor = new ColorRgba((byte)layer.Value.BackgroundColor[0], (byte)layer.Value.BackgroundColor[1], (byte)layer.Value.BackgroundColor[2]); //} } else { type = LayerType.Other; } using (Stream s = levelPackage.OpenFile(layer.Key + ".layer", FileAccessMode.Read)) { tileMap.ReadLayerConfiguration(type, s, layer.Value); } } // Read animated tiles if (levelPackage.FileExists("Animated.tiles")) { using (Stream s = levelPackage.OpenFile("Animated.tiles", FileAccessMode.Read)) { tileMap.ReadAnimatedTiles(s); } } levelBounds = new Rect(tileMap.Size * tileMap.Tileset.TileSize); // Read events eventMap = new EventMap(this, tileMap.Size); if (levelPackage.FileExists("Events.layer")) { using (Stream s2 = levelPackage.OpenFile("Events.layer", FileAccessMode.Read)) { eventMap.ReadEvents(s2, json.Version.LayerFormat, difficulty); } } GameObject tilemapHandler = new GameObject(); tilemapHandler.Parent = rootObject; tilemapHandler.AddComponent(tileMap); // Apply weather if (json.Description.DefaultWeather != WeatherType.None) { ApplyWeather( json.Description.DefaultWeather, json.Description.DefaultWeatherIntensity, json.Description.DefaultWeatherOutdoors); } // Load level text events levelTexts = json.TextEvents ?? new List <string>(); /*if (FileOp.Exists(levelPath + "." + i18n.Language)) { * try { * using (Stream s = FileOp.Open(levelPath + "." + i18n.Language, FileAccessMode.Read)) { * json = ContentResolver.Current.Json.Parse<LevelConfigJson>(s); * if (json.TextEvents != null) { * for (int i = 0; i < json.TextEvents.Count && i < levelTexts.Count; i++) { * if (json.TextEvents[i] != null) { * levelTexts[i] = json.TextEvents[i]; * } * } * } * } * } catch (Exception ex) { * Log.Write(LogType.Warning, "Cannot load i18n for this level: " + ex); * } * }*/ eventMap.ActivateEvents(int.MinValue, int.MinValue, int.MaxValue, int.MaxValue, false); }