예제 #1
0
 public IEnumerable <Object> FetchDependencies(ISerializedFile file, bool isLog = false)
 {
     if (Type.Type == PrimitiveType.Complex)
     {
         if (IsArray)
         {
             IEnumerable <IScriptStructure> structures = (IEnumerable <IScriptStructure>)Value;
             foreach (IScriptStructure structure in structures)
             {
                 foreach (Object asset in structure.FetchDependencies(file, isLog))
                 {
                     yield return(asset);
                 }
             }
         }
         else
         {
             IScriptStructure structure = (IScriptStructure)Value;
             foreach (Object asset in structure.FetchDependencies(file, isLog))
             {
                 yield return(asset);
             }
         }
     }
 }
예제 #2
0
 public ScriptType(PrimitiveType type, IScriptStructure complexType)
 {
     if (Type == PrimitiveType.Complex && complexType == null)
     {
         throw new ArgumentNullException(nameof(complexType));
     }
     Type        = type;
     ComplexType = complexType;
 }
예제 #3
0
        protected ScriptStructure(string @namespace, string name, IScriptStructure @base, IEnumerable <IScriptField> fields) :
            this(@namespace, name)
        {
            if (fields == null)
            {
                throw new ArgumentNullException(nameof(fields));
            }

            Base = @base;
            m_fields.AddRange(fields);
        }
예제 #4
0
        public bool IsScriptableObject()
        {
            if (!GameObject.IsNull)
            {
                return(false);
            }

            IScriptStructure structure = Structure;

            while (structure != null)
            {
                if (ScriptType.IsScriptableObject(structure.Namespace, structure.Name))
                {
                    return(true);
                }
                structure = structure.Base;
            }
            return(false);
        }
예제 #5
0
        public void Read(AssetReader reader)
        {
            switch (Type.Type)
            {
            case PrimitiveType.Bool:
                if (IsArray)
                {
                    Value = reader.ReadBooleanArray();
                }
                else
                {
                    Value = reader.ReadBoolean();
                }
                reader.AlignStream(AlignType.Align4);
                break;

            case PrimitiveType.Char:
                if (IsArray)
                {
                    Value = reader.ReadCharArray();
                }
                else
                {
                    Value = reader.ReadChar();
                }
                reader.AlignStream(AlignType.Align4);
                break;

            case PrimitiveType.SByte:
                if (IsArray)
                {
                    Value = reader.ReadByteArray();
                }
                else
                {
                    Value = reader.ReadSByte();
                }
                reader.AlignStream(AlignType.Align4);
                break;

            case PrimitiveType.Byte:
                if (IsArray)
                {
                    Value = reader.ReadByteArray();
                }
                else
                {
                    Value = reader.ReadByte();
                }
                reader.AlignStream(AlignType.Align4);
                break;

            case PrimitiveType.Short:
                if (IsArray)
                {
                    Value = reader.ReadInt16Array();
                }
                else
                {
                    Value = reader.ReadInt16();
                }
                reader.AlignStream(AlignType.Align4);
                break;

            case PrimitiveType.UShort:
                if (IsArray)
                {
                    Value = reader.ReadUInt16Array();
                }
                else
                {
                    Value = reader.ReadUInt16();
                }
                reader.AlignStream(AlignType.Align4);
                break;

            case PrimitiveType.Int:
                if (IsArray)
                {
                    Value = reader.ReadInt32Array();
                }
                else
                {
                    Value = reader.ReadInt32();
                }
                break;

            case PrimitiveType.UInt:
                if (IsArray)
                {
                    Value = reader.ReadUInt32Array();
                }
                else
                {
                    Value = reader.ReadUInt32();
                }
                break;

            case PrimitiveType.Long:
                if (IsArray)
                {
                    Value = reader.ReadInt64Array();
                }
                else
                {
                    Value = reader.ReadInt64();
                }
                break;

            case PrimitiveType.ULong:
                if (IsArray)
                {
                    Value = reader.ReadUInt64Array();
                }
                else
                {
                    Value = reader.ReadUInt64();
                }
                break;

            case PrimitiveType.Single:
                if (IsArray)
                {
                    Value = reader.ReadSingleArray();
                }
                else
                {
                    Value = reader.ReadSingle();
                }
                break;

            case PrimitiveType.Double:
                if (IsArray)
                {
                    Value = reader.ReadDoubleArray();
                }
                else
                {
                    Value = reader.ReadDouble();
                }
                break;

            case PrimitiveType.String:
                if (IsArray)
                {
                    Value = reader.ReadStringArray();
                }
                else
                {
                    Value = reader.ReadString();
                }
                break;

            case PrimitiveType.Complex:
                if (IsArray)
                {
                    int count = reader.ReadInt32();
                    IScriptStructure[] structures = new IScriptStructure[count];
                    for (int i = 0; i < count; i++)
                    {
                        IScriptStructure structure = Type.ComplexType.CreateCopy();
                        structure.Read(reader);
                        structures[i] = structure;
                    }
                    Value = structures;
                }
                else
                {
                    IScriptStructure structure = Type.ComplexType.CreateCopy();
                    structure.Read(reader);
                    Value = structure;
                }
                break;

            default:
                throw new NotImplementedException($"Unknown {nameof(PrimitiveType)} '{Type.Type}'");
            }
        }
