public void OnCollision(MobileTile mobile)
 {
     if (mobile.isColliding)
     {
         return;
     }
     mobile.isColliding = true;
 }
 private static void AlignFrontTrigger(MobileTile mobile)
 {
     if (mobile.frontTrigger == null)
     {
         return;
     }
     mobile.frontTrigger.offset = Align(mobile.frontTrigger.offset, mobile.velocity);
 }
 public void OnEnableMobileTile(MobileTile mobile)
 {
     if (m_Mobiles.Contains(mobile))
     {
         return;
     }
     mobile.frontTrigger = GetTrigger(mobile.gameObject);
     AlignFrontTrigger(mobile);
     m_Mobiles.Add(mobile);
 }
 // Only responds to collision once per update,
 // because collisions can happen many times.
 private void Move(MobileTile mobile, float deltaTime)
 {
     if (mobile == null)
     {
         return;
     }
     if (mobile.isColliding)
     {
         mobile.isColliding = false;
         Snap(mobile.transform, -mobile.velocity * deltaTime);
         Rotate(mobile, 180f);
     }
     AlignFrontTrigger(mobile);
     Move(mobile.transform, mobile.velocity, deltaTime * m_TimeScale);
 }
 public void OnDisableMobileTile(MobileTile mobile)
 {
     m_Mobiles.Remove(mobile);
 }
 private static void Rotate(MobileTile mobile, float degrees)
 {
     mobile.velocity = Rotate(mobile.velocity, degrees);
     AlignFrontTrigger(mobile);
 }