示例#1
0
        public void InstantiateMemberCollection(IReference fieldCollection, bool clearContent = true)
        {
            if (clearContent)
            {
                ClearComponentsAndFieldsContent(fieldCollection);
            }

            var memberReferences = fieldCollection.GetMembers();

            if (memberReferences != null)
            {
                foreach (var memberReference in memberReferences)
                {
                    var type = memberReference.GetMemberType();
                    var name = memberReference.GetName();

                    if (memberReference.GetValue() != null && UiInitializers.Registry.ContainsKey(type))
                    {
                        var uiComponent = InstantiateUiComponent(UiInitializers.Registry[memberReference.GetMemberType()].prefabName, name);
                        UiInitializers.Registry[type].init.Invoke(this, memberReference, uiComponent);
                    }
                    else if (memberReference.GetMembers() != null && memberReference.GetMembers().Count > 0)
                    {
                        var uiComponent = InstantiateUiComponent("Class", name, type.Name);
                        uiComponent.action = (v) => InstantiateMemberCollection(memberReference);
                    }
                    else if (type.IsEnum && type.GetEnumUnderlyingType() == typeof(int))
                    {
                        var uiComponent = InstantiateUiComponent("Class", name, type.Name);
                        uiComponent.action = (v) => InstantiateEnumValueCollection(memberReference);
                    }
                    else
                    {
                        InstantiateUiComponent("Unknown", name, memberReference.GetValue() == null ? type.Name + " (Null)" : type.Name);
                    }
                }
            }
        }