Пример #1
0
    public static _Cube CreateCube()
    {
        GameObject go   = new GameObject("_Cube");
        _Cube      cube = go.AddComponent <_Cube>();

        cube.CreateMesh();
        return(cube);
    }
Пример #2
0
    /*Attempt to attach a Cube at this position of the Assembly.
     * Positions with potentional success of attachment are kept
     * in nextPositions.
     */
    public void insertCube(Vector3 pos)
    {
        if (isPositionEmpty(pos))
        {
            _Cube cube = getCube(pos);
            Debug.Log(cube.name);
            if (cube.name != "NULL")
            {
                GameObject tmpCube = (GameObject)Instantiate(CubePrefab, new Vector3(pos.x, pos.y, pos.z), new Quaternion());
                cube.colour.alpha = 0.5f;
                tmpCube.GetComponent <Renderer> ().material.SetColor("_Color", cube.colour.getColor());
                tmpCube.transform.Find("Front").GetComponent <TextMesh> ().text  = cube.Front.label;
                tmpCube.transform.Find("Back").GetComponent <TextMesh> ().text   = cube.Back.label;
                tmpCube.transform.Find("Left").GetComponent <TextMesh> ().text   = cube.Left.label;
                tmpCube.transform.Find("Right").GetComponent <TextMesh> ().text  = cube.Right.label;
                tmpCube.transform.Find("Top").GetComponent <TextMesh> ().text    = cube.Top.label;
                tmpCube.transform.Find("Bottom").GetComponent <TextMesh> ().text = cube.Bottom.label;


                Vector3 tmpPos = new Vector3(0, 0, 0);

                tmpPos = new Vector3(1 + pos.x, pos.y, pos.z);
                if (isPositionEmpty(tmpPos))
                {
                    nextPositions.Add(tmpPos);
                }
                tmpPos = new Vector3(pos.x - 1, pos.y, pos.z);
                if (isPositionEmpty(tmpPos))
                {
                    nextPositions.Add(tmpPos);
                }
                tmpPos = new Vector3(pos.x, 1 + pos.y, pos.z);
                if (isPositionEmpty(tmpPos))
                {
                    nextPositions.Add(tmpPos);
                }
                tmpPos = new Vector3(pos.x, pos.y - 1, pos.z);
                if (isPositionEmpty(tmpPos))
                {
                    nextPositions.Add(tmpPos);
                }
                tmpPos = new Vector3(pos.x, pos.y, 1 + pos.z);
                if (isPositionEmpty(tmpPos))
                {
                    nextPositions.Add(tmpPos);
                }
                tmpPos = new Vector3(pos.x, pos.y, pos.z - 1);
                if (isPositionEmpty(tmpPos))
                {
                    nextPositions.Add(tmpPos);
                }
            }
        }
        else
        {
        }
    }
Пример #3
0
 public void setData(List <_Cube> c, List <_Glue> g, _Cube s)
 {
     CubeSet = c;
     Glues   = g;
     Seed    = s;
 }
Пример #4
0
 public SavingAndLoadingClass(List <_Cube> c, List <_Glue> g, _Cube s)
 {
     CubeSet = c;
     Glues   = g;
     Seed    = s;
 }
