示例#1
0
        /// <summary>
        /// 创建数据表。
        /// </summary>
        /// <typeparam name="T">数据表行的类型。</typeparam>
        /// <param name="name">数据表名称。</param>
        /// <returns>要创建的数据表。</returns>
        public IDataTable <T> CreateDataTable <T>(string name) where T : class, IDataRow, new()
        {
            if (m_ResourceManager == null)
            {
                throw new GameFrameworkException("You must set resource manager first.");
            }

            if (m_DataProviderHelper == null)
            {
                throw new GameFrameworkException("You must set data provider helper first.");
            }

            TypeNamePair typeNamePair = new TypeNamePair(typeof(T), name);

            if (HasDataTable <T>(name))
            {
                throw new GameFrameworkException(Utility.Text.Format("Already exist data table '{0}'.", typeNamePair));
            }

            DataTable <T> dataTable = new DataTable <T>(name);

            dataTable.SetResourceManager(m_ResourceManager);
            dataTable.SetDataProviderHelper(m_DataProviderHelper);
            m_DataTables.Add(typeNamePair, dataTable);
            return(dataTable);
        }
        /// <summary>
        /// 创建数据表。
        /// </summary>
        /// <param name="dataRowType">数据表行的类型。</param>
        /// <param name="name">数据表名称。</param>
        /// <param name="dataTableData">要解析的数据表数据。</param>
        /// <returns>要创建的数据表。</returns>
        public DataTableBase CreateDataTable(Type dataRowType, string name, object dataTableData)
        {
            if (dataRowType == null)
            {
                throw new GameFrameworkException("Data row type is invalid.");
            }

            if (!typeof(IDataRow).IsAssignableFrom(dataRowType))
            {
                throw new GameFrameworkException(Utility.Text.Format("Data row type '{0}' is invalid.", dataRowType.FullName));
            }

            TypeNamePair typeNamePair = new TypeNamePair(dataRowType, name);

            if (HasDataTable(dataRowType, name))
            {
                throw new GameFrameworkException(Utility.Text.Format("Already exist data table '{0}'.", typeNamePair.ToString()));
            }

            Type          dataTableType = typeof(DataTable <>).MakeGenericType(dataRowType);
            DataTableBase dataTable     = (DataTableBase)Activator.CreateInstance(dataTableType, name);

            InternalCreateDataTable(dataTable, dataTableData);
            m_DataTables.Add(typeNamePair, dataTable);
            return(dataTable);
        }
示例#3
0
            public override bool Equals(object obj)
            {
                if (!(obj is TypeNamePair))
                {
                    return(false);
                }
                TypeNamePair pair = (TypeNamePair)obj;

                return(this.type == pair.type && this.fieldname == pair.fieldname && this.key == pair.key);
            }
示例#4
0
        //字典中获取有限状态机
        private FsmBase InternalGetFsm(TypeNamePair typeNamePair)
        {
            FsmBase fsm = null;

            if (mFsmDic.TryGetValue(typeNamePair, out fsm))
            {
                return(fsm);
            }
            return(null);
        }
        private DataTableBase InternalGetDataTable(TypeNamePair typeNamePair)
        {
            DataTableBase dataTable = null;

            if (m_DataTables.TryGetValue(typeNamePair, out dataTable))
            {
                return(dataTable);
            }

            return(null);
        }
示例#6
0
        //字典中移除有限状态机
        private bool InternalDestroyFsm(TypeNamePair typeNamePair)
        {
            FsmBase fsm = null;

            if (mFsmDic.TryGetValue(typeNamePair, out fsm))
            {
                fsm.CloseAndClean();
                return(mFsmDic.Remove(typeNamePair));
            }
            return(false);
        }
示例#7
0
 private static string GetDescription(TypeNamePair pair)
 {
     if (descriptions.ContainsKey(pair))
     {
         return(descriptions[pair]);
     }
     else
     {
         return(descriptions[pair] = GetNewDescription(pair));
     }
 }
