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); })); }
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); } }
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); } }
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))); }
private static void AddDrawer <TDrawer>(IRegistry registry, UTinyType.Reference type) where TDrawer : StructDrawer, new() { type.Dereference(registry)?.AddAttribute(CustomDrawer(new TDrawer())); }
private static void AddEditor <TEditor>(IRegistry registry, UTinyType.Reference type) where TEditor : ComponentEditor, new() { type.Dereference(registry)?.AddAttribute(CustomEditor(new TEditor())); }