Exemple #1
0
    private void CheckF(CubePathData end_cube, CubeManager cm)
    {
        var nears = cm.GetNearPathData(end_cube);

        for (int i = 0; i < nears.Count; ++i)
        {
            var n_cube = nears [i];
            if (n_cube == null)
            {
                continue;
            }
            float F = n_cube.cost + end_cube.F;

            if (n_cube.F > F)
            {
                n_cube.F = F;
                if (F > max_F)
                {
                    max_F = F;
                }
                if (!open_cube.Contains(n_cube))
                {
                    open_cube.Add(n_cube);
                }
            }
        }

        open_cube.Remove(end_cube);
        close_cube.Add(end_cube);
    }
Exemple #2
0
    public static CubePathData GetNextCube(CubeManager cm, CubePathData cube)
    {
        if (cube.index == cm.end_cube)
        {
            return(null);
        }

        var near = cm.GetNearPathData(cube);

        float min_F = float.MaxValue;

        int n_index = -1;

        for (int i = 0; i < near.Count; ++i)
        {
            if (near[i].F < min_F && near[i].cost != 65535f)
            {
                n_index = i;
                min_F   = near [i].F;
            }
        }

        if (n_index != -1)
        {
            return(near [n_index]);
        }
        else
        {
            return(null);
        }
    }
Exemple #3
0
    public FlowField GenerateVectorMap(CubeManager cm)
    {
        for (int i = 0; i < cm.path_datas.Count; ++i)
        {
            if (cm.path_datas [i].F == 65535)
            {
                cm.path_datas [i].vec = Vector2.zero;
            }

            var nears = cm.GetNearPathData(cm.path_datas [i]);

            float[] nears_F = new float[8];

            Vector2 vec = Vector2.zero;

            float new_x = nears [0].F - nears [2].F;

            float new_y = nears [1].F - nears [3].F;

            cm.path_datas [i].vec = new Vector2(new_x, new_y);

            cm.path_datas [i].cube.name += string.Format("  vec: {0} / {1}", new_x, new_y);
        }

        return(this);
    }