public void EndDraw() { click = false; RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); pointer.Hide(); if (Physics.Raycast(ray, out hit)) { if (hit.collider != null) { switch (Settings.Instance.currBrush) { case Brush.Voxel: { if (Settings.Instance.currTool == Tool.Attach) { AttachCube(hit.collider.transform.parent.GetComponent <CubeInfo>(), Settings.Instance.String2Sides(hit.collider.name), Settings.Instance.currMaterial); } else if (Settings.Instance.currTool == Tool.Erase) { lastCube = hit.collider.transform.parent.GetComponent <CubeInfo>(); if (lastCube.y > -1) { EraseCube(lastCube); } } else if (Settings.Instance.currTool == Tool.Paint) { PaintCube(hit.collider.transform.parent.GetComponent <CubeInfo>(), Settings.Instance.currMaterial); } break; } case Brush.Rect: { if (Settings.Instance.currTool == Tool.Attach) { Vector3Int pos = Settings.Instance.UseSidesOnCoordinate(beginCube.position, beginSide); beginCube = new CubeInfo(cubeMap[pos.x, pos.y, pos.z]); } lastCube = hit.collider.transform.parent.GetComponent <CubeInfo>(); if (Settings.Instance.currTool == Tool.Attach) { Vector3Int pos = Settings.Instance.UseSidesOnCoordinate(lastCube.position, Settings.Instance.String2Sides(hit.collider.name)); lastCube = new CubeInfo(cubeMap[pos.x, pos.y, pos.z]); } int minX = lastCube.x < beginCube.x ? lastCube.x : beginCube.x; int maxX = lastCube.x > beginCube.x ? lastCube.x : beginCube.x; int minY = lastCube.y < beginCube.y ? lastCube.y : beginCube.y; int maxY = lastCube.y > beginCube.y ? lastCube.y : beginCube.y; int minZ = lastCube.z < beginCube.z ? lastCube.z : beginCube.z; int maxZ = lastCube.z > beginCube.z ? lastCube.z : beginCube.z; if (minY == -1) { minY = 0; } int mat = Settings.Instance.currMaterial; if (Settings.Instance.currTool == Tool.Attach) { for (int x = minX; x <= maxX; ++x) { for (int y = minY; y <= maxY; ++y) { for (int z = minZ; z <= maxZ; ++z) { SetCube(cubeMap[x, y, z], mat); } } } } else if (Settings.Instance.currTool == Tool.Erase) { for (int x = minX; x <= maxX; ++x) { for (int y = minY; y <= maxY; ++y) { for (int z = minZ; z <= maxZ; ++z) { EraseCube(cubeMap[x, y, z]); } } } } else if (Settings.Instance.currTool == Tool.Paint) { for (int x = minX; x <= maxX; ++x) { for (int y = minY; y <= maxY; ++y) { for (int z = minZ; z <= maxZ; ++z) { PaintCube(cubeMap[x, y, z], mat); } } } } break; } case Brush.Line: { //if(beginCube.y < 0) beginCube = cubeMap[beginCube.x, 0, beginCube.z]; if (Settings.Instance.currTool == Tool.Attach) { Vector3Int pos = Settings.Instance.UseSidesOnCoordinate(beginCube.position, beginSide); beginCube = new CubeInfo(cubeMap[pos.x, pos.y, pos.z]); } lastCube = hit.collider.transform.parent.GetComponent <CubeInfo>(); if (Settings.Instance.currTool == Tool.Attach) { Vector3Int pos = Settings.Instance.UseSidesOnCoordinate(lastCube.position, Settings.Instance.String2Sides(hit.collider.name)); lastCube = new CubeInfo(cubeMap[pos.x, pos.y, pos.z]); } Debug.Log(beginCube.position + " " + lastCube.position); List <Vector3Int> newLine = line.Draw3DLine(beginCube, lastCube, Settings.Instance.String2Sides(hit.collider.name)); int mat = Settings.Instance.currMaterial; foreach (var l in newLine) { if (Settings.Instance.currTool == Tool.Attach) { SetCube(cubeMap[l.x, l.y, l.z], mat); } else if (Settings.Instance.currTool == Tool.Erase) { if (l.y > -1) { EraseCube(cubeMap[l.x, l.y, l.z]); } } else if (Settings.Instance.currTool == Tool.Paint) { PaintCube(cubeMap[l.x, l.y, l.z], mat); } } break; } case Brush.Fill: { lastCube = hit.collider.transform.parent.GetComponent <CubeInfo>(); beginSide = Settings.Instance.String2Sides(hit.collider.name); if (Settings.Instance.currTool == Tool.Attach) { Vector3Int pos = Settings.Instance.UseSidesOnCoordinate(lastCube.position, beginSide); lastCube = cubeMap[pos.x, pos.y, pos.z]; fill.AttachFill(lastCube, beginSide, cubeMap); } else if (Settings.Instance.currTool == Tool.Erase) { fill.EraseFill(lastCube, beginSide, cubeMap); } else if (Settings.Instance.currTool == Tool.Paint) { fill.PaintFill(lastCube, beginSide, cubeMap); } break; } } } } }