private void OnTriggerStay(Collider other) { if ((Type != BlockType.Empty && Type != BlockType.AlwaysEmpty) || PipeObject != null) return; bool straight = other.CompareTag("StraightPipe"); bool corner = other.CompareTag("CornerPipe"); if (straight || corner) { PuzzlePipe pipe = other.GetComponent<PuzzlePipe>(); if (!pipe.Placed && !pipe.Grabbed) { PipeObject = other.gameObject; PipeObject.transform.position = transform.position; PipeObject.transform.forward = transform.forward; Grabber.Instance.Release(); pipe.PlacePipe(this); if (straight) { Pipe = PipeType.Straight; FlowDir = Flow.LeftRight; Sides = new List<Side>( new Side[] { Side.Left, Side.Right }); } else if (corner) { Pipe = PipeType.Corner; FlowDir = Flow.UpRight; Sides = new List<Side>( new Side[] { Side.Up, Side.Right }); } RelatedPuzzle.CheckCompletion(); } } }
public void Release() { if (!holdingRb) { return; } holding = false; holdingRb.useGravity = true; if (holdingRb.tag.IndexOf("Pipe") > -1) { PuzzlePipe pipe = holdingRb.GetComponent <PuzzlePipe>(); pipe.Grabbed = false; } holdingRb = null; }
public void ThrowRelease() { if (!holdingRb) { return; } holding = false; holdingRb.useGravity = true; if (holdingRb.tag.IndexOf("Pipe") > -1) { PuzzlePipe pipe = holdingRb.GetComponent <PuzzlePipe>(); pipe.Grabbed = false; } holdingRb.AddForce(Camera.main.transform.forward * 10f, ForceMode.Impulse); holdingRb = null; AudioController.Instance.PlayThrowSoundClip(); }
private void Update() { if (holding) { Vector3 targetPos = Camera.main.transform.position + Camera.main.transform.forward * holdDistance; float distance = Vector3.Distance(holdingRb.transform.position, targetPos); Vector3 dir = targetPos - holdingRb.position; holdingRb.velocity = dir * dragCurve.Evaluate(distance); holdingRb.transform.forward = -Camera.main.transform.forward; var mouseScroll = Input.mouseScrollDelta.y; holdDistance -= mouseScroll * Time.deltaTime * 2f; holdDistance = Mathf.Clamp(holdDistance, holdDistanceMin, holdDistanceMax); if (Input.GetKeyDown(KeyCode.R)) { if (holdingRb.CompareTag("Beer")) { AudioController.Instance.PlayBeerSoundClip(); ThrowUpRelease(); } else if (holdingRb.CompareTag("Radio")) { holdingRb.GetComponent <RadioPlayer>().ForceChangeMusicClip(); } } else if (Input.GetKeyDown(KeyCode.E)) { Release(); } else if (Input.GetMouseButtonDown(1)) { ThrowRelease(); } } else if (Input.GetKeyDown(KeyCode.E)) { if (Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out hit, maxDistance, GrabbableLayer)) { holdingRb = hit.collider.GetComponent <Rigidbody>(); holdingRb.isKinematic = false; holdingRb.transform.SetParent(null); holdingRb.useGravity = false; holding = true; if (holdingRb.tag.IndexOf("Pipe") > -1) { PuzzlePipe pipe = holdingRb.GetComponent <PuzzlePipe>(); pipe.DetachPipe(); pipe.Grabbed = true; } } else if (Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out hit, maxDistance, InteractableLayer)) { if (hit.collider.CompareTag("Electric")) { hit.collider.GetComponentInParent <ElectricPuzzle>().ToggleFuse(hit.transform.name); } else if (hit.collider.CompareTag("Valve")) { hit.collider.GetComponentInParent <GasPuzzleValve>().Interact(); } } } if (Input.GetKeyDown(KeyCode.R)) { RaycastHit rayhit; if (Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out rayhit, maxDistance, GrabbableLayer)) { if (rayhit.collider.tag.IndexOf("Pipe") > -1) { rayhit.collider.GetComponent <PuzzlePipe>().AttachedBlock.Rotate(); } } } }