Esempio n. 1
0
        private void CreateData(XmlClassItem data, GeneratorSettings settings, bool isSerializableItem)
        {
            var code = new CodeFormatter();
            var name = data.name + Constants.DataClassSuffix;

            code.UseNamespace("System", false);
            code.UseNamespace("System.Collections.Generic", false);
            code.UseNamespace("System.Linq", false);
            code.UseNamespace(Constants.TypesNamespace);
            code.UseNamespace(Constants.UtilsNamespace);
            code.UseNamespace(settings.SerializableNamespace);
            code.UseNamespace(settings.EnumsNamespace);
            code.NewLine();
            code.Namespace(settings.ClassesNamespace);
            code.Class(name);

            CommonCodeGenerator.WriteObjectDeserializer(data.name, settings, code);
            code.Add("return new ", name, "(serializable, database);");
            code.CloseBraces();
            code.NewLine();

            CommonCodeGenerator.WriteObjectConsturctor(data.name, settings, code);
            if (isSerializableItem)
            {
                code.Add("ItemId = new ItemId<", name, ">(serializable.Id, serializable.FileName);");
            }
            foreach (var item in data.members)
            {
                CommonCodeGenerator.WriteDeserializationCode(item, code, settings);
            }
            code.CloseBraces();
            code.NewLine();

            CommonCodeGenerator.WriteObjectSerializer(data.name, settings, code);
            code.Add("var serializable = new ", data.name, Constants.SerializableClassSuffix, "();");
            SerializeMembers(data.members, data.typeid, code, isSerializableItem);
            code.Add("return serializable;");
            code.CloseBraces();
            code.NewLine();

            if (isSerializableItem)
            {
                code.Add("public readonly ItemId<", name, "> ItemId;");
            }

            foreach (var item in data.members)
            {
                CommonCodeGenerator.WriteDataMember(item, code, _schema);
            }

            _codeWriter.Write(settings.ClassesNamespace, name, code.ToString());
        }
Esempio n. 2
0
 private static void SerializeMembers(IEnumerable <XmlClassMember> members, string dataTypeId, CodeFormatter code, bool isSerializableItem)
 {
     if (isSerializableItem)
     {
         code.Add("serializable.Id = ItemId.Id;");
         code.Add("serializable.FileName = ItemId.Name;");
         code.Add("serializable.ItemType = (int)ItemType.", dataTypeId, ";");
     }
     foreach (var item in members)
     {
         CommonCodeGenerator.WriteSerializationCode(item, code);
     }
 }
Esempio n. 3
0
        private void AddDeserializationCode(CodeFormatter code, string name, string type, ref bool isFirst, bool isUnique)
        {
            if (isFirst)
            {
                code.Add("if (type == ", DatabaseSchema.ItemTypeEnum, ".", type, ")");
                isFirst = false;
            }
            else
            {
                code.Add("else if (type == ", DatabaseSchema.ItemTypeEnum, ".", type, ")");
            }

            code.OpenBraces();
            code.Add("var data = _serializer.FromJson<", name, Constants.SerializableClassSuffix, ">(file.Content);");
            code.Add("data.FileName = file.Name;");

            if (isUnique)
            {
                code.Add("if (", name, "!= null)");
                code.Add(Constants.Indent, "throw new DatabaseException(\"Duplicate settings file found - \" + file.Name);");
                code.Add(name, " = data;");
            }
            else
            {
                code.Add(GetMemberName(name), ".Add(data.ItemType, data);");
            }

            code.CloseBraces();
        }
Esempio n. 4
0
        private void CreateSerializable(XmlClassItem data, GeneratorSettings context, bool isSerializableItem)
        {
            var code = new CodeFormatter();
            var name = data.name + Constants.SerializableClassSuffix;

            code.UseNamespace("System", false);
            code.UseNamespace("System.ComponentModel", false);
            code.UseNamespace(Constants.TypesNamespace);
            code.UseNamespace(Constants.SerializationNamespace);
            code.UseNamespace(context.EnumsNamespace);
            code.NewLine();
            code.Namespace(context.SerializableNamespace);
            code.Add("[Serializable]");
            if (isSerializableItem)
            {
                code.Class(name, true, "SerializableItem");
            }
            else
            {
                code.Class(name);
            }

            var members = new HashSet <string>();

            foreach (var item in data.members)
            {
                if (!members.Add(item.name))
                {
                    continue;
                }
                CommonCodeGenerator.WriteSerializableMember(item, code, _schema);
            }

            _codeWriter.Write(context.SerializableNamespace, name, code.ToString());
        }
