Пример #1
0
    public CubeManager CreateCube(int size)
    {
        CubeManager cubeManager = new GameObject("Cube").AddComponent<CubeManager>();

        List<Cubelet> cubeletList = new List<Cubelet>();

        float startingPoint = (size - 1) * -0.5f;
        
        Vector3 pos = Vector3.one * startingPoint;
        
        for (int i = 0; i < size; i++)
        {
            for (int j = 0; j < size; j++)
            {
                for (int k = 0; k < size; k++)
                {
                    //Check if array is not inside of the cube
                    if (!((i > 0 && i < (size - 1)) && (j > 0 && j < (size - 1)) && (k > 0 && k < (size - 1))))
                    {
                        Cubelet cubelet = SpawnCubelet(cubeManager.transform, pos, ("C" + i + j + k));

                        if (i == 0)
                            cubelet.AddSticker(SpawnSticker(cubelet, CubeDirections.Back));
                        else if (i == (size - 1))
                            cubelet.AddSticker(SpawnSticker(cubelet, CubeDirections.Front));

                        if (k == 0)
                            cubelet.AddSticker(SpawnSticker(cubelet, CubeDirections.Left));
                        else if (k == (size - 1))
                            cubelet.AddSticker(SpawnSticker(cubelet, CubeDirections.Right));
                        
                        if(j == 0)
                            cubelet.AddSticker(SpawnSticker(cubelet, CubeDirections.Bottom));
                        else if(j == (size - 1))
                            cubelet.AddSticker(SpawnSticker(cubelet, CubeDirections.Top));
                        
                        cubeletList.Add(cubelet);
                    }

                    pos.x += CubeletSize;
                }
                
                pos.y += CubeletSize;
                pos.x = startingPoint;
            }

            pos.z += CubeletSize;
            pos.y = startingPoint;
        }
        
        cubeManager.SetCube(cubeletList, size);

        return cubeManager;
    }
Пример #2
0
    private Sticker LoadSticker(Cubelet parent, CubeDirections dir, StickerColors color)
    {
        Sticker sticker = Instantiate(prefabSticker, parent.transform).AddComponent<Sticker>();

        Vector3 vDir = DirectionsOrdered[(int)dir];
        
        sticker.transform.localPosition = vDir * 0.5f;
        sticker.transform.forward = vDir;

        sticker.GetComponentInChildren<MeshRenderer>().material.color = StickersColorsOrdered[(int)color];
        sticker.MyColor = color;

        return sticker;
    }
Пример #3
0
    bool isSideComplete(List <GameObject> slice)
    {
        Cubelet    center      = null;
        GameObject centerPlane = null;
        int        index       = -1;

        for (int i = 0; i < 9; i++)
        {
            int count = 0;
            for (int j = 0; j < 6; j++)
            {
                if (slice[i].GetComponent <Cubelet>().Planes[j].activeInHierarchy)
                {
                    count++;
                    index = j;
                }
            }
            if (count == 1)
            {
                center      = slice[i].GetComponent <Cubelet>();
                centerPlane = center.Planes[index];
                break;
            }
        }
        if (index != -1)
        {
            Vector3 position = Quaternion.Inverse(center.transform.localRotation) * centerPlane.transform.localPosition;
            foreach (GameObject cube in slice)
            {
                if (!cube.GetComponent <Cubelet>().Planes[index].activeInHierarchy ||
                    (Quaternion.Inverse(cube.transform.localRotation) * cube.GetComponent <Cubelet>().Planes[index].transform.localPosition) != position)
                {
                    return(false);
                }
            }
            return(true);
        }
        return(false);
    }