public void SetSelection(IntVector2 startPoint, IntVector2 endPoint, MapSegmentLayer mapSegmentLayer)
    {
        var tileSetLayer = mapSegmentLayer.TileSetLayer;

        var minWidth = Mathf.Min(startPoint.X, endPoint.X);
        var maxWidth = Mathf.Max(startPoint.X, endPoint.X);

        var minHeight = Mathf.Min(startPoint.Y, endPoint.Y);
        var maxHeight = Mathf.Max(startPoint.Y, endPoint.Y);

        var deltaWidth  = (maxWidth - minWidth) + 1;
        var deltaHeight = (maxHeight - minHeight) + 1;

        Width  = deltaWidth;
        Height = deltaHeight;

        var totalSize = deltaWidth * deltaHeight;

        InternalData = new int[totalSize];

        for (int y = 0; y < deltaHeight; y++)
        {
            for (int x = 0; x < deltaWidth; x++)
            {
                var tileSetX             = minWidth + x;
                var tileSetY             = minHeight + y;
                var currentTileIndex     = (tileSetY * tileSetLayer.TileSetWidth) + tileSetX;
                var currentInternalIndex = (y * deltaWidth) + x;

                InternalData[currentInternalIndex] = currentTileIndex;
            }
        }
    }
示例#2
0
 public void FinalizePaint(Vector2[] uvs, MapSegmentLayer layer)
 {
     layer.FinalizePaint(uvs);
 }
示例#3
0
 public Vector2[] StartPaint(MapSegmentLayer layer)
 {
     return(layer.StartPaint());
 }
示例#4
0
    public void ApplyChanges(MapSegmentLayer layer, GameObject gameObject, int layerIndex)
    {
        TileTypeCollection oldTiles = null;

        if (layer.TilesCollection != null)
        {
            oldTiles = layer.TilesCollection.Clone();
        }
        layer.TilesCollection = new TileTypeCollection(MapSegment.Width, MapSegment.Height);

        var tileSetLayer = layer.TileSetLayer;

        List <Vector3> vertices = new List <Vector3>();
        List <Vector2> uvs      = new List <Vector2>();
        List <int>     tris     = new List <int>();
        List <Vector3> normals  = new List <Vector3>();

        var  meshFilter = gameObject.GetComponent <MeshFilter>();
        Mesh mesh       = null;

        if (meshFilter.sharedMesh == null)
        {
            mesh = new Mesh();
        }
        else
        {
            mesh = meshFilter.sharedMesh;
            mesh.Clear();
        }

        var index = 0;

        for (int y = 0; y < MapSegment.Height; y++)
        {
            for (int x = 0; x < MapSegment.Width; x++)
            {
                int tmpTileType = 0;
                if (oldTiles != null)
                {
                    tmpTileType = TranslateTilePosition(oldTiles, x, y);
                }

                layer.TilesCollection.SetTileType(x, y, tmpTileType);
                AddVertices(x, y, vertices, GridTileSize);
                AddUvs(layer.TileSetLayer, tmpTileType, uvs);
                index = AddTris(index, tris);
                AddNormals(normals);
            }
        }

        mesh.vertices  = vertices.ToArray();
        mesh.uv        = uvs.ToArray();
        mesh.triangles = tris.ToArray();
        mesh.normals   = normals.ToArray();

        if (meshFilter.GetComponent <Renderer>().sharedMaterial != null)
        {
            meshFilter.GetComponent <Renderer>().sharedMaterial.mainTexture = tileSetLayer.Texture;
        }
        else
        {
            meshFilter.GetComponent <Renderer>().sharedMaterial             = new Material(Shader.Find("Sprites/Default"));
            meshFilter.GetComponent <Renderer>().sharedMaterial.mainTexture = tileSetLayer.Texture;
        }

        var totalWidth  = MapSegment.Width * GridTileSize.x;
        var totalHeight = MapSegment.Height * GridTileSize.y;
        var boxCollider = gameObject.GetComponent <BoxCollider>();

        UpdateBoxColliderSize(boxCollider, totalWidth, totalHeight);

        Undo.RegisterCompleteObjectUndo(meshFilter, "Updated map segment mesh");
        meshFilter.mesh = null;
        Undo.RegisterCompleteObjectUndo(meshFilter, "Updated map segment mesh");
        meshFilter.mesh = mesh;

        // Update the game object
        gameObject.hideFlags = HideFlags.HideInHierarchy;

        EditorUtility.SetDirty(layer);
    }
示例#5
0
 public void FinalizeNoUndoRedo(Vector2[] uvs, MapSegmentLayer layer)
 {
     MapSegment.FinalizePaint(uvs, layer);
 }