Beispiel #1
0
    private void ShootRaycast()
    {
        var ray = new Ray2D(transform.position, transform.up);
        var hit = Physics2D.Raycast(ray.origin, ray.direction, Mathf.Infinity, _layerMask);

        if (!hit)
        {
            StartChainDisable();

            Debug.DrawRay(transform.position, transform.up * 100000);
            return;
        }

        var interactable = hit.collider.GetComponentInParent <ILaserInteractable>();

        if (RaycastHitHasChanged(interactable))
        {
            LatestInteractableHit?.OnRaycastExit2D(this);
        }

        interactable?.OnRaycastStay2D(this, ray, hit);

        Debug.DrawLine(transform.position, hit.point);
        LatestInteractableHit = interactable;
    }
Beispiel #2
0
    private void FixedUpdate()
    {
        RaycastHit hit;

        if (Physics.Raycast(transform.position, transform.forward, out hit, float.PositiveInfinity, uiLayerMask.value))
        {
            var newTarget = hit.collider.GetComponentInParent <ILaserInteractable>();
            if (newTarget != aimedAt)
            {
                if (aimedAt != null)
                {
                    aimedAt.SetHovered(false);
                }
                newTarget.SetHovered(true);
                aimedAt     = newTarget;
                line.EndPos = hit.distance * Vector3.forward;

                AudioSource.PlayClipAtPoint(mouserollSFX, this.transform.position, 0.3f);
                Debug.Log("aiming at " + aimedAt);
            }
        }
        else if (aimedAt != null)
        {
            aimedAt.SetHovered(false);
            aimedAt     = null;
            line.EndPos = 100.0f * Vector3.forward;
        }
    }
Beispiel #3
0
    void FixedUpdate()
    {
        if (GameManager.Instance.isGamePaused == false)
        {
            if (!reflectorHit)
            {
                RaycastHit2D hit = Physics2D.Raycast(transform.position, directionVector, (directionVector.normalized * projectileSpeed * Time.fixedDeltaTime).magnitude, ~layerMaskStruct);
                if (hit)
                {
                    ILaserInteractable laserInteractable = hit.transform.GetComponentInParent <ILaserInteractable>();

                    if (laserInteractable != null)
                    {
                        reflectorHit = true;
                        ReduceSpeed();
                        laserInteractable.OnLaserOverlap(this, hit);
                        return;
                    }

                    // #region HIT: End Point
                    // case "EndPoint":
                    //     hitStore.collider.gameObject.GetComponent<EndPoint>().checkIfCorrectLaserHit(gameObject);
                    //     projectileSpeed = 0.0f;
                    //     destroyCheck = true;

                    //     //Destroy(gameObject, 0.1f);

                    //     LaserPooler.instance_LaserPoolList.laserPoolDictionary["LaserStock"].Enqueue(this.gameObject);
                    //     gameObject.transform.position = GameObject.FindGameObjectWithTag("InactivePooledLasers").transform.position;
                    //     gameObject.transform.rotation = Quaternion.identity;
                    //     gameObject.SetActive(false);
                    //     projectileSpeed = 7.0f;
                    //     break;
                    // #endregion

                    // #region HIT: Teleporters

                    // case "TeleporterSetA":
                    // case "TeleporterSetB":
                    // case "TeleporterSetC":
                    //     Debug.Log("HIT TELEPORTER SET");
                    //     hitStore.collider.gameObject.GetComponentInParent<Teleporter>().teleportLaser(gameObject, hitStore.collider.gameObject);
                    //     break;

                    // #endregion

                    // #region HIT: Colored Border
                    //     case "ColoredBorder":
                    //         hitStore.collider.gameObject.GetComponent<ColoredBorder>().checkIfCorrectLaserHit(gameObject);
                    //         break;

                    //         #endregion
                    // }
                }
            }

            transform.position += transform.right * projectileSpeed * Time.fixedDeltaTime;
        }
    }
Beispiel #4
0
 // Sets off a recursion that starts disabling lasershooters when it finds one with a LatestInteractableHit that is null.
 internal void StartChainDisable()
 {
     LatestInteractableHit?.OnRaycastExit2D(this);
     LatestInteractableHit = null;
 }
Beispiel #5
0
 /// <summary>Returns true if the <see cref="newInteractable"/> does not match the latest hit <see cref="ILaserInteractable"/>.</summary>
 private bool RaycastHitHasChanged(ILaserInteractable newInteractable)
 {
     return(LatestInteractableHit != newInteractable);
 }