public override void OnEnter() { var go = Fsm.GetOwnerDefaultTarget(gameObject); if (UpdateCache(go)) { STETilemap tilemap = cachedComponent as STETilemap; int gridX; int gridY; if ((ePositionType)positionType.Value == ePositionType.LocalPosition) { gridX = TilemapUtils.GetGridX(tilemap, startPaintingPosition.Value); gridY = TilemapUtils.GetGridY(tilemap, startPaintingPosition.Value); } else// if ((ePositionType)positionType.Value == ePositionType.GridPosition) { gridX = (int)startPaintingPosition.Value.x; gridY = (int)startPaintingPosition.Value.y; } if (tileSelection.selectionData.Length == 1) { tilemap.SetTileData(gridX, gridY, (uint)tileSelection.selectionData[0]); } else { int w = tileSelection.rowLength; int h = tileSelection.columnLength; int xf = -(w >> 1) + 1 - (w & 1); int yf = -(h >> 1) + 1 - (h & 1); for (int y = h - 1, idx = 0; y >= 0; --y) { for (int x = 0; x < w; ++x, ++idx) { tilemap.SetTileData(gridX + x + xf, gridY + y + yf, (uint)tileSelection.selectionData[idx]); } } } tilemap.UpdateMesh(); } Finish(); }
public static void DeserializeTilemap(TilemapSerializedData data, STETilemap tilemap) { foreach (TilemapSerializedData.TileData dataItem in data.tileDataList) { tilemap.SetTileData(dataItem.gridX, dataItem.gridY, dataItem.tileData); // NOT SURE ABOUT THIS LINE. } tilemap.UpdateMesh(); //TilemapUtils.IterateTilemapWithAction(tilemap, action); //return data; }
private void DrawTileToLayers() { bool fx = false; bool fy = false; int rot = 0; for (int i = 0; i < this.pyxelTilemap.layers.Length; i++) { STETilemap map = pyxelEdit.transform.Find(this.pyxelTilemap.layers[i].name).GetComponent <STETilemap>(); for (int t = 0; t < this.pyxelTilemap.layers[i].tiles.Length; t++) { int tileID = this.pyxelTilemap.layers[i].tiles[t].tile; rot = this.pyxelTilemap.layers[i].tiles[t].rot; fx = this.pyxelTilemap.layers[i].tiles[t].flipX; fy = (rot == 2) ? true : false; if (rot == 2) { fx = !fx; } int x = this.pyxelTilemap.layers[i].tiles[t].x; int y = (this.pyxelTilemap.tileshigh - this.pyxelTilemap.layers[i].tiles[t].y) - 1; if (tileID < 0) { map.Erase(x, y); } else { TileData tileData = new TileData(); tileData.brushId = 0; tileData.tileId = this.pyxelTilemap.layers[i].tiles[t].tile; tileData.flipHorizontal = fx; tileData.flipVertical = fy; map.SetTileData(x, y, tileData.BuildData()); } } map.UpdateMesh(); } }
protected override void ProceedUse(List <Vector2> pTiles) { NeedBase energyNeed = PlayerNeedManager.Instance.GetNeed("Energy"); energyNeed.Change(-CurrentTool.EnergyCost * (ToolCursorManager.Instance.CursorIndex + 1)); List <Vector2> tiles = pTiles; foreach (Vector2 tile in tiles) { if (CheckTileValidity(tile)) { STETilemap affectedLayer = GetTileAffectedLayer(tile); uint rawData = affectedLayer.GetTileData(tile); TileData tileData = new TileData(rawData); foreach (AffectedTerrain terrain in AffectedTerrains) { if (affectedLayer.name == terrain.LayerName) { tileData.brushId = terrain.BrushId; } } if (affectedLayer.name == "Dirt") { FarmPlot plot = GetPlot(tile); if (plot != null) { Destroy(plot.gameObject); } } affectedLayer.SetTileData(tile, tileData.BuildData()); affectedLayer.UpdateMeshImmediate(); FindObjectOfType <PlayerInventory>().RemoveFromStack(Toolbar.Instance.SelectedSlot.ReferencedItemStack, 1); if (Toolbar.Instance.SelectedSlot.ReferencedItemStack == null) { return; } } } }
public static void ImportTmxIntoTheScene(string tmxFilePath, Tileset tileset) { string tmxFileName = Path.GetFileNameWithoutExtension(tmxFilePath); TmxTilemap tilemap = TmxTilemap.LoadFromFile(tmxFilePath); if (tilemap.DicTilesetTex2D.Values.Count == 0) { return; } GameObject tilemapGroupObj = new GameObject(tmxFileName); TilemapGroup tilemapGroup = tilemapGroupObj.AddComponent <TilemapGroup>(); int orderInLayer = 0; foreach (TmxLayer layer in tilemap.Map.Layers) { GameObject tilemapObj = new GameObject(layer.Name); tilemapObj.transform.SetParent(tilemapGroupObj.transform); STETilemap tilemapBhv = tilemapObj.AddComponent <STETilemap>(); tilemapBhv.Tileset = tileset; tilemapBhv.OrderInLayer = orderInLayer++; tilemapBhv.IsVisible = layer.Visible; tilemapBhv.TintColor = new Color(1f, 1f, 1f, layer.Opacity); for (int gx = 0; gx < layer.Width; gx++) { for (int gy = 0; gy < layer.Height; gy++) { int tileIdx = gy * layer.Width + gx; TmxLayerTile tile = layer.Tiles[tileIdx]; //skip non valid tiles if (tile.GId == 0) { continue; } int tileId = tilemap.GetTileAbsoluteId(tile); uint tileData = tileId >= 0 ? (uint)tileId : Tileset.k_TileData_Empty; if (tileData != Tileset.k_TileData_Empty) { // add tile flags if ((tile.GId & k_FLIPPED_HORIZONTALLY_FLAG) != 0) { tileData |= Tileset.k_TileFlag_FlipH; } if ((tile.GId & k_FLIPPED_VERTICALLY_FLAG) != 0) { tileData |= Tileset.k_TileFlag_FlipV; } if ((tile.GId & k_FLIPPED_DIAGONALLY_FLAG) != 0) { tileData |= Tileset.k_TileFlag_Rot90; } //convert from tiled flip diagonal to rot90 if ((tileData & Tileset.k_TileFlag_Rot90) != 0) { if (((tile.GId & k_FLIPPED_HORIZONTALLY_FLAG) != 0) != ((tile.GId & k_FLIPPED_VERTICALLY_FLAG) != 0)) { tileData ^= Tileset.k_TileFlag_FlipH; } else { tileData ^= Tileset.k_TileFlag_FlipV; } } } tilemapBhv.SetTileData(gx, layer.Height - gy - 1, tileData); } } tilemapBhv.UpdateMesh(); } tilemapGroup.Refresh(); }
private void SetFlipForTile(STETilemap tilemap, Vector2 pos) { tilemap.SetTileData(pos, tilemap.GetTileData(pos) | Tileset.k_TileFlag_FlipH); }
void SetTileData(Vector2 pTileWorldPos, TileData pTileData) { OccupiedLayer.SetTileData(pTileWorldPos, pTileData.BuildData()); OccupiedLayer.UpdateMeshImmediate(); }