Esempio n. 1
0
        void MakeSphere(Vector3Int start, Vector3Int end)
        {
            Vector3Int size      = end - start + Vector3Int.one;
            Vector3Int normalInt = new Vector3Int(
                Mathf.Abs(Mathf.RoundToInt(normal.x)),
                Mathf.Abs(Mathf.RoundToInt(normal.y)),
                Mathf.Abs(Mathf.RoundToInt(normal.z)));

            VoxelMesh.Direction dir = VoxelMesh.Direction.MAX;

            List <Vector3Int> points = null;

            if (normalInt.x != 0)
            {
                dir    = VoxelMesh.Direction.Right;
                points = GetSphere(size.z, size.y, size.x);
            }
            else if (normalInt.y != 0)
            {
                dir    = VoxelMesh.Direction.Up;
                points = GetSphere(size.x, size.z, size.y);
            }
            else if (normalInt.z != 0)
            {
                dir    = VoxelMesh.Direction.Front;
                points = GetSphere(size.x, size.y, size.z);
            }

            foreach (var item in points)
            {
                VoxelData voxel = null;
                if (dir == VoxelMesh.Direction.Right)
                {
                    voxel = voxelMesh.GetVoxel(start.x + item.z, start.y + item.y, start.z + item.x);
                }
                else if (dir == VoxelMesh.Direction.Up)
                {
                    voxel = voxelMesh.GetVoxel(start.x + item.x, start.y + item.z, start.z + item.y);
                }
                else if (dir == VoxelMesh.Direction.Front)
                {
                    voxel = voxelMesh.GetVoxel(start.x + item.x, start.y + item.y, start.z + item.z);
                }


                if (voxel != null)
                {
                    voxel.Copy(voxelMesh.voxelTemplate);
                    voxelMesh.SetVoxelVisible(voxel.Position, mode != ToolMode.Sub);
                }
            }
        }
Esempio n. 2
0
        void AddPlanesHelper()
        {
            VoxelMesh voxelMesh = (VoxelMesh)target;

            if (voxelMesh == null)
            {
                Debug.LogError("VoxelMesh target is null");
                return;
            }

            ClearPlaneHealper();

            for (VoxelMesh.Direction dir = 0; dir < VoxelMesh.Direction.MAX; dir++)
            {
                GameObject plane  = GameObject.CreatePrimitive(PrimitiveType.Quad);
                Vector3    normal = VoxelMesh.GetVectorFromDirection(dir);
                plane.transform.rotation = Quaternion.LookRotation(normal);

                Vector3 center = (voxelMesh.meshSize);
                center.Set(center.x / 2f, center.y / 2f, center.z / 2f);
                plane.transform.position = center;

                switch (dir)
                {
                case VoxelMesh.Direction.Up:
                    plane.transform.position   = plane.transform.position + Vector3.up * (voxelMesh.meshSize.y / 2f);
                    plane.transform.localScale = new Vector3(voxelMesh.meshSize.x, voxelMesh.meshSize.z, 1);
                    break;

                case VoxelMesh.Direction.Down:
                    plane.transform.position   = plane.transform.position + Vector3.down * (voxelMesh.meshSize.y / 2f);
                    plane.transform.localScale = new Vector3(voxelMesh.meshSize.x, voxelMesh.meshSize.z, 1);
                    break;

                case VoxelMesh.Direction.Left:
                    plane.transform.position   = plane.transform.position + Vector3.left * (voxelMesh.meshSize.x / 2f);
                    plane.transform.localScale = new Vector3(voxelMesh.meshSize.z, voxelMesh.meshSize.y, 1);
                    break;

                case VoxelMesh.Direction.Right:
                    plane.transform.position   = plane.transform.position + Vector3.right * (voxelMesh.meshSize.x / 2f);
                    plane.transform.localScale = new Vector3(voxelMesh.meshSize.z, voxelMesh.meshSize.y, 1);
                    break;

                case VoxelMesh.Direction.Front:
                    plane.transform.position   = plane.transform.position + Vector3.forward * (voxelMesh.meshSize.z / 2f);
                    plane.transform.localScale = new Vector3(voxelMesh.meshSize.x, voxelMesh.meshSize.y, 1);
                    break;

                case VoxelMesh.Direction.Back:
                    plane.transform.position   = plane.transform.position + Vector3.back * (voxelMesh.meshSize.z / 2f);
                    plane.transform.localScale = new Vector3(voxelMesh.meshSize.x, voxelMesh.meshSize.y, 1);
                    break;

                default:
                    Debug.Log("Error Direction");
                    break;
                }
                planesHelper.Add(plane);
            }
        }