Ejemplo n.º 1
0
    /* - - - - - OVERRIDE METHODS - - - - - */

    private void Update()
    {
        if ((dragging || (Input.GetKey(KeyCode.M) && selected)) && !deattached)
        {
            CalculateNextPosition();
            transform.localPosition = CalculateCenterPosition(box);

            /* Update the collision AFTER the position has been updated */
            SG.sharedCollisionMap.UpdateCollisionMap(this);

            int[] collided_with;
            if (SG.sharedCollisionMap.AmICollided(gameObject.GetInstanceID(), out collided_with))
            {
                if (!collided)
                {
                    ExecOnMyCollisionEnterCallbacks();
                }
                collided = true;
                SG.NotifyCollision(collided_with, gameObject.GetInstanceID());
            }
            else
            {
                // If transitioning from collided to non collided
                if (collided)
                {
                    // Notify that we are not longer in collision and cubes that are "collided upon" can reset to default state
                    SG.ClearCollision();
                    ExecOnMyCollisionExitCallbacks();
                }
                collided = false;

                // This are used to recover the last valid position if, for example, the user stops dragging a block during an intercception
                last_index    = box.cir;
                last_pos_rel  = box.cpr;
                last_position = transform.localPosition;
            }
        }
    }