예제 #6
0
        public YAMLNode ExportYAML(IExportContainer container)
        {
            if (IsArray)
            {
                if (Type.Type == PrimitiveType.Complex)
                {
                    IEnumerable <IScriptStructure> structures = (IEnumerable <IScriptStructure>)Value;
                    return(structures.ExportYAML(container));
                }
                else
                {
                    switch (Type.Type)
                    {
                    case PrimitiveType.Bool:
                    {
                        bool[] array = (bool[])Value;
                        return(array.ExportYAML());
                    }

                    case PrimitiveType.Char:
                    {
                        char[] array = (char[])Value;
                        return(array.ExportYAML());
                    }

                    case PrimitiveType.SByte:
                    {
                        byte[] array = (byte[])Value;
                        return(array.ExportYAML());
                    }

                    case PrimitiveType.Byte:
                    {
                        byte[] array = (byte[])Value;
                        return(array.ExportYAML());
                    }

                    case PrimitiveType.Short:
                    {
                        short[] array = (short[])Value;
                        return(array.ExportYAML(true));
                    }

                    case PrimitiveType.UShort:
                    {
                        ushort[] array = (ushort[])Value;
                        return(array.ExportYAML(true));
                    }

                    case PrimitiveType.Int:
                    {
                        int[] array = (int[])Value;
                        return(array.ExportYAML(true));
                    }

                    case PrimitiveType.UInt:
                    {
                        uint[] array = (uint[])Value;
                        return(array.ExportYAML(true));
                    }

                    case PrimitiveType.Long:
                    {
                        long[] array = (long[])Value;
                        return(array.ExportYAML(true));
                    }

                    case PrimitiveType.ULong:
                    {
                        ulong[] array = (ulong[])Value;
                        return(array.ExportYAML(true));
                    }

                    case PrimitiveType.Single:
                    {
                        float[] array = (float[])Value;
                        return(array.ExportYAML());
                    }

                    case PrimitiveType.Double:
                    {
                        double[] array = (double[])Value;
                        return(array.ExportYAML());
                    }

                    case PrimitiveType.String:
                    {
                        string[] array = (string[])Value;
                        return(array.ExportYAML());
                    }

                    default:
                        throw new NotSupportedException(Type.Type.ToString());
                    }
                }
            }
            else
            {
                if (Type.Type == PrimitiveType.Complex)
                {
                    IScriptStructure structure = (IScriptStructure)Value;
                    return(structure.ExportYAML(container));
                }
                else
                {
                    switch (Type.Type)
                    {
                    case PrimitiveType.Bool:
                        return(new YAMLScalarNode((bool)Value));

                    case PrimitiveType.Char:
                        return(new YAMLScalarNode((int)(char)Value));

                    case PrimitiveType.SByte:
                        return(new YAMLScalarNode((sbyte)Value));

                    case PrimitiveType.Byte:
                        return(new YAMLScalarNode((byte)Value));

                    case PrimitiveType.Short:
                        return(new YAMLScalarNode((short)Value));

                    case PrimitiveType.UShort:
                        return(new YAMLScalarNode((ushort)Value));

                    case PrimitiveType.Int:
                        return(new YAMLScalarNode((int)Value));

                    case PrimitiveType.UInt:
                        return(new YAMLScalarNode((uint)Value));

                    case PrimitiveType.Long:
                        return(new YAMLScalarNode((long)Value));

                    case PrimitiveType.ULong:
                        return(new YAMLScalarNode((ulong)Value));

                    case PrimitiveType.Single:
                        return(new YAMLScalarNode((float)Value));

                    case PrimitiveType.Double:
                        return(new YAMLScalarNode((double)Value));

                    case PrimitiveType.String:
                        return(new YAMLScalarNode((string)Value));

                    default:
                        throw new NotSupportedException(Type.Type.ToString());
                    }
                }
            }
        }