/// <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); }
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); }
//字典中获取有限状态机 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); }
//字典中移除有限状态机 private bool InternalDestroyFsm(TypeNamePair typeNamePair) { FsmBase fsm = null; if (mFsmDic.TryGetValue(typeNamePair, out fsm)) { fsm.CloseAndClean(); return(mFsmDic.Remove(typeNamePair)); } return(false); }
private static string GetDescription(TypeNamePair pair) { if (descriptions.ContainsKey(pair)) { return(descriptions[pair]); } else { return(descriptions[pair] = GetNewDescription(pair)); } }
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); }
/// 创建一个状态机 /// <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); }
/// <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); }
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); }
/// <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); }
private bool InternalHasFsm(TypeNamePair typeNamePair) { return(m_Fsms.ContainsKey(typeNamePair)); }
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)); }