Esempio n. 5
0
        public static void WriteSerializationCode(XmlClassMember member, CodeFormatter code)
        {
            var memberName = !string.IsNullOrEmpty(member.alias) ? member.alias : member.name;

            if (member.type == Constants.TypeInt || member.type == Constants.TypeFloat)
            {
                code.Add("serializable.", member.name, " = ", memberName, ".Value;");
            }
            else if (member.type == Constants.TypeObject)
            {
                code.Add("serializable.", member.name, " = ", memberName, ".Id;");
            }
            else if (member.type == Constants.TypeObjectList)
            {
                code.Add("serializable.", member.name, " = ", memberName, "?.Select(item => item.Item.Id).ToArray();");
            }
            else if (member.type == Constants.TypeStruct)
            {
                code.Add("serializable.", member.name, " = ", memberName, ".Serialize();");
            }
            else if (member.type == Constants.TypeStructList)
            {
                code.Add("serializable.", member.name, " = ", memberName, "?.Select(item => item.Serialize()).ToArray();");
            }
            else if (member.type == Constants.TypeColor)
            {
                code.Add("serializable.", member.name, " = ", "Utils.ColorUtils.ColorToString(", memberName, ");");
            }
            else if (member.type == Constants.TypeLayout)
            {
                code.Add("serializable.", member.name, " = ", memberName, ".Data;");
            }
            else if (member.type == Constants.TypeAudioClip)
            {
                code.Add("serializable.", member.name, " = ", memberName, ".ToString();");
            }
            else if (member.type == Constants.TypeImage)
            {
                code.Add("serializable.", member.name, " = ", memberName, ".ToString();");
            }
            else
            {
                code.Add("serializable.", member.name, " = ", memberName, ";");
            }
        }
Esempio n. 6
0
        public void Generate(XmlEnumItem data, GeneratorSettings settings)
        {
            var code = new CodeFormatter();
            var ns   = settings.EnumsNamespace;

            code.Namespace(settings.EnumsNamespace);
            code.Add("public enum ", data.name);
            code.OpenBraces();

            foreach (var item in data.items)
            {
                if (string.IsNullOrEmpty(item.value))
                {
                    code.Add(item.name, ",");
                }
                else
                {
                    code.Add(item.name, " = ", item.value, ",");
                }
            }

            _codeWriter.Write(ns, data.name, code.ToString());
        }
Esempio n. 7
0
        private void AddContentClasses(string objectName, Dictionary <string, List <XmlClassMember> > members, GeneratorSettings settings, CodeFormatter code)
        {
            var serializableName = CommonCodeGenerator.SerializableClass(objectName);

            code.Add("private interface ", ContentInterfaceName, " { ", serializableName, " ", settings.SerializeMethod, "(); }");
            code.NewLine();

            code.Class(EmptyContentClassName, false, ContentInterfaceName);
            CommonCodeGenerator.WriteObjectSerializer(objectName, settings, code);
            code.Add("return new ", serializableName, "();");
            code.CloseBraces();
            code.CloseBraces();

            foreach (var item in members)
            {
                var className = GetContentClassName(item.Key);
                code.Class(className, false, ContentInterfaceName);

                code.Add("public ", className, "(", serializableName, " serializable, ", settings.DatabaseClass, " database)");
                code.OpenBraces();
                code.Add("if (serializable == null || database == null) return;");
                foreach (var member in item.Value)
                {
                    CommonCodeGenerator.WriteDeserializationCode(member, code, settings);
                }
                code.CloseBraces();
                code.NewLine();

                CommonCodeGenerator.WriteObjectSerializer(objectName, settings, code);
                code.Add("var serializable = new ", serializableName, "();");
                foreach (var member in item.Value)
                {
                    CommonCodeGenerator.WriteSerializationCode(member, code);
                }
                code.Add("return serializable;");
                code.CloseBraces();
                code.NewLine();

                foreach (var member in item.Value)
                {
                    CommonCodeGenerator.WriteDataMember(member, code, _schema);
                }

                code.CloseBraces();
                code.NewLine();
            }
        }
