//What happens when contact is made with the item.
    private void OnContact(ListObjectInstance itemInstance)
    {

        switch (itemBehavior)
        {
            case ItemBehavior.moveItem:
                itemInstance.ThisItemMoved();
                break;
            case ItemBehavior.openItem:
                itemInstance.ThisItemSelected();
                break;
            case ItemBehavior.closeItem:
                itemInstance.ThisItemClosed();
                break;
            case ItemBehavior.deleteItem:
                itemInstance.ThisItemDeleted();
                break;
            default:
                Debug.Log("ItemOnContactBehavior: No item behavior selected.");
                break;
        }


        if (contactFX != null) Destroy(Instantiate(contactFX, transform), 2);
        if (contactAudio != null) source.PlayOneShot(contactAudio);

        if (destroyAfter) Destroy(itemInstance.gameObject);
    }
    private void OnTriggerEnter(Collider other)
    {
        ListObjectInstance itemInstance = other.gameObject.GetComponent <ListObjectInstance>();

        if (itemInstance != null)
        {
            if (onTriggerContact != null)
            {
                onTriggerContact.Invoke(itemInstance);
            }
        }
    }
    private void OnCollisionEnter(Collision collision)
    {
        ListObjectInstance itemInstance = collision.gameObject.GetComponent <ListObjectInstance>();

        if (itemInstance != null)
        {
            if (onCollisionContact != null)
            {
                onCollisionContact.Invoke(itemInstance);
            }
        }
    }
    private IEnumerator SpawnItem(Vector3 spawnPosition, ListObjectInfo item, float spawnTime)
    {
        //The drop start position is slightly above spawn position by the ammount of the distance between items
        GameObject         itemVisualRepresentation = Instantiate(listItemObjectPrefab, transform.position + spawnPosition, transform.localRotation);
        Vector3            dropStartPos             = new Vector3(spawnPosition.x, spawnPosition.y + distBetweenItemCenter, spawnPosition.z);
        ListObjectInstance itemInstance             = itemVisualRepresentation.GetComponent <ListObjectInstance>();


        itemVisualRepresentation.transform.SetParent(gameObject.transform);
        itemVisualRepresentation.name = item.ObjectName;
        itemVisualRepresentation.transform.localPosition = dropStartPos;

        item.ObjectTransform = itemVisualRepresentation.transform;
        item.ParentTransform = transform;
        item.OriginPos       = spawnPosition;
        item.OriginRot       = new Quaternion(0, 0, 0, 0);

        //Give the item information about what it is.
        itemInstance.itemInfo = item;
        //Give the item a referance to the view. **Dude this is stupid wise up and fix this**
        itemInstance.viewReferance = GetComponent <View>();



        //Show 3D model of icon.
        if (item.IconModel != null)
        {
            ShowItemIconGameObject(item, itemVisualRepresentation);
        }

        //Wait for move to finish.
        yield return(StartCoroutine(MoveOverSeconds(itemVisualRepresentation.transform, dropStartPos, spawnPosition, spawnTime)));

        //Instantiate particle effects.
        if (spawnEffectPrefab != null)
        {
            Destroy(Instantiate(spawnEffectPrefab, itemVisualRepresentation.transform), 0.5f);
        }
    }