#pragma warning disable 672
using System;
using ICSharpCode.SharpZipLib.Zip;
using TriLibCore.General;
using TriLibCore.Utils;
namespace TriLibCore.Mappers
{
/// Represents a mapper class class used to load Textures from Zip files.
public class ZipFileTextureMapper : TextureMapper
{
///
public override void Map(TextureLoadingContext textureLoadingContext)
{
var zipLoadCustomContextData = CustomDataHelper.GetCustomData(textureLoadingContext.Context.CustomData);
if (zipLoadCustomContextData == null)
{
throw new Exception("Missing custom context data.");
}
var zipFile = zipLoadCustomContextData.ZipFile;
if (zipFile == null)
{
throw new Exception("Zip file instance is null.");
}
if (string.IsNullOrWhiteSpace(textureLoadingContext.Texture.Filename))
{
if (textureLoadingContext.Context.Options.ShowLoadingWarnings)
{
UnityEngine.Debug.LogWarning("Texture name is null.");
}
return;
}
var modelFilenameWithoutExtension = FileUtils.GetFilenameWithoutExtension(zipLoadCustomContextData.ZipEntry.Name).ToLowerInvariant();
var textureShortName = FileUtils.GetShortFilename(textureLoadingContext.Texture.Filename).ToLowerInvariant();
foreach (ZipEntry zipEntry in zipFile)
{
if (!zipEntry.IsFile)
{
continue;
}
var checkingFileShortName = FileUtils.GetShortFilename(zipEntry.Name).ToLowerInvariant();
var checkingFilenameWithoutExtension = FileUtils.GetFilenameWithoutExtension(zipEntry.Name).ToLowerInvariant();
if (
TextureUtils.IsValidTextureFileType(checkingFileShortName) &&
textureLoadingContext.TextureType == TextureType.Diffuse && modelFilenameWithoutExtension == checkingFilenameWithoutExtension
|| textureShortName == checkingFileShortName)
{
textureLoadingContext.Stream = AssetLoaderZip.ZipFileEntryToStream(out _, zipEntry, zipFile);
}
}
}
}
}