Esempio n. 8
0
        private void GenerateDatabase(GeneratorSettings context)
        {
            var code = new CodeFormatter();

            code.UseNamespace("System.Collections.Generic", false);
            code.UseNamespace("System.Linq", false);
            code.UseNamespace(Constants.TypesNamespace);
            code.UseNamespace(Constants.DataSourceNamespace);
            code.UseNamespace(Constants.SerializationNamespace);
            code.UseNamespace(context.ClassesNamespace);
            code.NewLine();

            code.Namespace(Constants.DatabaseNamespace);

            code.Add("public class ", context.DatabaseClass);
            code.OpenBraces();

            code.Add("public ", context.DatabaseClass, "(IDataSource defaultDataSource, IJsonSerializer serializer)");
            code.OpenBraces();
            code.Add("_serializer = serializer;");
            code.Add("_defaultDataSource = defaultDataSource;");
            code.Add("Load();");
            code.CloseBraces();
            code.NewLine();

            code.Add("public void Load(IDataSource dataSource = null)");
            code.OpenBraces();
            code.Add("Reset();");
            code.Add("_jsonDatabase = new ", JsonDatabaseClassName, "(dataSource ?? _defaultDataSource, _serializer);");
            code.CloseBraces();
            code.NewLine();

            code.Add("private void Reset()");
            code.OpenBraces();

            code.Add("Reset();");
            foreach (var item in _classes)
            {
                code.Add(GetMemberName(item.Key), ".Clear();");
            }
            foreach (var item in _configurations)
            {
                code.Add(GetConfigMemberName(item.Key), " = null;");
            }
            code.Add("_jsonDatabase = null;");
            code.CloseBraces();
            code.NewLine();

            foreach (var item in _configurations)
            {
                var memberName = GetConfigMemberName(item.Key);
                code.Add("public ", item.Key, Constants.DataClassSuffix, " ", item.Key, " => ", memberName, " ?? (",
                         memberName, " = ", item.Key, Constants.DataClassSuffix, ".Deserialize(_jsonDatabase.", item.Key, ", this));");
            }

            code.NewLine();

            foreach (var item in _classes)
            {
                var memberName = GetMemberName(item.Key);
                var className  = item.Key + Constants.DataClassSuffix;

                code.Add("public IEnumerable<ItemId<", className, ">> ", CommonCodeGenerator.DatabaseGetAllMethod(item.Key), " { get { return _jsonDatabase.",
                         item.Key, "List.Select(item => new ItemId<", className, ">(item.Id, item.FileName)); } }");

                code.Add("public ItemId<", className, "> ", CommonCodeGenerator.DatabaseGetIdMethod(item.Key), "(int id) { return new ItemId<", className,
                         ">(_jsonDatabase.", CommonCodeGenerator.DatabaseGetMethod(item.Key), "(id)); }");

                code.Add("public ", className, " ", CommonCodeGenerator.DatabaseGetMethod(item.Key), "(int id)");
                code.OpenBraces();
                code.Add("if (!", memberName, ".TryGetValue(id, out var item))");
                code.OpenBraces();
                code.Add(memberName, ".Add(id, null);");
                code.Add(memberName, "[id] = item = ", className, ".Deserialize(_jsonDatabase.Get", item.Key, "(id), this);");
                code.CloseBraces();
                code.Add("if (item == null) throw new DatabaseException(CircularDependencyText + \"", item.Key, "_\" + id);");
                code.Add("return item;");
                code.CloseBraces();
                code.NewLine();
            }

            foreach (var item in _configurations)
            {
                code.Add("private ", item.Key, Constants.DataClassSuffix, " ", GetConfigMemberName(item.Key), ";");
            }
            foreach (var item in _classes)
            {
                code.Add("private readonly Dictionary<int, ", item.Key, Constants.DataClassSuffix, "> ", GetMemberName(item.Key), " = new Dictionary<int, ", item.Key, Constants.DataClassSuffix, ">();");
            }

            code.NewLine();
            code.Add("private ", JsonDatabaseClassName, " _jsonDatabase;");
            code.Add("private readonly IJsonSerializer _serializer;");
            code.Add("private readonly IDataSource _defaultDataSource;");
            code.Add("private const string CircularDependencyText = \"Circular dependency found: \";");

            _codeWriter.Write(string.Empty, context.DatabaseClass, code.ToString());
        }
