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>();
        }
    }
Exemple #2
0
    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);
    }
Exemple #3
0
 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;
    }
Exemple #5
0
    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;
    }