示例#1
0
        public static AssetTypeValue DefaultValueFromTemplate(AssetTypeTemplateField templateField)
        {
            object obj;

            switch (templateField.valueType)
            {
            case EnumValueTypes.Int8:
                obj = (sbyte)0; break;

            case EnumValueTypes.UInt8:
                obj = (byte)0; break;

            case EnumValueTypes.Bool:
                obj = false; break;

            case EnumValueTypes.Int16:
                obj = (short)0; break;

            case EnumValueTypes.UInt16:
                obj = (ushort)0; break;

            case EnumValueTypes.Int32:
                obj = 0; break;

            case EnumValueTypes.UInt32:
                obj = 0u; break;

            case EnumValueTypes.Int64:
                obj = 0L; break;

            case EnumValueTypes.UInt64:
                obj = 0uL; break;

            case EnumValueTypes.Float:
                obj = 0f; break;

            case EnumValueTypes.Double:
                obj = 0d; break;

            case EnumValueTypes.String:
                obj = string.Empty; break;

            case EnumValueTypes.Array:
                obj = new AssetTypeArray(); break;

            case EnumValueTypes.ByteArray:
                obj = new AssetTypeByteArray(); break;

            default:
                obj = null; break;
            }
            return(new AssetTypeValue(templateField.valueType, obj));
        }
示例#2
0
        public static AssetTypeValue DefaultValueFromTemplate(AssetTypeTemplateField templateField)
        {
            object obj;

            switch (templateField.valueType)
            {
            case EnumValueTypes.Int8:
                obj = (sbyte)0; break;

            case EnumValueTypes.UInt8:
                obj = (byte)0; break;

            case EnumValueTypes.Bool:
                obj = false; break;

            case EnumValueTypes.Int16:
                obj = (short)0; break;

            case EnumValueTypes.UInt16:
                obj = (ushort)0; break;

            case EnumValueTypes.Int32:
                obj = 0; break;

            case EnumValueTypes.UInt32:
                obj = 0u; break;

            case EnumValueTypes.Int64:
                obj = 0L; break;

            case EnumValueTypes.UInt64:
                obj = 0uL; break;

            case EnumValueTypes.Float:
                obj = 0f; break;

            case EnumValueTypes.Double:
                obj = 0d; break;

            case EnumValueTypes.String:
                obj = string.Empty; break;

            case EnumValueTypes.Array:
                obj = new AssetTypeArray(); break;

            case EnumValueTypes.ByteArray:
                obj = new AssetTypeByteArray(); break;

            default:
                obj = null; break;
            }
            if (obj == null && templateField.isArray)
            {
                //arrays don't usually have their type set,
                //so we have to check .isArray instead
                obj = new AssetTypeArray();
                return(new AssetTypeValue(EnumValueTypes.Array, obj));
            }
            else
            {
                return(new AssetTypeValue(templateField.valueType, obj));
            }
        }