Пример #5
0
    /*
     * Retrive a Cube that can attach to the assembly at postion "pos".
     * Check each cube in order and keep track of the sum of glue strengths.
     * This can be further imporved by checking the cubes in random order
     * rather than in order, but keep track of the cubes that you have already checked
     * so that you do not check them again.
     */
    public _Cube getCube(Vector3 pos)
    {
        _Cube tmpCube = new _Cube();

        Collider[] hitColliders    = Physics.OverlapSphere(pos, 0.1f);
        int        sumGlueStrength = 0;
        Dictionary <string, int> availableGlues = populateGlueDict();

        //These if statements check if the face of the current cube + an available face in the assembly matches one of the keys in the glue Dictionary
        // if the pair exists then add the strenght value to the sumGlueStrength
        for (int j = 0; j < setManager.CubeSet.Count; j++)
        {
            tmpCube = setManager.CubeSet [j];
            if (tmpCube.current_count != 0 || !setManager.discrete_counts_flag)
            {
                if (!isPositionEmpty(new Vector3(pos.x, pos.y, pos.z - 1)))
                {
                    string front_glue = checkGlues(new Vector3(pos.x, pos.y, pos.z - 1), "Front");
                    string gluePair1  = tmpCube.Front.label + ',' + front_glue;
                    string gluePair2  = front_glue + tmpCube.Front.label;

                    if (availableGlues.ContainsKey(gluePair1))
                    {
                        Debug.Log(availableGlues [gluePair1]);
                        sumGlueStrength += availableGlues [gluePair1];
                    }
                    if (availableGlues.ContainsKey(gluePair2))
                    {
                        sumGlueStrength += availableGlues [gluePair2];
                    }
                }
                if (!isPositionEmpty(new Vector3(pos.x, pos.y, pos.z + 1)))
                {
                    string back_glue = checkGlues(new Vector3(pos.x, pos.y, pos.z + 1), "Back");
                    string gluePair1 = tmpCube.Back.label + ',' + back_glue;
                    string gluePair2 = back_glue + tmpCube.Back.label;
                    if (availableGlues.ContainsKey(gluePair1))
                    {
                        Debug.Log(availableGlues [gluePair1]);
                        sumGlueStrength += availableGlues [gluePair1];
                    }
                    if (availableGlues.ContainsKey(gluePair2))
                    {
                        sumGlueStrength += availableGlues [gluePair2];
                    }
                }
                if (!isPositionEmpty(new Vector3(pos.x + 1, pos.y, pos.z)))
                {
                    string right_glue = checkGlues(new Vector3(pos.x + 1, pos.y, pos.z), "Right");
                    string gluePair1  = tmpCube.Right.label + ',' + right_glue;
                    string gluePair2  = right_glue + tmpCube.Right.label;
                    if (availableGlues.ContainsKey(gluePair1))
                    {
                        Debug.Log(availableGlues [gluePair1]);
                        sumGlueStrength += availableGlues [gluePair1];
                    }
                    if (availableGlues.ContainsKey(gluePair2))
                    {
                        sumGlueStrength += availableGlues [gluePair2];
                    }
                }
                if (!isPositionEmpty(new Vector3(pos.x - 1, pos.y, pos.z)))
                {
                    string left_glue = checkGlues(new Vector3(pos.x - 1, pos.y, pos.z), "Left");
                    string gluePair1 = tmpCube.Left.label + ',' + left_glue;
                    string gluePair2 = left_glue + tmpCube.Left.label;
                    if (availableGlues.ContainsKey(gluePair1))
                    {
                        Debug.Log(availableGlues [gluePair1]);
                        sumGlueStrength += availableGlues [gluePair1];
                    }
                    if (availableGlues.ContainsKey(gluePair2))
                    {
                        sumGlueStrength += availableGlues [gluePair2];
                    }
                }
                if (!isPositionEmpty(new Vector3(pos.x, pos.y + 1, pos.z)))
                {
                    string top_glue  = checkGlues(new Vector3(pos.x, pos.y + 1, pos.z), "Top");
                    string gluePair1 = tmpCube.Top.label + ',' + top_glue;
                    string gluePair2 = top_glue + tmpCube.Top.label;
                    if (availableGlues.ContainsKey(gluePair1))
                    {
                        Debug.Log(availableGlues [gluePair1]);
                        sumGlueStrength += availableGlues [gluePair1];
                    }
                    if (availableGlues.ContainsKey(gluePair2))
                    {
                        sumGlueStrength += availableGlues [gluePair2];
                    }
                }
                if (!isPositionEmpty(new Vector3(pos.x, pos.y - 1, pos.z)))
                {
                    string bottom_glue = checkGlues(new Vector3(pos.x, pos.y - 1, pos.z), "Bottom");
                    string gluePair1   = tmpCube.Bottom.label + ',' + bottom_glue;
                    string gluePair2   = bottom_glue + tmpCube.Bottom.label;
                    if (availableGlues.ContainsKey(gluePair1))
                    {
                        Debug.Log(availableGlues [gluePair1]);
                        sumGlueStrength += availableGlues [gluePair1];
                    }
                    if (availableGlues.ContainsKey(gluePair2))
                    {
                        sumGlueStrength += availableGlues [gluePair2];
                    }
                }
                Debug.Log(tmpCube.name + "  " + sumGlueStrength);
                if (sumGlueStrength >= setManager.temperature)
                {
                    break;
                }
                sumGlueStrength = 0;
            }
        }
        if (sumGlueStrength >= setManager.temperature)
        {
            if (setManager.discrete_counts_flag && (tmpCube.count > 0))
            {
                tmpCube.current_count--;
            }
            return(tmpCube);
        }
        else
        {
            //tmpCube.name = "NULL";
            return(new _Cube());
        }
    }
Пример #6
0
 void Awake()
 {
     cube = target as _Cube;
 }