コード例 #1
0
    private void ActionPath(int x, int y, int n)
    {
        Transform      tile = transform.GetChild(n);
        SpriteRenderer sr   = tile.GetComponent <SpriteRenderer>();

        int len = pathfinder.GetPathLength();

        if (settingFrom)
        {
            // Reset
            for (int i = 0; i < len; ++i)
            {
                SetTileColor(pathfinder.GetPathData(i), Color.white);
            }

            if (posFrom.x >= 0 && posFrom.y >= 0)
            {
                int fi = Grid.GetIndex(gridColumns, posFrom.x, posFrom.y);
                SetTileColor(fi, pathfinder.GetType(posFrom.x, posFrom.y) > 0 ? Color.white : Color.black);
            }

            if (posTo.x >= 0 && posTo.y >= 0)
            {
                int ti = Grid.GetIndex(gridColumns, posTo.x, posTo.y);
                SetTileColor(ti, Color.white);
            }

            posTo       = new Point2(-1, -1);
            posFrom     = new Point2(x, y);
            settingFrom = false;
            sr.color    = Color.red;
            return;
        }

        if (!settingFrom)
        {
            posTo       = new Point2(x, y);
            settingFrom = true;

            #if UNITY_EDITOR
            Profiler.BeginSample("Pathfind");
            #endif

            sw.Start();
            len = pathfinder.FindPath(posFrom, posTo, walkMask);
            sw.Stop();
            ns = sw.Elapsed.TotalMilliseconds * 1000000;
            ms = sw.ElapsedMilliseconds;
            sw.Reset();

            #if UNITY_EDITOR
            Profiler.EndSample();
            #endif

            for (int i = 0; i < len; ++i)
            {
                SetTileColor(pathfinder.GetPathData(i), Color.green);
            }

            sr.color = Color.blue;
        }
    }