示例#3
0
        //AssetTypeValueField
        public static void Write(this AssetTypeValueField valueField, AssetsFileWriter writer, int depth = 0)
        {
            if (valueField.templateField.isArray)
            {
                if (valueField.templateField.valueType == EnumValueTypes.ByteArray)
                {
                    AssetTypeByteArray byteArray = valueField.value.value.asByteArray;

                    byteArray.size = (uint)byteArray.data.Length;
                    writer.Write(byteArray.size);
                    writer.Write(byteArray.data);
                    if (valueField.templateField.align)
                    {
                        writer.Align();
                    }
                }
                else
                {
                    AssetTypeArray array = valueField.value.value.asArray;

                    array.size = valueField.childrenCount;
                    writer.Write(array.size);
                    for (int i = 0; i < array.size; i++)
                    {
                        valueField[i].Write(writer, depth + 1);
                    }
                    if (valueField.templateField.align)
                    {
                        writer.Align();
                    }
                }
            }
            else
            {
                if (valueField.childrenCount == 0)
                {
                    switch (valueField.templateField.valueType)
                    {
                    case EnumValueTypes.Int8:
                        writer.Write(valueField.value.value.asInt8);
                        if (valueField.templateField.align)
                        {
                            writer.Align();
                        }
                        break;

                    case EnumValueTypes.UInt8:
                        writer.Write(valueField.value.value.asUInt8);
                        if (valueField.templateField.align)
                        {
                            writer.Align();
                        }
                        break;

                    case EnumValueTypes.Bool:
                        writer.Write(valueField.value.value.asBool);
                        if (valueField.templateField.align)
                        {
                            writer.Align();
                        }
                        break;

                    case EnumValueTypes.Int16:
                        writer.Write(valueField.value.value.asInt16);
                        if (valueField.templateField.align)
                        {
                            writer.Align();
                        }
                        break;

                    case EnumValueTypes.UInt16:
                        writer.Write(valueField.value.value.asUInt16);
                        if (valueField.templateField.align)
                        {
                            writer.Align();
                        }
                        break;

                    case EnumValueTypes.Int32:
                        writer.Write(valueField.value.value.asInt32);
                        break;

                    case EnumValueTypes.UInt32:
                        writer.Write(valueField.value.value.asUInt32);
                        break;

                    case EnumValueTypes.Int64:
                        writer.Write(valueField.value.value.asInt64);
                        break;

                    case EnumValueTypes.UInt64:
                        writer.Write(valueField.value.value.asUInt64);
                        break;

                    case EnumValueTypes.Float:
                        writer.Write(valueField.value.value.asFloat);
                        break;

                    case EnumValueTypes.Double:
                        writer.Write(valueField.value.value.asDouble);
                        break;

                    case EnumValueTypes.String:
                        writer.Write(valueField.value.value.asString.Length);
                        writer.Write(valueField.value.value.asString);
                        writer.Align();
                        break;
                    }
                }
                else
                {
                    for (int i = 0; i < valueField.childrenCount; i++)
                    {
                        valueField[i].Write(writer, depth + 1);
                    }
                    if (valueField.templateField.align)
                    {
                        writer.Align();
                    }
                }
            }
        }
        public static AssetsReplacer ConvertSpriteRenderer(AssetTypeValueField baseField, ulong pathId, AssetPPtr goPPtr, AssetPPtr matPPtr, AssetPPtr spritePPtr)
        {
            AssetTypeValueField m_GameObject = baseField.Get("m_GameObject");
            AssetTypeValueField m_Materials  = baseField.Get("m_Materials").Get("Array");

            if (m_Materials.GetValue().AsArray().size != 1)
            {
                Console.WriteLine("warning, sprite material is not 1! (" + m_Materials.GetValue().AsArray().size + ")");
            }
            AssetTypeValueField m_Sprite = baseField.Get("m_Sprite");

            //GameObject refs
            m_GameObject.Get("m_FileID").GetValue().Set((int)goPPtr.fileID);
            m_GameObject.Get("m_PathID").GetValue().Set((long)goPPtr.pathID);

            //Material refs
            AssetTypeArray arr = m_Materials.value.value.asArray;

            arr.size = 1;
            m_Materials.value.value.asArray = arr;
            m_Materials.pChildren           = new AssetTypeValueField[1];
            AssetTypeValueField m_FileID = new AssetTypeValueField()
            {
                templateField = m_Materials.templateField.children[1].children[0],
                childrenCount = 0,
                pChildren     = new AssetTypeValueField[0],
                value         = new AssetTypeValue(EnumValueTypes.ValueType_Int32, (int)matPPtr.fileID)
            };
            AssetTypeValueField m_PathID = new AssetTypeValueField()
            {
                templateField = m_Materials.templateField.children[1].children[1],
                childrenCount = 0,
                pChildren     = new AssetTypeValueField[0],
                value         = new AssetTypeValue(EnumValueTypes.ValueType_Int64, (long)matPPtr.pathID)
            };
            AssetTypeValueField m_Material = new AssetTypeValueField()
            {
                templateField = m_Materials.templateField.children[1],
                childrenCount = 2,
                pChildren     = new AssetTypeValueField[2]
                {
                    m_FileID,
                    m_PathID
                },
                value = new AssetTypeValue(EnumValueTypes.ValueType_Array, 0)
            };

            //Sprite refs
            m_Sprite.Get("m_FileID").GetValue().Set((int)spritePPtr.fileID);
            m_Sprite.Get("m_PathID").GetValue().Set((long)spritePPtr.pathID);

            byte[] spriteRendererAsset;
            using (MemoryStream memStream = new MemoryStream())
                using (AssetsFileWriter writer = new AssetsFileWriter(memStream))
                {
                    writer.bigEndian = false;
                    baseField.Write(writer);
                    spriteRendererAsset = memStream.ToArray();
                }
            return(new AssetsReplacerFromMemory(0, pathId, 0xD4, 0xFFFF, spriteRendererAsset));
        }