Refactor read assets

Generic PPtr
Misc
This commit is contained in:
Perfare
2018-11-21 15:37:56 +08:00
parent 8c749e21e1
commit bfaa207853
45 changed files with 1135 additions and 1055 deletions

View File

@@ -7,16 +7,16 @@ namespace AssetStudio
{
public sealed class Animation : Behaviour
{
public List<PPtr> m_Animations;
public List<PPtr<AnimationClip>> m_Animations;
public Animation(ObjectReader reader) : base(reader)
{
var m_Animation = reader.ReadPPtr();
var m_Animation = new PPtr<AnimationClip>(reader);
int numAnimations = reader.ReadInt32();
m_Animations = new List<PPtr>(numAnimations);
m_Animations = new List<PPtr<AnimationClip>>(numAnimations);
for (int i = 0; i < numAnimations; i++)
{
m_Animations.Add(reader.ReadPPtr());
m_Animations.Add(new PPtr<AnimationClip>(reader));
}
}
}

View File

@@ -293,7 +293,7 @@ namespace AssetStudio
public string attribute;
public string path;
public int classID;
public PPtr script;
public PPtr<MonoScript> script;
public FloatCurve(ObjectReader reader)
@@ -302,20 +302,20 @@ namespace AssetStudio
attribute = reader.ReadAlignedString();
path = reader.ReadAlignedString();
classID = reader.ReadInt32();
script = reader.ReadPPtr();
script = new PPtr<MonoScript>(reader);
}
}
public class PPtrKeyframe
{
public float time;
public PPtr value;
public PPtr<Object> value;
public PPtrKeyframe(ObjectReader reader)
{
time = reader.ReadSingle();
value = reader.ReadPPtr();
value = new PPtr<Object>(reader);
}
}
@@ -325,7 +325,7 @@ namespace AssetStudio
public string attribute;
public string path;
public int classID;
public PPtr script;
public PPtr<MonoScript> script;
public PPtrCurve(ObjectReader reader)
@@ -340,7 +340,7 @@ namespace AssetStudio
attribute = reader.ReadAlignedString();
path = reader.ReadAlignedString();
classID = reader.ReadInt32();
script = reader.ReadPPtr();
script = new PPtr<MonoScript>(reader);
}
}
@@ -757,7 +757,7 @@ namespace AssetStudio
{
public uint path;
public uint attribute;
public PPtr script;
public PPtr<Object> script;
public ClassIDType typeID;
public byte customType;
public byte isPPtrCurve;
@@ -767,7 +767,7 @@ namespace AssetStudio
var version = reader.version;
path = reader.ReadUInt32();
attribute = reader.ReadUInt32();
script = reader.ReadPPtr();
script = new PPtr<Object>(reader);
if (version[0] > 5 || (version[0] == 5 && version[1] >= 6)) //5.6 and up
{
typeID = (ClassIDType)reader.ReadInt32();
@@ -785,7 +785,7 @@ namespace AssetStudio
public class AnimationClipBindingConstant
{
public List<GenericBinding> genericBindings;
public List<PPtr> pptrCurveMapping;
public List<PPtr<Object>> pptrCurveMapping;
public AnimationClipBindingConstant(ObjectReader reader)
{
@@ -797,10 +797,10 @@ namespace AssetStudio
}
int numMappings = reader.ReadInt32();
pptrCurveMapping = new List<PPtr>(numMappings);
pptrCurveMapping = new List<PPtr<Object>>(numMappings);
for (int i = 0; i < numMappings; i++)
{
pptrCurveMapping.Add(reader.ReadPPtr());
pptrCurveMapping.Add(new PPtr<Object>(reader));
}
}

View File

@@ -7,14 +7,14 @@ namespace AssetStudio
{
public sealed class Animator : Behaviour
{
public PPtr m_Avatar;
public PPtr m_Controller;
public PPtr<Avatar> m_Avatar;
public PPtr<RuntimeAnimatorController> m_Controller;
public bool m_HasTransformHierarchy;
public Animator(ObjectReader reader) : base(reader)
{
m_Avatar = reader.ReadPPtr();
m_Controller = reader.ReadPPtr();
m_Avatar = new PPtr<Avatar>(reader);
m_Controller = new PPtr<RuntimeAnimatorController>(reader);
var m_CullingMode = reader.ReadInt32();
if (version[0] > 4 || (version[0] == 4 && version[1] >= 5)) //4.5 and up

View File

@@ -531,9 +531,9 @@ namespace AssetStudio
}
}
public sealed class AnimatorController : NamedObject
public sealed class AnimatorController : RuntimeAnimatorController
{
public PPtr[] m_AnimationClips;
public PPtr<AnimationClip>[] m_AnimationClips;
public AnimatorController(ObjectReader reader) : base(reader)
{
@@ -548,10 +548,10 @@ namespace AssetStudio
}
int numClips = reader.ReadInt32();
m_AnimationClips = new PPtr[numClips];
m_AnimationClips = new PPtr<AnimationClip>[numClips];
for (int i = 0; i < numClips; i++)
{
m_AnimationClips[i] = reader.ReadPPtr();
m_AnimationClips[i] = new PPtr<AnimationClip>(reader);
}
}
}

View File

@@ -7,24 +7,24 @@ namespace AssetStudio
{
public class AnimationClipOverride
{
public PPtr m_OriginalClip;
public PPtr m_OverrideClip;
public PPtr<AnimationClip> m_OriginalClip;
public PPtr<AnimationClip> m_OverrideClip;
public AnimationClipOverride(ObjectReader reader)
{
m_OriginalClip = reader.ReadPPtr();
m_OverrideClip = reader.ReadPPtr();
m_OriginalClip = new PPtr<AnimationClip>(reader);
m_OverrideClip = new PPtr<AnimationClip>(reader);
}
}
public class AnimatorOverrideController : NamedObject
public sealed class AnimatorOverrideController : RuntimeAnimatorController
{
public PPtr m_Controller;
public PPtr<RuntimeAnimatorController> m_Controller;
public List<AnimationClipOverride> m_Clips;
public AnimatorOverrideController(ObjectReader reader) : base(reader)
{
m_Controller = reader.ReadPPtr();
m_Controller = new PPtr<RuntimeAnimatorController>(reader);
int numOverrides = reader.ReadInt32();
m_Clips = new List<AnimationClipOverride>(numOverrides);

View File

@@ -9,28 +9,28 @@ namespace AssetStudio
{
public int preloadIndex;
public int preloadSize;
public PPtr asset;
public PPtr<Object> asset;
public AssetInfo(ObjectReader reader)
{
preloadIndex = reader.ReadInt32();
preloadSize = reader.ReadInt32();
asset = reader.ReadPPtr();
asset = new PPtr<Object>(reader);
}
}
public sealed class AssetBundle : NamedObject
{
public List<PPtr> m_PreloadTable;
public List<PPtr<Object>> m_PreloadTable;
public List<KeyValuePair<string, AssetInfo>> m_Container;
public AssetBundle(ObjectReader reader) : base(reader)
{
var m_PreloadTableSize = reader.ReadInt32();
m_PreloadTable = new List<PPtr>(m_PreloadTableSize);
m_PreloadTable = new List<PPtr<Object>>(m_PreloadTableSize);
for (int i = 0; i < m_PreloadTableSize; i++)
{
m_PreloadTable.Add(reader.ReadPPtr());
m_PreloadTable.Add(new PPtr<Object>(reader));
}
var m_ContainerSize = reader.ReadInt32();

View File

@@ -29,9 +29,9 @@ namespace AssetStudio
public string m_Source;
public long m_Offset;
public long m_Size;
public byte[] m_AudioData;
public Lazy<byte[]> m_AudioData;
public AudioClip(ObjectReader reader, bool readData) : base(reader)
public AudioClip(ObjectReader reader) : base(reader)
{
if (version[0] < 5)
{
@@ -49,7 +49,7 @@ namespace AssetStudio
if (reader.byteSize + reader.byteStart - reader.Position != tsize)
{
m_Offset = reader.ReadInt32();
m_Source = sourceFile.fullName + ".resS";
m_Source = assetsFile.fullName + ".resS";
}
}
else
@@ -79,18 +79,16 @@ namespace AssetStudio
m_CompressionFormat = (AudioCompressionFormat)reader.ReadInt32();
}
if (readData)
ResourceReader resourceReader;
if (!string.IsNullOrEmpty(m_Source))
{
if (!string.IsNullOrEmpty(m_Source))
{
m_AudioData = ResourcesHelper.GetData(m_Source, sourceFile, m_Offset, (int)m_Size);
}
else
{
if (m_Size > 0)
m_AudioData = reader.ReadBytes((int)m_Size);
}
resourceReader = new ResourceReader(m_Source, assetsFile, m_Offset, (int)m_Size);
}
else
{
resourceReader = new ResourceReader(reader, reader.BaseStream.Position, (int)m_Size);
}
m_AudioData = new Lazy<byte[]>(resourceReader.GetData);
}
}

View File

@@ -7,11 +7,11 @@ namespace AssetStudio
{
public abstract class Component : EditorExtension
{
public PPtr m_GameObject;
public PPtr<GameObject> m_GameObject;
protected Component(ObjectReader reader) : base(reader)
{
m_GameObject = reader.ReadPPtr();
m_GameObject = new PPtr<GameObject>(reader);
}
}
}

View File

@@ -11,8 +11,8 @@ namespace AssetStudio
{
if (platform == BuildTarget.NoTarget)
{
var m_PrefabParentObject = reader.ReadPPtr();
var m_PrefabInternal = reader.ReadPPtr();
var m_PrefabParentObject = new PPtr<EditorExtension>(reader);
var m_PrefabInternal = new PPtr<Object>(reader); //PPtr<Prefab>
}
}
}

View File

@@ -14,9 +14,9 @@ namespace AssetStudio
if ((version[0] == 5 && version[1] >= 5) || version[0] > 5)//5.5 and up
{
var m_LineSpacing = reader.ReadSingle();
var m_DefaultMaterial = reader.ReadPPtr();
var m_DefaultMaterial = new PPtr<Material>(reader);
var m_FontSize = reader.ReadSingle();
var m_Texture = reader.ReadPPtr();
var m_Texture = new PPtr<Texture>(reader);
int m_AsciiStartOffset = reader.ReadInt32();
var m_Tracking = reader.ReadSingle();
var m_CharacterSpacing = reader.ReadInt32();
@@ -68,7 +68,7 @@ namespace AssetStudio
}
int m_ConvertCase = reader.ReadInt32();
PPtr m_DefaultMaterial = reader.ReadPPtr();
var m_DefaultMaterial = new PPtr<Material>(reader);
int m_CharacterRects_size = reader.ReadInt32();
for (int i = 0; i < m_CharacterRects_size; i++)
@@ -93,7 +93,7 @@ namespace AssetStudio
}
}
PPtr m_Texture = reader.ReadPPtr();
var m_Texture = new PPtr<Texture>(reader);
int m_KerningValues_size = reader.ReadInt32();
for (int i = 0; i < m_KerningValues_size; i++)

View File

@@ -7,28 +7,30 @@ namespace AssetStudio
{
public sealed class GameObject : EditorExtension
{
public List<PPtr> m_Components;
public List<PPtr<Component>> m_Components;
public string m_Name;
public PPtr m_Transform;
public PPtr m_MeshRenderer;
public PPtr m_MeshFilter;
public PPtr m_SkinnedMeshRenderer;
public PPtr m_Animator;
public Transform m_Transform;
public MeshRenderer m_MeshRenderer;
public MeshFilter m_MeshFilter;
public SkinnedMeshRenderer m_SkinnedMeshRenderer;
public Animator m_Animator;
public Animation m_Animation;
public GameObject(ObjectReader reader) : base(reader)
{
int m_Component_size = reader.ReadInt32();
m_Components = new List<PPtr>(m_Component_size);
m_Components = new List<PPtr<Component>>(m_Component_size);
for (int j = 0; j < m_Component_size; j++)
{
if ((version[0] == 5 && version[1] >= 5) || version[0] > 5)//5.5.0 and up
if ((version[0] == 5 && version[1] >= 5) || version[0] > 5) //5.5.0 and up
{
m_Components.Add(reader.ReadPPtr());
m_Components.Add(new PPtr<Component>(reader));
}
else
{
int first = reader.ReadInt32();
m_Components.Add(reader.ReadPPtr());
m_Components.Add(new PPtr<Component>(reader));
}
}

View File

@@ -8,7 +8,7 @@ namespace AssetStudio
public class TexEnv
{
public string name;
public PPtr m_Texture;
public PPtr<Texture> m_Texture;
public float[] m_Scale;
public float[] m_Offset;
}
@@ -27,7 +27,7 @@ namespace AssetStudio
public sealed class Material : NamedObject
{
public PPtr m_Shader;
public PPtr<Shader> m_Shader;
public string[] m_ShaderKeywords;
public int m_CustomRenderQueue;
public TexEnv[] m_TexEnvs;
@@ -36,7 +36,7 @@ namespace AssetStudio
public Material(ObjectReader reader) : base(reader)
{
m_Shader = reader.ReadPPtr();
m_Shader = new PPtr<Shader>(reader);
if (version[0] == 4 && (version[1] >= 2 || (version[1] == 1 && !buildType.IsAlpha)))
{
@@ -84,7 +84,7 @@ namespace AssetStudio
TexEnv m_TexEnv = new TexEnv()
{
name = reader.ReadAlignedString(),
m_Texture = reader.ReadPPtr(),
m_Texture = new PPtr<Texture>(reader),
m_Scale = new[] { reader.ReadSingle(), reader.ReadSingle() },
m_Offset = new[] { reader.ReadSingle(), reader.ReadSingle() }
};

View File

@@ -351,7 +351,7 @@ namespace AssetStudio
bool m_IsReadable = reader.ReadBoolean();
bool m_KeepVertices = reader.ReadBoolean();
bool m_KeepIndices = reader.ReadBoolean();
if (reader.HasStructMember("m_UsedForStaticMeshColliderOnly"))
if (HasStructMember("m_UsedForStaticMeshColliderOnly"))
{
var m_UsedForStaticMeshColliderOnly = reader.ReadBoolean();
}

View File

@@ -8,11 +8,11 @@ namespace AssetStudio
public sealed class MeshFilter : Component
{
public long preloadIndex;
public PPtr m_Mesh;
public PPtr<Mesh> m_Mesh;
public MeshFilter(ObjectReader reader) : base(reader)
{
m_Mesh = reader.ReadPPtr();
m_Mesh = new PPtr<Mesh>(reader);
}
}
}

View File

@@ -7,12 +7,12 @@ namespace AssetStudio
{
public sealed class MonoBehaviour : Behaviour
{
public PPtr m_Script;
public PPtr<MonoScript> m_Script;
public string m_Name;
public MonoBehaviour(ObjectReader reader) : base(reader)
{
m_Script = reader.ReadPPtr();
m_Script = new PPtr<MonoScript>(reader);
m_Name = reader.ReadAlignedString();
}
}

View File

@@ -8,13 +8,13 @@ namespace AssetStudio
public sealed class MovieTexture : Texture
{
public byte[] m_MovieData;
public PPtr<AudioClip> m_AudioClip;
public MovieTexture(ObjectReader reader) : base(reader)
{
var m_Loop = reader.ReadBoolean();
reader.AlignStream(4);
//PPtr<AudioClip>
reader.ReadPPtr();
m_AudioClip = new PPtr<AudioClip>(reader);
m_MovieData = reader.ReadBytes(reader.ReadInt32());
}
}

View File

@@ -9,7 +9,7 @@ namespace AssetStudio
{
public string m_Name;
public NamedObject(ObjectReader reader) : base(reader)
protected NamedObject(ObjectReader reader) : base(reader)
{
m_Name = reader.ReadAlignedString();
}

View File

@@ -5,27 +5,58 @@ using System.Text;
namespace AssetStudio
{
public abstract class Object
public class Object
{
protected SerializedFile sourceFile;
public SerializedFile assetsFile;
public ObjectReader reader;
public long m_PathID;
public int[] version;
protected BuildType buildType;
public BuildTarget platform;
public ClassIDType type;
public SerializedType serializedType;
public uint byteSize;
protected Object(ObjectReader reader)
public Object(ObjectReader reader)
{
this.reader = reader;
reader.Reset();
sourceFile = reader.assetsFile;
assetsFile = reader.assetsFile;
type = reader.type;
m_PathID = reader.m_PathID;
version = reader.version;
buildType = reader.buildType;
platform = reader.platform;
serializedType = reader.serializedType;
byteSize = reader.byteSize;
if (platform == BuildTarget.NoTarget)
{
var m_ObjectHideFlags = reader.ReadUInt32();
}
}
protected bool HasStructMember(string name)
{
return serializedType?.m_Nodes != null && serializedType.m_Nodes.Any(x => x.m_Name == name);
}
public string Dump()
{
reader.Reset();
if (serializedType?.m_Nodes != null)
{
var sb = new StringBuilder();
TypeTreeHelper.ReadTypeString(sb, serializedType.m_Nodes, reader);
return sb.ToString();
}
return null;
}
public byte[] GetRawData()
{
reader.Reset();
return reader.ReadBytes((int)byteSize);
}
}
}

View File

@@ -1,12 +1,19 @@
namespace AssetStudio
{
public class PPtr
public sealed class PPtr<T> where T : Object
{
public int m_FileID;
public long m_PathID;
public SerializedFile assetsFile;
public int index = -2; //-2 - Prepare, -1 - Missing
private SerializedFile assetsFile;
private int index = -2; //-2 - Prepare, -1 - Missing
public PPtr(ObjectReader reader)
{
m_FileID = reader.ReadInt32();
m_PathID = reader.m_Version < 14 ? reader.ReadInt32() : reader.ReadInt64();
assetsFile = reader.assetsFile;
}
private bool TryGetAssetsFile(out SerializedFile result)
{
@@ -20,7 +27,7 @@
if (m_FileID > 0 && m_FileID - 1 < assetsFile.m_Externals.Count)
{
var assetsManager = assetsFile.assetsManager;
var assetsfileList = assetsManager.assetsFileList;
var assetsFileList = assetsManager.assetsFileList;
var assetsFileIndexCache = assetsManager.assetsFileIndexCache;
if (index == -2)
@@ -29,14 +36,14 @@
var name = m_External.fileName.ToUpper();
if (!assetsFileIndexCache.TryGetValue(name, out index))
{
index = assetsfileList.FindIndex(x => x.upperFileName == name);
index = assetsFileList.FindIndex(x => x.upperFileName == name);
assetsFileIndexCache.Add(name, index);
}
}
if (index >= 0)
{
result = assetsfileList[index];
result = assetsFileList[index];
return true;
}
}
@@ -44,45 +51,39 @@
return false;
}
public bool TryGet(out ObjectReader result)
public bool TryGet(out T result)
{
if (TryGetAssetsFile(out var sourceFile))
{
if (sourceFile.Objects.TryGetValue(m_PathID, out var obj))
{
if (obj is T variable)
{
result = variable;
return true;
}
}
}
result = null;
if (TryGetAssetsFile(out var sourceFile))
{
if (sourceFile.ObjectReaders.TryGetValue(m_PathID, out result))
{
return true;
}
}
return false;
}
public bool TryGetTransform(out Transform m_Transform)
public bool TryGet<T2>(out T2 result) where T2 : Object
{
if (TryGetAssetsFile(out var sourceFile))
{
if (sourceFile.Transforms.TryGetValue(m_PathID, out m_Transform))
if (sourceFile.Objects.TryGetValue(m_PathID, out var obj))
{
return true;
if (obj is T2 variable)
{
result = variable;
return true;
}
}
}
m_Transform = null;
return false;
}
public bool TryGetGameObject(out GameObject m_GameObject)
{
if (TryGetAssetsFile(out var sourceFile))
{
if (sourceFile.GameObjects.TryGetValue(m_PathID, out m_GameObject))
{
return true;
}
}
m_GameObject = null;
result = null;
return false;
}
}

View File

@@ -13,7 +13,7 @@ namespace AssetStudio
public abstract class Renderer : Component
{
public PPtr[] m_Materials;
public PPtr<Material>[] m_Materials;
public StaticBatchInfo m_StaticBatchInfo;
public uint[] m_SubsetIndices;
@@ -51,10 +51,10 @@ namespace AssetStudio
reader.Position += 16;//Vector4f m_LightmapTilingOffsetDynamic
}
m_Materials = new PPtr[reader.ReadInt32()];
m_Materials = new PPtr<Material>[reader.ReadInt32()];
for (int m = 0; m < m_Materials.Length; m++)
{
m_Materials[m] = reader.ReadPPtr();
m_Materials[m] = new PPtr<Material>(reader);
}
if (version[0] < 3)
@@ -77,12 +77,12 @@ namespace AssetStudio
m_SubsetIndices = reader.ReadUInt32Array(numSubsetIndices);
}
var m_StaticBatchRoot = reader.ReadPPtr();
var m_StaticBatchRoot = new PPtr<Transform>(reader);
if ((version[0] == 5 && version[1] >= 4) || version[0] > 5)//5.4.0 and up
{
var m_ProbeAnchor = reader.ReadPPtr();
var m_LightProbeVolumeOverride = reader.ReadPPtr();
var m_ProbeAnchor = new PPtr<Transform>(reader);
var m_LightProbeVolumeOverride = new PPtr<GameObject>(reader);
}
else if (version[0] >= 4 || (version[0] == 3 && version[1] >= 5))//3.5 - 5.3
{
@@ -92,7 +92,7 @@ namespace AssetStudio
{
int m_ReflectionProbeUsage = reader.ReadInt32();
}
var m_LightProbeAnchor = reader.ReadPPtr();
var m_LightProbeAnchor = new PPtr<Transform>(reader);
}
if (version[0] >= 5 || (version[0] == 4 && version[1] >= 3))//4.3 and up

View File

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace AssetStudio
{
public abstract class RuntimeAnimatorController : NamedObject
{
protected RuntimeAnimatorController(ObjectReader reader) : base(reader)
{
}
}
}

View File

@@ -7,8 +7,8 @@ namespace AssetStudio
{
public sealed class SkinnedMeshRenderer : Renderer
{
public PPtr m_Mesh;
public PPtr[] m_Bones;
public PPtr<Mesh> m_Mesh;
public PPtr<Transform>[] m_Bones;
public List<float> m_BlendShapeWeights;
public SkinnedMeshRenderer(ObjectReader reader) : base(reader)
@@ -20,15 +20,15 @@ namespace AssetStudio
if (version[0] == 2 && version[1] < 6)//2.6 down
{
var m_DisableAnimationWhenOffscreen = reader.ReadPPtr();
var m_DisableAnimationWhenOffscreen = new PPtr<Animation>(reader);
}
m_Mesh = reader.ReadPPtr();
m_Mesh = new PPtr<Mesh>(reader);
m_Bones = new PPtr[reader.ReadInt32()];
m_Bones = new PPtr<Transform>[reader.ReadInt32()];
for (int b = 0; b < m_Bones.Length; b++)
{
m_Bones[b] = reader.ReadPPtr();
m_Bones[b] = new PPtr<Transform>(reader);
}
if (version[0] < 3)

View File

@@ -50,8 +50,8 @@ namespace AssetStudio
public float m_PixelsToUnits;
public Vector2 m_Pivot;
public Tuple<Guid, long> m_RenderDataKey;
public PPtr texture;
public PPtr m_SpriteAtlas;
public PPtr<Texture2D> texture;
public PPtr<SpriteAtlas> m_SpriteAtlas;
public RectangleF textureRect;
public SpriteSettings settingsRaw;
public PointF[][] m_PhysicsShape; //Vector2[][]
@@ -98,16 +98,16 @@ namespace AssetStudio
}
//PPtr<SpriteAtlas> m_SpriteAtlas
m_SpriteAtlas = reader.ReadPPtr();
m_SpriteAtlas = new PPtr<SpriteAtlas>(reader);
}
//SpriteRenderData m_RD
// PPtr<Texture2D> texture
texture = reader.ReadPPtr();
texture = new PPtr<Texture2D>(reader);
// PPtr<Texture2D> alphaTexture
if (version[0] > 5 || (version[0] == 5 && version[1] >= 2)) //5.2 and up
{
var alphaTexture = reader.ReadPPtr();
var alphaTexture = new PPtr<Texture2D>(reader);
}
if (version[0] > 5 || (version[0] == 5 && version[1] >= 6)) //5.6 and up

View File

@@ -9,8 +9,8 @@ namespace AssetStudio
{
public class SpriteAtlasData
{
public PPtr texture;
public PPtr alphaTexture;
public PPtr<Texture2D> texture;
public PPtr<Texture2D> alphaTexture;
public System.Drawing.RectangleF textureRect;
public Vector2 textureRectOffset;
public Vector2 atlasRectOffset;
@@ -21,8 +21,8 @@ namespace AssetStudio
public SpriteAtlasData(ObjectReader reader)
{
var version = reader.version;
texture = reader.ReadPPtr();
alphaTexture = reader.ReadPPtr();
texture = new PPtr<Texture2D>(reader);
alphaTexture = new PPtr<Texture2D>(reader);
textureRect = reader.ReadRectangleF();
textureRectOffset = reader.ReadVector2();
if (version[0] > 2017 || (version[0] == 2017 && version[1] >= 2)) //2017.2 and up
@@ -44,7 +44,7 @@ namespace AssetStudio
var m_PackedSpritesSize = reader.ReadInt32();
for (int i = 0; i < m_PackedSpritesSize; i++)
{
reader.ReadPPtr(); //PPtr<Sprite> data
new PPtr<Sprite>(reader);
}
var m_PackedSpriteNamesToIndexSize = reader.ReadInt32();

View File

@@ -28,13 +28,13 @@ namespace AssetStudio
public int m_ColorSpace;
//image dataa
public int image_data_size;
public byte[] image_data;
public Lazy<byte[]> image_data;
//m_StreamData
public uint offset;
public uint size;
public string path;
public Texture2D(ObjectReader reader, bool readData) : base(reader)
public Texture2D(ObjectReader reader) : base(reader)
{
m_Width = reader.ReadInt32();
m_Height = reader.ReadInt32();
@@ -58,11 +58,11 @@ namespace AssetStudio
{
var m_StreamingMipmapsPriority = reader.ReadInt32();
}
else if (reader.HasStructMember("m_StreamingMipmapsPriority")) //will fix in some patch version bundle
else if (HasStructMember("m_StreamingMipmapsPriority")) //will fix in some patch version bundle
{
var m_StreamingMipmapsPriority = reader.ReadInt32();
}
if (reader.HasStructMember("m_StreamingGroupID")) //What the hell is this?
if (HasStructMember("m_StreamingGroupID")) //What the hell is this?
{
var m_StreamingGroupID = reader.ReadUInt32();
}
@@ -101,17 +101,16 @@ namespace AssetStudio
path = reader.ReadAlignedString();
}
if (readData)
ResourceReader resourceReader;
if (!string.IsNullOrEmpty(path))
{
if (!string.IsNullOrEmpty(path))
{
image_data = ResourcesHelper.GetData(path, sourceFile, offset, image_data_size);
}
else
{
image_data = reader.ReadBytes(image_data_size);
}
resourceReader = new ResourceReader(path, assetsFile, offset, image_data_size);
}
else
{
resourceReader = new ResourceReader(reader, reader.BaseStream.Position, image_data_size);
}
image_data = new Lazy<byte[]>(resourceReader.GetData);
}
}

View File

@@ -11,8 +11,8 @@ namespace AssetStudio
public float[] m_LocalRotation;
public float[] m_LocalPosition;
public float[] m_LocalScale;
public List<PPtr> m_Children;
public PPtr m_Father;
public List<PPtr<Transform>> m_Children;
public PPtr<Transform> m_Father;
public Transform(ObjectReader reader) : base(reader)
{
@@ -20,12 +20,12 @@ namespace AssetStudio
m_LocalPosition = new[] { reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle() };
m_LocalScale = new[] { reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle() };
int m_ChildrenCount = reader.ReadInt32();
m_Children = new List<PPtr>(m_ChildrenCount);
m_Children = new List<PPtr<Transform>>(m_ChildrenCount);
for (int j = 0; j < m_ChildrenCount; j++)
{
m_Children.Add(reader.ReadPPtr());
m_Children.Add(new PPtr<Transform>(reader));
}
m_Father = reader.ReadPPtr();
m_Father = new PPtr<Transform>(reader);
}
}
}

View File

@@ -8,12 +8,12 @@ namespace AssetStudio
{
public sealed class VideoClip : NamedObject
{
public byte[] m_VideoData;
public Lazy<byte[]> m_VideoData;
public string m_OriginalPath;
public string m_Source;
public ulong m_Size;
public VideoClip(ObjectReader reader, bool readData) : base(reader)
public VideoClip(ObjectReader reader) : base(reader)
{
m_OriginalPath = reader.ReadAlignedString();
var m_ProxyWidth = reader.ReadUInt32();
@@ -47,18 +47,16 @@ namespace AssetStudio
m_Size = reader.ReadUInt64();
var m_HasSplitAlpha = reader.ReadBoolean();
if (readData)
ResourceReader resourceReader;
if (!string.IsNullOrEmpty(m_Source))
{
if (!string.IsNullOrEmpty(m_Source))
{
m_VideoData = ResourcesHelper.GetData(m_Source, sourceFile, (long)m_Offset, (int)m_Size);
}
else
{
if (m_Size > 0)
m_VideoData = reader.ReadBytes((int)m_Size);
}
resourceReader = new ResourceReader(m_Source, assetsFile, (long)m_Offset, (int)m_Size);
}
else
{
resourceReader = new ResourceReader(reader, reader.BaseStream.Position, (int)m_Size);
}
m_VideoData = new Lazy<byte[]>(resourceReader.GetData);
}
}
}