2024-12-27 14:11:36 +02:00

128 lines
3.8 KiB
C#

using System.Collections;
using UnityEngine;
public class Carbehavior : MonoBehaviour
{
public AudioSource _carAlarm;
[Header("Spotlights")]
public Light spotlight1; // First spotlight
public Light spotlight2; // Second spotlight
private bool lightsAreOn = false;
[Header("Material Emission")]
public GameObject carObjectWithRenderer; // GameObject holding the Renderer
private Renderer carRenderer;
private Material carMaterial;
private Color originalEmissionColor;
[Header("Light Intensity Settings")]
public float maxLightIntensity = 800f;
public float minLightIntensity = 0f;
private Coroutine flashingRoutine;
void Start()
{
// Fetch the Renderer component from the provided GameObject
if (carObjectWithRenderer != null)
{
carRenderer = carObjectWithRenderer.GetComponent<Renderer>();
if (carRenderer != null && carRenderer.material.HasProperty("_EmissionColor"))
{
carMaterial = carRenderer.material;
originalEmissionColor = carMaterial.GetColor("_EmissionColor");
}
else
{
Debug.LogError("Car Renderer or Emission property not found on the GameObject!");
}
}
else
{
Debug.LogError("GameObject holding the Renderer is not assigned!");
}
// Ensure lights start at full intensity
SetLightIntensity(maxLightIntensity);
}
// Detect when another collider enters the trigger
private void OnTriggerEnter(Collider other)
{
if (!_carAlarm.isPlaying)
{
_carAlarm.Play();
Debug.Log("Sound Played: Collider entered trigger.");
// Start flashing lights and emission
flashingRoutine = StartCoroutine(FlashLightsAndEmission());
}
}
// Detect when another collider exits the trigger
private void OnTriggerExit(Collider other)
{
if (_carAlarm.isPlaying)
{
_carAlarm.Stop();
Debug.Log("Sound Stopped: Collider exited trigger.");
// Stop flashing lights and emission
if (flashingRoutine != null)
{
StopCoroutine(flashingRoutine);
flashingRoutine = null;
}
// Reset light intensity and material emission
SetLightIntensity(maxLightIntensity);
ResetEmission();
}
}
// Coroutine to flash lights and emission
IEnumerator FlashLightsAndEmission()
{
while (true)
{
// Toggle lights
lightsAreOn = !lightsAreOn;
float currentIntensity = lightsAreOn ? maxLightIntensity : minLightIntensity;
SetLightIntensity(currentIntensity);
// Toggle material emission
if (carMaterial != null && carMaterial.HasProperty("_EmissionColor"))
{
if (lightsAreOn)
{
carMaterial.SetColor("_EmissionColor", originalEmissionColor);
}
else
{
carMaterial.SetColor("_EmissionColor", Color.black);
}
}
yield return new WaitForSeconds(0.5f);
}
}
// Helper method to set light intensity for both spotlights
void SetLightIntensity(float intensity)
{
if (spotlight1 != null) spotlight1.intensity = intensity;
if (spotlight2 != null) spotlight2.intensity = intensity;
}
// Reset material emission to its original state
void ResetEmission()
{
if (carMaterial != null && carMaterial.HasProperty("_EmissionColor"))
{
carMaterial.SetColor("_EmissionColor", originalEmissionColor);
}
}
}