예제 #1
0
    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();
            }
        }
    }
예제 #2
0
    // 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;
        }
    }
예제 #3
0
    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++;
        }
    }
예제 #4
0
    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}");
            }
        }
    }