Example #1
0
    FractalObj[] create_layer(FractalObj[] objs, int ty, GameObject obj, Color c)
    {
        int l     = objs.Length;
        int new_l = 0;

        new_l = l * 3;
        if (ty == CUBE)
        {
            new_l = l * 5;
        }

        FractalObj[] res = new FractalObj[new_l];
        FractalObj[] tmp = null;
        int          p   = 0;

        for (int i = 0; i < l; ++i)
        {
            tmp = create_from(objs[i], ty, obj, c);
            for (int k = 0; k < tmp.Length; ++k)
            {
                res[p] = tmp[k];
                p     += 1;
            }
        }
        return(res);
    }
Example #2
0
 FractalObj[] create_from(FractalObj fractal, int ty, GameObject obj, Color c)
 {
     if (ty == TRIANGLE)
     {
         if (fractal.ty == TRIANGLE)
         {
             FractalObj tmp = create_triangle_from_triangle(fractal);
             return(grow_triangle(tmp, obj, c));
         }
         else if (fractal.ty == CUBE)
         {
             FractalObj tmp = create_triangle_from_rectangle(fractal);
             return(grow_triangle(tmp, obj, c));
         }
     }
     else if (ty == CUBE)
     {
         if (fractal.ty == TRIANGLE)
         {
             FractalObj tmp = create_rectangle_from_triangle(fractal);
             return(grow_cube(tmp, obj, c));
         }
         else if (fractal.ty == CUBE)
         {
             FractalObj tmp = create_rectangle_from_rectangle(fractal);
             return(grow_cube(tmp, obj, c));
         }
     }
     return(null);
 }
Example #3
0
    FractalObj create_triangle_from_rectangle(FractalObj patch)
    {
        if (patch.vecs.Length != 4)
        {
            Debug.Log("Wrong XD !!!!!!!!!!!!!!!");
            return(null);
        }
        Vector3 mid   = (patch.vecs[0] + patch.vecs[1] + patch.vecs[2] + patch.vecs[3]) * 0.25f;
        float   r_tmp = patch.r * ratio;

        Vector3[] vecs = new Vector3[3];
        vecs[0] = mid + (patch.vecs[0] - mid).normalized * r_tmp;
        vecs[1] = mid + (patch.vecs[1] - patch.vecs[3]).normalized * r_tmp * 0.866f + (patch.vecs[2] - mid).normalized * r_tmp * 0.5f;
        vecs[2] = mid + (patch.vecs[3] - patch.vecs[1]).normalized * r_tmp * 0.866f + (patch.vecs[2] - mid).normalized * r_tmp * 0.5f;
        return(new FractalObj(vecs, r_tmp, TRIANGLE));
    }
Example #4
0
    FractalObj create_rectangle_from_triangle(FractalObj patch)
    {
        if (patch.vecs.Length != 3)
        {
            Debug.Log("Wrong XD !!!!!!!!!!!!!!!");
            return(null);
        }
        Vector3 mid   = (patch.vecs[0] + patch.vecs[1] + patch.vecs[2]) * (1 / 3.0f);
        float   r_tmp = patch.r * ratio;
        Vector3 l1    = (patch.vecs[0] - mid).normalized * r_tmp * 0.4f;
        Vector3 l2    = (patch.vecs[2] - patch.vecs[1]).normalized * r_tmp * 0.4f;

        Vector3[] vecs = new Vector3[4];
        vecs[0] = mid + l1 + l2;
        vecs[1] = mid + l1 - l2;
        vecs[2] = mid - l1 - l2;
        vecs[3] = mid - l1 + l2;
        return(new FractalObj(vecs, r_tmp * 0.8f, CUBE));
    }
Example #5
0
    IEnumerator co_bloom(GameObject obj, Vector3 pos, int[] spell)
    {
        int l = spell.Length;

        FractalObj[] q = null;
        int          last_color_idx = Random.Range(1, lc);

        SoundAudio.instance.playSyllable(0, pos);
        if (spell[0] == TRIANGLE)
        {
            FractalObj tmp = create_triangle(pos, R);
            q = grow_triangle(tmp, obj, colors[last_color_idx]);
        }
        else if (spell[0] == CUBE)
        {
            FractalObj tmp = create_rectangle(pos, R);
            q = grow_cube(tmp, obj, colors[last_color_idx]);
        }

        for (int i = 1; i < level; ++i)
        {
            yield return(new WaitForSeconds(delay));

            if (spell[i] == -1)
            {
                break;
            }
            SoundAudio.instance.playSyllable(i, pos);

            int new_idx = Random.Range(1, lc);
            while (new_idx == last_color_idx)
            {
                new_idx = Random.Range(1, lc);
            }
            last_color_idx = new_idx;

            q = create_layer(q, spell[i], obj, colors[last_color_idx]);
        }
    }
Example #6
0
 public void ShowRoot()
 {
     ShowNode(0);
     curFocusObj = nodes[0];
 }
