public void Setup(TileLayer _layer, TileLayerEditor _editor, int _type) { layer = _layer; editor = _editor; type = _type; if (type == 0) { this.title = "Modify"; preName = layer.prefabsName[layer.prefabIndex]; mat = layer.prefabsMat[layer.prefabIndex]; tileSize = layer.prefabsTileSize[layer.prefabIndex]; offset = layer.prefabsOffset[layer.prefabIndex]; boxCollider = layer.prefabBoxCollider[layer.prefabIndex]; trigger = layer.prefabTrigger[layer.prefabIndex]; script = layer.prefabScript[layer.prefabIndex]; makeObject = layer.prefabMakeObject[layer.prefabIndex]; } else if (type == 1) { this.title = "Add"; mat = layer.mat; tileSize = layer.tileSize; offset = layer.offset; boxCollider = layer.boxCollider; trigger = layer.trigger; script = layer.script; makeObject = layer.makeObject; } boxTex = new Texture2D(1, 1); boxTex.SetPixel(0, 0, new Color(0, 0.5f, 1f, 0.4f)); boxTex.Apply(); }
private static void TrackPlaymodeChanges(TileLayer layer, TileLayerEditor editor) { TileLayer[] layers = (TileLayer[])GameObject.FindObjectsOfType(typeof(TileLayer)); if (Application.isPlaying && keepRealtimeChanges) { playModeTiles[layer] = layer.tileData.Clone(); } else { if (wasPlayingLastUpdate && keepRealtimeChanges && !Application.isPlaying) { foreach (TileLayer l in layers) { if (playModeTiles.Contains(l)) { l.tileData = (TileInstance[])playModeTiles[l]; editor.RebuildMap(l.layerSize); TileLayerEditor.InstantiatePrefabs(l); } } //Undo.RegisterSceneUndo("Playmode changes to tile layers"); } playModeTiles.Clear(); } wasPlayingLastUpdate = Application.isPlaying; }
private static void TrackPlaymodeChanges(TileLayer layer, TileLayerEditor editor) { TileLayer[] layers = (TileLayer[])GameObject.FindObjectsOfType(typeof(TileLayer)); if(Application.isPlaying && keepRealtimeChanges) { playModeTiles[layer] = layer.tileData.Clone(); } else { if(wasPlayingLastUpdate && keepRealtimeChanges && !Application.isPlaying) { foreach(TileLayer l in layers) { if(playModeTiles.Contains(l)) { l.tileData = (TileInstance[])playModeTiles[l]; editor.RebuildMap(l.layerSize); TileLayerEditor.InstantiatePrefabs(l); } } //Undo.RegisterSceneUndo("Playmode changes to tile layers"); } playModeTiles.Clear(); } wasPlayingLastUpdate = Application.isPlaying; }
public static void OnSceneGUI_Ammendum(TileLayer layer, UniTileTemplate manager, TileLayerEditor editor) { Handles.BeginGUI(); GUILayout.BeginArea(new Rect(20, 40, 150, 40)); keepRealtimeChanges = GUILayout.Toggle(keepRealtimeChanges, "Keep Playmode Changes", "Button"); GUILayout.EndArea(); Handles.EndGUI(); TrackPlaymodeChanges(layer, editor); }
private static void CreateObjectButton(TileLayer layer) { GUILayout.BeginHorizontal(); GUILayout.Label("B", GUILayout.ExpandWidth(false), GUILayout.MinWidth(20)); if (GUILayout.Button(new GUIContent("Create objects", "Instantiate tile prefabs and box colliders.")) || Event.current.keyCode == KeyCode.B) { //Undo.RegisterSceneUndo("Create Objects"); TileLayerEditor.InstantiatePrefabs(layer); } GUILayout.EndHorizontal(); }
private void TemplatePopup(TileLayer layer, TileLayerEditor editor) { if (layer.material != null && layer.tileset != null && layer.tileset.templates != null) { int length = 1 + layer.tileset.templates.Length; string[] templates = new string[length]; templates[0] = "Choose a template"; for (int i = 0; i < layer.tileset.templates.Length; i++) { templates[i + 1] = i.ToString() + " - " + layer.tileset.templates[i].name; } if (Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Tab && layer.tileset.templates.Length > 0) { if (Event.current.modifiers == EventModifiers.Shift) { editor.selectedTemplate = editor.selectedTemplate <= 0 ? layer.tileset.templates.Length - 1:editor.selectedTemplate - 1; } else { editor.selectedTemplate = (editor.selectedTemplate + 1) % layer.tileset.templates.Length; } editor.SelectTemplate(layer.tileset.templates[editor.selectedTemplate]); } EditorGUILayout.BeginHorizontal(); GUILayout.Label("Tab", GUILayout.ExpandWidth(false), GUILayout.MinWidth(20)); int selection = EditorGUILayout.Popup(Mathf.Min(editor.selectedTemplate + 1, length - 1), templates); EditorGUILayout.EndHorizontal(); if (selection > 0 && editor.selectedTemplate != selection - 1) { editor.selectedTemplate = selection - 1; editor.SelectTemplate(layer.tileset.templates[editor.selectedTemplate]); } } }
public void OnInspectorGUI(TileLayer layer, UniTileTemplate selection, TileLayerEditor editor) { if(layer.material == null) return; useScrollView = EditorGUILayout.Toggle("Use scrollview", useScrollView); float w = Mathf.Min(Screen.width, layer.material.mainTexture.width); //Mathf.Min(rect.width,layer.material.mainTexture.width); float scale = w / layer.material.mainTexture.width; float h = layer.material.mainTexture.height * scale; Rect rect = GUILayoutUtility.GetLastRect(); float top = rect.yMax; int tilesX = (int)Mathf.Floor((float)layer.material.mainTexture.width / (layer.tileSize.x + layer.borderSize.x * 2f)); int tileX1 = (int)Mathf.Floor((float)selection.selectedTile.id % (float)tilesX); int tileY1 = (int)Mathf.Floor((float)selection.selectedTile.id / (float)tilesX); int tileX2 = (int)Mathf.Floor((float)selection.selectedTileEnd.id % (float)tilesX); int tileY2 = (int)Mathf.Floor((float)selection.selectedTileEnd.id / (float)tilesX); int tileXMin=Mathf.Min(tileX1, tileX2); int tileYMin=Mathf.Min(tileY1, tileY2); int tileXMax=Mathf.Max(tileX1, tileX2); int tileYMax=Mathf.Max(tileY1, tileY2); int tileWidth = tileXMax - tileXMin + 1; int tileHeight = tileYMax - tileYMin + 1; float tempTop = top; if(useScrollView) { scale = 1; w = layer.material.mainTexture.width; h = layer.material.mainTexture.height; float scrollWidth = Screen.width-25; float scrollHeight = h+10; scrollPos = EditorGUILayout.BeginScrollView(scrollPos, false, false, GUILayout.Height(scrollHeight), GUILayout.Width(scrollWidth)); GUILayout.Label("", GUILayout.Width(scrollWidth), GUILayout.Height(scrollHeight)); tempTop = 0; } else { GUILayout.Label("", GUILayout.Width(w), GUILayout.Height(h)); } GUI.DrawTexture(new Rect(0,tempTop,w,h), layer.material.mainTexture); if(selection.selectedTile.id>=0 && !selection.tilesPicked) { GUIStyle style = new GUIStyle(GUI.skin.customStyles[0]); style.normal.background = SelectionTexture; GUI.Box( new Rect( (tileXMin * (layer.tileSize.x + layer.borderSize.x * 2f) + layer.borderSize.x) * scale, tempTop + (tileYMin * (layer.tileSize.y + layer.borderSize.y * 2f) + layer.borderSize.y) * scale, (tileWidth * (layer.tileSize.x + layer.borderSize.x * 2f) - layer.borderSize.x * 2f) * scale, (tileHeight * (layer.tileSize.y + layer.borderSize.y * 2f) - layer.borderSize.y * 2f) * scale ), "", style ); } if(useScrollView) { EditorGUILayout.EndScrollView(); } if(Event.current!=null) { if(Event.current.type==EventType.MouseDown) { if(Event.current.button==0) { Vector2 pos = Event.current.mousePosition; if(useScrollView) pos += scrollPos; this.selecting=true; selection.tilesPicked = false; if(pos.x>=0 && pos.x<=layer.material.mainTexture.width * scale && pos.y>=top && pos.y<=top+layer.material.mainTexture.height * scale) { editor.selectedTemplate = - 1; selection.selectedTile.id = selection.selectedTileEnd.id = (int)Mathf.Floor((pos.x / scale) /(layer.tileSize.x + layer.borderSize.x * 2f)) + (int)(Mathf.Floor((pos.y - top)/(scale * (layer.tileSize.y + layer.borderSize.y * 2f))) * tilesX); if(Event.current.clickCount==2) { TileEditorWindow window = TileEditorWindow.CreateInstance<TileEditorWindow>(); window.Setup(editor, selection.selectedTilesList); window.ShowUtility(); } } } else { selection.tilesPicked = false; selection.selectedTile.id = -1; selection.selectedTileEnd.id = -1; } } if(Event.current.type==EventType.mouseDrag) { if(selecting) { Vector2 pos = Event.current.mousePosition; if(useScrollView) pos += scrollPos; if(pos.x>=0 && pos.x<=layer.material.mainTexture.width * scale && pos.y>=top && pos.y<=top+layer.material.mainTexture.height * scale) { selection.selectedTileEnd.id = (int)Mathf.Floor((pos.x / scale) /(layer.tileSize.x + layer.borderSize.x * 2f)) + (int)(Mathf.Floor((pos.y - top)/(scale * (layer.tileSize.y + layer.borderSize.y * 2f))) * tilesX); selection.tilesPicked = false; selection.selectedTilesWidth = tileXMax - tileXMin + 1; selection.selectedTilesList = new TileInstance[(tileXMax - tileXMin + 1) * (tileYMax - tileYMin + 1)]; HandleUtility.Repaint (); if(selection.selectedTile.id>=0) { for(int i = tileXMin; i<= tileXMax; i++) { for(int j = tileYMin; j<= tileYMax; j++) { int x = i-tileXMin; int y = j-tileYMin; selection.selectedTilesList[x + y * selection.selectedTilesWidth] = new TileInstance(i + j * tilesX); } } } else { selection.selectedTilesList[0]=new TileInstance(-1); } UniTileMarker.Instance.Init(selection); } } } if(Event.current.type==EventType.MouseUp) { selection.tilesPicked = false; selection.selectedTilesWidth = tileXMax - tileXMin + 1; selection.selectedTilesList = new TileInstance[(tileXMax - tileXMin + 1) * (tileYMax - tileYMin + 1)]; HandleUtility.Repaint (); if(selection.selectedTile.id>=0) { for(int i = tileXMin; i<= tileXMax; i++) { for(int j = tileYMin; j<= tileYMax; j++) { int x = i-tileXMin; int y = j-tileYMin; selection.selectedTilesList[x + y * selection.selectedTilesWidth] = new TileInstance(i + j * tilesX); } } } else { selection.selectedTilesList[0]=new TileInstance(-1); } UniTileMarker.Instance.Init(selection); this.selecting=false; } } }
public TileResizer(TileLayerEditor tileEditor) : base(tileEditor) { Editor = tileEditor; }
public void OnSceneGUI(TileLayer layer, UniTileTemplate selection, TileLayerEditor editor) { DrawGrid(layer, selection.selectedTilesList, selection.selectedTilesWidth); MouseInfo(selection); GUI.Box(new Rect(10, 10, 170, 60), ""); GUILayout.BeginArea(new Rect(20, 20, 150, 40)); LayerSelect(layer); GUILayout.EndArea(); if (justSwitchedLayers) { return; } Handles.BeginGUI(); GUI.Box(new Rect(Screen.width - 160, Screen.height - 90, 160, 70), ""); GUILayout.BeginArea(new Rect(Screen.width - 150, Screen.height - 80, 140, 50)); CreateObjectButton(layer); TemplatePopup(layer, editor); GUILayout.EndArea(); if (Event.current.keyCode == KeyCode.H && Event.current.type == EventType.KeyUp) { for (int i = 0; i < selection.selectedTilesList.Length; i++) { if (selection.selectedTilesList[i] != null) { selection.selectedTilesList[i].flippedHorizontally = !selection.selectedTilesList[i].flippedHorizontally; } } TileInstance [] temp = new TileInstance[selection.selectedTilesList.Length]; for (int i = 0; i < selection.selectedTilesWidth; i++) { for (int j = 0; j < selection.selectedTilesHeight; j++) { int x1 = i; int x2 = selection.selectedTilesWidth - x1 - 1; int index1 = x1 + j * selection.selectedTilesWidth; int index2 = x2 + j * selection.selectedTilesWidth; temp[index2] = selection.selectedTilesList[index1]; } } selection.selectedTilesList = temp; UniTileMarker.Instance.Init(selection); editor.selectedTemplate = -1; } if (Event.current.keyCode == KeyCode.V && Event.current.type == EventType.KeyUp) { for (int i = 0; i < selection.selectedTilesList.Length; i++) { if (selection.selectedTilesList[i] != null) { selection.selectedTilesList[i].flippedVertically = !selection.selectedTilesList[i].flippedVertically; } } TileInstance [] temp = new TileInstance[selection.selectedTilesList.Length]; for (int i = 0; i < selection.selectedTilesWidth; i++) { for (int j = 0; j < selection.selectedTilesHeight; j++) { int y1 = j; int y2 = selection.selectedTilesHeight - y1 - 1; int index1 = i + y1 * selection.selectedTilesWidth; int index2 = i + y2 * selection.selectedTilesWidth; temp[index2] = selection.selectedTilesList[index1]; } } selection.selectedTilesList = temp; UniTileMarker.Instance.Init(selection); editor.selectedTemplate = -1; } if (Event.current.keyCode == KeyCode.T && Event.current.type == EventType.KeyUp) { for (int i = 0; i < selection.selectedTilesList.Length; i++) { if (selection.selectedTilesList[i] != null) { selection.selectedTilesList[i].rotation++; if ((uint)selection.selectedTilesList[i].rotation > 3) { selection.selectedTilesList[i].rotation = TileInstance.Rotation.r0; } } } TileInstance [] temp = new TileInstance[selection.selectedTilesList.Length]; int newWidth = selection.selectedTilesHeight; for (int i = 0; i < selection.selectedTilesWidth; i++) { for (int j = 0; j < selection.selectedTilesHeight; j++) { int x1 = i; int y1 = j; int index1 = x1 + y1 * selection.selectedTilesWidth; int x2 = selection.selectedTilesHeight - y1 - 1; int y2 = x1; int index2 = x2 + y2 * newWidth; temp[index2] = selection.selectedTilesList[index1]; } } selection.selectedTilesList = temp; selection.selectedTilesWidth = newWidth; UniTileMarker.Instance.Init(selection); editor.selectedTemplate = -1; } Handles.EndGUI(); }
public void Setup(TileLayerEditor editor, TileInstance[] selectedTiles) { if (selectedTiles.Length == 0) { Debug.LogError("No tiles selected! Only use TileEditorWindow if tiles have been selected"); this.Close(); return; } int selectedTile = selectedTiles[0].id; this.editor = editor; this.selectedTiles = selectedTiles; this.layer = editor.target as TileLayer; this.boxDepth = 64; this.boxTag = "Untagged"; if (layer.tileset != null) { this.ResizeArray(); UniTileTile tile = layer.tileset.tiles[selectedTile]; if (tile != null) { this.prefab = tile.prefab; this.name = tile.name; this.value = tile.value; this.boxCollider = tile.boxCollider; this.resizable = tile.resizable; this.boxLayer = tile.boxLayer; this.boxMaterial = tile.boxMaterial; this.boxTag = tile.boxTag; this.boxDepth = tile.boxDepth; this.boxPrefab = tile.boxPrefab; this.prefabOffset = tile.prefabOffset; if (this.prefab == null) { this.prefabOffset = new Vector2(this.layer.tileSpacing.x / 2f, this.layer.tileSpacing.y / 2f); } this.customBoxDimensions = tile.customBoxDimensions; if (!this.customBoxDimensions) { this.boxDimensions = new Rect(0, 0, this.layer.tileSpacing.x, this.layer.tileSpacing.y); } else { this.boxDimensions = tile.boxDimensions; } if (tile.properties != null) { this.properties = new UniTileProperty[tile.properties.Length]; for (int i = 0; i < this.properties.Length; i++) { this.properties[i] = new UniTileProperty(); this.properties[i].key = tile.properties[i].key; this.properties[i].value = tile.properties[i].value; } } else { this.properties = new UniTileProperty[0]; } } } if (this.properties == null) { this.properties = new UniTileProperty[0]; } this.propertiesLength = this.properties.Length; if (this.name == null) { this.name = ""; } }
public void Setup(TileLayerEditor editor, TileInstance[] selectedTiles) { if(selectedTiles.Length == 0) { Debug.LogError("No tiles selected! Only use TileEditorWindow if tiles have been selected"); this.Close(); return; } int selectedTile = selectedTiles[0].id; this.editor = editor; this.selectedTiles = selectedTiles; this.layer = editor.target as TileLayer; this.boxDepth = 64; this.boxTag = "Untagged"; if(layer.tileset!=null) { this.ResizeArray(); UniTileTile tile = layer.tileset.tiles[selectedTile]; if(tile!=null) { this.prefab = tile.prefab; this.name = tile.name; this.value = tile.value; this.boxCollider = tile.boxCollider; this.resizable = tile.resizable; this.boxLayer = tile.boxLayer; this.boxMaterial = tile.boxMaterial; this.boxTag = tile.boxTag; this.boxDepth = tile.boxDepth; this.boxPrefab = tile.boxPrefab; this.prefabOffset = tile.prefabOffset; if(this.prefab == null) this.prefabOffset = new Vector2(this.layer.tileSpacing.x / 2f, this.layer.tileSpacing.y / 2f); this.customBoxDimensions = tile.customBoxDimensions; if(!this.customBoxDimensions) this.boxDimensions = new Rect(0, 0, this.layer.tileSpacing.x, this.layer.tileSpacing.y); else this.boxDimensions = tile.boxDimensions; if(tile.properties!=null) { this.properties = new UniTileProperty[tile.properties.Length]; for(int i=0; i<this.properties.Length;i++) { this.properties[i] = new UniTileProperty(); this.properties[i].key = tile.properties[i].key; this.properties[i].value = tile.properties[i].value; } } else { this.properties = new UniTileProperty[0]; } } } if(this.properties == null) this.properties = new UniTileProperty[0]; this.propertiesLength = this.properties.Length; if(this.name == null) this.name = ""; }
public void OnInspectorGUI(TileLayer layer, UniTileTemplate selection, TileLayerEditor editor) { if (layer.material == null) { return; } useScrollView = EditorGUILayout.Toggle("Use scrollview", useScrollView); float w = Mathf.Min(Screen.width, layer.material.mainTexture.width); //Mathf.Min(rect.width,layer.material.mainTexture.width); float scale = w / layer.material.mainTexture.width; float h = layer.material.mainTexture.height * scale; Rect rect = GUILayoutUtility.GetLastRect(); float top = rect.yMax; int tilesX = (int)Mathf.Floor((float)layer.material.mainTexture.width / (layer.tileSize.x + layer.borderSize.x * 2f)); int tileX1 = (int)Mathf.Floor((float)selection.selectedTile.id % (float)tilesX); int tileY1 = (int)Mathf.Floor((float)selection.selectedTile.id / (float)tilesX); int tileX2 = (int)Mathf.Floor((float)selection.selectedTileEnd.id % (float)tilesX); int tileY2 = (int)Mathf.Floor((float)selection.selectedTileEnd.id / (float)tilesX); int tileXMin = Mathf.Min(tileX1, tileX2); int tileYMin = Mathf.Min(tileY1, tileY2); int tileXMax = Mathf.Max(tileX1, tileX2); int tileYMax = Mathf.Max(tileY1, tileY2); int tileWidth = tileXMax - tileXMin + 1; int tileHeight = tileYMax - tileYMin + 1; float tempTop = top; if (useScrollView) { scale = 1; w = layer.material.mainTexture.width; h = layer.material.mainTexture.height; float scrollWidth = Screen.width - 25; float scrollHeight = h + 10; scrollPos = EditorGUILayout.BeginScrollView(scrollPos, false, false, GUILayout.Height(scrollHeight), GUILayout.Width(scrollWidth)); GUILayout.Label("", GUILayout.Width(scrollWidth), GUILayout.Height(scrollHeight)); tempTop = 0; } else { GUILayout.Label("", GUILayout.Width(w), GUILayout.Height(h)); } GUI.DrawTexture(new Rect(0, tempTop, w, h), layer.material.mainTexture); if (selection.selectedTile.id >= 0 && !selection.tilesPicked) { GUIStyle style = new GUIStyle(GUI.skin.customStyles[0]); style.normal.background = SelectionTexture; GUI.Box( new Rect( (tileXMin * (layer.tileSize.x + layer.borderSize.x * 2f) + layer.borderSize.x) * scale, tempTop + (tileYMin * (layer.tileSize.y + layer.borderSize.y * 2f) + layer.borderSize.y) * scale, (tileWidth * (layer.tileSize.x + layer.borderSize.x * 2f) - layer.borderSize.x * 2f) * scale, (tileHeight * (layer.tileSize.y + layer.borderSize.y * 2f) - layer.borderSize.y * 2f) * scale ), "", style ); } if (useScrollView) { EditorGUILayout.EndScrollView(); } if (Event.current != null) { if (Event.current.type == EventType.MouseDown) { if (Event.current.button == 0) { Vector2 pos = Event.current.mousePosition; if (useScrollView) { pos += scrollPos; } this.selecting = true; selection.tilesPicked = false; if (pos.x >= 0 && pos.x <= layer.material.mainTexture.width * scale && pos.y >= top && pos.y <= top + layer.material.mainTexture.height * scale) { editor.selectedTemplate = -1; selection.selectedTile.id = selection.selectedTileEnd.id = (int)Mathf.Floor((pos.x / scale) / (layer.tileSize.x + layer.borderSize.x * 2f)) + (int)(Mathf.Floor((pos.y - top) / (scale * (layer.tileSize.y + layer.borderSize.y * 2f))) * tilesX); if (Event.current.clickCount == 2) { TileEditorWindow window = TileEditorWindow.CreateInstance <TileEditorWindow>(); window.Setup(editor, selection.selectedTilesList); window.ShowUtility(); } } } else { selection.tilesPicked = false; selection.selectedTile.id = -1; selection.selectedTileEnd.id = -1; } } if (Event.current.type == EventType.mouseDrag) { if (selecting) { Vector2 pos = Event.current.mousePosition; if (useScrollView) { pos += scrollPos; } if (pos.x >= 0 && pos.x <= layer.material.mainTexture.width * scale && pos.y >= top && pos.y <= top + layer.material.mainTexture.height * scale) { selection.selectedTileEnd.id = (int)Mathf.Floor((pos.x / scale) / (layer.tileSize.x + layer.borderSize.x * 2f)) + (int)(Mathf.Floor((pos.y - top) / (scale * (layer.tileSize.y + layer.borderSize.y * 2f))) * tilesX); selection.tilesPicked = false; selection.selectedTilesWidth = tileXMax - tileXMin + 1; selection.selectedTilesList = new TileInstance[(tileXMax - tileXMin + 1) * (tileYMax - tileYMin + 1)]; HandleUtility.Repaint(); if (selection.selectedTile.id >= 0) { for (int i = tileXMin; i <= tileXMax; i++) { for (int j = tileYMin; j <= tileYMax; j++) { int x = i - tileXMin; int y = j - tileYMin; selection.selectedTilesList[x + y * selection.selectedTilesWidth] = new TileInstance(i + j * tilesX); } } } else { selection.selectedTilesList[0] = new TileInstance(-1); } UniTileMarker.Instance.Init(selection); } } } if (Event.current.type == EventType.MouseUp) { selection.tilesPicked = false; selection.selectedTilesWidth = tileXMax - tileXMin + 1; selection.selectedTilesList = new TileInstance[(tileXMax - tileXMin + 1) * (tileYMax - tileYMin + 1)]; HandleUtility.Repaint(); if (selection.selectedTile.id >= 0) { for (int i = tileXMin; i <= tileXMax; i++) { for (int j = tileYMin; j <= tileYMax; j++) { int x = i - tileXMin; int y = j - tileYMin; selection.selectedTilesList[x + y * selection.selectedTilesWidth] = new TileInstance(i + j * tilesX); } } } else { selection.selectedTilesList[0] = new TileInstance(-1); } UniTileMarker.Instance.Init(selection); this.selecting = false; } } }
private void TemplatePopup(TileLayer layer, TileLayerEditor editor) { if(layer.material!=null && layer.tileset != null && layer.tileset.templates != null) { int length= 1 + layer.tileset.templates.Length; string[] templates = new string[length]; templates[0]="Choose a template"; for(int i=0;i<layer.tileset.templates.Length;i++) { templates[i+1] = i.ToString() + " - " + layer.tileset.templates[i].name; } if(Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Tab && layer.tileset.templates.Length > 0) { if(Event.current.modifiers == EventModifiers.Shift) editor.selectedTemplate = editor.selectedTemplate<=0 ? layer.tileset.templates.Length-1:editor.selectedTemplate-1; else editor.selectedTemplate = (editor.selectedTemplate+1)%layer.tileset.templates.Length; editor.SelectTemplate(layer.tileset.templates[editor.selectedTemplate]); } EditorGUILayout.BeginHorizontal(); GUILayout.Label("Tab", GUILayout.ExpandWidth(false), GUILayout.MinWidth(20)); int selection = EditorGUILayout.Popup(Mathf.Min(editor.selectedTemplate + 1,length-1), templates); EditorGUILayout.EndHorizontal(); if (selection>0 && editor.selectedTemplate != selection - 1) { editor.selectedTemplate = selection - 1; editor.SelectTemplate(layer.tileset.templates[editor.selectedTemplate]); } } }
public void OnSceneGUI(TileLayer layer, UniTileTemplate selection, TileLayerEditor editor) { DrawGrid(layer, selection.selectedTilesList, selection.selectedTilesWidth); MouseInfo(selection); GUI.Box(new Rect (10, 10, 170, 60), ""); GUILayout.BeginArea(new Rect (20, 20, 150, 40)); LayerSelect(layer); GUILayout.EndArea(); if(justSwitchedLayers) return; Handles.BeginGUI(); GUI.Box(new Rect (Screen.width - 160, Screen.height - 90, 160, 70), ""); GUILayout.BeginArea(new Rect (Screen.width - 150, Screen.height - 80, 140, 50)); CreateObjectButton(layer); TemplatePopup(layer,editor); GUILayout.EndArea(); if(Event.current.keyCode == KeyCode.H && Event.current.type == EventType.KeyUp) { for(int i = 0; i < selection.selectedTilesList.Length; i++) { if(selection.selectedTilesList[i] != null) { selection.selectedTilesList[i].flippedHorizontally = !selection.selectedTilesList[i].flippedHorizontally; } } TileInstance [] temp = new TileInstance[selection.selectedTilesList.Length]; for(int i = 0; i < selection.selectedTilesWidth; i++) { for(int j = 0; j < selection.selectedTilesHeight; j++) { int x1 = i; int x2 = selection.selectedTilesWidth - x1 - 1; int index1 = x1 + j * selection.selectedTilesWidth; int index2 = x2 + j * selection.selectedTilesWidth; temp[index2] = selection.selectedTilesList[index1]; } } selection.selectedTilesList = temp; UniTileMarker.Instance.Init(selection); editor.selectedTemplate = -1; } if(Event.current.keyCode == KeyCode.V && Event.current.type == EventType.KeyUp) { for(int i = 0; i < selection.selectedTilesList.Length; i++) { if(selection.selectedTilesList[i] != null) { selection.selectedTilesList[i].flippedVertically = !selection.selectedTilesList[i].flippedVertically; } } TileInstance [] temp = new TileInstance[selection.selectedTilesList.Length]; for(int i = 0; i < selection.selectedTilesWidth; i++) { for(int j = 0; j < selection.selectedTilesHeight; j++) { int y1 = j; int y2 = selection.selectedTilesHeight - y1 - 1; int index1 = i + y1 * selection.selectedTilesWidth; int index2 = i + y2 * selection.selectedTilesWidth; temp[index2] = selection.selectedTilesList[index1]; } } selection.selectedTilesList = temp; UniTileMarker.Instance.Init(selection); editor.selectedTemplate = -1; } if(Event.current.keyCode == KeyCode.T && Event.current.type == EventType.KeyUp) { for(int i = 0; i < selection.selectedTilesList.Length; i++) { if(selection.selectedTilesList[i] != null) { selection.selectedTilesList[i].rotation++; if((uint)selection.selectedTilesList[i].rotation > 3) selection.selectedTilesList[i].rotation = TileInstance.Rotation.r0; } } TileInstance [] temp = new TileInstance[selection.selectedTilesList.Length]; int newWidth = selection.selectedTilesHeight; for(int i = 0; i < selection.selectedTilesWidth; i++) { for(int j = 0; j < selection.selectedTilesHeight; j++) { int x1 = i; int y1 = j; int index1 = x1 + y1 * selection.selectedTilesWidth; int x2 = selection.selectedTilesHeight - y1 - 1; int y2 = x1; int index2 = x2 + y2 * newWidth; temp[index2] = selection.selectedTilesList[index1]; } } selection.selectedTilesList = temp; selection.selectedTilesWidth = newWidth; UniTileMarker.Instance.Init(selection); editor.selectedTemplate = -1; } Handles.EndGUI(); }
private void OnInspectorGUI_Properties(TileLayer layer) { EditorGUILayout.BeginVertical(); showProperties = EditorGUILayout.Foldout(showProperties, "Layer Properties"); if (layer.material != null && layer.tileset == null) { this.GetTileset(layer); } if (showProperties) { propertiesEditor.OnInspectorGUI(layer); if (layer.material != null) { GUILayout.BeginHorizontal(); int length = 2 + layer.tileset.templates.Length; string[] templates = new string[length]; templates[0] = "Choose a template"; for (int i = 0; i < layer.tileset.templates.Length; i++) { templates[i + 1] = i.ToString() + " - " + layer.tileset.templates[i].name; } templates[length - 1] = "Add current selection as a template"; int newSelectedTemplate = EditorGUILayout.Popup("Template", Mathf.Min(selectedTemplate + 1, length - 2), templates); selectedTemplate = newSelectedTemplate - 1; if (newSelectedTemplate == length - 1) { UniTileTemplate[] newList = new UniTileTemplate[layer.tileset.templates.Length + 1]; for (int i = 0; i < layer.tileset.templates.Length; i++) { newList[i] = layer.tileset.templates[i]; } newList[newList.Length - 1] = new UniTileTemplate(); newList[newList.Length - 1].Init(selection); layer.tileset.templates = newList; } else if (newSelectedTemplate > 0) { //layer.tileset.templates[selection - 1].Use(); SelectTemplate(layer.tileset.templates[newSelectedTemplate - 1]); } if (selectedTemplate >= 0 && selectedTemplate < layer.tileset.templates.Length && layer.tileset.templates[selectedTemplate] != null) { layer.tileset.templates[selectedTemplate].name = EditorGUILayout.TextField(layer.tileset.templates[selectedTemplate].name); if (GUILayout.Button("Delete")) { List <UniTileTemplate> newList = new List <UniTileTemplate>(); foreach (UniTileTemplate t in layer.tileset.templates) { if (t != layer.tileset.templates[selectedTemplate]) { newList.Add(t); } } layer.tileset.templates = newList.ToArray(); } } GUILayout.EndHorizontal(); UniTileMarker.Instance.Init(this.selection); } m_Object.Update(); EditorGUILayout.PropertyField(material); if (layer.material != material.objectReferenceValue) { layer.material = (Material)material.objectReferenceValue; m_Object.ApplyModifiedProperties(); this.GetTileset(layer); } } EditorGUILayout.EndVertical(); if (showProperties) { int x = 5; GUILayout.BeginHorizontal(); if (layer.parent == null) { if (GUILayout.Button(new GUIContent("Rebuild map", "Apply changes to the size properties."), GUILayout.Width(80), GUILayout.Height(30))) { //Undo.RegisterSceneUndo("Resize map"); Vector2 prevLayerSize = layer.layerSize; propertiesEditor.SetPropertiesTo(layer); for (int i = 0; i < layer.transform.childCount; i++) { TileLayer child = layer.transform.GetChild(i).GetComponent <TileLayer>(); if (child != null) { propertiesEditor.SetPropertiesTo(child); } } this.RebuildMap(prevLayerSize); UniTileMarker.Instance.Init(selection); } x += 80; if (GUILayout.Button(new GUIContent("Revert", "Cancel changes to the size properties."), GUILayout.Width(50), GUILayout.Height(30))) { propertiesEditor.SetPropertiesFrom(layer); } x += 50; } if (GUILayout.Button(new GUIContent("Clear layer", "Erase all tile data from the layer."), GUILayout.Width(70), GUILayout.Height(30))) { //Undo.RegisterSceneUndo("Clear layer"); this.ClearMap(); } x += 70; if (GUILayout.Button(new GUIContent("Create objects", "Instantiate tile prefabs and box colliders."), GUILayout.Width(90), GUILayout.Height(30))) { //Undo.RegisterSceneUndo("Clear layer"); TileLayerEditor.InstantiatePrefabs(layer); } x += 90; if (layer.parent == null && layer.material != null && layer.material.mainTexture != null) { if (GUILayout.Button(new GUIContent("Padder", "Add padding to textures."), GUILayout.Width(50), GUILayout.Height(30))) { PadderEditorWindow window = PadderEditorWindow.CreateInstance <PadderEditorWindow>(); window.Setup((Texture2D)layer.material.mainTexture, layer.tileSize, layer.borderSize); window.ShowUtility(); } } x += 50; if (selection.selectedTilesList.Length > 0 && layer.material != null && layer.material.mainTexture != null) { if (GUILayout.Button(new GUIContent("Edit Tiles", "Edit currently selected tiles."), GUILayout.Width(70), GUILayout.Height(30))) { TileEditorWindow window = TileEditorWindow.CreateInstance <TileEditorWindow>(); window.Setup(this, selection.selectedTilesList); window.ShowUtility(); } } GUILayout.EndHorizontal(); } }