private static bool GetProjectLevelByID(LDtkDataLevel[] levels, LDtkLevelIdentifier levelToBuild, out LDtkDataLevel level) { level = default; if (levelToBuild == null) { Debug.LogError($"LDtk: LevelToBuild null, not assigned?"); return(false); } bool IdentifierMatchesLevelToBuild(LDtkDataLevel lvl) => string.Equals(lvl.identifier, levelToBuild); if (!levels.Any(IdentifierMatchesLevelToBuild)) { Debug.LogError($"LDtk: No level named \"{levelToBuild}\" exists in the LDtk Project"); return(false); } level = levels.First(IdentifierMatchesLevelToBuild); return(true); }
public static void BuildLevel(LDtkDataProject project, LDtkLevelIdentifier levelToBuild, LDtkProjectAssets assets) { if (assets == null) { Debug.LogError("LDtk: ProjectAssets object is null; not building level."); return; } if (levelToBuild == null) { Debug.LogError("LDtk: LDtkLevelIdentifier object is null; not building level."); return; } if (!LDtkUnityTilesetBuilder.ValidateTilemapPrefabRequirements(assets.TilemapPrefab)) { return; } bool success = GetProjectLevelByID(project.levels, levelToBuild, out LDtkDataLevel level); if (!success) { return; } string debugLvlName = $"\"{level.identifier}\""; //Debug.Log($"LDtk: Building level: {debugLvlName}"); Stopwatch levelBuildTimer = Stopwatch.StartNew(); BuildProcess(project, level, assets); levelBuildTimer.Stop(); double ms = levelBuildTimer.ElapsedMilliseconds; Debug.Log($"LDtk: Built level {debugLvlName} in {ms}ms ({ms/1000}s)"); OnLevelBuilt?.Invoke(level); }