Esempio n. 9
0
        private void GenerateJsonDatabase(GeneratorSettings context)
        {
            var code = new CodeFormatter();

            code.UseNamespace("System.Collections.Generic", false);
            code.UseNamespace(Constants.DataSourceNamespace);
            code.UseNamespace(Constants.SerializationNamespace);
            code.UseNamespace(context.SerializableNamespace);
            code.UseNamespace(context.EnumsNamespace);
            code.NewLine();

            code.Namespace(Constants.DatabaseNamespace);

            code.Add("public class ", JsonDatabaseClassName);
            code.OpenBraces();

            code.Add("public ", JsonDatabaseClassName, "(IDataSource dataSource, IJsonSerializer serializer)");
            code.OpenBraces();
            code.Add("_dataSource = dataSource;");
            code.Add("_serializer = serializer;");
            code.Add("foreach (var file in dataSource.Files)");
            code.OpenBraces();
            code.Add("var item = _serializer.FromJson<SerializableItem>(file.Content);");
            code.Add("var type = (ItemType)item.ItemType;");

            var first = true;

            foreach (var item in _classes)
            {
                AddDeserializationCode(code, item.Key, item.Value, ref first, false);
            }
            foreach (var item in _configurations)
            {
                AddDeserializationCode(code, item.Key, item.Value, ref first, true);
            }

            if (!first)
            {
                code.Add("else");
                code.OpenBraces();
                code.Add("throw new DatabaseException(\"Unknown file type - \" + type + \"(\" + file.Name + \")\");");
                code.CloseBraces();
            }

            code.CloseBraces();
            code.CloseBraces();

            code.NewLine();

            foreach (var item in _configurations)
            {
                code.Add("public ", item.Key, Constants.SerializableClassSuffix, " ", item.Key, " { get; }");
            }

            code.NewLine();

            foreach (var item in _classes)
            {
                code.Add("public IEnumerable<", item.Key, Constants.SerializableClassSuffix,
                         "> ", item.Key, "List => ", GetMemberName(item.Key), ".Values;");
            }

            code.NewLine();

            foreach (var item in _classes)
            {
                code.Add("public ", item.Key, Constants.SerializableClassSuffix,
                         " Get", item.Key, "(int id) => ", GetMemberName(item.Key), ".TryGetValue(id, out var value) ? value : null;");
            }

            code.NewLine();

            foreach (var item in _classes)
            {
                code.Add("private readonly Dictionary<int, ", item.Key, Constants.SerializableClassSuffix,
                         "> ", GetMemberName(item.Key), " = new Dictionary<int, ", item.Key, Constants.SerializableClassSuffix, ">();");
            }

            code.NewLine();

            code.Add("private readonly IDataSource _dataSource;");
            code.Add("private readonly IJsonSerializer _serializer;");

            _codeWriter.Write(string.Empty, JsonDatabaseClassName, code.ToString());
        }
Esempio n. 10
0
        private static void AddDataAdapterImplementation(IEnumerable <XmlClassMember> baseMembers, string switchMemberName, CodeFormatter code)
        {
            code.Add("public event Action LayoutChangedEvent;");
            code.Add("public event Action DataChangedEvent;");

            code.Add("public IEnumerable<IProperty> Properties");
            code.OpenBraces();
            code.Add("get");
            code.OpenBraces();
            code.Add("var type = GetType();");
            //if (isSerializableItem)
            //    code.Add("yield return new Property(this, type.GetField(\"ItemId\"), DataChangedEvent);");
            foreach (var item in baseMembers)
            {
                code.Add("yield return new Property(this, type.GetField(\"", item.name, "\"), ", item.name == switchMemberName ? "OnTypeChanged" : "DataChangedEvent", ");");
            }
            code.Add("foreach (var item in ", ContentPropertyName, ".GetType().GetFields().Where(f => f.IsPublic && !f.IsStatic))");
            code.Add(Constants.Indent, "yield return new Property(Content, item, DataChangedEvent);");
            code.CloseBraces();
            code.CloseBraces();
            code.NewLine();

            code.Add("private void OnTypeChanged()");
            code.OpenBraces();
            code.Add(CreateContentMethodName, "(null, null);");
            code.Add("DataChangedEvent?.Invoke();");
            code.Add("LayoutChangedEvent?.Invoke();");
            code.CloseBraces();
            code.NewLine();

            code.Add("private ", ContentInterfaceName, " ", ContentPropertyName, " { get; set; }");
            code.NewLine();
        }
