static void InjectAttributeConfigVars() { foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { foreach (var _class in assembly.GetTypes()) { if (!_class.IsClass) { continue; } foreach (var field in _class.GetFields(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public)) { if (!field.IsDefined(typeof(ConfigVarAttribute), false)) { continue; } if (!field.IsStatic) { GameDebug.LogError("Cannot use ConfigVar attribute on non-static fields"); continue; } if (field.FieldType != typeof(ConfigVar)) { GameDebug.LogError("Cannot use ConfigVar attribute on fields not of type ConfigVar"); continue; } var attr = field.GetCustomAttributes(typeof(ConfigVarAttribute), false)[0] as ConfigVarAttribute; var name = attr.Name != null ? attr.Name : _class.Name.ToLower() + "." + field.Name.ToLower(); var cvar = field.GetValue(null) as ConfigVar; if (cvar != null) { GameDebug.LogError("ConfigVars (" + name + ") should not be initialized from code; just marked with attribute"); continue; } cvar = new ConfigVar(name, attr.Description, attr.DefaultValue, attr.Flags); cvar.ResetToDefault(); RegisterConfigVar(cvar); field.SetValue(null, cvar); } } } // Clear dirty flags as default values shouldn't count as dirtying DirtyFlags = Flags.None; }
public static void RegisterConfigVar(ConfigVar cvar) { if (ConfigVars.ContainsKey(cvar.name)) { GameDebug.LogError("Trying to register cvar " + cvar.name + " twice"); return; } if (!validateNameRe.IsMatch(cvar.name)) { GameDebug.LogError("Trying to register cvar with invalid name: " + cvar.name); return; } ConfigVars.Add(cvar.name, cvar); }