示例#8
0
        private bool InternalDestroyFsm(TypeNamePair typeNamePair)
        {
            FsmBase fsm = null;

            if (m_Fsms.TryGetValue(typeNamePair, out fsm))
            {
                fsm.Shutdown();
                return(m_Fsms.Remove(typeNamePair));
            }

            return(false);
        }
        private bool InternalDestroyDataTable(TypeNamePair typeNamePair)
        {
            DataTableBase dataTable = null;

            if (m_DataTables.TryGetValue(typeNamePair, out dataTable))
            {
                dataTable.Shutdown();
                return(m_DataTables.Remove(typeNamePair));
            }

            return(false);
        }
示例#10
0
        /// 创建一个状态机
        /// <param name="name">有限状态机名称。</param>
        /// <param name="owner">状态机的持有者</param>
        /// <param name="states">状态机的所有状态</param>
        /// <typeparam name="T">状态机持有者类型</typeparam>
        public IFsm <T> CreateFsm <T>(string name, T owner, List <FsmState <T> > states) where T : class
        {
            TypeNamePair typeNamePair = new TypeNamePair(typeof(T), name);

            if (HasFsm <T>(name))
            {
                return(null);
            }
            Fsm <T> fsm = Fsm <T> .Create(name, owner, states);

            mFsmDic.Add(typeNamePair, fsm);
            return(fsm);
        }
示例#11
0
        /// <summary>
        /// 创建有限状态机。
        /// </summary>
        /// <typeparam name="T">有限状态机持有者类型。</typeparam>
        /// <param name="name">有限状态机名称。</param>
        /// <param name="owner">有限状态机持有者。</param>
        /// <param name="states">有限状态机状态集合。</param>
        /// <returns>要创建的有限状态机。</returns>
        public IFsm <T> CreateFsm <T>(string name, T owner, List <FsmState <T> > states) where T : class
        {
            TypeNamePair typeNamePair = new TypeNamePair(typeof(T), name);

            if (HasFsm <T>(name))
            {
                throw new GameFrameworkException(Utility.Text.Format("Already exist FSM '{0}'.", typeNamePair));
            }

            Fsm <T> fsm = Fsm <T> .Create(name, owner, states);

            m_Fsms.Add(typeNamePair, fsm);
            return(fsm);
        }
        /// <summary>
        /// 创建数据表。
        /// </summary>
        /// <typeparam name="T">数据表行的类型。</typeparam>
        /// <param name="name">数据表名称。</param>
        /// <param name="dataTableData">要解析的数据表数据。</param>
        /// <returns>要创建的数据表。</returns>
        public IDataTable <T> CreateDataTable <T>(string name, object dataTableData) where T : class, IDataRow, new()
        {
            TypeNamePair typeNamePair = new TypeNamePair(typeof(T), name);

            if (HasDataTable <T>(name))
            {
                throw new GameFrameworkException(Utility.Text.Format("Already exist data table '{0}'.", typeNamePair.ToString()));
            }

            DataTable <T> dataTable = new DataTable <T>(name);

            InternalCreateDataTable(dataTable, dataTableData);
            m_DataTables.Add(typeNamePair, dataTable);
            return(dataTable);
        }
示例#13
0
        private static string GetNewDescription(TypeNamePair pair)
        {
            System.Reflection.FieldInfo finfo = pair.type.GetField(pair.fieldname);
            if (finfo == null)
            {
                return(pair.fieldname);
            }

            afh.EnumDescriptionAttribute[] attrs
                = (afh.EnumDescriptionAttribute[])finfo.GetCustomAttributes(typeof(afh.EnumDescriptionAttribute), false);
            for (int i = 0; i < attrs.Length; i++)
            {
                if (attrs[i].Key == pair.key)
                {
                    return(attrs[i].Description);
                }
            }
            return(pair.fieldname);
        }