Esempio n. 11
0
        private void CreateMutableData(XmlClassItem data, GeneratorSettings settings, bool isSerializableItem)
        {
            SortMembers(data, out var baseMembers, out var extraMembers);

            var code           = new CodeFormatter();
            var name           = data.name + Constants.DataClassSuffix;
            var switchEnumType = baseMembers.First(item => item.name.Equals(data.switchEnum, StringComparison.Ordinal)).typeid;

            code.UseNamespace("System", false);
            code.UseNamespace("System.Collections.Generic", false);
            code.UseNamespace("System.Linq", false);
            code.UseNamespace(Constants.TypesNamespace);
            code.UseNamespace(Constants.UtilsNamespace);
            code.UseNamespace(settings.SerializableNamespace);
            code.UseNamespace(settings.EnumsNamespace);
            code.NewLine();
            code.Namespace(settings.ClassesNamespace);
            code.Class(name, true, "IDataAdapter");

            CommonCodeGenerator.WriteObjectDeserializer(data.name, settings, code);
            code.Add("var data = new ", name, "(serializable, database); ");
            code.Add("data.CreateContent(serializable, database);");
            code.Add("return data;");
            code.CloseBraces();
            code.NewLine();

            CommonCodeGenerator.WriteObjectConsturctor(data.name, settings, code);
            if (isSerializableItem)
            {
                code.Add("ItemId = new ItemId<", name, ">(serializable.Id, serializable.FileName);");
            }
            foreach (var item in baseMembers)
            {
                CommonCodeGenerator.WriteDeserializationCode(item, code, settings);
            }
            code.CloseBraces();
            code.NewLine();

            code.Add("private void ", CreateContentMethodName, "(", CommonCodeGenerator.SerializableClass(data.name), " serializable, ", settings.DatabaseClass, " database)");
            code.OpenBraces();
            var first = true;

            foreach (var item in extraMembers)
            {
                code.Add(first ? "if (" : "else if (", "serializable.", data.switchEnum, " == ", switchEnumType, ".", item.Key, ")");
                code.Add(Constants.Indent, ContentPropertyName, " = new ", GetContentClassName(item.Key), "(serializable, database);");
                first = false;
            }
            if (!first)
            {
                code.Add("else");
            }
            code.Add(first ? string.Empty : Constants.Indent, ContentPropertyName, " = new ", EmptyContentClassName, "();");
            code.CloseBraces();
            code.NewLine();

            CommonCodeGenerator.WriteObjectSerializer(data.name, settings, code);
            code.Add("var serializable = Content.Serialize();");
            SerializeMembers(baseMembers, data.typeid, code, isSerializableItem);
            code.Add("return serializable;");
            code.CloseBraces();
            code.NewLine();

            AddDataAdapterImplementation(baseMembers, data.switchEnum, code);

            if (isSerializableItem)
            {
                code.Add("public readonly ItemId<", name, "> ItemId;");
            }
            foreach (var item in baseMembers)
            {
                CommonCodeGenerator.WriteDataMember(item, code, _schema);
            }
            code.NewLine();

            AddContentClasses(data.name, extraMembers, settings, code);

            _codeWriter.Write(settings.ClassesNamespace, name, code.ToString());
        }
