public override void OnInspectorGUI() { UniTileManager manager = this.target as UniTileManager; if (this.target.name != "UniTileManager") { this.target.name = "UniTileManager"; } Rect rect = EditorGUILayout.BeginVertical(); EditorGUILayout.EndVertical(); if (GUILayout.Button("Add tile layer")) { manager.layerCount++; GameObject g = new GameObject("Layer " + manager.layerCount); TileLayer tl = g.AddComponent <TileLayer>(); if (manager.lastLayer != null) { tl.material = manager.lastLayer.material; } // todo: add other properties manager.lastLayer = tl; } if (GUILayout.Button("Add object layer")) { manager.objectLayerCount++; GameObject g = new GameObject("Object Layer " + manager.objectLayerCount); g.AddComponent <ObjectLayer>(); } }
void OnEnable() { Tools.current = Tool.View; TileLayer layer = target as TileLayer; if (layer == null) { return; } UniTileManager manager = UniTileManager.Reset(); manager.activeLayer = layer; manager.lastLayer = layer; // migrate templates from 1.1 to 1.2 // this call does nothing if there are no 1.1 templates remaining manager.MigrateTemplates(); manager.MigrateTiles(); propertiesEditor.OnEnable(layer); m_Object = new SerializedObject(target); material = m_Object.FindProperty("material"); selection.Clear(); UniTileMarker.Instance.Init(selection); }
public static UniTileManager Reset() { // Removes the reference to the manager // This seems to be necessary due to a problem where a new instance is actually created when undoing something, while the reference was still pointing to the old one (which was no longer in the scene). // (Gave me quite a headache xD) _instance = null; return(instance); }
void OnEnable() { Tools.current = Tool.View; UniTileManager manager = UniTileManager.instance; ObjectLayer layer = target as ObjectLayer; if (layer == null) { return; } manager.activeObjectLayer = layer; }
void OnDisable() { UniTileManager.Reset(); if (UniTileMarker.Instance != null) { DestroyImmediate(UniTileMarker.Instance.meshFilter.sharedMesh); DestroyImmediate(UniTileMarker.Instance.gameObject); } UniTileManager.instance.activeLayer = null; UniTileManager manager = UniTileManager.Reset(); manager.MigrateTemplates(); manager.MigrateTiles(); tilesetEditor.OnDisable(); }
void OnDisable() { UniTileManager manager = UniTileManager.instance; manager.activeObjectLayer = null; }
void OnSceneGUI() { Tools.current = Tool.View; ObjectLayer layer = target as ObjectLayer; if (layer == null) { return; } UniTileManager manager = UniTileManager.instance; if (manager == null) { return; } if (EditorWindow.mouseOverWindow) { Vector3 pos = GetCoordinates(); if (Event.current.type == EventType.mouseDown) { if (Event.current.button == 0) { layer.selected = this.Select(pos); if (layer.selected != null && Event.current.modifiers.ToString() == "Control") { //Undo.RegisterSceneUndo("Delete object "+layer.selected.name); DestroyImmediate(layer.selected.gameObject); layer.selected = null; } } } if (Event.current.type == EventType.mouseUp) { if (Event.current.button == 0) { if (layer.selected != null && layer.snapToGrid) { //Undo.RegisterSceneUndo("Move "+layer.selected.name); layer.selected.transform.localPosition = new Vector3(Mathf.Round((pos.x - layer.gridOffset.x - selectionOffset.x) / layer.gridSize.x) * layer.gridSize.x + layer.gridOffset.x, Mathf.Round((pos.y - layer.gridOffset.y - selectionOffset.y) / layer.gridSize.y) * layer.gridSize.y + layer.gridOffset.y, layer.selected.transform.localPosition.z); } this.Repaint(); } } if (Event.current.type == EventType.dragPerform || Event.current.type == EventType.DragExited || Event.current.type == EventType.dragUpdated || Event.current.type == EventType.mouseDrag) { if (Event.current.button == 0 && layer.selected != null) { Event.current.Use(); //Undo.RegisterSceneUndo("Move "+layer.selected.name); layer.selected.transform.localPosition = new Vector3(pos.x, pos.y, layer.selected.transform.localPosition.z) - selectionOffset; } } HandleUtility.Repaint(); } halfPoint = GetCoordinates(new Vector2(Screen.width / 2, Screen.height / 2)); }
public void Init(UniTileTemplate template) { if (this.meshFilter.sharedMesh != null) { DestroyImmediate(this.meshFilter.sharedMesh); } UniTileManager manager = UniTileManager.instance; TileLayer layer = manager.activeLayer; if (layer.material == null || layer.material.mainTexture == null) { return; } if (layer.tileSpacing == new Vector2(-1, -1)) { layer.tileSpacing = layer.tileSize; } this.meshRenderer.material = layer.material; Mesh m = new Mesh(); int count = template.selectedTilesList.Length; Vector3 [] vertices = new Vector3[4 * count]; int [] triangles = new int[6 * count]; Vector2 [] uv = new Vector2[4 * count]; for (int i = 0; i < count; i++) { int tileX = i % template.selectedTilesWidth; int tileY = (int)Mathf.Floor(i / template.selectedTilesWidth); int x = (int)((tileX) * layer.tileSpacing.x); int y = (int)((-tileY) * layer.tileSpacing.y); // Triangles triangles[(i * 6) + 0] = (i * 4) + 0; triangles[(i * 6) + 1] = (i * 4) + 1; triangles[(i * 6) + 2] = (i * 4) + 2; triangles[(i * 6) + 3] = (i * 4) + 1; triangles[(i * 6) + 4] = (i * 4) + 3; triangles[(i * 6) + 5] = (i * 4) + 2; if (template.selectedTilesList[i] != null && template.selectedTilesList[i].id != -1) { vertices[(i * 4) + 0] = new Vector3(0 + (int)x, layer.tileSpacing.y + (int)y, 0); vertices[(i * 4) + 1] = new Vector3(layer.tileSpacing.x + (int)x, layer.tileSpacing.y + (int)y, 0); vertices[(i * 4) + 2] = new Vector3(0 + (int)x, 0 + (int)y, 0); vertices[(i * 4) + 3] = new Vector3(layer.tileSpacing.x + (int)x, 0 + (int)y, 0); int columns = (int)(layer.material.mainTexture.width / (layer.tileSize.x + layer.borderSize.x * 2f)); float uvx = Mathf.Floor((int)template.selectedTilesList[i].id % columns) * (layer.tileSize.x + layer.borderSize.x * 2f) + layer.borderSize.x; float uvy = Mathf.Floor((int)template.selectedTilesList[i].id / columns) * (layer.tileSize.x + layer.borderSize.y * 2f) + layer.borderSize.y; float uvx2 = uvx + layer.tileSize.x; float uvy2 = uvy + layer.tileSize.y; int id0 = (i * 4) + 0; int id1 = (i * 4) + 1; int id2 = (i * 4) + 2; int id3 = (i * 4) + 3; if (template.selectedTilesList[i].flippedHorizontally) { int temp = id0; id0 = id1; id1 = temp; temp = id2; id2 = id3; id3 = temp; } if (template.selectedTilesList[i].flippedVertically) { int temp = id0; id0 = id2; id2 = temp; temp = id1; id1 = id3; id3 = temp; } for (int j = 0; j < (uint)template.selectedTilesList[i].rotation; j++) { int temp = id0; id0 = id1; id1 = id3; id3 = id2; id2 = temp; } // UVS uv[id0] = new Vector2(uvx / (float)layer.material.mainTexture.width, 1f - uvy / (float)layer.material.mainTexture.height); //TL uv[id1] = new Vector2(uvx2 / (float)layer.material.mainTexture.width, 1f - uvy / (float)layer.material.mainTexture.height); //TR uv[id2] = new Vector2(uvx / (float)layer.material.mainTexture.width, 1f - uvy2 / (float)layer.material.mainTexture.height); //BL uv[id3] = new Vector2(uvx2 / (float)layer.material.mainTexture.width, 1f - uvy2 / (float)layer.material.mainTexture.height); //BR } } m.vertices = vertices; m.triangles = triangles; m.uv = uv; m.RecalculateNormals(); this.meshFilter.mesh = m; }