public void Refresh()
    {
        if (m_ignoreChildren)
        {
            return;
        }

        if (!m_renderer)
        {
            GameObject obj = TrafficSystemGameUtils.FindItem(gameObject, TrafficSystemGameUtils.GameObjectItem.RENDERER);
            if (obj && obj.GetComponent <Renderer>())
            {
                m_renderer = obj.GetComponent <Renderer>();
            }
        }

        //		FindAllAttachmentPoints();
    }
    void Awake()
    {
        // HACK - START
        ///       for some reason sometimes m_connectedNodes end up with null values ... have checked every inch of the code and found nothing! ... this removed them on Play so should clean any issues up.
        for (int cIndex = m_connectedNodes.Count - 1; cIndex >= 0; cIndex--)
        {
            if (m_connectedNodes[cIndex] == null)
            {
                m_connectedNodes.RemoveAt(cIndex);
            }
        }
        // HACK - END

        GameObject obj = TrafficSystemGameUtils.FindParentItem(gameObject, TrafficSystemGameUtils.GameObjectItem.TRAFFIC_SYSTEM_PIECE);

        if (obj && obj.GetComponent <TrafficSystemPiece>())
        {
            Parent = obj.GetComponent <TrafficSystemPiece>();
        }

        if (transform.childCount > 0)
        {
            m_linkedIndicator = transform.GetChild(0).gameObject;
        }

        if (Application.isPlaying)
        {
#if UNITY_EDITOR
            ShowRenderers(true);
#else
            ShowRenderers(false);
#endif
        }

//		if(TrafficSystem.Instance && TrafficSystem.Instance.ShouldSpawnVehicle())
//		{
//			TrafficSystemVehicle prefab  = TrafficSystem.Instance.GetVehiclePrefabToSpawn();
//			TrafficSystemVehicle vehicle = Instantiate( prefab, transform.position, transform.rotation ) as TrafficSystemVehicle;
//			vehicle.m_nextNode           = this;
//			vehicle.m_velocityMax        = Random.Range(TrafficSystem.Instance.m_randVelocityMin, TrafficSystem.Instance.m_randVelocityMax);
//		}
    }
    public bool m_turnLeftAnytime                   = false;                         // if this is enabled, whenever a vehicle gets to this traffic light it will turn left straight away. It doesn't wait for a green arrow. The default should be false but there are a few special cases like the ends of T-Intersections that need it true!
//	public  bool               m_enableTurnChecks                 = false;
//	public  float              m_timeToWaitBetweenCheckes         = 1.0f;        // in seconds, the time we check to see if we can move again.
//	public  float              m_checkRadius                      = 5.0f;        // the size of the spherecast for checking vehicle detection.
//	public  Transform          m_checkPos;                                       // the position of the spherecast for checking vehicle detection.
//	private bool               m_checkStarted                     = false;

//	public  List<TrafficSystemVehicle> m_vehiclesStoppedAtLight = new List<TrafficSystemVehicle>();

    void Awake()
    {
        if (!m_intersection)
        {
            GameObject obj = TrafficSystemGameUtils.FindParentItem(gameObject, TrafficSystemGameUtils.GameObjectItem.TRAFFIC_SYSTEM_INTERSECTION);
            if (obj && obj.GetComponent <TrafficSystemIntersection>())
            {
                m_intersection = obj.GetComponent <TrafficSystemIntersection>();
            }
        }

        if (m_lightRedArrow)
        {
            m_lightRedArrow.gameObject.SetActive(true);
        }
        if (m_lightYellowArrow)
        {
            m_lightYellowArrow.gameObject.SetActive(false);
        }
        if (m_lightGreenArrow)
        {
            m_lightGreenArrow.gameObject.SetActive(false);
        }
    }