Ejemplo n.º 1
0
            private void AssignObject(Object newObject)
            {
                //It seems, at least in 2019.4 with IMGUI, that just rebinding the inspector is not enough; we need to recreate it.
                m_Inspector?.RemoveFromHierarchy();
                m_Inspector = null;
                m_Header?.RemoveFromHierarchy();
                m_Header = null;

                // TODO Display a missing script notice or something?
                if (!newObject)
                {
                    return;
                }

                m_SerializedObject = new SerializedObject(newObject);
                m_Inspector        = new InspectorElement();
                m_Header           = m_OwnerList.CreateHeader(m_Index, m_SerializedObject, m_Inspector);

                if (m_Header != null)
                {
                    Add(m_Header);
                }
                Add(m_Inspector);

                this.Bind(m_SerializedObject);
            }
Ejemplo n.º 2
0
        private VisualElement GetEditorSystemDataElement()
        {
            var foldout = new Foldout
            {
                text = "Editor systems", value = false, contentContainer = { style = { marginLeft = 5 } }
            };

            if (GFEditorSystemUtility.GetSystemsData(target as Setup))
            {
                LoadLocal();
            }
            else
            {
                LoadBase();
            }

            void LoadBase()
            {
                foldout.Clear();

                foldout.Add(new Button(LoadLocal)
                {
                    text = "Add local data"
                });

                var local = GFEditorSystemUtility.GetSystemsData(target as Setup);

                if (local)
                {
                    GFEditorSystemUtility.RemoveSystemsData(target as Setup);
                    EditorFramework.IsNeedRefreshSystems = true;
                }
            }

            void LoadLocal()
            {
                foldout.Clear();
                var local = GFEditorSystemUtility.GetSystemsData(target as Setup);

                if (!local)
                {
                    local = GFEditorSystemUtility.AddSystemsData(target as Setup);
                    EditorFramework.IsNeedRefreshSystems = true;
                }


                foldout.Add(new Button(LoadBase)
                {
                    text = "Remove local data"
                });

                var element = new InspectorElement(local);

                foldout.Add(element);
            }

            return(foldout);
        }
Ejemplo n.º 3
0
        private VisualElement GetSceneObjetsOrderElement()
        {
            var foldout = new Foldout
            {
                text = "Scene objects order", value = false, contentContainer = { style = { marginLeft = 5 } }
            };

            if (GFContextSystemUtility.GetSystemOrder(target as GFContext))
            {
                LoadLocal();
            }
            else
            {
                LoadBase();
            }

            void LoadBase()
            {
                foldout.Clear();

                foldout.Add(new Button(LoadLocal)
                {
                    text = "Add local data"
                });

                var local = GFContextSystemUtility.GetSystemOrder(target as GFContext);

                if (local)
                {
                    GFContextSystemUtility.RemoveSystemOrder(target as GFContext);
                }
            }

            void LoadLocal()
            {
                foldout.Clear();
                var local = GFContextSystemUtility.GetSystemOrder(target as GFContext);

                if (!local)
                {
                    local = GFContextSystemUtility.AddSystemOrder(target as GFContext);
                }


                foldout.Add(new Button(LoadBase)
                {
                    text = "Remove local data"
                });

                var element = new InspectorElement(local);

                foldout.Add(element);
            }

            return(foldout);
        }
Ejemplo n.º 4
0
    void OnListSelectChange(ListElement data)
    {
        mSelectNodel = data;
        //var hierarchyData = (HierarchyListWindow.HierarchyElementData) data.ElementData;

        mSelectElement = InspectorElement.GetInspectorElement(data);

        if (mSelectElement != null)
        {
            infoWindow.Refresh(mSelectElement);
        }
    }
Ejemplo n.º 5
0
        public void OnEnable()
        {
            m_Tank = GameObject.FindObjectOfType <TankScript>();
            if (m_Tank == null)
            {
                return;
            }

            var inspector = new InspectorElement(m_Tank);

            rootVisualElement.Add(inspector);
        }
