Exemplo n.º 1
0
        public void Drop()
        {
            player.CmdRemoveItemAuthority(item_network_identity);
            Debug.Log("ATTEMPT TO REMOVE AUTHORITY: EXPECTED = False, RESULT = " + item_network_identity.hasAuthority.ToString());

            player.CmdSetHolding(false, "");
            player.CmdSetItemBeingHeld(false, item_network_identity);
            isBeingHeld = false;
            player.item = null;

            var colliders    = GetComponents <Collider>().ToList();
            var trigger_size = Vector3.zero;

            colliders.ForEach(collider =>
            {
                if (!collider.isTrigger)
                {
                    collider.enabled = true;
                }
                else
                {
                    collider.enabled = true;
                    trigger_size     = collider.bounds.size;
                    collider.enabled = false;
                }
            });

            rb.isKinematic = false;
            rb.constraints = RigidbodyConstraints.None;
            rb.useGravity  = true;

            var drop_position = Vector3.zero;

            var isUsingItem = player.Ani.GetBool("UsingItem");

            if (isUsingItem)
            {
                //DROP ITEM INFRONT OF PLAYER
                var front_drop_position = trigger_size;
                front_drop_position.x = 0;
                front_drop_position.y = 0;
                front_drop_position.z = front_drop_position.z * DropItemOffset;

                drop_position = player.transform.TransformPoint(front_drop_position);
            }
            else
            {
                //DROP ITEM ON SIDE OF PLAYER
                var side_drop_position = trigger_size;
                side_drop_position.x = side_drop_position.x * DropItemOffset;
                side_drop_position.y = 0;
                side_drop_position.z = 0;

                drop_position = player.transform.TransformPoint(side_drop_position);
            }

            drop_position.y = transform.position.y;

            //var drop_position = player.HoldingItemPosition.position;
            //trigger_size.y = 0;
            //trigger_size.x = 0;
            //trigger_size.z = -trigger_size.z;

            //drop_position += trigger_size * DropItemOffset;

            RaycastHit hit;

            if (Physics.Raycast(transform.position, -Vector3.up, out hit))
            {
                //PUT THE ITEM ON THE GROUND
                drop_position.y -= hit.distance;
            }

            rb.transform.position = (drop_position);
            //rb.MovePosition(drop_position);
            rb.velocity = -Vector3.up * DropItemPower;

            //rb.MovePosition(drop_position);

            player = null; //REMOVE REFRENCE TO PLAYER
        }