private void Update() { if (isCarrying) { // TODO: if object is hindered, Drop(); Carry(carriedObject); if (Input.GetMouseButtonDown(0)) { Drop(); } } else { if (Input.GetMouseButtonDown(0)) { pickupRay = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(pickupRay, out pickupHit, rayDistance)) { ILevitatable obj = pickupHit.transform.gameObject.GetInterface <ILevitatable>(); if (obj != null) { Pickup(obj); } } } } }
private void Carry(ILevitatable gObject) { Vector3 pos = Vector3.Lerp(gObject.Rigidbody.transform.position, carryTarget.position, Time.deltaTime * followSpeed); gObject.Rigidbody.MovePosition(pos); gObject.Rigidbody.transform.position = Vector3.Lerp(gObject.Rigidbody.transform.position, carryTarget.position, Time.deltaTime * followSpeed); gObject.Rigidbody.transform.rotation = Quaternion.Slerp(gObject.Rigidbody.transform.rotation, carryTarget.rotation, Time.deltaTime * followSpeed); }
private void Pickup(ILevitatable gObject) { carriedObject = gObject; isCarrying = true; gObject.DestroyEvent += OnCarriedObjectDestroyEvent; gObject.OnLevitateStart(this); carriedObject.Rigidbody.useGravity = false; carriedObject.Rigidbody.isKinematic = true; }
private void Drop() { carriedObject.DestroyEvent -= OnCarriedObjectDestroyEvent; carriedObject.OnLevitateStop(this); carriedObject.Rigidbody.useGravity = true; carriedObject.Rigidbody.isKinematic = false; isCarrying = false; carriedObject = null; }