/// <summary> /// Sets the wall indices of a row of adjacent tiles to build a wall /// </summary> /// <param name="x">Horizontal position of the wall</param> /// <param name="y">Vertical position of the wall</param> /// <param name="face">Direction the exterior of the wall is facing</param> /// <param name="width">Width of the wall</param> /// <param name="offset">Distance from the ground</param> /// <param name="height">Height of the wall</param> /// <param name="textureFunc">Function deciding which texture to apply to a wall tile. /// Params are: int horzpos, int level, Face face, bool isInterior</param> /// <param name="tiles">Tile array to build the wall in</param> public static void BuildWall(TileBuilder[,] tiles, int x, int y, Face face, int width, int offset, int height, Func<int, int, Face, bool, ResourceLocator> textureFunc) { Face opp = face.GetOpposite(); int tw = tiles.GetLength(0); int th = tiles.GetLength(1); for (int j = 0; j < width; ++j) { int tx = x + (face == Face.North || face == Face.South ? j : 0); int ty = y + (face == Face.East || face == Face.West ? j : 0); if (tx >= 0 && tx < tw && ty >= 0 && ty < th) { for (int i = 0; i < height; ++i) { ResourceLocator tex = textureFunc(j, i + offset, face, true); if (tex != null) tiles[tx, ty].SetWall(face, i + offset, tex); } } tx += face.GetNormalX(); ty += face.GetNormalY(); if (tx >= 0 && tx < tw && ty >= 0 && ty < th) { for (int i = 0; i < height; ++i) { ResourceLocator tex = textureFunc(j, i + offset, face, false); if (tex != null) tiles[tx, ty].SetWall(opp, i + offset, tex); } } } }
/// <summary> /// Sets the wall indices of a row of adjacent tiles to build a wall /// </summary> /// <param name="x">Horizontal position of the wall</param> /// <param name="y">Vertical position of the wall</param> /// <param name="face">Direction the exterior of the wall is facing</param> /// <param name="width">Width of the wall</param> /// <param name="offset">Distance from the ground</param> /// <param name="height">Height of the wall</param> /// <param name="inTexture">Interior tile texture name</param> /// <param name="exTexture">Exterior tile texture name</param> /// <param name="tiles">Tile array to build the wall in</param> public static void BuildWall(TileBuilder[,] tiles, int x, int y, Face face, int width, int offset, int height, ResourceLocator inTexture, ResourceLocator exTexture) { int tw = tiles.GetLength(0); int th = tiles.GetLength(1); for (int j = 0; j < width; ++j) { int tx = x + (face == Face.North || face == Face.South ? j : 0); int ty = y + (face == Face.East || face == Face.West ? j : 0); if (tx >= 0 && tx < tw && ty >= 0 && ty < th) for (int i = 0; i < height; ++i) tiles[tx, ty].SetWall(face, i + offset, inTexture); tx += face.GetNormalX(); ty += face.GetNormalY(); if (tx >= 0 && tx < tw && ty >= 0 && ty < th) for (int i = 0; i < height; ++i) tiles[tx, ty].SetWall(face.GetOpposite(), i + offset, exTexture); } }