Example #1
0
    public void ManipulateArea(ItemMovement.GravityMode mode, Vector3 followMovement)
    {
        oldItems    = itemsInside;
        itemsInside = Physics.OverlapSphere(transform.position, radius);
        ItemMovement item;

        bool[] keepOld;

        if (oldItems != null)
        {
            keepOld = new bool[oldItems.Length];
        }
        else
        {
            keepOld = new bool[0];
        }

        for (int i = 0; i < itemsInside.Length; i++)
        {
            item = itemsInside[i].GetComponent <ItemMovement>();

            if (item)
            {
                item.Move(followMovement);
                item.SetGravityMode(mode);

                // check which colliders where inside last and this frame
                for (int old = 0; old < oldItems.Length; old++)
                {
                    if (itemsInside[i] == oldItems[old])
                    {
                        keepOld[old] = true;
                        break;
                    }
                }
            }
        }

        // colliders that left area set to default mode
        for (int i = 0; i < keepOld.Length; i++)
        {
            item = oldItems[i].GetComponent <ItemMovement>();
            if (item && !keepOld[i])
            {
                item.SetGravityMode(ItemMovement.GravityMode.World);
            }
        }
    }
Example #2
0
    private void RaycastHandling()
    {
        if (Physics.Raycast(camTransform.position, camTransform.forward, out hit, float.MaxValue))
        {
            lastItem    = currentItem;
            currentItem = hit.collider.GetComponent <ItemMovement>();

            if (currentItem != null)
            {
                gravityMode = currentItem.GetGravityMode();
            }

            if (currentItem != null && !alreadyActived)
            {
                currentItem.SetGravityMode(ItemMovement.GravityMode.Self);
            }

            if (lastItem != null && currentItem != lastItem && !alreadyActived)
            {
                lastItem.SetGravityMode(ItemMovement.GravityMode.World);
            }
        }

        if (currentItem == null)
        {
            if (alreadyActived)
            {
                currentItem = lastItem;
            }

            lastItem = null;
        }

        if (currentItem != null)
        {
            gravityMode = currentItem.GetGravityMode();
        }
    }