RoadManager/TrafficLight.cs

A component that represents a traffic light visual on a road. It fetches a ModelRenderer and changes its material when the traffic light switches to green or clears overrides when it goes 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;
	}
}