public PatternResult Register(PatternIdent patternIdent) { if (InstanceId != 0) { throw new InvalidOperationException(); } if (!m_IdLink.ContainsValue(patternIdent.Name)) { var id = m_IdCounter++; m_IdLink[id] = patternIdent.Name; var patternResult = new PatternResult { Id = id, Internal = patternIdent }; m_ResultLink[patternIdent.Name] = patternResult; PatternRegister?.Invoke(patternResult); } else { Debug.LogWarning($"Some systems are trying to register an already existing pattern! (p={patternIdent.Name})"); } m_StringLink[patternIdent.Name] = patternIdent; return(GetPatternResult(patternIdent)); }
internal static void ObjRegister(object holder, PatternBank bank) { var type = holder.GetType(); var fields = type.GetFields ( BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance ); foreach (var field in fields) { if (field.FieldType != typeof(PatternIdent) && field.FieldType != typeof(PatternResult)) { continue; } var nv = field.GetCustomAttribute <PatternAttribute>(); var nameAttribute = field.GetCustomAttribute <PatternNameAttribute>(); var versionAttribute = field.GetCustomAttribute <PatternVersionAttribute>(); var pattern = new PatternIdent { Name = nv?.Name ?? nameAttribute?.Value }; if (string.IsNullOrEmpty(pattern.Name)) { pattern.Name = $"{type.Namespace}:{type.Name}.{field.Name}"; } if (nv != null) { pattern.Version = nv.Version; } else if (versionAttribute != null) { pattern.Version = versionAttribute.Value; } var result = bank.Register(pattern); if (field.FieldType == typeof(PatternIdent)) { field.SetValue(holder, pattern); } else { field.SetValue(holder, result); } } }
public bool Equals(PatternIdent other) { return(Name == other.Name); }
public PatternResult GetPatternResult(PatternIdent pattern) { return(m_ResultLink[pattern.Name]); }
public bool HasPattern(PatternIdent patternIdent) { return(m_StringLink.ContainsKey(patternIdent.Name)); }