Example #1
0
    void FixedUpdate()
    {
        // If the object's lifetime is over, destroy
        if (TimeAtCreation + Lifetime <= Time.timeSinceLevelLoad)
        {
            Destroy(this.gameObject);
            return;
        }

        float fade = 1 - (Time.timeSinceLevelLoad - TimeAtCreation) / Lifetime;

        this.localMaterial.SetColor("_TintColor", new Color(defaultColor.r, defaultColor.b, defaultColor.g, defaultColor.a * fade));

        currentLength = maxLength;

        Vector3    fwd      = transform.TransformDirection(Vector3.forward);
        Ray        laserRay = new Ray(transform.position, fwd);
        RaycastHit hit;

        if (Physics.Raycast(laserRay, out hit, maxLength))
        {
            currentLength = hit.distance - 2.2f;

            ILaserTarget laserTarget = hit.collider.gameObject.GetComponent <ILaserTarget>();
            if (laserTarget != null && canDamage())
            {
                laserTarget.OnLaserHit(hit.point, damage);
            }
        }

        updateVertices(width, currentLength);
    }
Example #2
0
    void Start()
    {
        Vector3    fwd      = transform.TransformDirection(Vector3.forward);
        Ray        laserRay = new Ray(transform.position, fwd);
        RaycastHit hit;

        currentLength = maxLength;

        if (Physics.Raycast(laserRay, out hit, maxLength))
        {
            //Debug.Log (hit.transform.name+" was lasered");
            currentLength = hit.distance - 2.2f;

            ILaserTarget laserTarget = hit.collider.gameObject.GetComponent <ILaserTarget>();
            if (laserTarget != null)
            {
                laserTarget.OnLaserHit(hit.point, damage);
            }
        }

        vertices  = createVertices(width, currentLength);
        triangles = createTriangles();
        UVs       = createUVs();
        UV2s      = createUV2s();

        gameObject.AddComponent <MeshFilter>();
        gameObject.AddComponent <MeshRenderer>();

        Mesh         mesh         = GetComponent <MeshFilter>().mesh;
        MeshRenderer meshRenderer = GetComponent <MeshRenderer>();

        mesh.Clear();

        updateVertices(width, currentLength);
        mesh.uv  = UVs;
        mesh.uv2 = UV2s;
        mesh.SetTriangles(triangles, 0);

        localMaterial         = Instantiate(laserMaterial);
        meshRenderer.material = localMaterial;

        defaultColor = laserMaterial.GetColor("_TintColor");

        TimeAtCreation = Time.timeSinceLevelLoad;
    }
Example #3
0
    private void RecursiveLaserPath(ref List <Laser> lasers, Laser current, int index, int max)
    {
        lasers.Add(current);

        if (index >= max)
        {
            return;
        }

        if (current.red + current.green + current.blue < .01f)
        {
            return;
        }

        Vector2Int origin = current.origin;

        int        distance  = 1;
        Vector2Int direction = current.GetDirectionVector();

        while (true)
        {
            LaserLabObject nextObject = level.board.GetLaserLabObject(origin + (direction * distance));
            if (nextObject && nextObject is ILaserTarget)
            {
                current.length = distance;
                ILaserTarget nextTarget = nextObject as ILaserTarget;
                Laser[]      nextLasers = nextTarget.OnLaserHit(current);

                for (int i = 0; i < nextLasers.Length; i++)
                {
                    nextLasers[i].origin = nextTarget.GetPosition();
                    RecursiveLaserPath(ref lasers, nextLasers[i], index + 1, max);
                }

                return;
            }

            distance++;
        }
    }