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; } } }
public void FinalizePaint(Vector2[] uvs, MapSegmentLayer layer) { layer.FinalizePaint(uvs); }
public Vector2[] StartPaint(MapSegmentLayer layer) { return(layer.StartPaint()); }
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); }
public void FinalizeNoUndoRedo(Vector2[] uvs, MapSegmentLayer layer) { MapSegment.FinalizePaint(uvs, layer); }