public void InvalidPass(VPTransponder transponder, float time, float speed)
 {
     // Reasons:
     //  - Offlimits
     //  - Shortcut
     //  - SpeedLimit
     //  - Replay
     //  - Other
 }
        void OnTriggerEnter(Collider other)
        {
            if (!enabled)
            {
                return;
            }

            Rigidbody rb = other.attachedRigidbody;

            VPTransponder transponder = rb.GetComponent <VPTransponder>();

            if (transponder != null)
            {
                Vector3 velocity = rb.velocity;
                velocity.y = 0.0f;

                m_decoder.Pass(this, transponder, Time.time, velocity.magnitude);
            }
        }
        public void Pass(VPLoop loop, VPTransponder transponder, float time, float speed)
        {
            PassingMsg packet = new PassingMsg
            {
                transponder = transponder.id,
                timeMS      = m_startTime + Mathf.RoundToInt(time * 1000),
                id          = loop.id,
                speed       = speed,
            };

            if (debugInfo)
            {
                Debug.Log("Pass! Loop: " + loop.name + " (" + packet.id + ") Transponder: " + packet.transponder + " Time: " + time + " Speed: " + (packet.speed * 3.6f));
            }

            string json = JsonUtility.ToJson(packet);

            byte[] bytesToSend = System.Text.Encoding.UTF8.GetBytes(json);

            m_sender.SendSync(bytesToSend);
            // m_udp.SendMessageBinary(bytesToSend);
        }