public void Erase(STETilemap tilemap, Vector2 localPos) { int minGridX = m_brushTilemap.MinGridX; int minGridY = m_brushTilemap.MinGridY; int maxGridX = m_brushTilemap.MaxGridX; int maxGridY = m_brushTilemap.MaxGridY; if (IsUndoEnabled) { #if UNITY_EDITOR Undo.RecordObject(tilemap, STETilemap.k_UndoOpName + tilemap.name); Undo.RecordObjects(tilemap.GetComponentsInChildren <TilemapChunk>(), STETilemap.k_UndoOpName + tilemap.name); #endif } tilemap.IsUndoEnabled = IsUndoEnabled; int dstGy = BrushUtil.GetGridY(localPos, tilemap.CellSize); for (int gridY = minGridY; gridY <= maxGridY; ++gridY, ++dstGy) { int dstGx = BrushUtil.GetGridX(localPos, tilemap.CellSize); for (int gridX = minGridX; gridX <= maxGridX; ++gridX, ++dstGx) { tilemap.SetTileData(dstGx, dstGy, Tileset.k_TileData_Empty); } } tilemap.UpdateMeshImmediate(); tilemap.IsUndoEnabled = false; }
public void CutRect(STETilemap tilemap, int startGridX, int startGridY, int endGridX, int endGridY) { if (IsUndoEnabled) { #if UNITY_EDITOR Undo.RecordObject(tilemap, STETilemap.k_UndoOpName + tilemap.name); Undo.RecordObjects(tilemap.GetComponentsInChildren <TilemapChunk>(), STETilemap.k_UndoOpName + tilemap.name); #endif } tilemap.IsUndoEnabled = IsUndoEnabled; TileObjSourceTilemap = tilemap; TileObjSourceTilemapOffset = new Vector2Int(startGridX, startGridY); for (int gridY = startGridY; gridY <= endGridY; ++gridY) { for (int gridX = startGridX; gridX <= endGridX; ++gridX) { BrushTilemap.SetTileData(gridX - startGridX, gridY - startGridY, tilemap.GetTileData(gridX, gridY)); tilemap.SetTileData(gridX, gridY, Tileset.k_TileData_Empty); } } TileObjSourceTilemap = null; BrushTilemap.UpdateMeshImmediate(); tilemap.UpdateMeshImmediate(); tilemap.IsUndoEnabled = false; }
public void FloodFill(STETilemap tilemap, Vector2 localPos) { if (IsUndoEnabled) { #if UNITY_EDITOR Undo.RecordObject(tilemap, STETilemap.k_UndoOpName + tilemap.name); Undo.RecordObjects(tilemap.GetComponentsInChildren <TilemapChunk>(), STETilemap.k_UndoOpName + tilemap.name); #endif } tilemap.IsUndoEnabled = IsUndoEnabled; TilemapDrawingUtils.FloodFill(tilemap, localPos, GetBrushPattern()); tilemap.UpdateMeshImmediate(); tilemap.IsUndoEnabled = false; }
public void Paint(STETilemap tilemap, Vector2 localPos, bool skipEmptyTiles = false) { int minGridX = m_brushTilemap.MinGridX; int minGridY = m_brushTilemap.MinGridY; int maxGridX = m_brushTilemap.MaxGridX; int maxGridY = m_brushTilemap.MaxGridY; if (IsUndoEnabled) { #if UNITY_EDITOR Undo.RecordObject(tilemap, STETilemap.k_UndoOpName + tilemap.name); Undo.RecordObjects(tilemap.GetComponentsInChildren <TilemapChunk>(), STETilemap.k_UndoOpName + tilemap.name); #endif } tilemap.IsUndoEnabled = IsUndoEnabled; int dstGy = BrushUtil.GetGridY(localPos, tilemap.CellSize); bool doPaintEmpty = m_brushTilemap.GridWidth == 1 && m_brushTilemap.GridHeight == 1 || // don't copy empty tiles m_brushPattern != null && m_brushPattern.GetLength(0) == 1 && m_brushPattern.GetLength(1) == 1;// unless the brush size is one doPaintEmpty &= !skipEmptyTiles; TileObjSourceTilemap = BrushTilemap; TileObjSourceTilemapOffset = new Vector2Int(-BrushUtil.GetGridX(localPos, tilemap.CellSize), -dstGy); for (int gridY = minGridY; gridY <= maxGridY; ++gridY, ++dstGy) { int dstGx = BrushUtil.GetGridX(localPos, tilemap.CellSize); for (int gridX = minGridX; gridX <= maxGridX; ++gridX, ++dstGx) { uint tileData = m_brushTilemap.GetTileData(gridX, gridY); if ( doPaintEmpty || tileData != Tileset.k_TileData_Empty ) { tilemap.SetTileData(dstGx, dstGy, tileData); } } } tilemap.UpdateMeshImmediate(); TileObjSourceTilemap = null; tilemap.IsUndoEnabled = false; }
void RegisterTilemapUndo(STETilemap tilemap) { Undo.RecordObject(tilemap, "Tilemap Painting " + tilemap.name); Undo.RecordObjects(tilemap.GetComponentsInChildren <TilemapChunk>(), "Tilemap Painting " + tilemap.name); }