private void MakeMesh() { timer += Time.deltaTime; if (timer < maxTime) { return; } if (beams.Count <= 0) { return; } lightup.Light(); foreach (BeamPair pair in beams) { Vector3 left = pair.Beam1.Point; Vector3 leftEnd; Vector3 right = pair.Beam2.Point; Vector3 rightEnd; RaycastHit2D leftHit = new RaycastHit2D(); RaycastHit2D rightHit = new RaycastHit2D(); bool reflectL = false; bool reflectR = false; ReflectionHandler l = null; ReflectionHandler r = null; BeamFOV.Beam point1 = new BeamFOV.Beam(); BeamFOV.Beam point2 = new BeamFOV.Beam(); col.enabled = false; leftHit = Physics2D.Raycast(left, pair.Beam1.Dir, pair.Beam1.Distance, ObstacleMask + CharacterMask + InteractableMask); rightHit = Physics2D.Raycast(right, pair.Beam2.Dir, pair.Beam2.Distance, ObstacleMask + CharacterMask + InteractableMask); //myHandler.handler.AddHit(leftHit); //myHandler.handler.AddHit(rightHit); if (myHandler.handler.bulb.power == Bulb.Power.XRAY) { rightHit = Physics2D.Raycast(right, pair.Beam2.Dir, pair.Beam2.Distance, CharacterMask + InteractableMask); } if (myHandler.handler.bulb.power == Bulb.Power.XRAY) { leftHit = Physics2D.Raycast(left, pair.Beam1.Dir, pair.Beam1.Distance, CharacterMask + InteractableMask); } if (leftHit.collider == null) { leftEnd = left + pair.Beam1.Dir * pair.Beam1.Distance; } else if (InteractableMask == (InteractableMask | (1 << leftHit.collider.gameObject.layer))) { myHandler.handler.AddInteractable(leftHit.collider.gameObject.transform); if (myHandler.handler.bulb.power == Bulb.Power.XRAY) { leftHit = Physics2D.Raycast(left, pair.Beam1.Dir, pair.Beam1.Distance, CharacterMask); } else { leftHit = Physics2D.Raycast(left, pair.Beam1.Dir, pair.Beam1.Distance, ObstacleMask + CharacterMask); } } else { myHandler.handler.AddHit(leftHit); } if (rightHit.collider == null) { rightEnd = right + pair.Beam2.Dir * pair.Beam2.Distance; } else if (InteractableMask == (InteractableMask | (1 << rightHit.collider.gameObject.layer))) { myHandler.handler.AddInteractable(rightHit.collider.gameObject.transform); if (myHandler.handler.bulb.power == Bulb.Power.XRAY) { rightHit = Physics2D.Raycast(right, pair.Beam2.Dir, pair.Beam2.Distance, CharacterMask); } else { rightHit = Physics2D.Raycast(right, pair.Beam2.Dir, pair.Beam2.Distance, ObstacleMask + CharacterMask); } } else { myHandler.handler.AddHit(rightHit); } col.enabled = true; if (leftHit.collider == null) { leftEnd = left + pair.Beam1.Dir * pair.Beam1.Distance; } else { leftEnd = leftHit.point; reflectL = true; l = leftHit.collider.GetComponent <ReflectionHandler>(); float deltaD = pair.Beam1.Distance - (leftEnd - left).magnitude; point1 = new BeamFOV.Beam(leftEnd, deltaD, Vector3.Reflect(pair.Beam1.Dir, leftHit.normal)); } if (rightHit.collider == null) { rightEnd = right + pair.Beam2.Dir * pair.Beam2.Distance; } else { rightEnd = rightHit.point; reflectR = true; r = rightHit.collider.GetComponent <ReflectionHandler>(); float deltaD = pair.Beam2.Distance - (rightEnd - right).magnitude; point2 = new BeamFOV.Beam(rightEnd, deltaD, Vector3.Reflect(pair.Beam2.Dir, rightHit.normal)); } if (reflectL && reflectR && l != null) { if (l == r) { l.AddBeam(point1, point2); } } int topLeft = AddPoint(leftEnd); int topRight = AddPoint(rightEnd); int botLeft = AddPoint(left); int botRight = AddPoint(right); AddRect(topLeft, topRight, botLeft, botRight); } }
private void MakeMesh() { left = transform.position; left -= transform.right * width / 2.0f; right = transform.position; right += transform.right * width / 2.0f; leftHit = new RaycastHit2D(); rightHit = new RaycastHit2D(); bool reflectL = false; bool reflectR = false; ReflectionHandler l = null; ReflectionHandler r = null; Beam point1 = new Beam(); Beam point2 = new Beam(); leftHit = Physics2D.Raycast(left, transform.up, distance, ObstacleMask + CharacterMask + InteractableMask + xrayProof); rightHit = Physics2D.Raycast(right, transform.up, distance, ObstacleMask + CharacterMask + InteractableMask + xrayProof); if (handler.bulb.power == Bulb.Power.XRAY) { leftHit = Physics2D.Raycast(left, transform.up, distance, CharacterMask + InteractableMask + xrayProof); } if (handler.bulb.power == Bulb.Power.XRAY) { rightHit = Physics2D.Raycast(right, transform.up, distance, CharacterMask + InteractableMask + xrayProof); } if (leftHit.collider == null) { leftEnd = left + transform.up * distance; } else if (InteractableMask == (InteractableMask | (1 << leftHit.collider.gameObject.layer))) { setLists(leftHit); if (handler.bulb.power == Bulb.Power.XRAY) { leftHit = Physics2D.Raycast(left, transform.up, distance, CharacterMask + xrayProof); } else { leftHit = Physics2D.Raycast(left, transform.up, distance, ObstacleMask + CharacterMask + xrayProof); } if (leftHit.collider == null) { leftEnd = left + transform.up * distance; } else if (xrayProof == (xrayProof | (1 << leftHit.collider.gameObject.layer))) { leftEnd = leftHit.point; } else { leftEnd = leftHit.point; reflectL = true; l = leftHit.collider.GetComponent <ReflectionHandler>(); float deltaD = distance - (leftEnd - left).magnitude; point1 = new Beam(leftEnd, deltaD, Vector3.Reflect(transform.up, leftHit.normal)); } } else if (CharacterMask == (CharacterMask | (1 << leftHit.collider.gameObject.layer))) { setLists(leftHit); leftHit = Physics2D.Raycast(left, transform.up, distance, xrayProof); if (leftHit.collider == null) { leftEnd = left + transform.up * distance; } else if (xrayProof == (xrayProof | (1 << leftHit.collider.gameObject.layer))) { leftEnd = leftHit.point; } else { leftEnd = leftHit.point; reflectL = true; l = leftHit.collider.GetComponent <ReflectionHandler>(); float deltaD = distance - (leftEnd - left).magnitude; point1 = new Beam(leftEnd, deltaD, Vector3.Reflect(transform.up, leftHit.normal)); } } else if (xrayProof == (xrayProof | (1 << leftHit.collider.gameObject.layer))) { leftEnd = leftHit.point; } else { leftEnd = leftHit.point; reflectL = true; l = leftHit.collider.GetComponent <ReflectionHandler>(); float deltaD = distance - (leftEnd - left).magnitude; point1 = new Beam(leftEnd, deltaD, Vector3.Reflect(transform.up, leftHit.normal)); } if (rightHit.collider == null) { rightEnd = right + transform.up * distance; } else if (InteractableMask == (InteractableMask | (1 << rightHit.collider.gameObject.layer))) { setLists(rightHit); if (handler.bulb.power == Bulb.Power.XRAY) { rightHit = Physics2D.Raycast(right, transform.up, distance, CharacterMask + xrayProof); } else { rightHit = Physics2D.Raycast(right, transform.up, distance, ObstacleMask + CharacterMask + xrayProof); } if (rightHit.collider == null) { rightEnd = right + transform.up * distance; } else if (xrayProof == (xrayProof | (1 << rightHit.collider.gameObject.layer))) { rightEnd = rightHit.point; } else { rightEnd = rightHit.point; reflectR = true; r = rightHit.collider.GetComponent <ReflectionHandler>(); float deltaD = distance - (rightEnd - right).magnitude; point2 = new Beam(rightEnd, deltaD, Vector3.Reflect(transform.up, rightHit.normal)); } } else if (CharacterMask == (CharacterMask | (1 << rightHit.collider.gameObject.layer))) { setLists(rightHit); rightHit = Physics2D.Raycast(right, transform.up, distance, xrayProof); if (rightHit.collider == null) { rightEnd = right + transform.up * distance; } else if (xrayProof == (xrayProof | (1 << rightHit.collider.gameObject.layer))) { rightEnd = rightHit.point; } else { rightEnd = rightHit.point; reflectR = true; r = rightHit.collider.GetComponent <ReflectionHandler>(); float deltaD = distance - (rightEnd - right).magnitude; point2 = new Beam(rightEnd, deltaD, Vector3.Reflect(transform.up, rightHit.normal)); } } else if (xrayProof == (xrayProof | (1 << rightHit.collider.gameObject.layer))) { rightEnd = rightHit.point; } else { rightEnd = rightHit.point; reflectR = true; r = rightHit.collider.GetComponent <ReflectionHandler>(); float deltaD = distance - (rightEnd - right).magnitude; point2 = new Beam(rightEnd, deltaD, Vector3.Reflect(transform.up, rightHit.normal)); } if (!init) { init = true; } if (reflectL && reflectR && l != null) { if (l == r) { l.AddBeam(point1, point2); } } setLists(leftHit); setLists(rightHit); }