// Use this for initialization
    public override void Awake()
    {
        base.Awake();

        SetAsDock(true);
        SetCollideable(true);
        AddAcceptedDocktype(typeof(ClipCubeAttachment));
        m_cubeHolders = new ClipCubeHolder[m_cubeDepth, m_cubeHeight, m_cubeWidth];

        for (int x = 0; x < m_cubeDepth; x++)
        {
            for (int y = 0; y < m_cubeHeight; y++)
            {
                for (int z = 0; z < m_cubeWidth; z++)
                {
                    Transform cubePlaceholder = UIFactory.CreateClipPlaceholder().transform;
                    cubePlaceholder.position      = m_cubeParent.position;
                    cubePlaceholder.parent        = m_cubeParent;
                    cubePlaceholder.localPosition = new Vector3(x * m_cubeSpacingMultiplier, y * m_cubeSpacingMultiplier, z * m_cubeSpacingMultiplier);

                    ClipCubeHolder holder = new ClipCubeHolder();
                    holder.placeholder     = cubePlaceholder;
                    holder.x               = x;
                    holder.y               = y;
                    holder.z               = z;
                    m_cubeHolders[x, y, z] = holder;
                }
            }
        }
    }
    public void TriggerClip(int[] coords, int trigger)
    {
        ClipCubeHolder holder = GetCubeHolder(trigger, coords[1], coords[2]);

        if (holder.attach != null)
        {
            ClipCubeAttachment clip = holder.attach as ClipCubeAttachment;
            clip.musicRef.Play();
        }
    }
    public override void RemoveDockableAttachment(BaseAttachment attach)
    {
        base.RemoveDockableAttachment(attach);
        attach.transform.parent = null;
        ClipCubeHolder holder = FindAttachmentHolder(attach);

        if (holder != null)
        {
            holder.attach = null;
        }
    }
 public override bool AddDockableAttachment(BaseAttachment attach)
 {
     if (base.AddDockableAttachment(attach))
     {
         ClipCubeHolder holder = FindClosestHolder(attach.transform.position);
         if (holder.attach == null)
         {
             attach.SetCloneable(false);
             holder.attach           = attach;
             attach.transform.parent = holder.placeholder;
             iTween.MoveTo(attach.gameObject, iTween.Hash("position", Vector3.zero, "islocal", true, "time", 0.5f));
             attach.transform.rotation = holder.placeholder.rotation;
             return(true);
         }
     }
     return(false);
 }
    public ClipCubeHolder FindClosestHolder(Vector3 position)
    {
        float          closestDist   = -1.0f;
        ClipCubeHolder closestHolder = null;

        foreach (ClipCubeHolder holder in m_cubeHolders)
        {
            float dist = Vector3.Distance(holder.placeholder.position, position);
            if (closestDist < 0 || dist < closestDist)
            {
                closestHolder = holder;
                closestDist   = dist;
            }
        }
        //return m_cubeHolders[Mathf.RoundToInt(position.z), Mathf.RoundToInt(position.y), Mathf.RoundToInt(position.x)];
        return(closestHolder);
    }