Exemple #1
0
    public virtual void UpdateInternal()
    {
        if (owner == null)
        {
            return;
        }

        Vector2 attachPoint = owner.transform.position + owner.transform.rotation * (Vector3)attachOffset;
        Vector2 direction   = attachPoint - rigidBody.position;
        float   distanceSqr = direction.sqrMagnitude;

        // accidental drop immunity when just pickup
        if (attachDropImmuninity > 0f)
        {
            attachDropImmuninity -= Time.deltaTime;
        }
        bool canDrop = attachDropImmuninity <= 0f;

        if (canDrop && distanceSqr > dropDistance * dropDistance)
        {
            owner.DropGrabbedObject(false);
            Drop(false);
            return;
        }

        // rotate
        rigidBody.MoveRotation(owner.transform.rotation * Quaternion.Euler(0, 0, -90));

        // close enough, stop moving (avoid jitter)
        if (distanceSqr < 0.15f)
        {
            rigidBody.velocity = Vector2.zero;
            return;
        }

        direction          = direction.normalized;
        rigidBody.velocity = direction * speed * 5f;         // extra speed to better match player
    }