private bool isRunTire(PCar self, PCar[] their, PCar[] enemies)
        {
            Logger.instance.Assert(null != self, "Self car is null.");

            PCar ignored = self;

            PTire tire = new PTire(self.Pos, self.Dir * game.TireInitialSpeed, game);

            int tireRebound = maxTireRebound;

            for (int i = 0; i < tireCalculateTicks; i++)
            {
                tire.Iteration(1);

                foreach (PCar physicCar in their)
                {
                    physicCar.Iteration(1);

                    Vector collisionNormal = null;
                    if (tireCollisionWithCar(tire.Pos, physicCar, out collisionNormal, 2))
                    {
                        if (ignored == physicCar)
                        {
                            continue;
                        }

                        return(false);
                    }
                }

                foreach (PCar physicCar in enemies)
                {
                    physicCar.Iteration(1);

                    Vector collisionNormal = null;
                    if (tireCollisionWithCar(tire.Pos, physicCar, out collisionNormal, 0.25))
                    {
                        if (null == collisionNormal)
                        {
                            return(false);
                        }

                        double angleDot         = Math.Abs(tire.Speed.Normalize().Dot(collisionNormal));
                        double angleCross       = Math.Abs(tire.Speed.Normalize().Cross(collisionNormal));
                        bool   correctFireAngle = (Math.Abs(tire.Speed.Dot(physicCar.Speed)) > 70 && angleDot > 0.5) ||
                                                  (Math.Abs(tire.Speed.Cross(physicCar.Speed)) > 70 && angleCross > 0.5);
                        return(correctFireAngle && physicCar.Car.Durability > 1.0e-9 && !physicCar.Car.IsFinishedTrack);
                    }
                }

                Vector collisionNormalWithMap = tireCollisionWithMap(tire.Pos, tire.LastPos);
                if (null != collisionNormalWithMap)
                {
                    ignored = null;
                    tire.HitTireWitMap(collisionNormalWithMap);
                    tireRebound--;
                }

                if (!tire.Valid() || tireRebound < 0)
                {
                    return(false);
                }
            }

            return(false);
        }