Ejemplo n.º 6
0
    public void OnEnable()
    {
        m_GM = GameObject.FindObjectOfType <GameManager>();
        if (m_GM == null)
        {
            return;
        }

        var inspector = new InspectorElement(m_GM);

        rootVisualElement.Add(inspector);
    }
Ejemplo n.º 7
0
    void OnListSelectChange(ListElement data)
    {
        mSelectNodel = data;
        //var hierarchyData = (HierarchyListWindow.HierarchyElementData) data.ElementData;

        mSelectElement = InspectorElement.GetInspectorElement(data);

        if (mSelectElement != null)
        {
            infoWindow.Refresh(mSelectElement);
        }
    }
Ejemplo n.º 8
0
    public void Refresh(InspectorElement element)
    {
        mSelectNodel = ((BundleListWindow)mOwnerWindow).SelectNodel;
        cacheBundleObject = element;
        scrollVector2 = Vector2.zero;

        cacheFolderObject = cacheBundleObject as InspectorElementFolder;
        cachePrefabObject = cacheBundleObject as InspectorElementPrefab;
        if (cachePrefabObject != null)
        {
            LoadAsset(cachePrefabObject.Depends);
        }
    }
Ejemplo n.º 9
0
    public void Refresh(InspectorElement element)
    {
        mSelectNodel      = ((BundleListWindow)mOwnerWindow).SelectNodel;
        cacheBundleObject = element;
        scrollVector2     = Vector2.zero;

        cacheFolderObject = cacheBundleObject as InspectorElementFolder;
        cachePrefabObject = cacheBundleObject as InspectorElementPrefab;
        if (cachePrefabObject != null)
        {
            LoadAsset(cachePrefabObject.Depends);
        }
    }
Ejemplo n.º 10
0
    public static void ApplyStrategyGroup(ListElement folder, int strategyIndex)
    {
        List <ListElement> child = new List <ListElement>();

        GetCurrentChildElements(folder, ref child);

        for (int i = 0; i < child.Count; i++)
        {
            InspectorElement element = InspectorElement.GetInspectorElement(child[i]);
            if (element != null)
            {
                ApplyStrategyGroup((InspectorElementPrefab)element, strategyIndex);
            }
        }
    }
Ejemplo n.º 11
0
    public bool OnAddNewElement(ListElement element)
    {
        InspectorElement newElement = InspectorElement.GetInspectorElement(element);

        if (ResourcElements.ContainsKey(element.InstanceID) == false)
        {
            ResourcElements.Add(element.InstanceID, newElement);
            return(true);
        }
        else if (ResourcElements[element.InstanceID] != newElement)
        {
            Debug.LogError(string.Format("hash conflict file [{0}] file [{1}] hash [{2}]", ResourcElements[element.InstanceID].AssetFilePath, element.Path, element.InstanceID));
        }

        return(false);
    }
 public void Initialize()
 {
     m_ContentRoot            = new InspectorElement();
     m_ContentRoot.OnChanged += (element, path) =>
     {
         Provider.OnContentChanged(new ContentProvider.ChangeContext(element));
     };
     m_ContentRoot.AddContext(InspectionContext);
     if (InspectionContext.ApplyInspectorStyling)
     {
         m_ContentRoot.RegisterCallback <GeometryChangedEvent, VisualElement>((evt, element) => StylingUtility.AlignInspectorLabelWidth(element), m_ContentRoot);
     }
     m_ContentNotReadyRoot = new InspectorElement();
     Root.contentContainer.Add(m_ContentRoot);
     Root.contentContainer.Add(m_ContentNotReadyRoot);
     m_ContentRoot.style.flexGrow = 1;
 }
