/**** * Classes ****/ var Car = Container.expand(function () { var self = Container.call(this); self.projectMovement = function (vector) { var angle = -Math.PI / 4; var cosAngle = Math.cos(angle); var sinAngle = Math.sin(angle); return { x: vector.x * cosAngle - vector.y * sinAngle, y: vector.x * sinAngle + vector.y * cosAngle }; }; var carGraphics = self.attachAsset('car', { anchorX: 0.5, anchorY: 0.5 }); self.ORIGINAL_SPEED = 2; self.speed = self.ORIGINAL_SPEED; self.direction = 0; self.momentum = { x: 0, y: 0 }; self._move_migrated = function () { var momentumModifier = 0.1; self.speed *= 1.01; if (self.direction === 0) { self.momentum.x += self.speed * momentumModifier; } else { self.momentum.y -= self.speed * momentumModifier; } var projectedMovement = self.projectMovement(self.momentum); self.x += projectedMovement.x; self.y += projectedMovement.y; var nonTravelMomentum; if (self.direction === 0) { self.momentum.x *= 0.98; self.momentum.y *= 0.95; nonTravelMomentum = self.momentum.y; } else { self.momentum.x *= 0.95; self.momentum.y *= 0.98; nonTravelMomentum = self.momentum.x; } self.nonTravelMomentum = nonTravelMomentum; }; self.changeDirection = function () { self.direction = self.direction === 0 ? 1 : 0; self.speed = self.ORIGINAL_SPEED; carGraphics.scale.x *= -1; LK.getSound('Skid').play(); }; }); var Driver = Container.expand(function () { var self = Container.call(this); self.x = +1500; self.y = +1500; var driverGraphics = self.attachAsset('driver', { anchorX: 0.5, anchorY: 0.5 }); }); var Particle = Container.expand(function () { var self = Container.call(this); var particleGraphics = self.attachAsset('particle', { anchorX: 0.5, anchorY: 0.5 }); particleGraphics.rotation = Math.PI / 4; self.lifetime = 100; self.tick = function () { if (--self.lifetime <= 0) { self.destroy(); } }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ game.calculateDistanceToPoint = function (point, segmentStart, segmentEnd) { var A = point.x - segmentStart.x; var B = point.y - segmentStart.y; var C = segmentEnd.x - segmentStart.x; var D = segmentEnd.y - segmentStart.y; var dot = A * C + B * D; var len_sq = C * C + D * D; var param = -1; if (len_sq != 0) { param = dot / len_sq; } var xx, yy; if (param < 0) { xx = segmentStart.x; yy = segmentStart.y; } else if (param > 1) { xx = segmentEnd.x; yy = segmentEnd.y; } else { xx = segmentStart.x + param * C; yy = segmentStart.y + param * D; } var dx = point.x - xx; var dy = point.y - yy; return Math.sqrt(dx * dx + dy * dy); }; game.addRoadSegment = function () { var lastSegment = roadSegments[roadSegments.length - 1]; zigzag = !zigzag; var segment = roadContainer.attachAsset('roadSegment', { anchorX: 0.5 }); segment.width = segmentWidth; segmentWidth = Math.max(350, segmentWidth - 15); segment.height = i === 1 ? 3000 : Math.floor(Math.random() * (4000 - 1200 + 1)) + 1200; segment.rotation = zigzag ? -Math.PI - Math.PI / 4 : -Math.PI + Math.PI / 4; segment.y = currentY; segment.x = currentX; var adjustedHeight = segment.height - segmentWidth / 2; currentY += adjustedHeight * Math.cos(segment.rotation); currentX -= adjustedHeight * Math.sin(segment.rotation); segment.shadow = roadContainer.attachAsset('roadSegmentShadow', { anchorX: 0.5 }); segment.shadow.width = segment.width; segment.shadow.height = segment.height; segment.shadow.rotation = segment.rotation; segment.shadow.x = segment.x; segment.shadow.y = segment.y + 50; segment.shadow.alpha = 1; segment.used = false; roadSegments.push(segment); roadContainer.addChildAt(segment.shadow, 0); roadContainer.addChild(segment); }; game.setBackgroundColor(0xc39977); var particles = []; LK.playMusic('backgroundMusic'); var mainContainer = game.addChild(new Container()); var roadContainer = mainContainer.addChild(new Container()); var roadSegments = []; var segmentLength = Math.floor(Math.random() * (1000 - 200 + 1)) + 200; var segmentWidth = 1200; var currentX = 2048 / 2; var currentY = 2732 / 2; var zigzag = true; for (var i = 1; i <= 15; i++) { game.addRoadSegment(); } var scoreText = new Text2('0', { size: 150, fill: 0xFFFFFF, weight: '800', dropShadow: true, dropShadowColor: '#373330', dropShadowBlur: 4, dropShadowAngle: Math.PI / 6, dropShadowDistance: 6 }); scoreText.anchor.set(0, 0); LK.gui.top.addChild(scoreText); var notificationTexts = ['Onun sıcak kucaklaşmasını özlüyorum', 'Zaman duman gibi kayıp gidiyor', 'Ayten’in sesi zihnimde yankılanıyor', 'Umutsuzluk her virajı keskinleştiriyor', 'Kıvrımlar beni Ayten’in kucağına götürüyor', 'Tutkum her dönüşle büyüyor', 'Zaman akıyor ama Ayten’e olan aşkım devam ediyor', 'Umutsuzluk her hareketimi keskinleştiriyor', 'Kavuşma, bu yolculuğun asıl gücü', 'Ayten beni bekliyor mu?', 'Nerede olabilir Ayten?', 'Ona zamanında ulaşabilecek miyim?', 'Vardığımda Ayten bana gülümseyecek mi?', 'Ayten gelmekte olduğumu biliyor mu?', 'Onun kucaklaması ödülüm', 'Ayten hâlâ beni hatırlıyor mu?', 'Gözlerinde sevgiyi görecek miyim?', 'Benim aciliyetimi hissediyor mu Ayten?', 'Aşkımız daha da güçlenecek mi?', 'Ayten’in sesi yolumu aydınlatan yıldızım', 'Hâlâ kalbini taşıyor muyum Ayten?', 'Ona zamanında ulaşabilecek miyim?', 'Ayten hâlâ bize inanıyor mu?', 'Aşkımız her şeyi yenecek mi?', 'Ne kadar hızlı gidebilirim?', 'Sınırlarımı zorlayabilir miyim?', 'Hız beni Ayten’e götürecek mi?', 'Acelem mi beni yönlendiriyor?', 'Zamanı geçebilir miyim?', 'Bu zamanla bir yarış mı?', 'Hızlanmak bizi kurtaracak mı?', 'Hız şeridinde miyim?', 'Yeni bir rekor kırabilir miyim Ayten için?', 'Hızla mı yaşarım?', 'Zamanı arkamda bırakacak mıyım?', 'En hızlı sürücü ben miyim?', 'Ayten’e hızlıca ulaşabilir miyim?', 'Aşkın aciliyeti hızımı körüklüyor', 'Her mil beni Ayten’e yaklaştırıyor', 'Bu yol sonsuz mu, yoksa ebedi mi?', 'Yıldızlar bu yolculuğa tanıklık ediyor', 'Yol Ayten’in adını mırıldanıyor', 'Rüzgar onun varlığını fısıldıyor', 'Her viraj kararlılığımı sınar', 'Ayten’in aşkı motorumu besliyor', 'Aşk mesafeyi aşabilir mi?', 'Ayten ufka mı bakıyor?', 'Kavuşmamızı mı hayal ediyor Ayten?', 'Hızım Ayten’i etkileyecek mi?', 'Şafak bizi birlikte bulacak mı?', 'Aşk bu yolu fethedebilir mi?', 'Her mil Ayten’e bir kalp atımı daha yakın', 'Onu mu kovalıyorum, yoksa kendimi mi?', 'Ayten gelişimi hissediyor mu?', 'Ay beni ona götürüyor', 'Ufuk onun vaadini taşıyor', 'Motorumun kükreyişini Ayten duyacak mı?', 'Zaman boşluğunu kapatabilir miyim?', 'Bu aşk mı yoksa saplantı mı Ayten?', 'Yolculuk aşkımızı tanımlar', 'Asfalt tekerleklerimin altında şarkı söyler', 'Şehir Ayten’in hayaliyle silikleşiyor', 'Ayten’in kokusu hâlâ hafızamda', 'Farlarım karanlığı delerken onu hayal ederim', 'Yol kalp atımı gibi kıvrılıyor', 'Adrenalin damarlarımda Ayten için akar', 'Ayten’in kahkahası kararlılığımı besliyor', 'Her viraj cesaretimi sınar', 'Şehir silüeti onun gölgesini saklar', 'Ayten, bitiş çizgisindeki ödül mü?', 'Her saniye özlemimi kışkırtıyor', 'Bu gece yıldızlar bizim için hizalanacak mı?', 'Yol bilmecelerle konuşur', 'Umuda mı gidiyorum, yoksa çaresizliğe mi Ayten?', 'Onun hayali aynalarımda dans eder', 'Motor azimle homurdanır', 'Her vites değişimiyle saat daha gür çalar', 'Rüzgar Ayten’in adını fısıldıyor', 'Lastiklerim kalbine giden yolu çizer', 'Yol düşüncelerimi tüketiyor', 'Ayten’in aşkı pusulam', 'Her kırmızı ışık bir sonsuzluk gibi', 'Hızım özlemime yetişebilir mi?', 'Her tabela Ayten’e daha da yaklaştırıyor', 'Bu yarış aşk için mi, kefaret için mi?', 'Açık yol bana hiçbir söz vermiyor', 'Ayten’in gözleri sisin içinden beni çeker', 'Ufuk onun yokluğuyla yanıyor', 'Her gölge onun bir anısını gizliyor', 'Gece şüphemi yutuyor', 'İçimdeki kaosu dizginleyebilir miyim Ayten için?', 'Mesafe sadakatimi alaya alıyor', 'Her sokak onun vedasını fısıldıyor', 'Yol Ayten’in nazik dokunuşu gibi kıvrılıyor', 'Kararlılığım her virajda sıkılaşıyor', 'Gecenin soğuğu içimdeki ateşi söndüremiyor', 'Aynaya her bakış beni ileri iter', 'Hız göstergesi Ayten’e duyduğum özlemi ölçüyor', 'Her dönüş ruhuma onun ismini kazır', 'Yokluğu önümdeki yolu şekillendiriyor', 'Her saniye içimi yakıyor', 'Ayten’in çığlığı yankılanıyor', 'Saat çığlık çığlığa', 'Yavaşlayamam Ayten için', 'Onun kokusu hızla siliniyor', 'Yol geri saldırıyor', 'Zaman bir bıçak gibi keskin', 'Ayten kayıyor ellerimden', 'Rüzgar onun adını uluyor', 'Tutuşum daha da sıkılaşıyor', 'Lastikler aciliyeti haykırıyor', 'Ayten’in yüzü silikleşiyor', 'Gece beklemiyor', 'Zamanım tükeniyor', 'Motor onun adını haykırıyor', 'Kalbim Ayten’le yarışıyor', 'Her viraj bana karşı koyuyor', 'Onu hayal kırıklığına uğratamam', 'Karanlık beni aşağılıyor', 'Ayten’in sesi hayat ipim', 'Ufuk yaklaşmıyor', 'Her saniye işkence', 'Ayten’in şimdi bana ihtiyacı var', 'Kader nefesimi ensemde hissediyor', 'Her viraj zamanı çalıyor', 'Sıcaklığı yok oluyor', 'Ayten’i bırakmam', 'Yol direniyor', 'Geç kalamam', 'Kalp atışı silikleşiyor', 'Yıldızlar hızla bulanıyor', 'Fren yok, sadece Ayten’e olan aşk', 'Ayten’in gölgesini kovalıyorum', 'Her ışık umudu yakıyor', 'Bu yolculuk hayat memat meselesi', 'Ayten’in kucaklaşması kayıp gidiyor', 'Gece beni affetmeyecek', 'Emanet zamanla sürüyorum', 'Yol bir savaş alanı']; var usedNotificationTexts = []; function getRandomNotificationText() { if (notificationTexts.length === 0) { notificationTexts = usedNotificationTexts.splice(0, usedNotificationTexts.length); } var index = Math.floor(Math.random() * notificationTexts.length); var text = notificationTexts.splice(index, 1)[0]; usedNotificationTexts.push(text); return text; } var notificationText = new Text2(getRandomNotificationText(), { size: 60, fill: 0xFFFFFF, weight: '400', align: 'center', stroke: '#000000', strokeThickness: 8 }); notificationText.anchor.set(0, 4); notificationText.x -= 350; LK.gui.bottom.addChild(notificationText); var car = mainContainer.addChild(new Car()); car.x = 2048 / 2; car.y = 2732 / 2; var driver = LK.gui.addChild(new Driver()); driver.x = 250; driver.y = 1800; var isGameOver = false; var score = 0; var closestSegment = null; game.on('down', function (x, y, obj) { car.changeDirection(); }); LK.on('tick', function () { car._move_migrated(); var carIsOnRoad = false; var carPosition = { x: car.x, y: car.y }; var currentClosestSegment = null; var currentClosestDistance = Infinity; roadSegments.forEach(function (segment) { var segmentStart = { x: segment.x + Math.sin(segment.rotation) * 100, y: segment.y - Math.cos(segment.rotation) * 100 }; var segmentEnd = { x: segment.x - Math.sin(segment.rotation) * (segment.height - segment.width / 2), y: segment.y + Math.cos(segment.rotation) * (segment.height - segment.width / 2) }; var distance = game.calculateDistanceToPoint(carPosition, segmentStart, segmentEnd); if (distance < currentClosestDistance) { currentClosestDistance = distance; currentClosestSegment = segment; } if (distance < segment.width / 2 - 50) { carIsOnRoad = true; } }); if (closestSegment !== currentClosestSegment && !currentClosestSegment.used) { closestSegment = currentClosestSegment; closestSegment.used = true; score++; car.ORIGINAL_SPEED += 0.1; scoreText.setText(score.toString()); notificationText.setText(getRandomNotificationText()); } if (!carIsOnRoad) { LK.showGameOver(); } else {} var particleOffsets = [{ x: 20, y: 140 }, { x: 20 + 100, y: 140 - 100 }, { x: 20 - 150, y: 140 - 150 }, { x: 20 - 150 + 100, y: 140 - 150 - 100 }]; for (var i = 0; i < particleOffsets.length; i++) { var alphaValue = Math.max(0, Math.min(1, Math.abs(car.nonTravelMomentum) / 5 - 0.5)); if (alphaValue > 0) { var particle = new Particle(); particle.alpha = alphaValue; var noiseX = (Math.random() - 0.5) * 10; var noiseY = (Math.random() - 0.5) * 10; particle.x = car.x + (car.direction === 0 ? -1 : 1) * particleOffsets[i].x + noiseX; particle.y = car.y + particleOffsets[i].y + noiseY; mainContainer.addChildAt(particle, 1); particles.push(particle); } } particles.forEach(function (particle, index) { particle.tick(); if (particle.lifetime <= 0) { particles.splice(index, 1); } }); var carLocalPosition = game.toLocal(car.position, car.parent); var offsetX = (2048 / 2 - carLocalPosition.x) / 20; var offsetY = (2732 - 450 - carLocalPosition.y) / 20; mainContainer.x += offsetX; mainContainer.y += offsetY; for (var i = roadSegments.length - 1; i >= 0; i--) { var segmentGlobalPosition = game.toLocal(roadSegments[i].position, roadSegments[i].parent); if (segmentGlobalPosition.y - roadSegments[i].height > 2732 * 2) { roadSegments[i].shadow.destroy(); roadSegments[i].destroy(); roadSegments.splice(i, 1); game.addRoadSegment(); } } });
/****
* Classes
****/
var Car = Container.expand(function () {
var self = Container.call(this);
self.projectMovement = function (vector) {
var angle = -Math.PI / 4;
var cosAngle = Math.cos(angle);
var sinAngle = Math.sin(angle);
return {
x: vector.x * cosAngle - vector.y * sinAngle,
y: vector.x * sinAngle + vector.y * cosAngle
};
};
var carGraphics = self.attachAsset('car', {
anchorX: 0.5,
anchorY: 0.5
});
self.ORIGINAL_SPEED = 2;
self.speed = self.ORIGINAL_SPEED;
self.direction = 0;
self.momentum = {
x: 0,
y: 0
};
self._move_migrated = function () {
var momentumModifier = 0.1;
self.speed *= 1.01;
if (self.direction === 0) {
self.momentum.x += self.speed * momentumModifier;
} else {
self.momentum.y -= self.speed * momentumModifier;
}
var projectedMovement = self.projectMovement(self.momentum);
self.x += projectedMovement.x;
self.y += projectedMovement.y;
var nonTravelMomentum;
if (self.direction === 0) {
self.momentum.x *= 0.98;
self.momentum.y *= 0.95;
nonTravelMomentum = self.momentum.y;
} else {
self.momentum.x *= 0.95;
self.momentum.y *= 0.98;
nonTravelMomentum = self.momentum.x;
}
self.nonTravelMomentum = nonTravelMomentum;
};
self.changeDirection = function () {
self.direction = self.direction === 0 ? 1 : 0;
self.speed = self.ORIGINAL_SPEED;
carGraphics.scale.x *= -1;
LK.getSound('Skid').play();
};
});
var Driver = Container.expand(function () {
var self = Container.call(this);
self.x = +1500;
self.y = +1500;
var driverGraphics = self.attachAsset('driver', {
anchorX: 0.5,
anchorY: 0.5
});
});
var Particle = Container.expand(function () {
var self = Container.call(this);
var particleGraphics = self.attachAsset('particle', {
anchorX: 0.5,
anchorY: 0.5
});
particleGraphics.rotation = Math.PI / 4;
self.lifetime = 100;
self.tick = function () {
if (--self.lifetime <= 0) {
self.destroy();
}
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
game.calculateDistanceToPoint = function (point, segmentStart, segmentEnd) {
var A = point.x - segmentStart.x;
var B = point.y - segmentStart.y;
var C = segmentEnd.x - segmentStart.x;
var D = segmentEnd.y - segmentStart.y;
var dot = A * C + B * D;
var len_sq = C * C + D * D;
var param = -1;
if (len_sq != 0) {
param = dot / len_sq;
}
var xx, yy;
if (param < 0) {
xx = segmentStart.x;
yy = segmentStart.y;
} else if (param > 1) {
xx = segmentEnd.x;
yy = segmentEnd.y;
} else {
xx = segmentStart.x + param * C;
yy = segmentStart.y + param * D;
}
var dx = point.x - xx;
var dy = point.y - yy;
return Math.sqrt(dx * dx + dy * dy);
};
game.addRoadSegment = function () {
var lastSegment = roadSegments[roadSegments.length - 1];
zigzag = !zigzag;
var segment = roadContainer.attachAsset('roadSegment', {
anchorX: 0.5
});
segment.width = segmentWidth;
segmentWidth = Math.max(350, segmentWidth - 15);
segment.height = i === 1 ? 3000 : Math.floor(Math.random() * (4000 - 1200 + 1)) + 1200;
segment.rotation = zigzag ? -Math.PI - Math.PI / 4 : -Math.PI + Math.PI / 4;
segment.y = currentY;
segment.x = currentX;
var adjustedHeight = segment.height - segmentWidth / 2;
currentY += adjustedHeight * Math.cos(segment.rotation);
currentX -= adjustedHeight * Math.sin(segment.rotation);
segment.shadow = roadContainer.attachAsset('roadSegmentShadow', {
anchorX: 0.5
});
segment.shadow.width = segment.width;
segment.shadow.height = segment.height;
segment.shadow.rotation = segment.rotation;
segment.shadow.x = segment.x;
segment.shadow.y = segment.y + 50;
segment.shadow.alpha = 1;
segment.used = false;
roadSegments.push(segment);
roadContainer.addChildAt(segment.shadow, 0);
roadContainer.addChild(segment);
};
game.setBackgroundColor(0xc39977);
var particles = [];
LK.playMusic('backgroundMusic');
var mainContainer = game.addChild(new Container());
var roadContainer = mainContainer.addChild(new Container());
var roadSegments = [];
var segmentLength = Math.floor(Math.random() * (1000 - 200 + 1)) + 200;
var segmentWidth = 1200;
var currentX = 2048 / 2;
var currentY = 2732 / 2;
var zigzag = true;
for (var i = 1; i <= 15; i++) {
game.addRoadSegment();
}
var scoreText = new Text2('0', {
size: 150,
fill: 0xFFFFFF,
weight: '800',
dropShadow: true,
dropShadowColor: '#373330',
dropShadowBlur: 4,
dropShadowAngle: Math.PI / 6,
dropShadowDistance: 6
});
scoreText.anchor.set(0, 0);
LK.gui.top.addChild(scoreText);
var notificationTexts = ['Onun sıcak kucaklaşmasını özlüyorum', 'Zaman duman gibi kayıp gidiyor', 'Ayten’in sesi zihnimde yankılanıyor', 'Umutsuzluk her virajı keskinleştiriyor', 'Kıvrımlar beni Ayten’in kucağına götürüyor', 'Tutkum her dönüşle büyüyor', 'Zaman akıyor ama Ayten’e olan aşkım devam ediyor', 'Umutsuzluk her hareketimi keskinleştiriyor', 'Kavuşma, bu yolculuğun asıl gücü', 'Ayten beni bekliyor mu?', 'Nerede olabilir Ayten?', 'Ona zamanında ulaşabilecek miyim?', 'Vardığımda Ayten bana gülümseyecek mi?', 'Ayten gelmekte olduğumu biliyor mu?', 'Onun kucaklaması ödülüm', 'Ayten hâlâ beni hatırlıyor mu?', 'Gözlerinde sevgiyi görecek miyim?', 'Benim aciliyetimi hissediyor mu Ayten?', 'Aşkımız daha da güçlenecek mi?', 'Ayten’in sesi yolumu aydınlatan yıldızım', 'Hâlâ kalbini taşıyor muyum Ayten?', 'Ona zamanında ulaşabilecek miyim?', 'Ayten hâlâ bize inanıyor mu?', 'Aşkımız her şeyi yenecek mi?', 'Ne kadar hızlı gidebilirim?', 'Sınırlarımı zorlayabilir miyim?', 'Hız beni Ayten’e götürecek mi?', 'Acelem mi beni yönlendiriyor?', 'Zamanı geçebilir miyim?', 'Bu zamanla bir yarış mı?', 'Hızlanmak bizi kurtaracak mı?', 'Hız şeridinde miyim?', 'Yeni bir rekor kırabilir miyim Ayten için?', 'Hızla mı yaşarım?', 'Zamanı arkamda bırakacak mıyım?', 'En hızlı sürücü ben miyim?', 'Ayten’e hızlıca ulaşabilir miyim?', 'Aşkın aciliyeti hızımı körüklüyor', 'Her mil beni Ayten’e yaklaştırıyor', 'Bu yol sonsuz mu, yoksa ebedi mi?', 'Yıldızlar bu yolculuğa tanıklık ediyor', 'Yol Ayten’in adını mırıldanıyor', 'Rüzgar onun varlığını fısıldıyor', 'Her viraj kararlılığımı sınar', 'Ayten’in aşkı motorumu besliyor', 'Aşk mesafeyi aşabilir mi?', 'Ayten ufka mı bakıyor?', 'Kavuşmamızı mı hayal ediyor Ayten?', 'Hızım Ayten’i etkileyecek mi?', 'Şafak bizi birlikte bulacak mı?', 'Aşk bu yolu fethedebilir mi?', 'Her mil Ayten’e bir kalp atımı daha yakın', 'Onu mu kovalıyorum, yoksa kendimi mi?', 'Ayten gelişimi hissediyor mu?', 'Ay beni ona götürüyor', 'Ufuk onun vaadini taşıyor', 'Motorumun kükreyişini Ayten duyacak mı?', 'Zaman boşluğunu kapatabilir miyim?', 'Bu aşk mı yoksa saplantı mı Ayten?', 'Yolculuk aşkımızı tanımlar', 'Asfalt tekerleklerimin altında şarkı söyler', 'Şehir Ayten’in hayaliyle silikleşiyor', 'Ayten’in kokusu hâlâ hafızamda', 'Farlarım karanlığı delerken onu hayal ederim', 'Yol kalp atımı gibi kıvrılıyor', 'Adrenalin damarlarımda Ayten için akar', 'Ayten’in kahkahası kararlılığımı besliyor', 'Her viraj cesaretimi sınar', 'Şehir silüeti onun gölgesini saklar', 'Ayten, bitiş çizgisindeki ödül mü?', 'Her saniye özlemimi kışkırtıyor', 'Bu gece yıldızlar bizim için hizalanacak mı?', 'Yol bilmecelerle konuşur', 'Umuda mı gidiyorum, yoksa çaresizliğe mi Ayten?', 'Onun hayali aynalarımda dans eder', 'Motor azimle homurdanır', 'Her vites değişimiyle saat daha gür çalar', 'Rüzgar Ayten’in adını fısıldıyor', 'Lastiklerim kalbine giden yolu çizer', 'Yol düşüncelerimi tüketiyor', 'Ayten’in aşkı pusulam', 'Her kırmızı ışık bir sonsuzluk gibi', 'Hızım özlemime yetişebilir mi?', 'Her tabela Ayten’e daha da yaklaştırıyor', 'Bu yarış aşk için mi, kefaret için mi?', 'Açık yol bana hiçbir söz vermiyor', 'Ayten’in gözleri sisin içinden beni çeker', 'Ufuk onun yokluğuyla yanıyor', 'Her gölge onun bir anısını gizliyor', 'Gece şüphemi yutuyor', 'İçimdeki kaosu dizginleyebilir miyim Ayten için?', 'Mesafe sadakatimi alaya alıyor', 'Her sokak onun vedasını fısıldıyor', 'Yol Ayten’in nazik dokunuşu gibi kıvrılıyor', 'Kararlılığım her virajda sıkılaşıyor', 'Gecenin soğuğu içimdeki ateşi söndüremiyor', 'Aynaya her bakış beni ileri iter', 'Hız göstergesi Ayten’e duyduğum özlemi ölçüyor', 'Her dönüş ruhuma onun ismini kazır', 'Yokluğu önümdeki yolu şekillendiriyor', 'Her saniye içimi yakıyor', 'Ayten’in çığlığı yankılanıyor', 'Saat çığlık çığlığa', 'Yavaşlayamam Ayten için', 'Onun kokusu hızla siliniyor', 'Yol geri saldırıyor', 'Zaman bir bıçak gibi keskin', 'Ayten kayıyor ellerimden', 'Rüzgar onun adını uluyor', 'Tutuşum daha da sıkılaşıyor', 'Lastikler aciliyeti haykırıyor', 'Ayten’in yüzü silikleşiyor', 'Gece beklemiyor', 'Zamanım tükeniyor', 'Motor onun adını haykırıyor', 'Kalbim Ayten’le yarışıyor', 'Her viraj bana karşı koyuyor', 'Onu hayal kırıklığına uğratamam', 'Karanlık beni aşağılıyor', 'Ayten’in sesi hayat ipim', 'Ufuk yaklaşmıyor', 'Her saniye işkence', 'Ayten’in şimdi bana ihtiyacı var', 'Kader nefesimi ensemde hissediyor', 'Her viraj zamanı çalıyor', 'Sıcaklığı yok oluyor', 'Ayten’i bırakmam', 'Yol direniyor', 'Geç kalamam', 'Kalp atışı silikleşiyor', 'Yıldızlar hızla bulanıyor', 'Fren yok, sadece Ayten’e olan aşk', 'Ayten’in gölgesini kovalıyorum', 'Her ışık umudu yakıyor', 'Bu yolculuk hayat memat meselesi', 'Ayten’in kucaklaşması kayıp gidiyor', 'Gece beni affetmeyecek', 'Emanet zamanla sürüyorum', 'Yol bir savaş alanı'];
var usedNotificationTexts = [];
function getRandomNotificationText() {
if (notificationTexts.length === 0) {
notificationTexts = usedNotificationTexts.splice(0, usedNotificationTexts.length);
}
var index = Math.floor(Math.random() * notificationTexts.length);
var text = notificationTexts.splice(index, 1)[0];
usedNotificationTexts.push(text);
return text;
}
var notificationText = new Text2(getRandomNotificationText(), {
size: 60,
fill: 0xFFFFFF,
weight: '400',
align: 'center',
stroke: '#000000',
strokeThickness: 8
});
notificationText.anchor.set(0, 4);
notificationText.x -= 350;
LK.gui.bottom.addChild(notificationText);
var car = mainContainer.addChild(new Car());
car.x = 2048 / 2;
car.y = 2732 / 2;
var driver = LK.gui.addChild(new Driver());
driver.x = 250;
driver.y = 1800;
var isGameOver = false;
var score = 0;
var closestSegment = null;
game.on('down', function (x, y, obj) {
car.changeDirection();
});
LK.on('tick', function () {
car._move_migrated();
var carIsOnRoad = false;
var carPosition = {
x: car.x,
y: car.y
};
var currentClosestSegment = null;
var currentClosestDistance = Infinity;
roadSegments.forEach(function (segment) {
var segmentStart = {
x: segment.x + Math.sin(segment.rotation) * 100,
y: segment.y - Math.cos(segment.rotation) * 100
};
var segmentEnd = {
x: segment.x - Math.sin(segment.rotation) * (segment.height - segment.width / 2),
y: segment.y + Math.cos(segment.rotation) * (segment.height - segment.width / 2)
};
var distance = game.calculateDistanceToPoint(carPosition, segmentStart, segmentEnd);
if (distance < currentClosestDistance) {
currentClosestDistance = distance;
currentClosestSegment = segment;
}
if (distance < segment.width / 2 - 50) {
carIsOnRoad = true;
}
});
if (closestSegment !== currentClosestSegment && !currentClosestSegment.used) {
closestSegment = currentClosestSegment;
closestSegment.used = true;
score++;
car.ORIGINAL_SPEED += 0.1;
scoreText.setText(score.toString());
notificationText.setText(getRandomNotificationText());
}
if (!carIsOnRoad) {
LK.showGameOver();
} else {}
var particleOffsets = [{
x: 20,
y: 140
}, {
x: 20 + 100,
y: 140 - 100
}, {
x: 20 - 150,
y: 140 - 150
}, {
x: 20 - 150 + 100,
y: 140 - 150 - 100
}];
for (var i = 0; i < particleOffsets.length; i++) {
var alphaValue = Math.max(0, Math.min(1, Math.abs(car.nonTravelMomentum) / 5 - 0.5));
if (alphaValue > 0) {
var particle = new Particle();
particle.alpha = alphaValue;
var noiseX = (Math.random() - 0.5) * 10;
var noiseY = (Math.random() - 0.5) * 10;
particle.x = car.x + (car.direction === 0 ? -1 : 1) * particleOffsets[i].x + noiseX;
particle.y = car.y + particleOffsets[i].y + noiseY;
mainContainer.addChildAt(particle, 1);
particles.push(particle);
}
}
particles.forEach(function (particle, index) {
particle.tick();
if (particle.lifetime <= 0) {
particles.splice(index, 1);
}
});
var carLocalPosition = game.toLocal(car.position, car.parent);
var offsetX = (2048 / 2 - carLocalPosition.x) / 20;
var offsetY = (2732 - 450 - carLocalPosition.y) / 20;
mainContainer.x += offsetX;
mainContainer.y += offsetY;
for (var i = roadSegments.length - 1; i >= 0; i--) {
var segmentGlobalPosition = game.toLocal(roadSegments[i].position, roadSegments[i].parent);
if (segmentGlobalPosition.y - roadSegments[i].height > 2732 * 2) {
roadSegments[i].shadow.destroy();
roadSegments[i].destroy();
roadSegments.splice(i, 1);
game.addRoadSegment();
}
}
});