private void RegisterType(CKlaxScriptTypeInfo typeInfo)
        {
            Type type = typeInfo.Type;

            Types.Add(typeInfo);
            m_klaxTypeMap.Add(typeInfo.Type, typeInfo);

            foreach (var method in type.GetMethods())
            {
                KlaxFunctionAttribute klaxFunction = method.GetCustomAttribute <KlaxFunctionAttribute>();
                if (klaxFunction != null)
                {
                    MethodInfo baseMethod = method.GetBaseDefinition();
                    if (baseMethod.DeclaringType == type)
                    {
                        typeInfo.Functions.Add(CreateFunction(klaxFunction, method));
                    }
                }
            }

            foreach (var property in type.GetProperties())
            {
                KlaxPropertyAttribute klaxProperty = property.GetCustomAttribute <KlaxPropertyAttribute>();
                if (klaxProperty != null)
                {
                    if (property.DeclaringType == type)
                    {
                        typeInfo.Properties.Add(CreateProperty(klaxProperty, property));
                    }
                }
            }

            foreach (var field in type.GetFields())
            {
                KlaxPropertyAttribute klaxProperty = field.GetCustomAttribute <KlaxPropertyAttribute>();
                if (klaxProperty != null)
                {
                    if (field.DeclaringType == type)
                    {
                        string name = klaxProperty.DisplayName ?? field.Name;
                        typeInfo.Properties.Add(CreateProperty(field, name, klaxProperty.Category, klaxProperty.IsReadOnly));
                    }
                }
                else
                {
                    KlaxEventAttribute klaxEvent = field.GetCustomAttribute <KlaxEventAttribute>();
                    if (klaxEvent != null && field.DeclaringType == type)
                    {
                        typeInfo.Events.Add(CreateEvent(field, klaxEvent));
                    }
                }
            }
        }
        private CKlaxScriptEventInfo CreateEvent(FieldInfo eventField, KlaxEventAttribute eventAttribute)
        {
            CKlaxScriptEventInfo info = new CKlaxScriptEventInfo()
            {
                klaxEventInfo   = eventField,
                displayName     = eventAttribute.DisplayName ?? eventField.Name,
                category        = eventAttribute.Category,
                tooltip         = eventAttribute.Tooltip,
                ParameterName1  = eventAttribute.ParameterName1,
                ParameterName2  = eventAttribute.ParameterName2,
                ParameterName3  = eventAttribute.ParameterName3,
                ParameterName4  = eventAttribute.ParameterName4,
                ParameterName5  = eventAttribute.ParameterName5,
                ParameterName6  = eventAttribute.ParameterName6,
                ParameterName7  = eventAttribute.ParameterName7,
                ParameterName8  = eventAttribute.ParameterName8,
                ParameterName9  = eventAttribute.ParameterName9,
                ParameterName10 = eventAttribute.ParameterName10,
            };

            return(info);
        }