Example #1
0
        /// <summary>
        /// Update all cell's visibility and CUBE's alpha.
        /// </summary>
        private void UpdateGrid()
        {
            if (!enabled) return;

            Vector3 cursorLayer = cursor.Multipy(viewAxis).Round();

            // update cells
            for (int y = 0; y < grid.Length; y++)
            {
                for (int z = 0; z < grid.Length; z++)
                {
                    for (int x = 0; x < grid.Length; x++)
                    {
                        var index = new Vector3(x, y, z);
                        Vector3 currentLayer = index.Multipy(viewAxis).Round();
                        if (currentLayer == cursorLayer && (grid[y][z][x] == null || cursor == index))
                        {
                            cells[y][z][x].SetActive(true);
                        }
                        else
                        {
                            cells[y][z][x].SetActive(false);
                        }
                    }
                }
            }

            // get direction of camera
            float direction = (viewAxis == Vector3.right || viewAxis == Vector3.up || viewAxis == Vector3.forward ? 1f : -1f);

            // update CUBEs
            foreach (var cube in currentBuild)
            {
                Vector3 depth = (CUBE.AllCUBES[cube.Key.ID].size - Vector3.one).Multipy(viewAxis).Round() * direction;
                Vector3 cubePosition = cube.Value.position.Multipy(viewAxis).Round();
                Vector3 difference = (cubePosition - depth) - cursorLayer;

                // if difference vector is facing down camera forward
                foreach (Material mat in cube.Key.renderer.materials) mat.SetFloat(AlphaName, difference.normalized * direction == viewAxis ? nearAlpha : 1f);
            }
        }