コード例 #1
0
 private IListProperty CreateMutableContainerListProperty <TValue>()
     where TValue : struct, IPropertyContainer
 {
     return(new MutableContainerListProperty <UTinyList, IList <TValue>, TValue>("Items",
                                                                                 container => container.m_Items as IList <TValue>,
                                                                                 null,
                                                                                 list =>
     {
         if (typeof(TValue) == typeof(UTinyObject))
         {
             return (TValue)(object)new UTinyObject(m_Registry, m_Type);
         }
         else if (typeof(TValue) == typeof(UTinyEnum.Reference))
         {
             var type = m_Type.Dereference(m_Registry);
             var id = UTinyId.Empty;
             if (type.Fields.Count > 0)
             {
                 id = type.Fields[0].Id;
             }
             return (TValue)(object)new UTinyEnum.Reference(m_Type.Dereference(m_Registry), id);
         }
         return default(TValue);
     }));
 }
コード例 #2
0
        public void Refresh(IRegistry registry)
        {
            var fieldtype = m_FieldType.Dereference(registry);

            if (fieldtype != null)
            {
                fieldtype.Refresh();

                if (fieldtype.Version == m_FieldTypeVersion)
                {
                    return;
                }

                // Fix up the reference
                m_FieldType = (UTinyType.Reference)fieldtype;

                VersionStorage.IncrementVersion(null, this);
                m_FieldTypeVersion = fieldtype.Version;
            }
            else
            {
                if (m_FieldTypeVersion == -1)
                {
                    return;
                }

                VersionStorage.IncrementVersion(null, this);
                m_FieldTypeVersion = -1;
            }
        }
        private void ShowRemoveComponent(UTinyType.Reference typeRef)
        {
            var type = typeRef.Dereference(Registry);

            if ((null == type || type.TypeCode == UTinyTypeCode.Component) && TargetType == typeof(UTinyEntity))
            {
                var rect = EditorGUILayout.GetControlRect(false, GUILayout.Width(16.0f));
                if (GUI.Button(rect, UTinyIcons.X_Icon_8, UTinyStyles.MiddleCenteredLabel))
                {
                    var targets = Targets.Cast <UTinyEntity>().ToList();
                    EditorApplication.delayCall += () =>
                    {
                        foreach (var entity in targets.Cast <UTinyEntity>())
                        {
                            entity.RemoveComponent(typeRef);
                        }
                        // This is called manually because we want the scene graphs to be recreated.
                        UTinyEventDispatcher <ChangeSource> .Dispatch(ChangeSource.DataModel);
                    };
                }
                GUILayout.Space(5.0f);
            }
        }
コード例 #4
0
        private void ShowRemoveComponent(UTinyType.Reference typeRef)
        {
            var type = typeRef.Dereference(Registry);

            if ((null == type || type.TypeCode == UTinyTypeCode.Component) && TargetType == typeof(UTinyEntity))
            {
                var rect = EditorGUILayout.GetControlRect(false, GUILayout.Width(16.0f));
                if (GUI.Button(rect, UTinyIcons.X_Icon_8, UTinyStyles.MiddleCenteredLabel))
                {
                    var targets = Targets.Cast <UTinyEntity>().ToList();
                    EditorApplication.delayCall += () =>
                    {
                        foreach (var entity in targets.Cast <UTinyEntity>())
                        {
                            entity.RemoveComponent(typeRef);
                        }
                        UTinyHierarchyWindow.InvalidateDataModel();
                        UTinyInspector.RepaintAll();
                    };
                }
                GUILayout.Space(5.0f);
            }
        }
コード例 #5
0
 private static void AddBindings <TBinding>(IRegistry registry, UTinyType.Reference type, Func <UTinyType.Reference, TBinding> del)
     where TBinding : IComponentBinding
 {
     type.Dereference(registry)?.AddAttribute(Bindings(del(type)));
 }
コード例 #6
0
 private static void AddDrawer <TDrawer>(IRegistry registry, UTinyType.Reference type)
     where TDrawer : StructDrawer, new()
 {
     type.Dereference(registry)?.AddAttribute(CustomDrawer(new TDrawer()));
 }
コード例 #7
0
 private static void AddEditor <TEditor>(IRegistry registry, UTinyType.Reference type)
     where TEditor : ComponentEditor, new()
 {
     type.Dereference(registry)?.AddAttribute(CustomEditor(new TEditor()));
 }