Esempio n. 12
0
        public static void WriteDeserializationCode(XmlClassMember member, CodeFormatter code, GeneratorSettings settings)
        {
            var memberName = !string.IsNullOrEmpty(member.alias) ? member.alias : member.name;

            if (member.type == Constants.TypeObject)
            {
                code.Add(memberName, " = database.", DatabaseGetIdMethod(member.typeid), "(serializable.", member.name, ");");
            }
            else if (member.type == Constants.TypeObjectList)
            {
                code.Add(memberName, " = ", "serializable.", member.name, "?.Select(item => new Wrapper<", DataClass(member.typeid),
                         "> { Item = database.", DatabaseGetIdMethod(member.typeid), "(item) }).ToArray();");
            }
            else if (member.type == Constants.TypeStruct)
            {
                code.Add(memberName, " = ", DataClass(member.typeid), ".", settings.DeserializeMethod, "(serializable.", member.name, ", database);");
            }
            else if (member.type == Constants.TypeStructList)
            {
                code.Add(memberName, " = ", "serializable.", member.name, "?.Select(item => ", DataClass(member.typeid), ".", settings.DeserializeMethod, "(item, database)).ToArray();");
            }
            else if (member.type == Constants.TypeInt)
            {
                MinMaxInt(member, out var minvalue, out var maxvalue);
                code.Add(memberName, " = new NumericValue<int>(serializable.", member.name, ", ", minvalue.ToString(), ", ", maxvalue.ToString(), ");");
            }
            else if (member.type == Constants.TypeFloat)
            {
                MinMaxFloat(member, out var minvalue, out var maxvalue);
                code.Add(memberName, " = new NumericValue<float>(serializable.", member.name, ", ", minvalue.ToString(), "f, ", maxvalue.ToString(), "f);");
            }
            else if (member.type == Constants.TypeColor)
            {
                code.Add(memberName, " = Utils.ColorUtils.ColorFromString(serializable.", member.name, ");");
            }
            else if (member.type == Constants.TypeLayout)
            {
                code.Add(memberName, " = new Layout(serializable.", member.name, ");");
            }
            else if (member.type == Constants.TypeAudioClip)
            {
                code.Add(memberName, " = new AudioClipId(serializable.", member.name, ");");
            }
            else if (member.type == Constants.TypeImage)
            {
                code.Add(memberName, " = new SpriteId(serializable.", member.name, ");");
            }
            else
            {
                code.Add(memberName, " = serializable.", member.name, ";");
            }
        }
Esempio n. 13
0
 public static void WriteObjectDeserializer(string objectName, GeneratorSettings settings, CodeFormatter code)
 {
     code.Add("public static ", objectName, Constants.DataClassSuffix, " ", settings.DeserializeMethod, "(",
              objectName, Constants.SerializableClassSuffix, " serializable, ", settings.DatabaseClass, " database)");
     code.OpenBraces();
 }
Esempio n. 14
0
        public static void WriteDataMember(XmlClassMember member, CodeFormatter code, DatabaseSchema schema)
        {
            var memberName = !string.IsNullOrEmpty(member.alias) ? member.alias : member.name;

            if (member.type == Constants.TypeInt)
            {
                MinMaxInt(member, out var minvalue, out var maxvalue);
                code.Add("public NumericValue<int> ", memberName, " = new NumericValue<int>(0,", minvalue.ToString(), ",", maxvalue.ToString(), ");");
            }
            else if (member.type == Constants.TypeFloat)
            {
                MinMaxFloat(member, out var minvalue, out var maxvalue);
                code.Add("public NumericValue<float> ", memberName, " = new NumericValue<float>(0,", minvalue.ToString(), "f,", maxvalue.ToString(), "f);");
            }
            else if (member.type == Constants.TypeBool)
            {
                code.Add("public bool ", memberName, ";");
            }
            else if (member.type == Constants.TypeString)
            {
                code.Add("public string ", memberName, ";");
            }
            else if (member.type == Constants.TypeColor)
            {
                code.Add("public UnityEngine.Color ", memberName, ";");
            }
            else if (member.type == Constants.TypeImage)
            {
                code.Add("public SpriteId ", memberName, ";");
            }
            else if (member.type == Constants.TypeAudioClip)
            {
                code.Add("public AudioClipId ", memberName, ";");
            }
            else if (member.type == Constants.TypeLayout)
            {
                code.Add("public Layout ", memberName, ";");
            }
            else if (member.type == Constants.TypeVector)
            {
                code.Add("public Vector ", memberName, " = Vector.Zero;");
            }
            else if (member.type == Constants.TypeEnum)
            {
                if (!schema.HasEnum(member.typeid))
                {
                    throw new InvalidSchemaException("Unknown enum type in class member " + member.name);
                }

                code.Add("public ", member.typeid, " ", memberName, ";");
            }
            else if (member.type == Constants.TypeObject)
            {
                if (!schema.HasObject(member.typeid))
                {
                    throw new InvalidSchemaException("Unknown object type in class member " + member.name);
                }

                code.Add("public ItemId<", DataClass(member.typeid), "> ", memberName, " = ItemId<", DataClass(member.typeid), ">.Empty;");
            }
            else if (member.type == Constants.TypeObjectList)
            {
                if (!schema.HasObject(member.typeid))
                {
                    throw new InvalidSchemaException("Unknown object type in class member " + member.name);
                }

                code.Add("public Wrapper<", DataClass(member.typeid), ">[] ", memberName, ";");
            }
            else if (member.type == Constants.TypeStruct)
            {
                if (!schema.HasStruct(member.typeid))
                {
                    throw new InvalidSchemaException("Unknown struct type in class member " + member.name);
                }

                code.Add("public ", DataClass(member.typeid), " ", memberName, ";");
            }
            else if (member.type == Constants.TypeStructList)
            {
                if (!schema.HasStruct(member.typeid))
                {
                    throw new InvalidSchemaException("Unknown struct type in class member " + member.name);
                }

                code.Add("public ", DataClass(member.typeid), "[] ", memberName, ";");
            }
            else
            {
                throw new InvalidSchemaException("Invalid class member type - " + member.type);
            }
        }
