Example #1
0
    protected virtual void LaserCast(Vector3 sourcePoint, Vector3 laserDirection)
    {
        Ray        laserRayCast = new Ray(sourcePoint, laserDirection);
        RaycastHit hit;

        if (Physics.Raycast(laserRayCast, out hit, 100.0f, Physics.AllLayers, QueryTriggerInteraction.Ignore))
        {
            _lr.SetPosition(_lr.positionCount - 1, hit.point);
            LaserReciever reciever = hit.collider.GetComponent <LaserReciever>();
            if (reciever)
            {
                reciever.RecieveLaser();
            }
            if (hit.collider.tag == "Reflective" && _bounces < MaxBounces)
            {
                _bounces++;
                _lr.positionCount++;
                LaserCast(hit.point, Vector3.Reflect(laserDirection, hit.normal));
            }
        }
        else
        {
            _lr.SetPosition(_lr.positionCount - 1, laserRayCast.GetPoint(100.0f));
        }
    }
Example #2
0
    void Update()
    {
        Vector2 start     = transform.position;
        Vector2 direction = transform.rotation * Vector2.up;

        points.Clear();
        points.Add(start);

        RaycastHit2D hit;

        for (int i = 0; i <= maxJumps; i++)
        {
            hit = Physics2D.Raycast(start, direction, maxDist, mask);
            if (hit.collider)
            {
                start     = hit.point - direction * 0.05f;
                direction = direction - 2f * Vector2.Dot(direction, hit.normal) * hit.normal;

                points.Add(start);

                LaserReciever lr = hit.transform.GetComponent <LaserReciever>();
                if (lr)
                {
                    lr.Trigger();
                    break;
                }
            }
            else
            {
                points.Add(start + direction * maxDist);
                break;
            }
        }

        lr.positionCount = points.Count;
        lr.SetPositions(points.ToArray());
    }