public TrafficRule GetRule(Unit unit) {
     if (unit.x < 0 || unit.y < 0 || unit.y >= m_length) {
         return TrafficRule.Stop;
     }
     Vector2 pos = unit.toVector2() + m_coord;
     if (m_list.ContainsKey(unit.x)) {
         var line = m_list[unit.x];
         return line.GetRule(pos.x, pos.y);
     } else {
         return TrafficRule.Stop;
     }
 }
 public void SetRule(Unit unit, TrafficRule rule) {
     if (unit.x < 0 || unit.y < 0 || unit.y >= m_length) {
         return;
     }
     Vector2 pos = unit.toVector2() + m_coord;
     if (m_list.ContainsKey(unit.x)) {
         var line = m_list[unit.x];
         line.SetRule(pos.x, pos.y, rule);
     } else {
         var line = new TrafficRuleLine(pos.x, m_coord.y, m_length, m_arrow, m_parent);
         line.SetRule(pos.x, pos.y, rule);
         line.ShowArrows(m_visible);
         m_list[unit.x] = line;
     }
 }