public override bool ConfirmRune() { if (hasBeenConfirmed) { return(false); } Transform rightHandTransform = player.RightHand.transform; int size = Physics.RaycastNonAlloc(rightHandTransform.position, rightHandTransform.forward, hits, 100.0f, layerMask); if (size > 0) { float min = float.MaxValue; int index = -1; for (int i = 0; i < size; i++) { if (hits[i].distance < min) { index = i; min = hits[i].distance; } } if (index == -1) { return(false); } IRuneInteractable interactable = hits[index].collider.GetComponent <IRuneInteractable>(); if (interactable != null) { if (PlayerInput.Instance.Confirm) { hasBeenConfirmed = true; if (laserIsNull) { laser = GameObject.Instantiate(laserPrefab, rightHandTransform).GetComponent <Laser>(); laserIsNull = false; } else { laser.gameObject.SetActive(true); } Sequence s = DOTween.Sequence(); s.Append(DOTween.To(() => laser.GetPosition(1), x => laser.SetPosition(1, x), laser.transform.InverseTransformPoint(interactable.transform.position), 1)); s.OnComplete(() => { PrepareInteractable(interactable); }); return(true); } } } return(false); }
private void PrepareInteractable(IRuneInteractable interactable) { runeInteractable = interactable; interactableRigidbody = interactable.GetComponent <Rigidbody>(); interactableRigidbody.useGravity = false; interactableRigidbody.constraints = RigidbodyConstraints.FreezeRotation; interactableRigidbody.drag = 0.3f; IsRunning = true; isInteractableRigidbodyNotNull = true; }