public void Carry(EntityComponent player) { joint = gameObject.AddComponent <FixedJoint>(); joint.connectedBody = player.GetComponent <Rigidbody>(); joint.massScale = MASS_SCALE * rb.mass; joint.breakForce = BREAK_FORCE; StartCoroutine(PickUpAnimCoroutine(player)); }
private IEnumerator PickUpAnimCoroutine(EntityComponent player) { joint.enableCollision = false; // calculate the start anchor... joint.autoConfigureConnectedAnchor = true; yield return(new WaitForFixedUpdate()); if (joint == null) { yield break; } Vector3 startAnchor = joint.connectedAnchor; joint.autoConfigureConnectedAnchor = false; Vector3 carryVector = CARRY_VECTOR; carryVector += Vector3.down * player.GetComponent <CapsuleCollider>().height / 2; Bounds bounds = GetRigidbodyBounds(rb); carryVector += Vector3.up * (rb.transform.position.y - bounds.min.y); // get closest point when object is moved in front of player Vector3 carryPoint = rb.ClosestPointOnBounds( rb.transform.position - player.transform.forward * 100f); float carryDist = Vector3.Project(carryPoint - rb.transform.position, player.transform.forward).magnitude; carryVector += Vector3.forward * carryDist; float startTime = Time.fixedTime; while (Time.fixedTime - startTime < PICK_UP_TIME) { joint.connectedAnchor = Vector3.Slerp(startAnchor, carryVector, EaseInOutSine((Time.fixedTime - startTime) / PICK_UP_TIME)); yield return(new WaitForFixedUpdate()); if (joint == null) { yield break; } } joint.connectedAnchor = carryVector; joint.enableCollision = true; }
private void Start() { //set the interface value assignealbe = assigneableAb.GetComponent <IWorkerAssigneable <int> >(); UIManager.Instance.AddWorkerAssigner(this); }