mirror of
https://github.com/aelurum/AssetStudio.git
synced 2025-05-25 05:40:21 -04:00
improved
This commit is contained in:
parent
ada26db659
commit
e53eacef78
@ -9,12 +9,12 @@ namespace AssetStudio
|
|||||||
public class AssetsManager
|
public class AssetsManager
|
||||||
{
|
{
|
||||||
public List<SerializedFile> assetsFileList = new List<SerializedFile>();
|
public List<SerializedFile> assetsFileList = new List<SerializedFile>();
|
||||||
internal Dictionary<string, int> assetsFileIndexCache = new Dictionary<string, int>();
|
internal Dictionary<string, int> assetsFileIndexCache = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
|
||||||
internal Dictionary<string, EndianBinaryReader> resourceFileReaders = new Dictionary<string, EndianBinaryReader>();
|
internal Dictionary<string, EndianBinaryReader> resourceFileReaders = new Dictionary<string, EndianBinaryReader>(StringComparer.OrdinalIgnoreCase);
|
||||||
|
|
||||||
private List<string> importFiles = new List<string>();
|
private List<string> importFiles = new List<string>();
|
||||||
private HashSet<string> importFilesHash = new HashSet<string>();
|
private HashSet<string> importFilesHash = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
|
||||||
private HashSet<string> assetsFileListHash = new HashSet<string>();
|
private HashSet<string> assetsFileListHash = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
|
||||||
|
|
||||||
public void LoadFiles(params string[] files)
|
public void LoadFiles(params string[] files)
|
||||||
{
|
{
|
||||||
@ -37,7 +37,7 @@ namespace AssetStudio
|
|||||||
foreach (var file in files)
|
foreach (var file in files)
|
||||||
{
|
{
|
||||||
importFiles.Add(file);
|
importFiles.Add(file);
|
||||||
importFilesHash.Add(Path.GetFileName(file).ToUpper());
|
importFilesHash.Add(Path.GetFileName(file));
|
||||||
}
|
}
|
||||||
|
|
||||||
Progress.Reset();
|
Progress.Reset();
|
||||||
@ -75,21 +75,21 @@ namespace AssetStudio
|
|||||||
private void LoadAssetsFile(string fullName, EndianBinaryReader reader)
|
private void LoadAssetsFile(string fullName, EndianBinaryReader reader)
|
||||||
{
|
{
|
||||||
var fileName = Path.GetFileName(fullName);
|
var fileName = Path.GetFileName(fullName);
|
||||||
if (!assetsFileListHash.Contains(fileName.ToUpper()))
|
if (!assetsFileListHash.Contains(fileName))
|
||||||
{
|
{
|
||||||
Logger.Info($"Loading {fileName}");
|
Logger.Info($"Loading {fileName}");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var assetsFile = new SerializedFile(this, fullName, reader);
|
var assetsFile = new SerializedFile(this, fullName, reader);
|
||||||
assetsFileList.Add(assetsFile);
|
assetsFileList.Add(assetsFile);
|
||||||
assetsFileListHash.Add(assetsFile.upperFileName);
|
assetsFileListHash.Add(assetsFile.fileName);
|
||||||
|
|
||||||
foreach (var sharedFile in assetsFile.m_Externals)
|
foreach (var sharedFile in assetsFile.m_Externals)
|
||||||
{
|
{
|
||||||
var sharedFilePath = Path.GetDirectoryName(fullName) + "\\" + sharedFile.fileName;
|
var sharedFilePath = Path.GetDirectoryName(fullName) + "\\" + sharedFile.fileName;
|
||||||
var sharedFileName = sharedFile.fileName;
|
var sharedFileName = sharedFile.fileName;
|
||||||
|
|
||||||
if (!importFilesHash.Contains(sharedFileName.ToUpper()))
|
if (!importFilesHash.Contains(sharedFileName))
|
||||||
{
|
{
|
||||||
if (!File.Exists(sharedFilePath))
|
if (!File.Exists(sharedFilePath))
|
||||||
{
|
{
|
||||||
@ -103,7 +103,7 @@ namespace AssetStudio
|
|||||||
if (File.Exists(sharedFilePath))
|
if (File.Exists(sharedFilePath))
|
||||||
{
|
{
|
||||||
importFiles.Add(sharedFilePath);
|
importFiles.Add(sharedFilePath);
|
||||||
importFilesHash.Add(sharedFileName.ToUpper());
|
importFilesHash.Add(sharedFileName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -123,8 +123,7 @@ namespace AssetStudio
|
|||||||
private void LoadAssetsFromMemory(string fullName, EndianBinaryReader reader, string originalPath, string unityVersion = null)
|
private void LoadAssetsFromMemory(string fullName, EndianBinaryReader reader, string originalPath, string unityVersion = null)
|
||||||
{
|
{
|
||||||
var fileName = Path.GetFileName(fullName);
|
var fileName = Path.GetFileName(fullName);
|
||||||
var upperFileName = fileName.ToUpper();
|
if (!assetsFileListHash.Contains(fileName))
|
||||||
if (!assetsFileListHash.Contains(upperFileName))
|
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -135,7 +134,7 @@ namespace AssetStudio
|
|||||||
assetsFile.SetVersion(unityVersion);
|
assetsFile.SetVersion(unityVersion);
|
||||||
}
|
}
|
||||||
assetsFileList.Add(assetsFile);
|
assetsFileList.Add(assetsFile);
|
||||||
assetsFileListHash.Add(assetsFile.upperFileName);
|
assetsFileListHash.Add(assetsFile.fileName);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
@ -143,7 +142,7 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
resourceFileReaders.Add(upperFileName, reader);
|
resourceFileReaders.Add(fileName, reader);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -35,10 +35,10 @@ namespace AssetStudio
|
|||||||
if (index == -2)
|
if (index == -2)
|
||||||
{
|
{
|
||||||
var m_External = assetsFile.m_Externals[m_FileID - 1];
|
var m_External = assetsFile.m_Externals[m_FileID - 1];
|
||||||
var name = m_External.fileName.ToUpper();
|
var name = m_External.fileName;
|
||||||
if (!assetsFileIndexCache.TryGetValue(name, out index))
|
if (!assetsFileIndexCache.TryGetValue(name, out index))
|
||||||
{
|
{
|
||||||
index = assetsFileList.FindIndex(x => x.upperFileName == name);
|
index = assetsFileList.FindIndex(x => x.fileName.Equals(name, StringComparison.OrdinalIgnoreCase));
|
||||||
assetsFileIndexCache.Add(name, index);
|
assetsFileIndexCache.Add(name, index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -91,8 +91,8 @@ namespace AssetStudio
|
|||||||
|
|
||||||
public void Set(T m_Object)
|
public void Set(T m_Object)
|
||||||
{
|
{
|
||||||
var name = m_Object.assetsFile.upperFileName;
|
var name = m_Object.assetsFile.fileName;
|
||||||
if (string.Equals(assetsFile.upperFileName, name, StringComparison.Ordinal))
|
if (string.Equals(assetsFile.fileName, name, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
m_FileID = 0;
|
m_FileID = 0;
|
||||||
}
|
}
|
||||||
@ -119,7 +119,7 @@ namespace AssetStudio
|
|||||||
|
|
||||||
if (!assetsFileIndexCache.TryGetValue(name, out index))
|
if (!assetsFileIndexCache.TryGetValue(name, out index))
|
||||||
{
|
{
|
||||||
index = assetsFileList.FindIndex(x => x.upperFileName == name);
|
index = assetsFileList.FindIndex(x => x.fileName.Equals(name, StringComparison.OrdinalIgnoreCase));
|
||||||
assetsFileIndexCache.Add(name, index);
|
assetsFileIndexCache.Add(name, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
var resourceFileName = Path.GetFileName(path);
|
var resourceFileName = Path.GetFileName(path);
|
||||||
|
|
||||||
if (assetsFile.assetsManager.resourceFileReaders.TryGetValue(resourceFileName.ToUpper(), out var reader))
|
if (assetsFile.assetsManager.resourceFileReaders.TryGetValue(resourceFileName, out var reader))
|
||||||
{
|
{
|
||||||
reader.Position = offset;
|
reader.Position = offset;
|
||||||
return reader.ReadBytes(size);
|
return reader.ReadBytes(size);
|
||||||
|
@ -13,7 +13,6 @@ namespace AssetStudio
|
|||||||
public string fullName;
|
public string fullName;
|
||||||
public string originalPath;
|
public string originalPath;
|
||||||
public string fileName;
|
public string fileName;
|
||||||
public string upperFileName;
|
|
||||||
public int[] version = { 0, 0, 0, 0 };
|
public int[] version = { 0, 0, 0, 0 };
|
||||||
public BuildType buildType;
|
public BuildType buildType;
|
||||||
public Dictionary<long, Object> Objects;
|
public Dictionary<long, Object> Objects;
|
||||||
@ -34,7 +33,6 @@ namespace AssetStudio
|
|||||||
this.reader = reader;
|
this.reader = reader;
|
||||||
this.fullName = fullName;
|
this.fullName = fullName;
|
||||||
fileName = Path.GetFileName(fullName);
|
fileName = Path.GetFileName(fullName);
|
||||||
upperFileName = fileName.ToUpper();
|
|
||||||
|
|
||||||
//ReadHeader
|
//ReadHeader
|
||||||
header = new SerializedFileHeader();
|
header = new SerializedFileHeader();
|
||||||
|
@ -101,7 +101,7 @@ namespace AssetStudioGUI
|
|||||||
StatusStripUpdate("Building asset list...");
|
StatusStripUpdate("Building asset list...");
|
||||||
|
|
||||||
productName = string.Empty;
|
productName = string.Empty;
|
||||||
var assetsNameHash = new HashSet<string>();
|
var assetsNameHash = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
|
||||||
var progressCount = assetsManager.assetsFileList.Sum(x => x.Objects.Count);
|
var progressCount = assetsManager.assetsFileList.Sum(x => x.Objects.Count);
|
||||||
int j = 0;
|
int j = 0;
|
||||||
Progress.Reset();
|
Progress.Reset();
|
||||||
@ -186,7 +186,7 @@ namespace AssetStudioGUI
|
|||||||
}
|
}
|
||||||
assetItem.SubItems.AddRange(new[] { assetItem.TypeString, assetItem.FullSize.ToString() });
|
assetItem.SubItems.AddRange(new[] { assetItem.TypeString, assetItem.FullSize.ToString() });
|
||||||
//处理同名文件
|
//处理同名文件
|
||||||
if (!assetsNameHash.Add((assetItem.TypeString + assetItem.Text).ToUpper()))
|
if (!assetsNameHash.Add(assetItem.TypeString + assetItem.Text))
|
||||||
{
|
{
|
||||||
assetItem.Text += assetItem.UniqueID;
|
assetItem.Text += assetItem.UniqueID;
|
||||||
}
|
}
|
||||||
@ -217,7 +217,7 @@ namespace AssetStudioGUI
|
|||||||
}
|
}
|
||||||
|
|
||||||
item.Text = Path.GetDirectoryName(originalPath) + "\\" + Path.GetFileNameWithoutExtension(originalPath);
|
item.Text = Path.GetDirectoryName(originalPath) + "\\" + Path.GetFileNameWithoutExtension(originalPath);
|
||||||
if (!assetsNameHash.Add((item.TypeString + item.Text).ToUpper()))
|
if (!assetsNameHash.Add(item.TypeString + item.Text))
|
||||||
{
|
{
|
||||||
item.Text += item.UniqueID;
|
item.Text += item.UniqueID;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user