Ejemplo n.º 13
0
    public InspectorElement CreateInspectorElement(ref string assetFilePath, bool isFolder)
    {
        InspectorElement element = null;

        if (isFolder)
        {
            element = new InspectorElementFolder(assetFilePath);
        }
        else if (Path.GetExtension(assetFilePath) == ".prefab")
        {
            element = new InspectorElementPrefab(assetFilePath);
        }
        else
        {
            element = new InspectorElement(assetFilePath);
        }

        return(element);
    }
        public override VisualElement Build()
        {
            var root = new VisualElement();

            root.StretchToParentSize();
            Resources.Templates.Explorer.PropertyBagExplorer.Clone(root);
            var pooled = ListPool <BindingContextElement> .Get();

            try
            {
                root.Query <BindingContextElement>().ToList(pooled);
                foreach (var binding in pooled)
                {
                    binding.AddContext(Target.InspectionContext);
                }
            }
            finally
            {
                ListPool <BindingContextElement> .Release(pooled);
            }

            var split = root.Q <TwoPaneSplitView>(className: k_Splitter);

            split.fixedPaneInitialDimension = Target.InspectionContext.SplitPosition;
            split.schedule.Execute(() =>
            {
                if (null != split.fixedPane)
                {
                    Target.InspectionContext.SplitPosition = split.fixedPane.resolvedStyle.width;
                }
            }).Every(0);

            Target.InspectionContext.OnPropertyBagSelected += detail =>
            {
                m_CurrentPropertyBag.ClearTarget();
                m_CurrentPropertyBag.SetTarget(detail);
            };

            m_CurrentPropertyBag = root.Q <InspectorElement>(className: k_Detail);
            return(root);
        }
Ejemplo n.º 15
0
    public static void GetSubFolderChildElements(ListElement parentElement, ref List <ListElement> result)
    {
        parentElement.TryUpdateFile();

        //  子文件没有子节点
        if (parentElement.ChildElements.Count == 0)
        {
            result.Add(parentElement);
            return;
        }

        for (int i = 0; i < parentElement.ChildElements.Count; i++)
        {
            if (parentElement.ChildElements[i].ChildElements.Count > 0)
            {
                GetAllChildElements(parentElement, ref result);
            }
            else
            {
                InspectorElement element = InspectorElement.GetInspectorElement(parentElement.ChildElements[i]);
                Debug.Log(string.Format("忽略文件 [{0}]!", element.AssetFilePath));
            }
        }
    }
Ejemplo n.º 16
0
    public static void BuildSingleByElementFolder(InspectorElementFolder folder, ListElement noder, bool immediatelyExecute = false)
    {
        //ClearBundleName();

        if (!immediatelyExecute && folder.IsIgnoreAll)
        {
            Debug.Log(string.Format("忽略文件 [{0}]!", folder.AssetFilePath));
            return;
        }


        //  common
        List <AssetBundleBuild> allBundle = new List <AssetBundleBuild>();

        allBundle.AddRange(GetCommonBuilds());

        //  all file
        List <ListElement> allElements = new List <ListElement>();

        if (folder.isIgnore)
        {
            GetSubFolderChildElements(noder, ref allElements);
        }
        else
        {
            GetAllChildElements(noder, ref allElements);
        }


        if (allElements.Count == 0)
        {
            Debug.Log(string.Format("当前文件夹中 [{0}] 不包含任何文件!", folder.AssetFilePath));
            return;
        }

        HashSet <string> filterStr = new HashSet <string>();

        for (int i = 0; i < allElements.Count; i++)
        {
            // ReSharper disable once SuspiciousTypeConversion.Global
            var elementData = allElements[i].ElementData as HierarchyListWindow.HierarchyElementData;
            if (elementData != null && !elementData.IsFolder)
            {
                InspectorElement elementPrefab = elementData.ElementData as InspectorElementPrefab;

                if (elementPrefab != null)
                {
                    if (elementPrefab.isIgnore == false)
                    {
                        var eledata = GetBundleBuildByElementPrefab((InspectorElementPrefab)elementPrefab);
                        for (int j = 0; j < eledata.Count; j++)
                        {
                            if (filterStr.Contains(eledata[j].assetBundleName) == false)
                            {
                                filterStr.Add(eledata[j].assetBundleName);
                                allBundle.Add(eledata[j]);
                            }
                        }
                    }
                    else
                    {
                        Debug.Log(string.Format("Ignore Asset File [{0}]!", elementPrefab.AssetFilePath));
                    }
                }
                //elementPrefab = ;

                //if (BundleDataManager.Instance.ResourcElements.TryGetValue(elementData.AssetFilePath, out elementPrefab))
                //{

                //}
            }
        }


        BuildAssetBundles(Application.dataPath + "/../../Resources/TestBuildNew", ref allBundle);

        //string outputFile = Application.dataPath + "/../../Resources/TestBuildNew";
        //if (Directory.Exists(outputFile) == false)
        //    Directory.CreateDirectory(outputFile);

        //BuildPipeline.BuildAssetBundles(outputFile, allBundle.ToArray(), BuildAssetBundleOptions.None, BundleSetting.UnityBuildTarget);
        //Debug.Log(outputFile);
    }
