UnityGameProjectsCode / InTheDarkGame / Level / Lights / SpottingWallLight.cs
SpottingWallLight.cs
Raw
using UnityEngine;

public class SpottingWallLight : WallLight
{
    private bool playerSpotted = false;
    public GameObject playerTrace;
    private GameObject traceInUse;

    private void Start()
    {
        LightStart();
        SpottingLightStart();
    }

    public void SpottingLightStart()
    {
        LightStart();
        traceInUse = Instantiate(playerTrace as GameObject, gameObject.transform.parent);
        traceInUse.GetComponent<TraceInfo>().SetParentLight(this);
        traceInUse.SetActive(false);
    }

    private void FixedUpdate()
    {
        LightUpdate();
        SpottingLightUpdate();
    }

    public void SpottingLightUpdate()
    {
        LightUpdate();

        float distanceToPlayer = Vector2.Distance(transform.position, GetPlayerObject().transform.position);

        if (distanceToPlayer < damageStartRange)
        {
            RaycastHit2D hit;
            int layerMask = 1 << 9;
            layerMask = ~layerMask;

            hit = Physics2D.Raycast(transform.position, GetPlayerObject().transform.position - transform.position, damageStartRange, layerMask);
            Debug.DrawRay(transform.position, (GetPlayerObject().transform.position - transform.position), Color.green);

            if (hit.collider != null)
            {
                if (hit.collider.gameObject.CompareTag("Player") && GetPlayerInSight())
                {
                    playerSpotted = true;
                    GetLight().color = new Color32(255, 35, 35, 255);
                    traceInUse.transform.position = GetPlayerObject().transform.position;
                    traceInUse.transform.rotation = GetPlayerObject().transform.rotation;
                    traceInUse.SetActive(true);
                    NotifyBots();

                    foreach (GameObject light in GameObject.FindGameObjectsWithTag("Light"))
                    {
                        if (light.GetComponent<MovingSpotWallLight>() && light != gameObject)
                        {
                            light.GetComponent<MovingSpotWallLight>().SetPlayerTraceState(false);
                        }
                    }
                }
                else
                {
                    GetLight().color = new Color32(255, 85, 85, 255);
                    playerSpotted = false;
                }
            }
        }
        else
        {
            GetLight().color = new Color32(255, 85, 85, 255);
            playerSpotted = false;
        }
    }

    public void NotifyBots()
    {
        foreach (GameObject bot in GameObject.FindGameObjectsWithTag("Drone"))
        {
            bot.GetComponent<DroneAIMod>().SetCustomTarget(traceInUse);
        }
    }

    public bool GetPlayerSpotted()
    {
        return playerSpotted;
    }

    public void SetPlayerTraceState(bool state)
    {
        traceInUse.SetActive(state);
    }

    public bool GetPlayerTraceState()
    {
        return traceInUse.activeSelf;
    }
}