Example #1
0
    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, 20))
            {
                GameObject selectedObj = hit.collider.gameObject;

                /*
                 * TRubikElement2 elem = selectedObj.transform.parent.GetComponent<TRubikElement2>();
                 * elem.Select();
                 * //TRubikCreator.TRubik.TRubikElement rubikElement = selectedObj.transform.parent.GetComponent("TRubikElement") as TRubikCreator.TRubik.TRubikElement;
                 * //rubikElement.Select();
                 * Debug.Log(hit.ToString());
                 */
                TRubikCubik cubik = selectedObj.transform.parent.GetComponent <TRubikCubik>();
                if (SelectedCubic != null)
                {
                    Rubik.SelectAvailablePlanes(ref SelectedCubic, false);
                }
                SelectedCubic = cubik;
                Rubik.SelectAvailablePlanes(ref cubik, true);
            }
        }
    }
Example #2
0
    public TRotationPlane FindPlane(ref TRubikCubik cubik, ref List <TRotationPlane> planes)
    {
        for (int i = 0; i < planes.Count; ++i)
        {
            TRotationPlane plane = planes[i];
            foreach (TRubikCubik rc in plane.Elements)
            {
                if (rc == cubik)
                {
                    return(plane);
                }
            }
        }

        return(null);
    }
Example #3
0
    public void SelectRotationPlane(ref List <TRotationPlane> planes, ref TRubikCubik cubik, bool select)
    {
        TRotationPlane plane = FindPlane(ref cubik, ref planes);

        if (plane == null)
        {
            Debug.Log("Can't find plane");
            return;
        }
        foreach (TRubikCubik rc in plane.Elements)
        {
            if (select)
            {
                rc.Select();
            }
            else
            {
                rc.UnSelect();
            }
        }
    }
Example #4
0
    public static TRubik2 CreateRubik(Vector3 center, float elementSize, GameObject prefab)
    {
        int     centerIndex = (Dimension - 1) / 2;
        float   startShift  = elementSize * (((float)Dimension - 1) / 2);
        Vector3 startPos    = center - new Vector3(startShift, startShift, startShift);
        TRubik2 res         = new TRubik2();

        int nameIndex = 0;

        for (int i = 0; i < Dimension; ++i)
        {
            //int j = 0;
            for (int j = 0; j < Dimension; ++j)
            {
                //int k = 0;
                for (int k = 0; k < Dimension; ++k)
                {
                    string name = nameIndex.ToString();
                    nameIndex += 1;
                    // skip center cube
                    if (i == centerIndex && j == centerIndex && k == centerIndex)
                    {
                        // add fake element
                        res.GOBS.Add(new GameObject());
                        continue;
                    }
                    Vector3     smallCubCenter = startPos + new Vector3(elementSize * i, elementSize * j, elementSize * k);
                    TRubikCubik smallCubik     = CreateSmallCubik(smallCubCenter, center, prefab, elementSize, ref name);
                    res.Elements.Add(smallCubik);
                    res.GOBS.Add(smallCubik.HolderObject);
                    //ProcessSides(smallCubCenter,
                    //break;
                }
            }
        }

        // rotation planes
        for (int i = 0; i < Dimension; ++i)
        {
            //int j = 0;
            TRotationPlane xPlane = new TRotationPlane();
            TRotationPlane yPlane = new TRotationPlane();
            TRotationPlane zPlane = new TRotationPlane();
            for (int j = 0; j < Dimension; ++j)
            {
                //int k = 0;
                for (int k = 0; k < Dimension; ++k)
                {
                    if (i == centerIndex && j == centerIndex && k == centerIndex)
                    {
                        continue;
                    }

                    TRubikCubik cubik = res.GOBS[i * Dimension * Dimension + j * Dimension + k].GetComponent <TRubikCubik>();
                    xPlane.Elements.Add(cubik);
                    cubik = res.GOBS[j * Dimension * Dimension + i * Dimension + k].GetComponent <TRubikCubik>();
                    yPlane.Elements.Add(cubik);
                    cubik = res.GOBS[k * Dimension * Dimension + i * Dimension + j].GetComponent <TRubikCubik>();
                    zPlane.Elements.Add(cubik);
                }
            }
            res.XPlanes.Add(xPlane);
            res.YPlanes.Add(yPlane);
            res.ZPlanes.Add(zPlane);
        }

        return(res);
    }
Example #5
0
    public static TRubikCubik CreateSmallCubik(Vector3 cubikCenter, Vector3 totalCenter, GameObject prefab, float elementSize, ref string name)
    {
        Vector3           vector2CubikCenter = cubikCenter - totalCenter;
        List <GameObject> res = new List <GameObject>();

        float[] normalsValues = { -1.0f, 1.0f };
        for (int i = 0; i < 3; ++i)
        {
            int colorSubIndex = 0;
            foreach (float normalValue in normalsValues)
            {
                Color color = Colors2[CalcColorIndex(i, colorSubIndex)];

                Vector3 normal2Check = Vector3.zero;
                normal2Check[i] = normalValue * elementSize / 2;

                Vector3 normalFromPos = Vector3.zero;
                normalFromPos[i] = vector2CubikCenter[i];

                if (i == 2)
                {
                    Debug.DrawLine(cubikCenter, cubikCenter + normal2Check, Color.red);
                    Debug.DrawLine(cubikCenter, cubikCenter + normalFromPos, Color.green);
                }
                float angle = Vector3.Angle(normal2Check, normalFromPos);
                // create only proper sides
                // calculate sides by element position
                float dots = Vector3.Dot(normalFromPos, normal2Check);
                if (angle < 90 && dots > 0)
                {
                    Vector3 sidePos = cubikCenter + normal2Check;

                    Quaternion quat = Quaternion.FromToRotation(PrefabNormal, normal2Check);
                    //Quaternion quat = Quaternion.identity;
                    GameObject go = (GameObject)Instantiate(prefab, sidePos, quat);
                    go.name = name;
                    go.GetComponent <MeshRenderer>().material.color = color;
                    res.Add(go);
                }
                ++colorSubIndex;
            }
        }

        GameObject[] res2 = new GameObject[res.Count];
        int          l    = 0;

        foreach (GameObject go in res)
        {
            res2[l] = go;
            ++l;
        }
        ;

        GameObject holderObject = new GameObject();

        holderObject.transform.position = cubikCenter;
        TRubikCubik rc = holderObject.AddComponent <TRubikCubik>();

        rc.Init(holderObject, res2);

        return(rc);
    }
Example #6
0
 public void SelectAvailablePlanes(ref TRubikCubik cubik, bool select)
 {
     SelectRotationPlane(ref XPlanes, ref cubik, select);
     SelectRotationPlane(ref YPlanes, ref cubik, select);
     SelectRotationPlane(ref ZPlanes, ref cubik, select);
 }