Пример #1
0
    public TileMap()
    {
        gridContainer = new IMGUIContainer(drawGrid)
        {
            style =
            {
                overflow        = Overflow.Hidden,
                flexGrow        =            1.0f,
                flexShrink      =            0.0f,
                flexBasis       =            0.0f,
                backgroundColor = new Color(0.2f, 0.2f, 0.2f, 1.0f)
            }
        };
        gridContainer.RegisterCallback <MouseUpEvent>(mouseUpGridCallback);
        gridContainer.RegisterCallback <MouseDownEvent>(mouseDownGridCallback);
        gridContainer.RegisterCallback <MouseMoveEvent>(mouseMoveGridCallback);
        gridContainer.RegisterCallback <MouseLeaveEvent>(mouseLeaveGridCallback);
        mapObjects = new List <ListLayerWrapper>();

        layersOn = new List <bool>()
        {
            true, true, true
        };
    }
Пример #2
0
    void SetDataFromUXML()
    {
        VisualTreeAsset aLevelDataAsset = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>("Assets/Editor/UXML Files/PerLevelEditor.uxml");

        mLevelData            = aLevelDataAsset.CloneTree();
        mGameMusic            = mLevelData.Q <ObjectField>("gameplay_music");
        mGameMusic.objectType = typeof(AudioClip);
        mGameMusic.RegisterCallback <ChangeEvent <Object> >((aEv) => GenHelpers.OnGamePlayMusicSelection((AudioClip)aEv.newValue, mGameMusic));
        mLevelData.Q <Button>("level_data").RegisterCallback <MouseUpEvent>((aEv) => SaveAsScriptableAsset());
        mMapContainer  = mLevelData.Q <IMGUIContainer>("level_map");
        mActiveBrushId = -1;
        GetAllScriptableObjects();
        mMapContainer.onGUIHandler = LevelMapOnGUI;
        mMapContainer.RegisterCallback <MouseUpEvent>(ClickGrid);
    }
        public SmartHierarchy(EditorWindow window)
        {
            root        = window.rootVisualElement;
            this.window = new SceneHierarchyWindow(window);

            hoverPreview = new HoverPreview();

            Initialize();
            RegisterCallbacks();
            hierarchy.ReassignCallbacks();

            guiContainer = root.parent.Query <IMGUIContainer>().First();
            guiContainer.RegisterCallback <MouseDownEvent>(_ => ObjectPopupWindow.Close());

            // onGUIHandler is called after hierarchy GUI, thus has a slight delay
            guiContainer.onGUIHandler += OnAfterGUI;

            root.Add(hoverPreview);
        }
        public override VisualElement CreateInspectorGUI()
        {
            var root = new VisualElement {
                name = "HierarchyHeaderRoot"
            };

            scrollView = new ScrollView();

#if UNITY_2020_2_OR_NEWER
            var boxContainer = new Box();
            boxContainer.AddToClassList("mainBoxContainer");
            boxContainer.Add(scrollView);
#endif
            serializedObject.Update();
            var property = serializedObject.GetIterator();
            if (property.NextVisible(true))
            {
                do
                {
                    var propPath      = property.propertyPath;
                    var propertyField = new PropertyField(property)
                    {
                        name = "PropertyField:" + propPath
                    };
                    switch (propPath)
                    {
                    case "m_Script" when serializedObject.targetObject != null:
                        propertyField.visible = true;
                        propertyField.SetEnabled(true);
                        break;

                    default:
                        if (property.IsReallyArray() && serializedObject.targetObject != null)
                        {
                            var copiedProperty = property.Copy();     // @formatter:off
#if UNITY_2020_2_OR_NEWER
                            var imDefaultProperty = new IMGUIContainer(() =>
                            {
                                DoDrawDefaultIMGUIProperty(serializedObject, copiedProperty);
                            })
                            {
                                name = propPath
                            };
#else
                            reorderableList = new ReorderableList(serializedObject, copiedProperty)
                            {
                                drawHeaderCallback    = DrawHeaderCallback,
                                drawElementCallback   = DrawElementCallback,
                                elementHeightCallback = ElementHeightCallback,
                                onAddCallback         = OnAddCallback
                            };     // @formatter:on

                            reorderableList.elementHeightCallback = ElementHeightCallback;

                            var imDefaultProperty = new IMGUIContainer(() =>
                            {
                                serializedObject.Update();
                                reorderableList.DoLayoutList();
                                serializedObject.ApplyModifiedProperties();
                            })
                            {
                                name = propPath
                            };
#endif
                            imDefaultProperty.RegisterCallback <ChangeEvent <bool> >(evt => RecomputeSize(imDefaultProperty));
                            scrollView.Add(imDefaultProperty);
                        }

                        break;     // @formatter:on
                    }
                } while (property.NextVisible(false));
            }

            foreach (var foldoutList in scrollView.Query <Foldout>().ToList())
            {
                foldoutList.RegisterValueChangedCallback(e =>
                {
                    if (!(e.target is Foldout fd))
                    {
                        return;
                    }
                    var path      = fd.bindingPath;
                    var container = scrollView.Q <IMGUIContainer>(path);
                    RecomputeSize(container);
                });
            }

            serializedObject.ApplyModifiedProperties();

#if UNITY_2020_2_OR_NEWER
            root.Add(boxContainer);
#else
            root.Add(scrollView);
#endif
            return(root);
        }
