Beispiel #1
0
    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));
    }
Beispiel #2
0
    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);
    }