Code/RoadManager/TrafficLight.cs

A component that controls a traffic light's visual state by changing a ModelRenderer's material. It finds a ModelRenderer on awake and implements ITrafficLightEvents to set or clear a green material when the light goes green or red.

using Sandbox;

namespace RedSnail.RoadTool;

public sealed class TrafficLight : Component, ITrafficLightEvents
{
	private ModelRenderer m_ModelRenderer;
	
	[Property] private Material GreenLight { get; set; }
	
	
	
	protected override void OnAwake()
	{
		m_ModelRenderer = GetComponent<ModelRenderer>(true);
	}
	
	
	
	void ITrafficLightEvents.OnTrafficLightGoesRed()
	{
		if (!m_ModelRenderer.IsValid())
			return;
		
		m_ModelRenderer.ClearMaterialOverrides();
	}
	
	
	void ITrafficLightEvents.OnTrafficLightGoesGreen()
	{
		if (!m_ModelRenderer.IsValid())
			return;
		
		m_ModelRenderer.MaterialOverride = GreenLight;
	}
}