示例#14
0
        /// <summary>
        /// 创建数据表。
        /// </summary>
        /// <param name="dataRowType">数据表行的类型。</param>
        /// <param name="name">数据表名称。</param>
        /// <returns>要创建的数据表。</returns>
        public DataTableBase CreateDataTable(Type dataRowType, string name)
        {
            if (m_ResourceManager == null)
            {
                throw new GameFrameworkException("You must set resource manager first.");
            }

            if (m_DataProviderHelper == null)
            {
                throw new GameFrameworkException("You must set data provider helper first.");
            }

            if (dataRowType == null)
            {
                throw new GameFrameworkException("Data row type is invalid.");
            }

            if (!typeof(IDataRow).IsAssignableFrom(dataRowType))
            {
                throw new GameFrameworkException(Utility.Text.Format("Data row type '{0}' is invalid.", dataRowType.FullName));
            }

            TypeNamePair typeNamePair = new TypeNamePair(dataRowType, name);

            if (HasDataTable(dataRowType, name))
            {
                throw new GameFrameworkException(Utility.Text.Format("Already exist data table '{0}'.", typeNamePair));
            }

            Type          dataTableType = typeof(DataTable <>).MakeGenericType(dataRowType);
            DataTableBase dataTable     = (DataTableBase)Activator.CreateInstance(dataTableType, name);

            dataTable.SetResourceManager(m_ResourceManager);
            dataTable.SetDataProviderHelper(m_DataProviderHelper);
            m_DataTables.Add(typeNamePair, dataTable);
            return(dataTable);
        }
示例#15
0
 private bool InternalHasFsm(TypeNamePair typeNamePair)
 {
     return(m_Fsms.ContainsKey(typeNamePair));
 }
示例#16
0
        public List <Function> Parse(string filePath)
        {
            var ctagsProc = Process.Start(new ProcessStartInfo {
                FileName = "ctags.exe", Arguments = $"-N --c-kinds=p --fields=S \"{filePath}\""
            });

            ctagsProc.WaitForExit();

            var lines = File.ReadAllLines("tags");
            var res   = new List <Function>();

            Console.WriteLine("ctag file lines: " + lines.Length);
            foreach (var line in lines)
            {
                if (line.StartsWith("!"))
                {
                    continue;
                }
                var func = new Function();
                res.Add(func);

                var funcTokens = line.Split("\t");
                func.Name = funcTokens[0];

                var returnTypeMatch = Regex.Match(funcTokens[2], @$ "\/\^(.*?){func.Name}");
                func.Return = new TypeNamePair {
                    Type = returnTypeMatch.Groups[1].Value.Trim()
                };
                if (func.Return.Type.EndsWith("*"))
                {
                    func.ParseError = "Pointer as return type is not supported";
                    continue;
                }

                var paramList = Regex.Match(funcTokens[3], @"signature:\( (.*) \)").Groups[1].Value.Split(", ");

                if (paramList[0] == "void")
                {
                    continue;
                }

                if (Array.IndexOf(paramList, "...") >= 0)
                {
                    func.ParseError = "... as parameter is not supported";
                    continue;
                }

                var paramsRes = func.Params;
                foreach (var param in paramList)
                {
                    var paramTokens = param.Split(" ", StringSplitOptions.RemoveEmptyEntries);
                    var p           = new TypeNamePair();

                    if (param.Contains("("))
                    {
                        func.ParseError = "Function pointer as parameter is not supported";
                        goto CONTLINE;
                    }

                    {
                        var tempParamTokens = new List <string>();
                        for (int i = 0; i < paramTokens.Length; i++)
                        {
                            var tempp = paramTokens[i];
                            if (tempp.EndsWith("]") || tempp.EndsWith("["))
                            {
                                var ind       = tempp.IndexOf('[');
                                var frontPart = tempp.Substring(0, ind);
                                if (frontPart.Length > 0)
                                {
                                    tempParamTokens.Add(frontPart);
                                }
                                tempParamTokens.Add(tempp.Substring(ind) + string.Join("", paramTokens[(i + 1)..]));
 private bool InternalHasDataTable(TypeNamePair typeNamePair)
 {
     return(m_DataTables.ContainsKey(typeNamePair));
 }