public void GoBackUp() { if (!currentSelectedNode.IsDrive) { currentSelectedNode.transform.GetChild(0).gameObject.SetActive(false); //currentSelectedNode.transform.position = currentSelectedNode.CurrentPosition; currentSelectedNode.transform.SetParent(currentSelectedNode.ParentObject.transform.GetChild(0)); currentSelectedNode.IsSelected = false; //move parent node back to visible node currentSelectedNode.ParentObject.transform.SetParent(ActiveFolder.transform); currentSelectedNode.ParentObject.transform.GetChild(0).gameObject.SetActive(true); //currentSelectedNode.ParentObject.transform.position = currentSelectedNode.ParentObject.transform.GetComponent<MyDataNode>().CurrentPosition; EnableNode(currentSelectedNode.gameObject); currentSelectedNode = currentSelectedNode.ParentObject.transform.GetComponent <MyDataNode>(); DisableNode(currentSelectedNode.gameObject); transform.position = currentSelectedNode.transform.position; if (IsHelix) { DisplayHelix(); } else { DisplayWheel(); } } }
// Start is called before the first frame update void Start() { wheelY = transform.position.y - 5f; defaultRadius = radius; defaultDegree = degree; txtSelectedNode.text = ""; txtHoveredOverNode.text = ""; float index = 0; foreach (var drive in DriveInfo.GetDrives()) { Debug.Log($"Drive: {drive.Name} Root: { drive.RootDirectory}"); // Create a primitive type cube game object var gObj = Instantiate(DrivePrefab); // Calculate the position of the game object in the world space int x = 0; float y = index + 1f; int z = 0; // Position the game object in world space gObj.transform.position = new Vector3(x, y, z); gObj.name = drive.Name; // Add DataNode component and update the attributes for later usage gObj.AddComponent <MyDataNode>(); MyDataNode dn = gObj.GetComponent <MyDataNode>(); dn.Name = drive.Name; dn.Size = drive.TotalSize; dn.FullName = drive.RootDirectory.FullName; dn.IsDrive = true; dn.ParentObject = InactiveFolder; dn.CurrentPosition = gObj.transform.position; var textName = Instantiate(TextMeshProPrefab, gObj.transform); textName.transform.localScale = new Vector3(1f, 1f, 1f); textName.GetComponent <TextMeshPro>().text = dn.Name; textName.transform.SetParent(gObj.transform); index += 3f; } }
void Update() { #region HANDLE MOUSE INTERACTION 2 // Create a raycase from the screen-space into World Space, store the data in hitInfo Object bool Hoverhit = Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hitInfo); if (Hoverhit) { if (hitInfo.transform.GetComponent <MyDataNode>() != null) { // if there is a hit, we want to get the DataNode component to extract the information MyDataNode dn = hitInfo.transform.GetComponent <MyDataNode>(); txtHoveredOverNode.text = $"{dn.FullName}"; } } else { txtHoveredOverNode.text = $""; } #endregion // Check to see if the Left Mouse Button was clicked if (Input.GetMouseButtonDown(0)) { if (EventSystem.current.IsPointerOverGameObject()) { return; //return if we are clicking on UI. } float deltaTime = Time.time - prevClickTime; if (deltaTime <= delay) { clicks = 0; Debug.Log("Double Clicked"); // Create a raycase from the screen-space into World Space, store the data in hitInfo Object bool hit = Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hitInfo); if (hit) { if (!InactiveFolder.activeSelf) { InactiveFolder.SetActive(false); } if (hitInfo.transform.GetComponent <MyDataNode>() != null) { transform.position = hitInfo.transform.position; if (IsWheel) { transform.rotation = Quaternion.Euler(-90f, 0f, 0f); transform.position = new Vector3(transform.position.x, wheelY, transform.position.z); } else if (IsHelix) { transform.rotation = Quaternion.identity; transform.position = hitInfo.transform.position; } // if there is a hit, we want to get the DataNode component to extract the information MyDataNode dn = hitInfo.transform.GetComponent <MyDataNode>(); txtSelectedNode.text = $"Selected Node: {dn.FullName} Size Is: {dn.Size}"; dn.IsSelected = true; transform.position = dn.gameObject.transform.position; if (!dn.IsExpanded) { dn.ProcessNode(DoorPrefab, FilePrefab, TextMeshProPrefab); } if (dn.IsFolder || dn.IsDrive) { dn.IsExpanded = true; dn.gameObject.transform.SetParent(ActiveFolder.transform); } if (currentSelectedNode == null) { currentSelectedNode = dn; DisableNode(currentSelectedNode.gameObject); } else { //currentSelectedNode.transform.position = currentSelectedNode.CurrentPosition; //currentSelectedNode.transform.GetChild(0).gameObject.SetActive(true); currentSelectedNode.transform.SetParent(InactiveFolder.transform); if (!currentSelectedNode.FullName.Equals(dn.FullName)) { currentSelectedNode.transform.SetParent(currentSelectedNode.ParentObject.transform.GetChild(0)); } currentSelectedNode.IsSelected = false; EnableNode(currentSelectedNode.gameObject); //reanable the previous one currentSelectedNode = dn; DisableNode(currentSelectedNode.gameObject); //disable the current one if (dn.IsExpanded) { currentSelectedNode.transform.GetChild(0).gameObject.SetActive(true); } } if (IsHelix) { DisplayHelix(); } else { DisplayWheel(); } } } }//END DOUBLECLICK else if (clicks == 1) { clicks = 0; bool hit = Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hitInfo); if (hit) { Debug.Log(hitInfo.transform.name); MyDataNode dn = hitInfo.transform.GetComponent <MyDataNode>(); if (prevHit == false) { previousHit = hitInfo; prevHit = hit; //use to check that its not null } else { previousHit.transform.gameObject.GetComponent <MeshRenderer>().materials[1].SetFloat("_Outline", 0f); previousHit = hitInfo; } if (dn.IsDrive || dn.IsFile) { hitInfo.transform.gameObject.GetComponent <MeshRenderer>().materials[1].SetFloat("_Outline", 0.03f); } else { hitInfo.transform.gameObject.GetComponent <MeshRenderer>().materials[1].SetFloat("_Outline", 0.0007f); } } Debug.Log("Single Click"); } prevClickTime = Time.time; clicks++; } }
public void ProcessNode(GameObject DoorPrefab, GameObject FilePrefab, GameObject TextMeshProPrefab) { //fsscript = transform.gameObject.GetComponent<MyFileSystem>(); if (IsFolder || IsDrive) { // let's expand ... // Set a variable to the My Documents path. string docPath = FullName; DirectoryInfo diTop = new DirectoryInfo(docPath); int i = 0; try { //This is here to easily hide object that are not in the current directory. if (IsExpanded) { HideExpanded = ParentObject.transform.GetChild(0).gameObject; } else { HideExpanded = new GameObject("HideExpanded"); HideExpanded.transform.SetParent(transform); HideExpanded.transform.SetSiblingIndex(0); //ensure that it is always at position 0 } int samples = diTop.GetDirectories("*").Length; float rnd = 1; bool randomize = true; if (randomize) { rnd = UnityEngine.Random.value * samples; } float offset = 2.0f / samples; float increment = Mathf.PI * (3.0f - Mathf.Sqrt(5.0f)); foreach (var fi in diTop.EnumerateFiles()) { try { //var gObj = GameObject.CreatePrimitive(PrimitiveType.Cube); var gObj = Instantiate(FilePrefab); gObj.transform.localScale *= 0.1f; gObj.transform.SetParent(HideExpanded.transform); gObj.name = fi.FullName; gObj.AddComponent <MyDataNode>(); MyDataNode dn = gObj.GetComponent <MyDataNode>(); dn.Name = fi.Name; dn.Size = -1; dn.FullName = fi.FullName; dn.IsFolder = false; ///HANDLING FILES PERMISSION FileAttributes fileAttr = fi.Attributes; dn.hidden = ((fileAttr & FileAttributes.Hidden) == FileAttributes.Hidden) ? true : false; dn.system = ((fileAttr & FileAttributes.System) == FileAttributes.System) ? true : false; dn.readOnly = ((fileAttr & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) ? true : false; if (dn.hidden) { gObj.transform.GetComponent <Renderer>().material.SetColor("_Color", Color.black); } if (dn.system) { gObj.transform.GetComponent <Renderer>().material.SetColor("_Color", Color.red); } if (dn.readOnly) { gObj.transform.GetComponent <Renderer>().material.SetColor("_Color", Color.green); } //Storing information later to restore their original position in the helix dn.ParentObject = transform.gameObject; dn.CurrentPosition = gObj.transform.position; var textName = Instantiate(TextMeshProPrefab, gObj.transform); textName.GetComponent <TextMeshPro>().text = dn.Name; textName.transform.SetParent(gObj.transform); textName.transform.localScale *= 0.2f; } catch (UnauthorizedAccessException unAuthTop) { Debug.LogWarning($"{unAuthTop.Message}"); } i++; } //i = 0; foreach (var di in diTop.EnumerateDirectories("*")) { try { var gObj = Instantiate(DoorPrefab); gObj.transform.SetParent(HideExpanded.transform); parentNode = transform; float diScale = 0.25f; gObj.transform.localScale *= diScale; gObj.name = di.FullName; gObj.AddComponent <MyDataNode>(); MyDataNode dn = gObj.GetComponent <MyDataNode>(); dn.Name = di.Name; dn.Size = -1; dn.FullName = di.FullName; dn.IsFolder = true; //HANDLING FILE PERMISSION FileAttributes dirAttr = di.Attributes; dn.hidden = ((dirAttr & FileAttributes.Hidden) == FileAttributes.Hidden) ? true : false; dn.system = ((dirAttr & FileAttributes.System) == FileAttributes.System) ? true : false; dn.readOnly = ((dirAttr & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) ? true : false; if (dn.hidden) { gObj.transform.GetComponent <Renderer>().material.SetColor("_EmissionColor", Color.black); } if (dn.system) { gObj.transform.GetComponent <Renderer>().material.SetColor("_EmissionColor", Color.red); } if (dn.readOnly) { gObj.transform.GetComponent <Renderer>().material.SetColor("_EmissionColor", Color.green); } //Storing information later to restore their original position in the helix dn.ParentObject = transform.gameObject; dn.CurrentPosition = gObj.transform.position; var textName = Instantiate(TextMeshProPrefab, gObj.transform); textName.GetComponent <TextMeshPro>().text = dn.Name; textName.transform.SetParent(gObj.transform); Debug.Log($"{ di.FullName}\t\t{di.Parent}"); } catch (UnauthorizedAccessException unAuthDir) { Debug.LogWarning($"{unAuthDir.Message}"); } i++; } } catch (DirectoryNotFoundException dirNotFound) { Debug.LogWarning($"{dirNotFound.Message}"); } catch (UnauthorizedAccessException unAuthDir) { Debug.LogWarning($"unAuthDir: {unAuthDir.Message}"); } catch (PathTooLongException longPath) { Debug.LogWarning($"{longPath.Message}"); } } }