public TileTypeCollection Clone() { TileTypeCollection result = new TileTypeCollection(Width, Height); for (int i = 0; i < InternalData.Length; i++) { result.InternalData[i] = InternalData[i]; } return(result); }
public int TranslateTilePosition(TileTypeCollection tiles, int x, int y) { if (tiles == null) { return(0); } // Get the limits of the old tile array int maxWidth = tiles.Width; int maxHeight = tiles.Height; if (y >= maxHeight || x >= maxWidth) { return(0); } return(tiles.GetTileType(x, y)); }
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); }