Ejemplo n.º 17
0
    public void AddConditionPort(ActorStateNode retNode, ActorStateTransitionCondition transCond = null, ActorState destState = null, string overridenPortName = "")
    {
        var generatedPort   = GeneratePort(retNode, Direction.Output);
        var outputPortCount = retNode.outputContainer.Query("connector").ToList().Count;

        var oldLabel = generatedPort.contentContainer.Q <Label>("type");

        generatedPort.contentContainer.Remove(oldLabel);
        generatedPort.portName = (string.IsNullOrEmpty(overridenPortName) ? $"Condition {outputPortCount}" : overridenPortName);

        var condField = new ObjectField
        {
            objectType = typeof(ActorStateTransitionCondition),
            value      = transCond
        };

        if (transCond != null)
        {
            retNode.ports.Add(transCond, destState);
        }
        Label l = condField.Q <Label>();

        l.text = transCond == null ? "None" : transCond.name;

        condField.RegisterValueChangedCallback(evt =>
        {
            if (evt.previousValue != null && retNode.ports.ContainsKey(evt.previousValue as ActorStateTransitionCondition))
            {
                retNode.ports.Remove(evt.previousValue as ActorStateTransitionCondition);
            }
            ActorStateTransitionCondition cond = (evt.newValue as ActorStateTransitionCondition);
            l.text = cond.name;
            if ((generatedPort.connections.Any(x => (x.input.node as ActorStateNode).GUID != retNode.GUID)))
            {
                destState = (generatedPort.connections.First(x => (x.input.node as ActorStateNode).GUID != retNode.GUID).input.node as ActorStateNode).relevantState;
            }
            retNode.ports.Add(cond, destState);
        });
        //condField.label = generatedPort.portName;
        //condField.RegisterValueChangedCallback(evt => generatedPort.contentContainer.GetFirstOfType<ObjectField>().value = evt.newValue);

        var deleteButton = new Button(() => RemovePort(retNode, generatedPort))
        {
            text = "X"
        };

        generatedPort.contentContainer.Add(new Label("  "));
        generatedPort.contentContainer.Add(new IntegerField
        {
            label = "Priority: "
        });
        //generatedPort.contentContainer.Add(CreateEd)
        generatedPort.contentContainer.Add(condField);
        generatedPort.RegisterCallback <MouseUpEvent>(e =>
        {
            if ((generatedPort.connections.Any(x => (x.input.node as ActorStateNode).GUID != retNode.GUID)))
            {
                destState = (generatedPort.connections.First(x => (x.input.node as ActorStateNode).GUID != retNode.GUID).input.node as ActorStateNode).relevantState;
            }
            ActorStateTransitionCondition a = (ActorStateTransitionCondition)generatedPort.Q <ObjectField>().value;
            if (a != null)
            {
                //Debug.Log("Adding key value pair " + a + ", " + destState);
                if (!retNode.ports.ContainsKey(a))
                {
                    retNode.ports.Add(a, destState);
                }
                else
                {
                    retNode.ports[a] = destState;
                }
            }
        });
        if (transCond != null)
        {
            var inspEl = new InspectorElement(transCond);
            inspEl.RegisterCallback <MouseUpEvent>(e =>
            {
                retNode.RefreshExpandedState();
            });
            generatedPort.contentContainer.Add(inspEl);
        }

        generatedPort.contentContainer.Add(deleteButton);
        retNode.outputContainer.Add(generatedPort);

        retNode.RefreshPorts();
        retNode.RefreshExpandedState();
    }
