private void OnCollisionEnter(Collision collision) { if (collision.gameObject == heldObj && holdingObj) { return; } if (selectableLayer == (selectableLayer.value | 1 << collision.gameObject.layer)) { if (numberOfCollisionOld == 0) { return; } //highlights only the most recent object currentHighlightedObj = collision.gameObject; if (highlight != null) { highlightOld = highlight; highlightOld.SetAlternateSprite(false); } highlight = currentHighlightedObj.GetComponent <Highlightable>(); if (highlight.highlightable) { highlight.SetAlternateSprite(true); } else { highlight = null; currentHighlightedObj = null; } } }
private void OnCollisionStay(Collision collision) { if (collision.gameObject == heldObj && holdingObj) { return; } if (selectableLayer == (selectableLayer.value | 1 << collision.gameObject.layer)) { ++numberOfCollisions; if (numberOfCollisions > 1) //checks the y pos, of the objects. then it only highlights the lowest one. { secondCollYPos = collision.gameObject.transform.position.y; if (highlightOld != null) { highlightOld.SetAlternateSprite(false); } if (highlight != null) { highlightOld = highlight; highlightOld.SetAlternateSprite(false); } if (secondCollYPos < firstCollYPos) { currentHighlightedObj = collision.gameObject; highlight = currentHighlightedObj.GetComponent <Highlightable>(); if (highlight.highlightable) { highlight.SetAlternateSprite(true); } else { highlight = null; currentHighlightedObj = null; } } else { currentHighlightedObj = firstCollision; highlight = currentHighlightedObj.GetComponent <Highlightable>(); if (highlight.highlightable) { highlight.SetAlternateSprite(true); } else { highlight = null; currentHighlightedObj = null; } } return; } else { firstCollYPos = collision.gameObject.transform.position.y; firstCollision = collision.gameObject; if (numberOfCollisionOld > 1 || numberOfCollisionOld == 0) { return; } } if (collision.gameObject != currentHighlightedObj) { //highlights only the most recent object currentHighlightedObj = collision.gameObject; if (highlight != null) { highlightOld = highlight; highlightOld.SetAlternateSprite(false); } highlight = currentHighlightedObj.GetComponent <Highlightable>(); if (highlight.highlightable) { highlight.SetAlternateSprite(true); } else { highlight = null; currentHighlightedObj = null; } } } }
void HandledInteract() { if (((controller.playerOne && Input.GetAxisRaw("InteractOne") == 1) || (!controller.playerOne && Input.GetAxisRaw("InteractTwo") == 1)) && !performedInteraction) { if (currentHighlightedObj != null) { InteractionType type = highlight.interactionType; switch (type) { case InteractionType.PickUp: if (heldObj == null) { performedInteraction = true; holdingObj = true; heldObj = currentHighlightedObj; heldObjHighlight = highlight; heldObj.transform.parent = transform; heldObj.transform.localPosition = handsTransform.localPosition; currentHighlightedObj = null; highlight.SetAlternateSprite(false); } break; case InteractionType.Activate: //actions possible if you are holding or not holding a part if (heldObj != null) //actions only possible while holding parts { performedInteraction = true; //checks to see if you can use a part to repair RecieveParts partsReciver; currentHighlightedObj.TryGetComponent(out partsReciver); if (partsReciver != null) { if (partsReciver.RecivePart(heldObjHighlight.partID)) { performedInteraction = true; holdingObj = false; controller.controller.center = new Vector3(0, 0, 0); Destroy(heldObj); if (highlight != null) { highlight.SetAlternateSprite(false); currentHighlightedObj = null; highlight = null; } heldObjHighlight = null; heldObj = null; return; } } //checks to see if you can activate a light breaker ChangeLight changeLight; currentHighlightedObj.TryGetComponent(out changeLight); if (changeLight) { performedInteraction = true; changeLight.SwitchLights(transform.position); return; } //checks to see if you can pass a part PassPart partsPasser; currentHighlightedObj.TryGetComponent(out partsPasser); if (partsPasser != null) { if (partsPasser.TransferPart(heldObj, transform.position)) { performedInteraction = true; holdingObj = false; controller.controller.center = new Vector3(0, 0, 0); heldObj.transform.parent = null; heldObjHighlight = null; heldObj = null; return; } } } else //actions only possible while not holding parts { //checks to see if you can activate a light breaker ChangeLight changeLight; currentHighlightedObj.TryGetComponent(out changeLight); if (changeLight) { performedInteraction = true; changeLight.SwitchLights(transform.position); } } break; default: Debug.Log("error for " + currentHighlightedObj.name); break; } } if (currentHighlightedObj == null && !performedInteraction)//put down an object { if (heldObj != null) { performedInteraction = true; holdingObj = false; controller.controller.center = new Vector3(0, 0, 0); heldObj.transform.parent = null; heldObjHighlight = null; heldObj = null; } } } if (((controller.playerOne && Input.GetAxisRaw("InteractOne") == 0) || (!controller.playerOne && Input.GetAxis("InteractTwo") == 0)) && performedInteraction) { performedInteraction = false; } }