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 }; }
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); }
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(); }