void DrawVoxelSelectButtons(int index, SurforgeRig rig)
    {
        bool nextButton = false;

        if (rig.blockType == 2)
        {
            Quaternion arrowRotation = Quaternion.identity;
            arrowRotation.eulerAngles = new Vector3(cluster.voxels[index].transform.localEulerAngles.x,
                                                    cluster.voxels[index].transform.localEulerAngles.y,
                                                    cluster.voxels[index].transform.localEulerAngles.z);
            arrowRotation = arrowRotation * Quaternion.LookRotation(Vector3.right);
            nextButton    = Handles.Button(cluster.voxels[index].transform.position, arrowRotation, buttonSize, buttonSize, Handles.ConeCap);
        }

        else
        {
            if (rig.transform.position == Vector3.zero)
            {
                Handles.color = Color.red + Color.yellow;
                Quaternion originArrowRotation = Quaternion.identity;
                originArrowRotation = originArrowRotation * Quaternion.LookRotation(Vector3.right);
                nextButton          = Handles.Button(cluster.voxels[index].transform.position, originArrowRotation, buttonSize, buttonSize, Handles.ConeCap);
            }
            else
            {
                nextButton = Handles.Button(cluster.voxels[index].transform.position, Quaternion.identity, buttonSize, buttonSize, Handles.CubeCap);
            }
        }

        if (nextButton)
        {
            SelectVoxel(cluster.voxels[index]);
        }
    }
 void Setup()
 {
     targetRig = (SurforgeRig)target;
     v         = targetRig.gameObject.transform;
     parent    = v.transform.parent;
     cluster   = (SurforgeCluster)parent.GetComponent <SurforgeCluster>();
 }
    void OnSceneGUI()
    {
        //Tools.current = Tool.None;


        for (int i = 0; i < cluster.voxels.Count; i++)
        {
            if (cluster.voxels[i] != null)
            {
                SurforgeRig rig = (SurforgeRig)cluster.voxels[i].GetComponent <SurforgeRig>();
                if (rig.blockType == 0)
                {
                    Handles.color = new Color(0, 0, 0, 1);
                }
                if (rig.blockType == 2)
                {
                    Handles.color = Color.blue + Color.cyan;
                }
                if (rig.blockType == 3)
                {
                    Handles.color = new Color(1, 1, 0, 1);
                }
                if (rig.blockType == 4)
                {
                    Handles.color = new Color(1, 1, 1, 1);
                }
                if (rig.blockType == 5)
                {
                    Handles.color = new Color(1, 0.5f, 1, 1);
                }
                if (rig.blockType == 6)
                {
                    Handles.color = new Color(1, 1, 1, 0.3f);
                }
                if (rig.blockType == 7)
                {
                    Handles.color = new Color(0.5f, 1, 1, 1);
                }
                if (rig.blockType == 10)
                {
                    Handles.color = new Color(0.5f, 0.5f, 1, 1);
                }

                DrawVoxelSelectButtons(i, rig);
            }
        }
    }
    void AddVoxel(Vector3 voxelPos)
    {
        GameObject voxelObj = new GameObject();

        voxelObj.name = "vox";
        voxelObj.transform.position = voxelPos;
        voxelObj.transform.parent   = cluster.transform;

        SurforgeRig newVoxelRig = voxelObj.AddComponent <SurforgeRig>();

        newVoxelRig.blockType          = targetRig.blockType;
        newVoxelRig.linkType           = targetRig.linkType;
        newVoxelRig.transform.rotation = targetRig.transform.rotation;

        cluster.voxels.Add(voxelObj.transform);
        Selection.activeObject = voxelObj;
    }
    void OnSceneGUI()
    {
        //Tools.current = Tool.None;

        int activeClusterIndex = 0;

        for (int i = 0; i < cluster.voxels.Count; i++)
        {
            if (cluster.voxels[i] != null)
            {
                SurforgeRig rig = (SurforgeRig)cluster.voxels[i].GetComponent <SurforgeRig>();

                if (rig == targetRig)
                {
                    activeClusterIndex = i;
                }


                if (rig.blockType == 0)
                {
                    Handles.color = new Color(0, 0, 0, 1);
                }
                if (rig.blockType == 2)
                {
                    Handles.color = Color.blue + Color.cyan;
                }
                if (rig.blockType == 3)
                {
                    Handles.color = new Color(1, 1, 0, 1);
                }
                if (rig.blockType == 4)
                {
                    Handles.color = new Color(1, 1, 1, 1);
                }
                if (rig.blockType == 5)
                {
                    Handles.color = new Color(1, 0.5f, 1, 1);
                }
                if (rig.blockType == 6)
                {
                    Handles.color = new Color(1, 1, 1, 0.3f);
                }
                if (rig.blockType == 7)
                {
                    Handles.color = new Color(0.5f, 1, 1, 1);
                }
                if (rig.blockType == 10)
                {
                    Handles.color = new Color(0.5f, 0.5f, 1, 1);
                }


                DrawVoxelSelectButtons(i, rig);
            }
        }

        SurforgeRig activeRig = (SurforgeRig)cluster.voxels[activeClusterIndex].GetComponent <SurforgeRig>();

        DrawCubeLines(activeRig.transform.position);
        DrawVoxelAddHandles();
    }