Example #7
0
    FractalObj[] grow_cube(FractalObj patch, GameObject obj_p, Color c)
    {
        if (patch.ty != CUBE)
        {
            Debug.Log("hehe");
            return(null);
        }

        GameObject obj = new GameObject("rect");

        obj.transform.parent = obj_p.transform;
        MeshFilter   mf = obj.AddComponent <MeshFilter>();
        MeshRenderer mr = obj.AddComponent <MeshRenderer>();

        Vector3[] vertices  = new Vector3[24];
        int[]     triangles = new int[36];

        Vector3 norm   = Vector3.Cross(patch.vecs[1] - patch.vecs[0], patch.vecs[2] - patch.vecs[1]);
        Vector3 h_norm = norm.normalized * patch.r;

        //forward
        vertices[0] = patch.vecs[0];
        vertices[1] = patch.vecs[1];
        vertices[2] = patch.vecs[3];
        vertices[3] = patch.vecs[2];
        //back
        vertices[4] = vertices[2] + h_norm;
        vertices[5] = vertices[3] + h_norm;
        vertices[6] = vertices[0] + h_norm;
        vertices[7] = vertices[1] + h_norm;
        //up
        vertices[8]  = vertices[2];
        vertices[9]  = vertices[3];
        vertices[10] = vertices[4];
        vertices[11] = vertices[5];
        //down
        vertices[12] = vertices[6];
        vertices[13] = vertices[7];
        vertices[14] = vertices[0];
        vertices[15] = vertices[1];
        //right
        vertices[16] = vertices[6];
        vertices[17] = vertices[0];
        vertices[18] = vertices[4];
        vertices[19] = vertices[2];
        //left
        vertices[20] = vertices[5];
        vertices[21] = vertices[3];
        vertices[22] = vertices[7];
        vertices[23] = vertices[1];

        int currentCount = 0;

        for (int i = 0; i < 24; i = i + 4)
        {
            triangles[currentCount++] = i;
            triangles[currentCount++] = i + 3;
            triangles[currentCount++] = i + 1;

            triangles[currentCount++] = i;
            triangles[currentCount++] = i + 2;
            triangles[currentCount++] = i + 3;
        }

        mf.mesh.vertices  = vertices;
        mf.mesh.triangles = triangles;
        mf.mesh.RecalculateNormals();

        Material new_material = new Material(mt);

        mr.materials[0] = new_material;
        obj.GetComponent <Renderer>().material.color = c;

        FractalObj[] fracs = new FractalObj[5];
        for (int i = 1; i < 6; ++i)
        {
            Vector3[] tmp = new Vector3[4];
            tmp[0]       = vertices[i * 4];
            tmp[1]       = vertices[i * 4 + 2];
            tmp[2]       = vertices[i * 4 + 3];
            tmp[3]       = vertices[i * 4 + 1];
            fracs[i - 1] = new FractalObj(tmp, patch.r, CUBE);
        }
        return(fracs);
    }
Example #8
0
    FractalObj[] grow_triangle(FractalObj patch, GameObject obj_p, Color c)
    {
        if (patch.ty != TRIANGLE)
        {
            Debug.Log("hehe");
            return(null);
        }

        GameObject obj = new GameObject("tria");

        obj.transform.parent = obj_p.transform;
        MeshFilter   mf = obj.AddComponent <MeshFilter>();
        MeshRenderer mr = obj.AddComponent <MeshRenderer>();


        Vector3[] vertices  = new Vector3[12];
        int[]     triangles = new int[12];

        Vector3 norm   = Vector3.Cross(patch.vecs[1] - patch.vecs[0], patch.vecs[2] - patch.vecs[1]);
        Vector3 h_norm = norm.normalized * patch.r * 0.816496580927726f; // sqrt(6)/3

        //under
        vertices[0] = patch.vecs[2];
        vertices[1] = patch.vecs[1];
        vertices[2] = patch.vecs[0];
        //0
        vertices[3] = (patch.vecs[0] + patch.vecs[2] + patch.vecs[1]) * (1 / 3.0f) + h_norm;
        vertices[4] = vertices[1];
        vertices[5] = vertices[0];
        //1
        vertices[6] = vertices[3];
        vertices[7] = vertices[0];
        vertices[8] = vertices[2];
        //2
        vertices[9]  = vertices[3]; //  + Vector3.one * 0.1f;
        vertices[10] = vertices[2]; //  + Vector3.one * 0.1f;
        vertices[11] = vertices[1]; //  + Vector3.one * 0.1f;


        for (int i = 0; i < 12; i++)
        {
            triangles[i] = i;
        }

        mf.mesh.vertices  = vertices;
        mf.mesh.triangles = triangles;
        mf.mesh.RecalculateNormals();

        Material new_material = new Material(mt);

        mr.materials[0] = new_material;
        obj.GetComponent <Renderer>().material.color = c;

        FractalObj[] fracs = new FractalObj[3];
        for (int i = 1; i < 4; ++i)
        {
            Vector3[] tmp = new Vector3[3];
            tmp[0]       = vertices[i * 3];
            tmp[1]       = vertices[i * 3 + 1];
            tmp[2]       = vertices[i * 3 + 2];
            fracs[i - 1] = new FractalObj(tmp, patch.r, TRIANGLE);
        }
        return(fracs);
    }