private static void Register(CCommand cmd) { if (ccwrapperMap.ContainsKey(cmd.Name)) { // duplicate name Debug.LogWarning($"duplicate cvar or ccmd name: {cmd.Name}"); return; } var wrapper = new CCWrapper() { type = CCWrapper.WrappedType.CCmd, cmd = cmd, }; ccwrapperMap[wrapper.Name] = wrapper; ccwrapperList.Add(wrapper); }
static void Init() { foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { foreach (var _class in assembly.GetTypes()) { if (!_class.IsClass) { continue; } foreach (var field in _class.GetFields(BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public)) { if (!field.IsDefined(typeof(CVarAttribute), false)) { continue; } if (field.FieldType == typeof(int) || field.FieldType == typeof(float)) { var attr = field.GetCustomAttribute <CVarAttribute>(false); var name = attr.Name != null ? attr.Name : _class.Name.ToLower() + "." + field.Name.ToLower(); var cvar = new CVariable(name, field, attr.Description); Register(cvar); } } foreach (var method in _class.GetMethods(BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public)) { if (!method.IsDefined(typeof(CCmdAttribute), false)) { continue; } var attr = method.GetCustomAttribute <CCmdAttribute>(false); var cmd = new CCommand(attr.Name, method, attr.Description); Register(cmd); } } } ccwrapperList.Sort((a, b) => { return(a.Name.CompareTo(b.Name)); }); }