Пример #5
0
    void CreateVisualTree()
    {
        var visualTree = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>("Assets/Editor/EditorComponents/LevelEditor.uxml");
        var styleSheet = AssetDatabase.LoadAssetAtPath <StyleSheet>("Assets/Editor/LevelEditorWindow.uss");

        levelEditor = visualTree.CloneTree();

        addLevelContainer  = levelEditor.Q <Box>("addLevelContainer");
        levelListContainer = new IMGUIContainer(DrawAnimationList);
        levelListContainer.onGUIHandler = DrawAnimationList;
        levelList = new ReorderableList(allLevels, typeof(Level));
        levelList.drawElementCallback = DrawList;
        levelList.drawHeaderCallback  = WriteHeader;
        levelList.onReorderCallback   = ChangeListOrder;
        levelList.onSelectCallback    = SelectListItem;
        levelList.onAddCallback       = AddToList;
        levelList.onRemoveCallback    = RemoveFromList;
        addLevelContainer.Add(levelListContainer);

        MapLayer map = new MapLayer();

        map.name      = "Environment";
        map.drawRects = new Dictionary <Vector2Int, Drawable>();
        MapLayer objects = new MapLayer();

        objects.name      = "StaticObjects";
        objects.drawRects = new Dictionary <Vector2Int, Drawable>();
        MapLayer enemies = new MapLayer();

        enemies.name      = "Enemies";
        enemies.drawRects = new Dictionary <Vector2Int, Drawable>();
        MapLayer player = new MapLayer();

        player.name      = "Players";
        player.drawRects = new Dictionary <Vector2Int, Drawable>();

        layersToDraw.Add(map);
        layersToDraw.Add(objects);
        layersToDraw.Add(enemies);
        layersToDraw.Add(player);

        VisualElement stampToolLayout = levelEditor.Q <Box>("levelManagerContainer");

        levelEditor.Add(stampToolLayout);

        VisualElement levelPropertyContainer = levelEditor.Q <Box>("PropertiesBarRow1");

        // Create a new field and assign it its value.
        layersPopupField       = new PopupField <string>("Select Layer to Paint", layers, 0);
        layersPopupField.value = "Environment";
        layersPopupField.AddToClassList("height-width-slider");
        levelPropertyContainer.Add(layersPopupField);

        //Label selectTileMapLabel = new Label("Choose TileMap(64x64)");
        //levelPropertyContainer.Add(selectTileMapLabel);

        //textureObjectField = new ObjectField { objectType = typeof(UnityEngine.Texture) };
        ////textureObjectField.StretchToParentSize();
        //textureObjectField.AddToClassList("height-width-slider");
        //levelPropertyContainer.Add(textureObjectField);
        //// Mirror value of uxml field into the C# field.
        //layersPopupField.RegisterCallback<ChangeEvent<string>>((evt) =>
        //{
        //    styledField.value = evt.newValue;
        //});

        VisualElement levelMapContainer = levelEditor.Q <Box>("LevelMapContainer");

        mapElement = new IMGUIContainer(mapOnGUI);

        mapElement.AddToClassList("level-map-sub-container");
        mapElement.RegisterCallback <MouseMoveEvent>(OnMapMouseMove);
        mapElement.RegisterCallback <MouseDownEvent>(OnMapMouseDown);
        mapElement.RegisterCallback <MouseUpEvent>(OnMapMouseUp);
        mapElement.RegisterCallback <MouseOutEvent>(OnMapMouseExit);

        levelMapContainer.Add(mapElement);

        VisualElement levelTileContainer = levelEditor.Q <Box>("TileMapContainer");

        tileElement = new IMGUIContainer(tileOnGUI);

        tileElement.AddToClassList("tile-map-container");
        tileElement.RegisterCallback <MouseUpEvent>(OnTileMouseup);

        levelTileContainer.Add(tileElement);

        InitializeLists();
    }