public static TileWithFacing Face(this TileWithFacing startVec, HexDirection direction) { TileCoords newFacing; if (HexMapHelper.GetTileShape(startVec.position) == TileShape.Hexagon) { newFacing = HexMapHelper.GetTileInHexDirection(startVec.position, startVec.facing, direction); } else { newFacing = GetNewTileWhenLeavingPentagon(startVec.position, startVec.facing, direction, PentagonTraversalStrategy.LeanLeft); } return(new TileWithFacing() { position = startVec.position, facing = newFacing }); }
public static TileWithFacing Traverse(this TileWithFacing startVec, HexDirection direction, int steps = 1, PentagonTraversalStrategy strategy = PentagonTraversalStrategy.LeanLeft) { TileCoords currentTile = startVec.position; TileCoords currentFacing = startVec.facing; for (int step = 0; step < steps; step++) { TileCoords newTile; if (HexMapHelper.GetTileShape(currentTile) == TileShape.Hexagon) { newTile = HexMapHelper.GetTileInHexDirection(currentTile, currentFacing, direction); } else { //We're stepping out of a Pentagon using HexDirection. What do we do? newTile = GetNewTileWhenLeavingPentagon(currentTile, currentFacing, direction, strategy); } direction = HexDirection.Forward; if (HexMapHelper.GetTileShape(newTile) == TileShape.Hexagon) { currentFacing = HexMapHelper.GetTileInHexDirection(newTile, currentTile, HexDirection.Backward); } else { //We're stepping into a Pentagon with Hex Directions. What do we do? currentFacing = GetFacingWhenEnteringPentagon(currentTile, newTile, strategy); } currentTile = newTile; } return(new TileWithFacing() { position = currentTile, facing = currentFacing }); }