private static List <TilePosition> FindBorder(IObstacleInfo obstacleInfo) { ObstacleConfigData data = null; if (obstacleInfo is IBuildingInfo) { data = ConfigInterface.Instance.BuildingConfigHelper.GetBuildingData(((IBuildingInfo)obstacleInfo).BuildingType, 0); } else { data = ConfigInterface.Instance.RemovableConfigHelper.GetRemovableObjectData(((IRemovableObjectInfo)obstacleInfo).ObjectType); } List <TilePosition> obstacleList = new List <TilePosition>(); int minRow = 255; int maxRow = -255; int minColumn = 255; int maxColumn = -255; foreach (ConfigUtilities.Structs.TilePoint obstacle in data.ActorObstacleList) { minRow = Mathf.Min(minRow, obstacle.row); maxRow = Mathf.Max(maxRow, obstacle.row); minColumn = Mathf.Min(minColumn, obstacle.column); maxColumn = Mathf.Max(maxColumn, obstacle.column); obstacleList.Add(obstacle.ConvertToTilePosition()); } return(FindBorder(obstacleList, minRow, maxRow, minColumn, maxColumn)); }
private static List <TilePosition> Inflate(IObstacleInfo obstacleInfo, bool isActor) { ObstacleConfigData data = null; if (obstacleInfo is IBuildingInfo) { data = ConfigInterface.Instance.BuildingConfigHelper.GetBuildingData(((IBuildingInfo)obstacleInfo).BuildingType, 0); } else { data = ConfigInterface.Instance.RemovableConfigHelper.GetRemovableObjectData(((IRemovableObjectInfo)obstacleInfo).ObjectType); } List <TilePosition> obstacleList = new List <TilePosition>(); if (isActor) { foreach (ConfigUtilities.Structs.TilePoint obstacle in data.ActorObstacleList) { obstacleList.Add(obstacle.ConvertToTilePosition()); } } else { foreach (ConfigUtilities.Structs.TilePoint obstacle in data.BuildingObstacleList) { obstacleList.Add(obstacle.ConvertToTilePosition()); } } List <TilePosition> inflateList = new List <TilePosition>(); foreach (TilePosition obstacle in obstacleList) { TilePosition up = new TilePosition(obstacle.Column, obstacle.Row - 1); TilePosition down = new TilePosition(obstacle.Column, obstacle.Row + 1); TilePosition left = new TilePosition(obstacle.Column - 1, obstacle.Row); TilePosition right = new TilePosition(obstacle.Column + 1, obstacle.Row); TilePosition leftUp = new TilePosition(obstacle.Column - 1, obstacle.Row - 1); TilePosition rightUp = new TilePosition(obstacle.Column + 1, obstacle.Row - 1); TilePosition leftDown = new TilePosition(obstacle.Column - 1, obstacle.Row + 1); TilePosition rightDown = new TilePosition(obstacle.Column + 1, obstacle.Row + 1); if (!obstacleList.Contains(up) && !inflateList.Contains(up)) { inflateList.Add(up); } if (!obstacleList.Contains(down) && !inflateList.Contains(down)) { inflateList.Add(down); } if (!obstacleList.Contains(left) && !inflateList.Contains(left)) { inflateList.Add(left); } if (!obstacleList.Contains(right) && !inflateList.Contains(right)) { inflateList.Add(right); } if (!obstacleList.Contains(leftUp) && !inflateList.Contains(leftUp)) { inflateList.Add(leftUp); } if (!obstacleList.Contains(rightUp) && !inflateList.Contains(rightUp)) { inflateList.Add(rightUp); } if (!obstacleList.Contains(leftDown) && !inflateList.Contains(leftDown)) { inflateList.Add(leftDown); } if (!obstacleList.Contains(rightDown) && !inflateList.Contains(rightDown)) { inflateList.Add(rightDown); } } List <TilePosition> result = new List <TilePosition>(); result.AddRange(obstacleList); result.AddRange(inflateList); return(result); }