public static void validTest(AdjacencyIndex index, int a, int b, int dir, bool expected)
 {
     if (index.isValid(index.indexToTile(a), index.indexToTile(b), dir) != expected)
     {
         Debug.Log("ERROR: TILE " + a + " -> TILE " + b + " IN DIRECTION " + dir + " EXPECTED: " + expected);
     }
 }
예제 #2
0
    public static AdjacencyIndex GenerateIndex(Texture2D adjacencyData, int layersAboveBeach)
    {
        AdjacencyIndex index = new AdjacencyIndex();

        //Get patterns from sample and build propagator
        //THIS READS IMAGE FROM TOP LEFT TO BOTTOM RIGHT, LIKE A BOOK
        //YES IT DOES, UNITY READS IMAGES STRANGELY
        for (int j = adjacencyData.height - 1; j >= 0; j--) //y
        {
            for (int i = 0; i < adjacencyData.width; i++)   //x
            {
                if ((int)adjacencyData.GetPixel(i, j).r == 1)
                {
                    continue;
                }

                int pixelValue = PixelToId(adjacencyData.GetPixel(i, j));

                //Top 0
                if (j < adjacencyData.height - 1)
                {
                    int otherPixel = PixelToId(adjacencyData.GetPixel(i, j + 1));
                    if ((int)adjacencyData.GetPixel(i, j + 1).r != 1)
                    {
                        for (int layer = 0; layer <= layersAboveBeach; layer++)
                        {
                            index.Add(pixelValue + 33 * layer, otherPixel + 33 * layer, 0);
                        }
                    }
                }
                //Right 1
                if (i < adjacencyData.width - 1)
                {
                    int otherPixel = PixelToId(adjacencyData.GetPixel(i + 1, j));
                    if ((int)adjacencyData.GetPixel(i + 1, j).r != 1)
                    {
                        for (int layer = 0; layer <= layersAboveBeach; layer++)
                        {
                            index.Add(pixelValue + 33 * layer, otherPixel + 33 * layer, 1);
                        }
                    }
                }
                //Bottom 2
                if (j > 0)
                {
                    int otherPixel = PixelToId(adjacencyData.GetPixel(i, j - 1));
                    if ((int)adjacencyData.GetPixel(i, j - 1).r != 1)
                    {
                        for (int layer = 0; layer <= layersAboveBeach; layer++)
                        {
                            index.Add(pixelValue + 33 * layer, otherPixel + 33 * layer, 2);
                        }
                    }
                }
                //Left 3
                if (i > 0)
                {
                    int otherPixel = PixelToId(adjacencyData.GetPixel(i - 1, j));
                    if ((int)adjacencyData.GetPixel(i - 1, j).r != 1)
                    {
                        for (int layer = 0; layer <= layersAboveBeach; layer++)
                        {
                            index.Add(pixelValue + 33 * layer, otherPixel + 33 * layer, 3);
                        }
                    }
                }
            }
        }
        return(index);
    }
    public static void testIndex(AdjacencyIndex index, int layersAboveBeach)
    {
        validTest(index, 0, 0, 0, true);
        validTest(index, 0, 1, 0, true);
        validTest(index, 0, 2, 0, true);
        validTest(index, 0, 3, 0, false);
        validTest(index, 0, 4, 0, false);
        validTest(index, 0, 5, 0, false);
        validTest(index, 0, 6, 0, true);
        validTest(index, 0, 7, 0, false);
        validTest(index, 0, 8, 0, false);
        validTest(index, 0, 9, 0, false);
        validTest(index, 0, 10, 0, false);
        validTest(index, 0, 11, 0, false);
        validTest(index, 0, 12, 0, false);
        validTest(index, 0, 33, 0, false);

        validTest(index, 0, 0, 1, true);
        validTest(index, 0, 1, 1, false);
        validTest(index, 0, 2, 1, true);
        validTest(index, 0, 3, 1, true);
        validTest(index, 0, 4, 1, false);
        validTest(index, 0, 5, 1, false);
        validTest(index, 0, 6, 1, false);
        validTest(index, 0, 7, 1, true);
        validTest(index, 0, 8, 1, false);
        validTest(index, 0, 9, 1, false);
        validTest(index, 0, 10, 1, false);
        validTest(index, 0, 11, 1, false);
        validTest(index, 0, 12, 1, false);
        validTest(index, 0, 33, 1, false);

        validTest(index, 0, 0, 2, true);
        validTest(index, 0, 1, 2, false);
        validTest(index, 0, 2, 2, false);
        validTest(index, 0, 3, 2, true);
        validTest(index, 0, 4, 2, true);
        validTest(index, 0, 5, 2, false);
        validTest(index, 0, 6, 2, false);
        validTest(index, 0, 7, 2, false);
        validTest(index, 0, 8, 2, true);
        validTest(index, 0, 9, 2, false);
        validTest(index, 0, 10, 2, false);
        validTest(index, 0, 11, 2, false);
        validTest(index, 0, 12, 2, false);
        validTest(index, 0, 33, 2, false);

        validTest(index, 0, 0, 3, true);
        validTest(index, 0, 1, 3, true);
        validTest(index, 0, 2, 3, false);
        validTest(index, 0, 3, 3, false);
        validTest(index, 0, 4, 3, true);
        validTest(index, 0, 5, 3, true);
        validTest(index, 0, 6, 3, false);
        validTest(index, 0, 7, 3, false);
        validTest(index, 0, 8, 3, false);
        validTest(index, 0, 9, 3, false);
        validTest(index, 0, 10, 3, false);
        validTest(index, 0, 11, 3, false);
        validTest(index, 0, 12, 3, false);
        validTest(index, 0, 33, 3, false);


        validTest(index, 33, 0, 0, false);
        validTest(index, 33, 1, 0, false);
        validTest(index, 33, 2, 0, false);
        validTest(index, 33, 3, 0, false);
        validTest(index, 33, 4, 0, false);
        validTest(index, 33, 5, 0, false);
        validTest(index, 33, 6, 0, false);
        validTest(index, 33, 7, 0, false);
        validTest(index, 33, 8, 0, true);
        validTest(index, 33, 9, 0, false);
        validTest(index, 33, 10, 0, false);
        validTest(index, 33, 11, 0, true);
        validTest(index, 33, 12, 0, true);
        validTest(index, 33, 33, 0, true);

        validTest(index, 33, 0, 1, false);
        validTest(index, 33, 1, 1, false);
        validTest(index, 33, 2, 1, false);
        validTest(index, 33, 3, 1, false);
        validTest(index, 33, 4, 1, false);
        validTest(index, 33, 5, 1, true);
        validTest(index, 33, 6, 1, false);
        validTest(index, 33, 7, 1, false);
        validTest(index, 33, 8, 1, false);
        validTest(index, 33, 9, 1, true);
        validTest(index, 33, 10, 1, false);
        validTest(index, 33, 11, 1, false);
        validTest(index, 33, 12, 1, true);
        validTest(index, 33, 33, 1, true);

        validTest(index, 33, 0, 2, false);
        validTest(index, 33, 1, 2, false);
        validTest(index, 33, 2, 2, false);
        validTest(index, 33, 3, 2, false);
        validTest(index, 33, 4, 2, false);
        validTest(index, 33, 5, 2, false);
        validTest(index, 33, 6, 2, true);
        validTest(index, 33, 7, 2, false);
        validTest(index, 33, 8, 2, false);
        validTest(index, 33, 9, 2, true);
        validTest(index, 33, 10, 2, true);
        validTest(index, 33, 11, 2, false);
        validTest(index, 33, 12, 2, false);
        validTest(index, 33, 33, 2, true);

        validTest(index, 33, 0, 3, false);
        validTest(index, 33, 1, 3, false);
        validTest(index, 33, 2, 3, false);
        validTest(index, 33, 3, 3, false);
        validTest(index, 33, 4, 3, false);
        validTest(index, 33, 5, 3, false);
        validTest(index, 33, 6, 3, false);
        validTest(index, 33, 7, 3, true);
        validTest(index, 33, 8, 3, false);
        validTest(index, 33, 9, 3, false);
        validTest(index, 33, 10, 3, true);
        validTest(index, 33, 11, 3, true);
        validTest(index, 33, 12, 3, false);
        validTest(index, 33, 33, 3, true);

        validTest(index, 13, 14, 1, true);
        if (layersAboveBeach > 0)
        {
            validTest(index, 66, 66, 3, true);
        }
    }