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; } }