Пример #1
0
        public override bool Parse(TypeDesc desc)
        {
            this.Parent            = desc.Parent;
            this.builtinParent     = desc.builtinParent;
            this.isTemplateClass   = desc.isTemplateClass;
            this.Category          = desc.Category;
            this.BindingClass      = desc.BindingClass;
            this.BindingClassMacro = desc.BindingClassMacro;
            this.crc = Crc32.Calc(this.Name, this.CrcMask);

            return(ParseDescFields(desc));
        }
Пример #2
0
        public int GetID(string str, bool autoGen = false)
        {
            int ret = 0;

            if (!record.idMap.TryGetValue(str, out ret))
            {
                if (autoGen)
                {
                    // todo: 临时使用CRC32,后面需要支持多人、多分支并行开发时保证ID不重复
                    ret = (int)Crc32.Calc(str);
                    record.idMap[str] = ret;
                }
                else
                {
                    GLog.LogError("Template of {0} is not defined.", str);
                }
            }
            return(ret);
        }
Пример #3
0
        public override GData ReadData(JsonData jsonData, bool inherit, GStructField field, DataDebugInfo ownerDebugInfo)
        {
            GObject obj = new GObject(Name);

            obj.inheritParent = inherit;
            obj.debugInfo     = ownerDebugInfo;

            // TODO: check errors
            // todo: 检查是否已经定义为 Category.Name 格式
            if (string.IsNullOrEmpty(this.Category))
            {
                obj.ID = (string)jsonData["ID"];
            }
            else
            {
                obj.ID = this.Category + "." + (string)jsonData["ID"];
            }

            obj.debugInfo.ownerTID = obj.ID;

            if (jsonData.Keys.Contains("RuntimeLink"))
            {
                obj.isRuntimeLink = (bool)jsonData["RuntimeLink"];
            }

            // todo: 检查是否已经定义为 Category.Name 格式
            if (jsonData.Keys.Contains("Parent"))
            {
                if (string.IsNullOrEmpty(this.Category))
                {
                    obj.Parent = (string)jsonData["Parent"];
                }
                else
                {
                    obj.Parent = this.Category + "." + (string)jsonData["Parent"];
                }
            }

            if (jsonData.Keys.Contains("Singleton"))
            {
                try {
                    obj.singletonType = (GObject.SingletonType)Enum.Parse(typeof(GObject.SingletonType), (string)jsonData["Singleton"]);
                }
                catch (Exception ex) {
                    GLog.LogError("Unrecognized SingletonType '{0}' {1}", (string)jsonData["Singleton"], obj.debugInfo);
                }
            }

            if (jsonData.Keys.Contains("CrcMask"))
            {
                obj.CrcMask = (uint)(int)jsonData["CrcMask"];
            }

            obj.crc = Crc32.Calc(obj.ID, obj.CrcMask);

            if (!ReadData_Impl(obj, jsonData, field))
            {
                return(null);
            }
            return(obj);
        }
Пример #4
0
        public override bool ParseJson(JsonData data)
        {
            this.isTemplateClass = true;
            this.Gen_Head        = true;
            this.Gen_Serialize   = false;
            this.Gen_Deserialize = true;

            JsonData classHeader;
            JsonData classData = data["Class"];

            if (classData.IsObject)
            {
                classHeader = classData;
                // name
                if (!classHeader.Keys.Contains("Name"))
                {
                    GLog.LogError(data.ToJson() + "\n 'Name' is required'");
                    return(false);
                }
                this.Name = (string)classHeader["Name"];
            }
            else
            {
                classHeader = data;
                this.Name   = (string)classData;
            }


            // parent
            if (classHeader.Keys.Contains("Parent"))
            {
                this.Parent = (string)classHeader["Parent"];
            }
            else
            {
                this.builtinParent = "BaseTemplate";
            }

            // Category
            if (classHeader.Keys.Contains("Category"))
            {
                if (!string.IsNullOrEmpty(this.Parent))
                {
                    GLog.LogError("Category can be declared only in root class. Error in " + this.Name + "\nGType.Parse: \n" + data.ToJson());
                }
                else
                {
                    this.Category = (string)classHeader["Category"];
                }
            }

            // Binding class
            if (classHeader.Keys.Contains("BindingClass"))
            {
                this.BindingClass = (string)classHeader["BindingClass"];
            }
            // Binding class macro
            if (classHeader.Keys.Contains("BindingClassMacro"))
            {
                this.BindingClassMacro = (string)classHeader["BindingClassMacro"];
            }

            // Multiton

/*            if (classHeader.Keys.Contains("Multiton"))
 *              this.Multiton = (bool)classHeader["Multiton"];
 *          else
 *              this.Multiton = false;*/

            // type id
            // disable CrcMask
            // if (classHeader.Keys.Contains("CrcMask"))
            //    this.CrcMask = (uint)(int)classHeader["CrcMask"];
            this.crc = Crc32.Calc(this.Name, this.CrcMask);

            // TODO: check repeated typeid, in a Mgr.CheckErrors() method

            return(ParseJsonFields(data));
        }