private void ValSpecial(int x, int y) { Tile curTile = Tiles[x, y]; //validate chest entry exists if (Tile.IsChest(curTile.Type)) { if (IsAnchor(x, y) && GetChestAtTile(x, y, true) == null) { Chests.Add(new Chest(x, y)); } } //validate sign entry exists else if (Tile.IsSign(curTile.Type)) { if (IsAnchor(x, y) && GetSignAtTile(x, y, true) == null) { Signs.Add(new Sign(x, y, string.Empty)); } } //validate TileEntity else if (Tile.IsTileEntity(curTile.Type)) { if (IsAnchor(x, y) && GetTileEntityAtTile(x, y, true) == null) { var TE = TileEntity.CreateForTile(curTile, x, y, TileEntities.Count); TileEntities.Add(TE); } } }
public void Validate() { var t = TaskFactoryHelper.UiTaskFactory.StartNew(() => { for (int x = 0; x < TilesWide; x++) { OnProgressChanged(this, new ProgressChangedEventArgs((int)(x / (float)TilesWide * 100.0), "Validating World...")); for (int y = 0; y < TilesHigh; y++) { Tile curTile = Tiles[x, y]; if (curTile.Type == (int)TileType.IceByRod) { curTile.IsActive = false; } ValSpecial(x, y); } } }); foreach (Chest chest in Chests.ToArray()) { bool removed = false; for (int x = chest.X; x < chest.X + 1; x++) { for (int y = chest.Y; y < chest.Y + 1; y++) { if (!Tiles[x, y].IsActive || !Tile.IsChest(Tiles[x, y].Type)) { Chests.Remove(chest); removed = true; break; } } if (removed) { break; } } } foreach (Sign sign in Signs.ToArray()) { if (sign.Text == null) { Signs.Remove(sign); continue; } bool removed = false; for (int x = sign.X; x < sign.X + 1; x++) { for (int y = sign.Y; y < sign.Y + 1; y++) { if (!Tiles[x, y].IsActive || !Tile.IsSign(Tiles[x, y].Type)) { Signs.Remove(sign); removed = true; break; } } if (removed) { break; } } } foreach (TileEntity tileEntity in TileEntities.ToArray()) { int x = tileEntity.PosX; int y = tileEntity.PosY; var anchor = GetAnchor(x, y); if (!Tiles[anchor.X, anchor.Y].IsActive || !Tile.IsTileEntity(Tiles[anchor.X, anchor.Y].Type)) { TaskFactoryHelper.ExecuteUiTask(() => TileEntities.Remove(tileEntity)); } } OnProgressChanged(this, new ProgressChangedEventArgs(0, "Validating Complete...")); if (Chests.Count > World.MaxChests) { throw new ArgumentOutOfRangeException($"Chest Count is {Chests.Count} which is greater than {World.MaxChests}."); } if (Signs.Count > World.MaxSigns) { throw new ArgumentOutOfRangeException($"Sign Count is {Signs.Count} which is greater than {World.MaxSigns}."); } }
public bool IsTileEntity() { return(Tile.IsTileEntity(this.Type)); }