本文整理汇总了C#中TileMap.TopNeighbor方法的典型用法代码示例。如果您正苦于以下问题:C# TileMap.TopNeighbor方法的具体用法?C# TileMap.TopNeighbor怎么用?C# TileMap.TopNeighbor使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TileMap
的用法示例。
在下文中一共展示了TileMap.TopNeighbor方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: FindHelper
public static void FindHelper(TileMap tileMap, Tile sourceTile, int movement, int jumpHeight, Dictionary<Tile, int> tileToMaxMovement,
bool moveThroughOccupiedTiles)
{
if (!tileToMaxMovement.ContainsKey(sourceTile)) {
tileToMaxMovement[sourceTile] = movement;
} else {
int maxMove = tileToMaxMovement[sourceTile];
if (movement > maxMove) {
tileToMaxMovement[sourceTile] = movement;
} else {
return;
}
}
//if (visited.Contains(sourceTile)) {
// return;
//}
//visited.Add(sourceTile);
movement = movement - sourceTile.GetMovementCost();
if (movement <= 0) {
return;
}
if (IsTraversable(tileMap.BottomNeighbor(sourceTile), moveThroughOccupiedTiles)) {
FindHelper(tileMap, tileMap.BottomNeighbor(sourceTile), movement, jumpHeight, tileToMaxMovement, moveThroughOccupiedTiles);
}
if (IsTraversable(tileMap.TopNeighbor(sourceTile), moveThroughOccupiedTiles)) {
FindHelper(tileMap, tileMap.TopNeighbor(sourceTile), movement, jumpHeight, tileToMaxMovement, moveThroughOccupiedTiles);
}
if (IsTraversable(tileMap.LeftNeighbor(sourceTile), moveThroughOccupiedTiles)) {
FindHelper(tileMap, tileMap.LeftNeighbor(sourceTile), movement, jumpHeight, tileToMaxMovement, moveThroughOccupiedTiles);
}
if (IsTraversable(tileMap.RightNeighbor(sourceTile), moveThroughOccupiedTiles)) {
FindHelper(tileMap, tileMap.RightNeighbor(sourceTile), movement, jumpHeight, tileToMaxMovement, moveThroughOccupiedTiles);
}
}
示例2: FindHelper
public static void FindHelper(TileMap tileMap, TileData sourceTile, int movement, FindTilesWithinRangeDTO dto)
{
if (!dto.TileToMaxMovement.ContainsKey(sourceTile)) {
dto.TileToMaxMovement[sourceTile] = movement;
} else {
int maxMove = dto.TileToMaxMovement[sourceTile];
if (movement > maxMove) {
dto.TileToMaxMovement[sourceTile] = movement;
} else {
return;
}
}
//if (visited.Contains(sourceTile)) {
// return;
//}
//visited.Add(sourceTile);
movement = movement - sourceTile.MovementCost;
if (movement <= 0) {
return;
}
if (IsTraversable(tileMap.BottomNeighbor(sourceTile), dto)) {
FindHelper(tileMap, tileMap.BottomNeighbor(sourceTile), movement, dto);
}
if (IsTraversable(tileMap.TopNeighbor(sourceTile), dto)) {
FindHelper(tileMap, tileMap.TopNeighbor(sourceTile), movement, dto);
}
if (IsTraversable(tileMap.LeftNeighbor(sourceTile), dto)) {
FindHelper(tileMap, tileMap.LeftNeighbor(sourceTile), movement, dto);
}
if (IsTraversable(tileMap.RightNeighbor(sourceTile), dto)) {
FindHelper(tileMap, tileMap.RightNeighbor(sourceTile), movement, dto);
}
}
示例3: Find
public static List<TileData> Find(TileMap tileMap, TileData sourceTile, TileData destinationTile, int moveThroughMask)
{
List<TileData> shortestPath = new List<TileData>();
List<TileData> unvisited = new List<TileData>(tileMap.TileDataList);
FindShorestPathDTO dto = new FindShorestPathDTO();
dto.Destination = destinationTile;
dto.MoveThroughMask = moveThroughMask;
if (moveThroughMask != TeamId.MOVE_THROUGH_ALL) {
unvisited = TileUtility.FilterOutOccupiedTiles(unvisited, moveThroughMask); // TODO support enemyteam
unvisited.Add(sourceTile);
}
dto.TileToDistance.Add(sourceTile, 0);
TileData currentTile = null;
int count = 0;
while (unvisited.Count > 0 && count < 100) {
count++;
currentTile = TileWithMinDistance(dto.TileToDistance, unvisited);
unvisited.Remove(currentTile);
CalculateDistanceAndUpdatePath(currentTile, tileMap.TopNeighbor(currentTile), dto);
CalculateDistanceAndUpdatePath(currentTile, tileMap.BottomNeighbor(currentTile), dto);
CalculateDistanceAndUpdatePath(currentTile, tileMap.LeftNeighbor(currentTile), dto);
CalculateDistanceAndUpdatePath(currentTile, tileMap.RightNeighbor(currentTile), dto);
}
Debug.Log("starting return path - " + count);
TileData returnTile = destinationTile;
shortestPath.Add(returnTile);
count = 0;
while (returnTile != sourceTile && count < 100) {
count++;
Debug.Log("finding last hop for " + returnTile.ToString());
try {
returnTile = dto.TileToOptimalPrevious[returnTile];
} catch (Exception ex) {
Debug.LogError(ex);
Debug.LogError("oh shit error couldn't find " + returnTile.ToString());
}
Debug.Log("found " + returnTile);
shortestPath.Add(returnTile);
}
Debug.Log("finish return path - TILEDATA");
shortestPath.Reverse();
return shortestPath;
}
示例4: Find
public static List<Tile> Find(TileMap tileMap, Tile sourceTile, Tile destinationTile, bool moveThroughOccupied)
{
List<Tile> shortestPath = new List<Tile>();
Dictionary<Tile, int> tileToDistance = new Dictionary<Tile, int>();
Dictionary<Tile, Tile> tileToOptimalPrevious = new Dictionary<Tile, Tile>();
List<Tile> unvisited = new List<Tile>(tileMap.GetTiles());
if (!moveThroughOccupied) {
unvisited = TileUtility.FilterOutOccupiedTiles(unvisited);
unvisited.Add(sourceTile);
}
tileToDistance.Add(sourceTile, 0);
Tile currentTile = null;
int count = 0;
while (unvisited.Count > 0 && count < 100) {
count++;
currentTile = TileWithMinDistance(tileToDistance, unvisited);
unvisited.Remove(currentTile);
CalculateDistanceAndUpdatePath(currentTile, tileMap.TopNeighbor(currentTile), tileToDistance, tileToOptimalPrevious, moveThroughOccupied);
CalculateDistanceAndUpdatePath(currentTile, tileMap.BottomNeighbor(currentTile), tileToDistance, tileToOptimalPrevious, moveThroughOccupied);
CalculateDistanceAndUpdatePath(currentTile, tileMap.LeftNeighbor(currentTile), tileToDistance, tileToOptimalPrevious, moveThroughOccupied);
CalculateDistanceAndUpdatePath(currentTile, tileMap.RightNeighbor(currentTile), tileToDistance, tileToOptimalPrevious, moveThroughOccupied);
}
Debug.Log("starting return path - " + count);
Tile returnTile = destinationTile;
shortestPath.Add(returnTile);
count = 0;
while (returnTile != sourceTile && count < 100) {
count++;
Debug.Log("finding last hop for " + returnTile.TileData);
returnTile = tileToOptimalPrevious[returnTile];
Debug.Log("found " + returnTile.LocationString());
shortestPath.Add(returnTile);
}
Debug.Log("finish return path");
shortestPath.Reverse();
return shortestPath;
}