示例#1
0
    private void PickUpObject()
    {
        if (pickupable != null)
        {
            var fabricator = (Fabricatable)(pickupable.GetComponent("Fabricatable"));
            if (pickupable.GetComponent <Rigidbody>() == null)
            {
                var tMesh = fabricator.TDtext.GetComponent <TextMesh>();
                var rest  = int.Parse(tMesh.text);
                if (rest == 0)
                {
                    return;
                }

                tMesh.text = (rest - 1).ToString();
                var position = pickupable.transform.position;
                var size     = pickupable.transform.lossyScale;
                fabricator = (Fabricatable)(pickupable.GetComponent("Fabricatable"));
                var bonus = fabricator.bonus;

                pickupable       = Instantiate(fabricator.Fabricator);
                fabricator       = (Fabricatable)(pickupable.GetComponent("Fabricatable"));
                fabricator.bonus = bonus;
                tMesh            = fabricator.TDtext.GetComponent <TextMesh>();

                tMesh.text = (rest).ToString();

                pickupable.transform.localPosition = position;
                pickupable.transform.localScale    = size;
            }

            fJoint.connectedBody = pickupable.GetComponent <Rigidbody>();
            effect = pickupable.GetComponent <ThrownEffect>();
            if (effect != null)
            {
                effect.bonus = fabricator.bonus;
            }
            throwing  = false;
            throwable = null;
        }
        else
        {
            fJoint.connectedBody = null;
        }
    }
示例#2
0
    private void FixedUpdate()
    {
        if (throwing && throwable != null)
        {
            Transform origin;
            if (trackedObj.origin != null)
            {
                origin = trackedObj.origin;
            }
            else
            {
                origin = trackedObj.transform.parent;
            }

            float slow = (float)Math.Pow(throwable.mass, 1.0 / 3.0);
            if (effect != null)
            {
                effect.Throw();
                effect = null;
            }

            if (origin != null)
            {
                throwable.velocity        = origin.TransformVector(Controller.velocity / slow);
                throwable.angularVelocity = origin.TransformVector(Controller.angularVelocity * rotateSpeed / slow);
            }
            else
            {
                throwable.velocity        = (Controller.velocity / slow);
                throwable.angularVelocity = (Controller.angularVelocity * rotateSpeed / slow);
            }

            throwable.maxAngularVelocity = throwable.velocity.magnitude;
        }
        throwing = false;
    }