Ejemplo n.º 18
0
 private void SetItemExpanded(bool expanded, VisualElement header, Object target, InspectorElement inspector)
 {
     inspector.style.display = expanded ? DisplayStyle.Flex : DisplayStyle.None;
     header.EnableInClassList(itemHeaderCollapsedUssClassName, !expanded);
     InternalEditorUtility.SetIsInspectorExpanded(target, expanded);
 }
Ejemplo n.º 19
0
        /// <summary>
        /// Override this method in a child class to customize inspector headers as a whole.
        /// </summary>
        /// <param name="itemIndex">The index in the list</param>
        /// <param name="serializedObject">The inspected object</param>
        /// <param name="inspector">The inspector element under the header.</param>
        /// <returns>The created header.</returns>
        protected virtual VisualElement CreateHeader(int itemIndex, SerializedObject serializedObject, InspectorElement inspector)
        {
            var target = serializedObject.targetObject;
            var header = new Disabler(() => !serializedObject.IsEditable())
            {
                viewDataKey = $"Header{target.GetInstanceID()}"
            };
            var headerContainer = header.contentContainer;

            headerContainer.AddToClassList(itemHeaderUssClassName);

            bool wasExpanded = InternalEditorUtility.GetIsInspectorExpanded(target);

            SetItemExpanded(wasExpanded, headerContainer, target, inspector);

            var foldout = AddHeaderFoldout(headerContainer, wasExpanded);

            foldout.RegisterValueChangedCallback(e => SetItemExpanded(e.newValue, headerContainer, target, inspector));

            header.AddManipulator(new DragAndClickManipulator
            {
                onStartDragging = () => StartDraggingItem(itemIndex),
                onClick         = () => foldout.value = !foldout.value
            });
            header.RegisterCallback <MouseDownEvent>(e =>
            {
                if (e.button == 1)
                {
                    ShowInspectorContextMenu(new Rect(e.mousePosition, default), headerContainer, itemIndex, serializedObject);
                }
            });

            AddPrelabelHeaderElements(headerContainer, itemIndex, serializedObject);
            AddHeaderLabel(headerContainer, itemIndex, serializedObject);
            AddPostlabelHeaderElements(headerContainer, itemIndex, serializedObject);

            return(header);
        }
Ejemplo n.º 20
0
    void OnEnable()
    {
        var drawer = new InspectorElement(_bb);

        rootVisualElement.Add(drawer);
    }