Esempio n. 15
0
        public static void WriteSerializableMember(XmlClassMember member, CodeFormatter code, DatabaseSchema schema)
        {
            if (member.type == Constants.TypeInt)
            {
                code.Add("public int ", member.name, ";");
            }
            else if (member.type == Constants.TypeFloat)
            {
                code.Add("public float ", member.name, ";");
            }
            else if (member.type == Constants.TypeBool)
            {
                code.Add("public bool ", member.name, ";");
            }
            else if (member.type == Constants.TypeString)
            {
                code.Add(DefaultStringValue);
                code.Add("public string ", member.name, ";");
            }
            else if (member.type == Constants.TypeColor)
            {
                code.Add(DefaultStringValue);
                code.Add("public string ", member.name, ";");
            }
            else if (member.type == Constants.TypeImage)
            {
                code.Add(DefaultStringValue);
                code.Add("public string ", member.name, ";");
            }
            else if (member.type == Constants.TypeAudioClip)
            {
                code.Add(DefaultStringValue);
                code.Add("public string ", member.name, ";");
            }
            else if (member.type == Constants.TypeLayout)
            {
                code.Add(DefaultStringValue);
                code.Add("public string ", member.name, ";");
            }
            else if (member.type == Constants.TypeVector)
            {
                code.Add("public Vector ", member.name, ";");
            }
            else if (member.type == Constants.TypeEnum)
            {
                if (!schema.HasEnum(member.typeid))
                {
                    throw new InvalidSchemaException("Unknown enum type in class member " + member.name);
                }

                code.Add("public ", member.typeid, " ", member.name, ";");
            }
            else if (member.type == Constants.TypeObject)
            {
                if (!schema.HasObject(member.typeid))
                {
                    throw new InvalidSchemaException("Unknown object type in class member " + member.name);
                }

                code.Add("public int ", member.name, ";");
            }
            else if (member.type == Constants.TypeObjectList)
            {
                if (!schema.HasObject(member.typeid))
                {
                    throw new InvalidSchemaException("Unknown object type in class member " + member.name);
                }

                code.Add("public int[] ", member.name, ";");
            }
            else if (member.type == Constants.TypeStruct)
            {
                if (!schema.HasStruct(member.typeid))
                {
                    throw new InvalidSchemaException("Unknown struct type in class member " + member.name);
                }

                code.Add("public ", SerializableClass(member.typeid), " ", member.name, ";");
            }
            else if (member.type == Constants.TypeStructList)
            {
                if (!schema.HasStruct(member.typeid))
                {
                    throw new InvalidSchemaException("Unknown struct type in class member " + member.name);
                }

                code.Add("public ", SerializableClass(member.typeid), "[] ", member.name, ";");
            }
            else
            {
                throw new InvalidSchemaException("Invalid class member type - " + member.type);
            }
        }