Ejemplo n.º 21
0
    public void OnEnable()
    {
        m_Tank = GameObject.FindObjectOfType <TankScript>();
        if (m_Tank == null)
        {
            return;
        }

        var root = rootVisualElement;

        #region Inline C#
        //
        //
        //

        var inlineVE = new VisualElement()
        {
            style =
            {
                marginTop       =                 6,
                marginBottom    =                 6,
                flexDirection   = FlexDirection.Row,
                backgroundColor = new Color(0.3f, 0.3f, 0.3f),
            }
        };

        // Label
        inlineVE.Add(new Label()
        {
            text  = "Inline C#",
            style =
            {
                fontSize                =             20,
                unityFontStyleAndWeight = FontStyle.Bold,
                width                   = 140
            }
        });

        // TextField
        inlineVE.Add(new TextField()
        {
            value = m_Tank.tankName,
            style =
            {
                fontSize                =             20,
                unityFontStyleAndWeight = FontStyle.Bold,
                flexGrow                = 1
            }
        });

        // IntegerField
        inlineVE.Add(new IntegerField()
        {
            value = m_Tank.tankSize,
            style =
            {
                fontSize                =             20,
                unityFontStyleAndWeight = FontStyle.Bold,
                width           =            100,
                backgroundColor = Color.blue
            }
        });

        root.Add(inlineVE);

        //
        //
        //
        #endregion Inline C#

        #region C# + USS
        //
        //
        //

        var ussVE = new VisualElement()
        {
            name = "row"
        };
        ussVE.AddToClassList("container");
        ussVE.styleSheets.Add(Resources.Load <StyleSheet>("Basics/basics_styles"));

        ussVE.Add(new Label()
        {
            text = "USS"
        });
        ussVE.Add(new TextField()
        {
            value = m_Tank.tankName
        });
        ussVE.Add(new IntegerField()
        {
            value = m_Tank.tankSize
        });

        root.Add(ussVE);

        //
        //
        //
        #endregion C# + USS

        #region C# + USS + UXML
        //
        //
        //

        var visualTree = Resources.Load("Basics/basics_uxml") as VisualTreeAsset;
        var uxmlVE     = visualTree.CloneTree();
        uxmlVE.styleSheets.Add(Resources.Load <StyleSheet>("Basics/basics_styles"));

        root.Add(uxmlVE);

        //
        //
        //
        #endregion C# + USS + UXML

        #region UQuery
        //
        //
        //

        uxmlVE.Q <TextField>().value    = m_Tank.tankName;
        uxmlVE.Q <IntegerField>().value = m_Tank.tankSize;
        var textFields    = root.Query <TextField>();
        var integerFields = root.Query <IntegerField>();

        //
        //
        //
        #endregion UQuery

        #region Events
        //
        //
        //

        inlineVE.Q <TextField>().RegisterCallback <MouseEnterEvent>(
            e => (e.target as VisualElement)
            .style.backgroundColor = Color.yellow);

        inlineVE.Q <TextField>().RegisterCallback <MouseLeaveEvent>(
            e => (e.target as VisualElement)
            .style.backgroundColor = Color.clear);

        var textFieldList = textFields.ToList();
        foreach (var field in textFieldList)
        {
            field.RegisterCallback <ChangeEvent <string> >(
                e => m_Tank.tankName =
                    (e.target as TextField).value);
        }

        integerFields.ForEach(field =>
                              field.RegisterValueChangedCallback(
                                  e => m_Tank.tankSize = e.newValue));

        //
        //
        //
        #endregion Events

        #region Scheduler
        //
        //
        //

        var scheduledAction = root.schedule.Execute(() =>
        {
            textFields.ForEach(t => t.value    = m_Tank.tankName);
            integerFields.ForEach(t => t.value = m_Tank.tankSize);
        });
        scheduledAction.Every(100); // ms

        //
        //
        //
        #endregion Scheduler

        #region Bindings
        //
        //
        //

        var inspector = new InspectorElement(m_Tank);

        // TODO: Ignore this bit. It's to account for a bug.
        // Once fixed, this code will not be necessary anymore.
        inspector.RemoveFromClassList("unity-inspector");
        inspector.Query <PropertyField>().ForEach((pf) =>
        {
            pf.Q <Label>().RemoveFromHierarchy();
            pf.Q(className: "unity-property-field__input").style.flexGrow = 1;
        });

        root.Add(inspector);

        //
        //
        //
        #endregion Bindings

        #region IMGUI
        //
        //
        //

        var imguiContainer = new IMGUIContainer(() =>
        {
            IMGUIDemoWindow.DemoOnGUI(m_Tank);
        });

        root.Add(imguiContainer);

        //
        //
        //
        #endregion IMGUI

        #region Background Image
        root.style.overflow = Overflow.Hidden;
        var backgroundTexture = Resources.Load <Texture2D>("Basics/blue_tank");
        var background        = new VisualElement()
        {
            name  = "background",
            style =
            {
                backgroundImage = backgroundTexture,
                position        = Position.Absolute,
                bottom          =                 0,
                right           =                 0,
                width           =               250,
                height          = 250
            }
        };
        root.Insert(0, background);
        #endregion
    }